第10回CGIことおぼえ レポート課題 氏名:小山田晃平 学籍番号:c1110393 語学クラス:英語5 コース:政策マネジメント 1.筆記問題 まず、require 'pstore'でpstoreを使用する宣言をする。 rubycgiの下にpstoreというディレクトリを作成 pstoreを第3者が書き込めるようにchmod o+w pstoreを実行 pstoreにデータをしまうbbs.dbを作成し、第3者が書き込めるようにする データを書き出すプログラムpstore_bbs.rbを作成 pstore_bbs.rbの解説 #!/usr/bin/env ruby #coding: euc-jp require 'cgi' # CGIを使う宣言 require 'pstore' # pstoreを使う宣言 cgi = CGI.new(:accept_charset => "EUC-JP") db = PStore.new("pstore/bbs.db") # データ−ベースを作成 usr = cgi["user"] # 変数に入れる cmt = cgi["comment"] t = Time.now #p t myprog = "pstore_bbs.rb" print("Content-type: text/html; charset=EUC-jp\n\n") print("\n") print("\n") print("けいじばん\n") print("\n") print("\n") print("

けいじばん

\n") print("
    \n") db.transaction do # データを読み込み、出力する if db == nil db = Hash.new # 新規にデータベースを作成 end db[t] = [usr, cmt] #時間をkeyとし、配列にユーザーとコメントを格納 for time in db.roots.sort # Hashのkeys.sortに相当 printf("
  1. %s:%s
  2. \n", db[time][0], db[time][1]) end end print("
\n") printf("
\n", myprog) print("
  • なまえ:
  • \n") print("
  • コメント:
  • \n") print("\n") print("\n") print("
    ") print("\n") print("\n") 2.プログラム問題 A. アドレス:http://roy.e.koeki-u.ac.jp/~c111039/rubycgi/best.html 考えた設定 題名:会員登録CGI 様々なサイトに存在する会員登録をCGIで作成した。入力したものだけでなく登 録順に会員番号を表示できるようにした。また、スタイルシートを選択出来るよ うにした。 入力部分(r2_cgi_best.html) # cssを読み込む 会員登録

    新規会員登録ページ

    会員登録を行います。下の会員情報を入力して、"登録"をクリックして下さ い。入力内容をリセットする場合は、"クリア"をクリックして下さい。

    姓(漢字)

    名前(漢字)

    姓(フリガナ)

    名前(フリガナ)

    電話番号(ハイフンなしで入力して下さい)

    郵便番号(ハイフンなしで入力して下さい)

    住所(都道府県)

    住所(市区郡町村)

    住所(番地・建物名)

    メールアドレス

  • 性別(選択して下さい)

    生年月日(年) 数字だけを入力して下さい

  • 生年月日(月)(選択して下さい) # 月は選択出来るようにした
  • 生年月日(日) (選択して下さい) # 日にちは選択出来るようにした
  • パスワード(半角20文字以内、全角10文字以内で複雑なものにして下さい)

    会員ページのカラー(選択して下さい)

    # cssの選択はラジオボタンで作 成した ブルー レッド イエロー グリーン ピンク

    このプログラムは東北公益文科大学小山田晃平が著作権を保有しています。 このプログラムの入手、実行、変更は自由に行うことが出来ますが、取扱うこと で生じた結果に対して著作権者は責任一切負いません。

    出力部分(best.rb) #!/usr/bin/env ruby #coding: euc-jp require 'cgi' # cssを使用する宣言 cgi = CGI.new(:accept_charset => "EUC-JP") print("Content-type: text/html; charset=EUC-JP\n\n") number = 1 # 会員番号は最初は1 open("best.txt", "r") do |read| # テキストファイルを読み込む while data = read.gets # 読み込んだものをdataにいれる if/(\d+)/ =~data # テキストファイルは数値が1列だけなので(\d+)になる number = $1.to_i # テキストファイルの1列目を数値としてnumberにいれる end end end sei1 = cgi["sei_kanzi"] # 入力されたものを変数に入れる namae1 = cgi["namae_kanzi"] sei2 = cgi["sei_kana"] namae2 = cgi["namae_kana"] bango = cgi["number"] yubinbango = cgi["yubin"] todouhuken = cgi["jusyo_todouhuken"] siku = cgi["jusyo_siku"] banti = cgi["jusyo_banti"] adress = cgi["mail"] seibe = cgi["seibetsu"] year = cgi["seinen_nen"] month = cgi["seinen_tsuki"] day = cgi["seinen_niti"] password = cgi["pass"] css = cgi["color"] print("\n") print("新規会員登録完了\n") print("\n") if css == "blue" # cssがblueを選択されたら print("\n") # cssを読み込む print("

    以下の通りに会員情報を登録しました。御確認してください。

    \n") printf("

    氏名(漢字):%s%s

    \n", sei1, namae1) # 入力されたものを表示 printf("

    氏名(フリガナ):%s%s

    \n", sei2, namae2) printf("

    電話番号:%s

    \n", bango) printf("

    郵便番号:%7.0f

    \n", yubinbango) # 郵便番号は7桁なので整 数7桁を表示出来るようにした printf("

    住所:%s%s%s

    \n", todouhuken, siku, banti) #住所は3つのテ キストエリアをまとめて表示するようにした printf("

    メールアドレス:%s

    \n", adress) printf("

    生年月日:%s年%s%s日

    \n", year, month, day) # 生年月日は3 つの変数をまとめて表示するようにした printf("

    バスワード:%s

    \n", password) elsif css == "red" # cssがredを選択されたら print("\n") # cssを読み込む print("

    以下の通りに会員情報を登録しました。御確認してください。

    \n") printf("

    氏名(漢字):%s%s

    \n", sei1, namae1) # 入力されたものを表示 printf("

    氏名(フリガナ):%s%s

    \n", sei2, namae2) printf("

    電話番号:%s

    \n", bango) printf("

    郵便番号:%7.0f

    \n", yubinbango) # 郵便番号は7桁なので整 数7桁を表示出来るようにした printf("

    住所:%s%s%s

    \n", todouhuken, siku, banti)#住所は3つのテ キストエリアをまとめて表示するようにした printf("

    メールアドレス:%s

    \n", adress) printf("

    生年月日:%s年%s%s日

    \n", year, month, day) printf("

    バスワード:%s

    \n", password) elsif css == "yellow" # cssがyellowを選択されたら print("\n") # cssを読み込む print("

    以下の通りに会員情報を登録しました。御確認してください。

    \n") printf("

    氏名(漢字):%s%s

    \n", sei1, namae1) printf("

    氏名(フリガナ):%s%s

    \n", sei2, namae2) printf("

    電話番号:%s

    \n", bango) printf("

    郵便番号:%7.0f

    \n", yubinbango) # 郵便番号は7桁なので整 数7桁を表示出来るようにした printf("

    住所:%s%s%s

    \n", todouhuken, siku, banti)#住所は3つのテ キストエリアをまとめて表示するようにした printf("

    メールアドレス:%s

    \n", adress) printf("

    生年月日:%s年%s%s日

    \n", year, month, day) printf("

    バスワード:%s

    \n", password) elsif css == "green" # cssがgreenを選択されたら print("\n") # cssを読み込む print("

    以下の通りに会員情報を登録しました。御確認してください。

    \n") printf("

    氏名(漢字):%s%s

    \n", sei1, namae1) # 入力されたものを表示 printf("

    氏名(フリガナ):%s%s

    \n", sei2, namae2) printf("

    電話番号:%s

    \n", bango) printf("

    郵便番号:%7.0f

    \n", yubinbango) # 郵便番号は7桁なので整 数7桁を表示出来るようにした printf("

    住所:%s%s%s

    \n", todouhuken, siku, banti)#住所は3つのテ キストエリアをまとめて表示するようにした printf("

    メールアドレス:%s

    \n", adress) printf("

    生年月日:%s年%s%s日

    \n", year, month, day) printf("

    バスワード:%s

    \n", password) elsif css == "pink" # cssがpinkを選択されたら print("\n") # cssを読み込む print("

    以下の通りに会員情報を登録しました。御確認してください。

    \n") printf("

    氏名(漢字):%s%s

    \n", sei1, namae1) # 入力されたものを表示 printf("

    氏名(フリガナ):%s%s

    \n", sei2, namae2) printf("

    電話番号:%s

    \n", bango) printf("

    郵便番号:%7.0f

    \n", yubinbango) # 郵便番号は7桁なので整 数7桁を表示出来るようにした printf("

    住所:%s%s%s

    \n", todouhuken, siku, banti)#住所は3つのテ キストエリアをまとめて表示するようにした printf("

    メールアドレス:%s

    \n", adress) printf("

    生年月日:%s年%s%s日

    \n", year, month, day) printf("

    バスワード:%s

    \n", password) end printf("会員番号:%d\n", number) # 会員番号を表示 number += 1 # numberを1増やす open("best.txt", "w") do |write| # テキストファイルに書き込む write.printf("%d\n", number) # numberの数値を書き込む end print("

    このプログラムは東北公益文科大学小山田晃平が著作権を保有しています。 このプログラムの入手、実行、変更は自由に行うことが出来ますが、取扱うことで生じた結果に対して著作権者は責任一切負いません。

    ") print("\n") print("\n") 元にしたプログラムからの変更点 今までに作成したorder_input_c111039.rb,counter.rb,css.rbなどを参考に作成 した。これらのプログラムを組み合わせて作成した。 実行結果 姓(漢字) 小山田 名前(漢字) 晃平 姓(フリガナ) オヤマダ 名前(フリガナ) コウヘイ 電話番号 08015427635 郵便番号 9980054 住所(都道府県) 山形県 住所(市区郡町村)酒田市 住所(番地・建物名)宮野浦2丁目2-5 メールアドレス c111039@g.koeki-u.ac.jp 性別 男性 生年月日(年) 1992 生年月日(月) 11 生年月日(日) 13 パスワード m0a7t0m4 会員ページのカラー ピンク を入力 結果 新規会員登録完了

    以下の通りに会員情報を登録しました。御確認してください。

    氏名(漢字):小山田晃平

    氏名(フリガナ):オヤマダコウヘイ

    電話番号:08015427635

    郵便番号:9980054

    住所:山形県酒田市宮野浦2丁目2-5

    メールアドレス:c111039@g.koeki-u.ac.jp

    生年月日:1992年11月13日

    バスワード:m0a7t0m4

    会員番号:6

    このプログラムは東北公益文科大学小山田晃平が著作権を保有しています。 このプログラムの入手、実行、変更は自由に行うことが出来ますが、取扱うことで生じた結果に対して著作権者は責任一切負いません。

    入力内容のcssの部分だけ変更して実行 新規会員登録完了

    以下の通りに会員情報を登録しました。御確認してください。

    氏名(漢字):小山田晃平

    氏名(フリガナ):オヤマダコウヘイ

    電話番号:08015427635

    郵便番号:9980054

    住所:山形県酒田市宮野浦2丁目2-5

    メールアドレス:c111039@g.koeki-u.ac.jp

    生年月日:1992年11月13日

    バスワード:m0a7t0m4

    会員番号:7

    このプログラムは東北公益文科大学小山田晃平が著作権を保有しています。 このプログラムの入手、実行、変更は自由に行うことが出来ますが、取扱うことで生じた結果に対して著作権者は責任一切負いません。

    再度cssを変更し実行 新規会員登録完了

    以下の通りに会員情報を登録しました。御確認してください。

    氏名(漢字):小山田晃平

    氏名(フリガナ):オヤマダコウヘイ

    電話番号:08015427635

    郵便番号:9980054

    住所:山形県酒田市宮野浦2丁目2-5

    メールアドレス:c111039@g.koeki-u.ac.jp

    生年月日:1992年11月13日

    バスワード:m0a7t0m4

    会員番号:8

    このプログラムは東北公益文科大学小山田晃平が著作権を保有しています。 このプログラムの入手、実行、変更は自由に行うことが出来ますが、取扱うことで生じた結果に対して著作権者は責任一切負いません。

    考察 入力された内容が間違えなく表示されている スタイルシートが間違えなく反映されている 会員番号が実行するごとに1づつ増加している 住所や生年月日をまとめて表示できている 以上のことからプログラムは正しいといえる B. http://roy.e.koeki-u.ac.jp/~c111039/adv2/index.html に貼り付けた 3.感想 CGIで興味を持ったのは小野貴己さんの作品です アドレスは、http://roy/~c111038/rubycgi/order_input_c111038.htmlです この作品は、選択肢が多く、何度も実行したくなるもので独創性が強い作品だと 感じたので選びました。 4.参考文献 第9回基礎プログラミング2(CGIことえらび) テキストエリアの作り方 西村まどか http://roy/~madoka/2012/r2/09/r2_09_07_theme_02_textarea.html 第9回基礎プログラミング2(CGIことえらび) FileOpenを使ってみよう 西村まどか http://roy/~madoka/2012/r2/09/r2_09_08_theme_03_fileopen.html