第10回 CGI ことおぼえ レポート課題 氏名: 村上茉奈美 学籍番号: C1111352 語学クラス: 英語3 コース: 社会福祉 1. pstoreを使ったCGIの使い方について ・専用ディレクトリを作るには 「第三者も書き込むことができる」ディレクトリを作る。 KTerm 上で、CGIを動かす rubycgi の下に % mkdir pstore で「pstore」というディレクトリを新しく作る。 % chmod o+w pstore として pstore を第三者からの書き込みを可能にする。 その中に、データベースを作る。(名前は自分で決められる。) % touch データ名.db で pstore の中にデータベースを入れ、 % chmod o+w データ名.db として第三者からの書き込みを可能にする。 また、そのデータベースを書き出すプログラムも pstore の中に入れると良 い。 % chmod o+w プログラム.rb % chmod +x プログラム.rb と上記の流れと同様に行う。 ・授業で作成した pstore_bbs.rb をもとに解説をする #!/usr/koeki/bin/ruby #coding: euc-jp require 'cgi' require 'pstore' cgi = CGI.new(:accept_charset => "EUC-JP") db = PStore.new("pstore/bbs.db") print("Content-type: text/html; charset=EUC-JP\n\n") t = Time.now.to_i cmt = cgi["comment"] usr = cgi["user"] db.transaction do #pstore をこの中で使う if db == nil #データベースの書き込みがなければ db[t] = Hash.new # Hash を用意 db[t] = [cmt, usr] #配列として準備 end myprog = "pstore_bbs.rb" print("\n") print("
\n") print("このプログラムは村上茉奈美が著作権を保有しています。
このプログラムの入手・実行・改変・再配布は自由に行なって構いません。
ただし、このプログラムを取り扱うことで生じたいかなる結果に対しても著作権者は責任を負いません。ご了承下さい。
ご意見・ご感想は下記のアドレスまで。
c111135@g.koeki-u.ac.jp
性別: %s
\n", a) printf("年齢: %s歳
\n", tosi) printf("住所: %s%s
\n", huken, jyusyo) printf("電話番号: %s-%s-%s
\n", tel1, tel2, tel3) printf("Eメールアドレス: %s
\n", mail) printf("パスワード: %s
\n", word) print("\n") print("\n") #HTML文書の終わり seito += 1 #seito は 1 ずつ足す open("./mydb/gakuseki.txt","w") do |write| #./mydb/gakuseki.txt というファイルを書き込み専用で開いて #データを write に取りこむ write.printf("%d\n", seito) end #open に対するend(終わり) 4. もとにしたプログラムからの変更点 以下に、もとにした部分とそのプログラム名を挙げる。 ・CGIプログラムの全体の構成及びドロップダウンメニュー プログラム: order_input_c111135.html order_input_c111135.rb(どちらも 第8回レポート課題) ・ラジオボタンの部分 プログラム: calculation.html calculation.rb(どちらも 第9回レポート課題) ・学籍番号の数え上げ プログラム: count.rb(第9回レポート課題) ・データの書き込み プログラム: cgi_req.rb(第9回授業で作成) CGI変数やその他変数の名前を変更した。 また、プログラムに応じてCGIスクリプトを増やした。 テキストエリアを加え、利用者が自由に入力することを可能にした。 そして、HTML文書の部分に CSS を付け加えて、Web上に色をつけた。 5. 実行結果 (Webページ上での出力結果を出すため、ソースを貼り付ける。) ・ r2_cgi_c111135.html(HTML文書) の実行結果 (テキストエリアに入力していない状態)このプログラムは村上茉奈美が著作権を保有しています。
このプログラムの入手・実行・改変・再配布は自由に行なって構いません。
ただし、このプログラムを取り扱うことで生じたいかなる結果に対しても著作権者は責任を負いません。ご了承下さい。
ご意見・ご感想は下記のアドレスまで。
c111135@g.koeki-u.ac.jp
性別: 男
年齢: 41~50歳
住所: 福岡県福岡市〜〜町○丁目×番地
電話番号: 090-2222-1111
Eメールアドレス: ○○@ruby.jp
パスワード: tarou
・その 2性別: 女
年齢: 21~30歳
住所: 京都府京都市○○区☆☆町×丁目 ※※番地
電話番号: 080-6666-8888
Eメールアドレス: ☆☆@ruby.jp
パスワード: yui
6. 考察 プログラムがきちんと表示されるのか、Kterm上でも確認する。 ・その 1 roy{c111135}% ./gakusei.rb [~/public_html/rubycgi] (offline mode: enter name=value pairs on standard input) myouji="佐藤" name="太郎" sei="man" age="41~50" todou="福岡県" sumai="福岡市〜〜町○丁目×番地" tel="090" middle="2222" last="1111" adress="○○@ruby.jp" pass="tarou" /usr/local/ruby/1.9/lib/ruby/1.9.1/cgi/core.rb:602: warning: regexp match /.../n against to EUC-JP string /usr/local/ruby/1.9/lib/ruby/1.9.1/cgi/core.rb:602: warning: regexp match /.../n against to EUC-JP string /usr/local/ruby/1.9/lib/ruby/1.9.1/cgi/core.rb:602: warning: regexp match /.../n against to EUC-JP string /usr/local/ruby/1.9/lib/ruby/1.9.1/cgi/core.rb:602: warning: regexp match /.../n against to EUC-JP string /usr/local/ruby/1.9/lib/ruby/1.9.1/cgi/core.rb:602: warning: regexp match /.../n against to EUC-JP string /usr/local/ruby/1.9/lib/ruby/1.9.1/cgi/core.rb:602: warning: regexp match /.../n against to EUC-JP string /usr/local/ruby/1.9/lib/ruby/1.9.1/cgi/core.rb:602: warning: regexp match /.../n against to EUC-JP string /usr/local/ruby/1.9/lib/ruby/1.9.1/cgi/core.rb:602: warning: regexp match /.../n against to EUC-JP string /usr/local/ruby/1.9/lib/ruby/1.9.1/cgi/core.rb:602: warning: regexp match /.../n against to EUC-JP string /usr/local/ruby/1.9/lib/ruby/1.9.1/cgi/core.rb:602: warning: regexp match /.../n against to EUC-JP string /usr/local/ruby/1.9/lib/ruby/1.9.1/cgi/core.rb:602: warning: regexp match /.../n against to EUC-JP string /usr/local/ruby/1.9/lib/ruby/1.9.1/cgi/core.rb:602: warning: regexp match /.../n against to EUC-JP string /usr/local/ruby/1.9/lib/ruby/1.9.1/cgi/core.rb:602: warning: regexp match /.../n against to EUC-JP string /usr/local/ruby/1.9/lib/ruby/1.9.1/cgi/core.rb:592: warning: regexp match /.../n against to EUC-JP string /usr/local/ruby/1.9/lib/ruby/1.9.1/cgi/core.rb:592: warning: regexp match /.../n against to EUC-JP string /usr/local/ruby/1.9/lib/ruby/1.9.1/cgi/core.rb:610: warning: regexp match /.../n against to EUC-JP string Content-type: text/html; charset=EUC-JP性別: 男
年齢: 41~50歳
住所: 福岡県福岡市〜〜町○丁目×番地
電話番号: 090-2222-1111
Eメールアドレス: ○○@ruby.jp
パスワード: tarou
・その 2 roy{MURAKAMI Manami}% ./gakusei.rb [~/public_html/rubycgi] (offline mode: enter name=value pairs on standard input) myouji="加藤" name="ゆい" sei="woman" age="21~30" todou="京都府" sumai="京都市○○区☆☆町×丁目 ※※番地" tel="080" middle="6666" last="8888" adress="☆☆@ruby.jp" pass="yui" /usr/local/ruby/1.9/lib/ruby/1.9.1/cgi/core.rb:602: warning: regexp match /.../n against to EUC-JP string /usr/local/ruby/1.9/lib/ruby/1.9.1/cgi/core.rb:602: warning: regexp match /.../n against to EUC-JP string /usr/local/ruby/1.9/lib/ruby/1.9.1/cgi/core.rb:602: warning: regexp match /.../n against to EUC-JP string /usr/local/ruby/1.9/lib/ruby/1.9.1/cgi/core.rb:602: warning: regexp match /.../n against to EUC-JP string /usr/local/ruby/1.9/lib/ruby/1.9.1/cgi/core.rb:602: warning: regexp match /.../n against to EUC-JP string /usr/local/ruby/1.9/lib/ruby/1.9.1/cgi/core.rb:602: warning: regexp match /.../n against to EUC-JP string /usr/local/ruby/1.9/lib/ruby/1.9.1/cgi/core.rb:602: warning: regexp match /.../n against to EUC-JP string /usr/local/ruby/1.9/lib/ruby/1.9.1/cgi/core.rb:602: warning: regexp match /.../n against to EUC-JP string /usr/local/ruby/1.9/lib/ruby/1.9.1/cgi/core.rb:602: warning: regexp match /.../n against to EUC-JP string /usr/local/ruby/1.9/lib/ruby/1.9.1/cgi/core.rb:602: warning: regexp match /.../n against to EUC-JP string /usr/local/ruby/1.9/lib/ruby/1.9.1/cgi/core.rb:602: warning: regexp match /.../n against to EUC-JP string /usr/local/ruby/1.9/lib/ruby/1.9.1/cgi/core.rb:602: warning: regexp match /.../n against to EUC-JP string /usr/local/ruby/1.9/lib/ruby/1.9.1/cgi/core.rb:602: warning: regexp match /.../n against to EUC-JP string /usr/local/ruby/1.9/lib/ruby/1.9.1/cgi/core.rb:592: warning: regexp match /.../n against to EUC-JP string /usr/local/ruby/1.9/lib/ruby/1.9.1/cgi/core.rb:592: warning: regexp match /.../n against to EUC-JP string /usr/local/ruby/1.9/lib/ruby/1.9.1/cgi/core.rb:610: warning: regexp match /.../n against to EUC-JP string Content-type: text/html; charset=EUC-JP性別: 女
年齢: 21~30歳
住所: 京都府京都市○○区☆☆町×丁目 ※※番地
電話番号: 080-6666-8888
Eメールアドレス: ☆☆@ruby.jp
パスワード: yui
(実行結果が「10番目」「12番目」となっているのは、 Web上で実行した後に、KTerm で確認しているためであり、 Web上で表示された「10番目」の人の内容をKTerm 上で入力すると、 「11番目」と表示される。) 確認した結果、きちんとCGI変数に対応したものが表示されていた。 また、学籍番号も 1 ずつ数え上げられている。 よって、このプログラムは正しいということができる。 当初は、学籍番号の他にも「氏名や性別」をデータファイルに書き込も うと考えていたので、書き込みの部分で printf だけにして他の要素も 同時に書き込まれるようにした。 しかし、入力された文字列をしまう変数(このプログラムでは、write)を printf の前に置かなければ上手く表示されなかった。 そして、「パスワード」の入力部分を任意にし、入力されなかった場合 は「パスワードは設定していません。」と表示させようと考えた。 しかし、そこにif文をつけて対応させるようにしたところ、Web上の全て の文章が表示されなくなってしまったので、できなかった。 このプログラムにはまだまだ課題が多くあるので、今後改善していきたい。 7. 参考文献 下記に示す3つの文献は、共に 2012年度 基礎プログラミングII 作者: 西村まどか である。 ・http://roy/~madoka/2012/r2/09/r2_09_07_theme_02_textarea.html 第9回 (CGI ことえらび) 「テキストエリアの作り方」 ・http://roy/~madoka/2012/r2/09/r2_09_08_theme_03_fileopen.html 第9回 (CGI ことえらび) 「File Open を使ってみよう」 ・http://roy/~madoka/2012/r2/09/r2_09_06_appendix_03_textfield.html 第9回 (CGI ことえらび) 「短い記入欄の作り方」 B. GIMP で基礎プログラミングIIのバナー logo_r2_c111135.png を作成。 リンク先: 後期広告ページ トップ http://roy/~c111135/adv2/ 3. アドレス: http://roy/~c111112/rubycgi/order_input_c111112.html その根拠: ページが見やすくなっている。 また、名前を入力する部分も含まれていて、結果にきちんと 反映されている。 実際の通信販売においても、このようなシステムになっている のではないかと考える。私達が普段何気なく使っているものが このようになっているのだと気付いた。このCGI作品は、今後も 日常生活でよく使われるものになると思い、私は興味を持った。 共同学習者: 浅沼佑香 ・ 伊藤詩野