第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("けいじばん\n") print("\n") print("\n") print("

けいじばん

\n") print("
    \n") for time in db.roots.sort # Hash なら db.keys sort に相当 if db[time][0] != nil #ユーザー名がない場合は掲載しない printf("
  1. %s:%s
  2. \n", db[time][0], db[time][1].chomp) end end print("
\n") print("\n") print("\n") print("\n") print("\n") print("\n") print("\n") end 解説 CGIライブラリの他に、PStoreライブラリを使用して、CGI変数をデータベースに しまう。 require 'pstore' … 「受け取ったデータをためる」という宣言をする db = PStore.new("pstore/bbs.db") … データベースの作成
… データを入力させる部分 ・データベースに入力する部分 db.transaction do …入力されたデータを読みこんで出力する if db == nil … データベースの情報がないとき db[t] = Hash.new … 時間を Key としたハッシュを作成 db[t] = [cmt, usr] … 配列として準備する 1 の参考文献 下記に示す2つの文献は、共に 2012年度 基礎プログラミングII 第10回 (CGI ことおぼえ) 作者: 西村まどか である。 ※URLの下の「 」の部分は、ページのタイトル※ ・ http://roy/~madoka/2012/r2/10/r2_10_01_theme_01_pstore.html 「CGI で使うことのできるデータベース」 ・ http://roy/~madoka/2012/r2/10/r2_10_02_theme_02_program.html 「プログラム部分について」 ・ http://roy/~madoka/2012/r2/10/r2_10_05_theme_05_input.html 「データベースに入力」 2. A. 1. CGI作品の最高傑作のリンク先 http://roy/~c111135/rubycgi/r2_cgi_best.html (なお、後期広告ページ http://roy/~c111135/adv2/ にもリンクを貼っ ている。) 2. 考えた設定(CGIの題名と意図) CGIの題名: 「学生証作成プログラム」 最近は、インターネットを通じて授業が受けられるシステムが構築され ている。それは今後、私達若い世代だけでなく、幅広い年代の人が利用 することも有り得る。インターネットの普及に対応し、カードだけでな く、Web上にも学生証を持つことによって、学生証の紛失を防ぐ。それと 共に、カードがなくても身分証明ができるようになればいいのではない かと、私は考えた。 以上の理由から、このプログラムの作成に至った。 3. 作成したHTML文書・プログラム (入力部分と送信結果の表示する部分、各部の解説) ・HTML文書(r2_cgi_best.html) 学生証を作ります!

学生証作成プログラム


このプログラムでは、学生証を作ることができます!


企画意図

現代では、インターネットを通じて授業を受けられるというシステムが構築されている。

在宅で授業が受けられるため、今後そのような形態が増加することが予想される。

それは、若い世代の私達だけでなく、幅広い年代の人が利用することも有り得る。

インターネットの普及に対応し、Web上にも学生証を持つことによって、学生証の紛失も減るのではないか。

また、私達もカード型式の学生証を持っているが、カードがなくても身分証明ができるようになればいいのではないかと考えた。


以上の理由から、このプログラムの作成に至った。

プログラムの利用によって、インターネット上のサービスがより使いやすいものになってほしい。

1: あなたの氏名を入力してください。

苗字:

名前:

2: あなたの性別を選んでください。


3: 下の選択肢から、あなたの年齢を選んでください。

年齢:


4: 「現在お住まいの都道府県」を選んでください。

都道府県:


5: あなたの住所(都道府県の後の「市町村・番地等」)と電話番号を入力してください。

住所:

電話番号: - -


6: Eメールアドレスを入力してください。

アドレス:


7: パスワードを入力してください。(任意)

※なお、半角で10文字までです。※

パスワード:


著作権・ご意見・ご感想

このプログラムは村上茉奈美が著作権を保有しています。

このプログラムの入手・実行・改変・再配布は自由に行なって構いません。

ただし、このプログラムを取り扱うことで生じたいかなる結果に対しても著作権者は責任を負いません。ご了承下さい。

ご意見・ご感想は下記のアドレスまで。

c111135@g.koeki-u.ac.jp


基礎プログラミングII 後期広告ページへ

村上茉奈美のトップページへ

・プログラム(gakusei.rb) #!/usr/bin/env ruby #coding: euc-jp require 'cgi' #「CGIを使う」ということを宣言する cgi = CGI.new(:accept_charset => "EUC-JP") #CGI用のハッシュを新しく作り、CGIを日本語で受け付ける print("Content-type: text/html; charset=EUC-JP\n\n") #CGIの値を日本語で書き出す si = cgi["myouji"] #変数 si には CGI変数の myouji を代入する mei = cgi["name"] #変数 mei には CGI変数の name を代入する danjyo = cgi["sei"] #変数 danjyo には CGI変数の sei を代入する tosi = cgi["age"] #変数 tosi には CGI変数の age を代入する huken = cgi["todou"] #変数 huken には CGI変数の todou を代入する jyusyo = cgi["sumai"] #変数 jyusyo には CGI変数の sumai を代入する tel1 = cgi["tel"] #変数 tel1 には CGI変数の tel を代入する tel2 = cgi["middle"] #変数 tel2 には CGI変数の middle を代入する tel3 = cgi["last"] #変数 tel3 には CGI変数の last を代入する mail = cgi["adress"] #変数 mail には CGI変数の adress を代入する word = cgi["pass"] #変数 word には CGI変数の pass を代入する if danjyo == "man" #もし danjyo が man だったら a = "男" elsif danjyo == "woman" #もし danjyo が woman だったら a = "女" end #if に対するend(終わり) seito = 0 #変数 seito の初期値を 0 とする open("./mydb/gakuseki.txt","r") do |read| #./mydb/gakuseki.txt というファイルを読み込み専用で開いて #データを read に取りこむ while number = read.gets #read に入っているデータを number に取りこむ if /(\d+)/ =~ number #もし keisan が 数値 という並びだったら seito = $1.to_i #seito は $1 を整数に直したもの end #if に対するend(終わり) end # while に対するend(終わり) end #open に対するend(終わり) #以下、HTML文書の中身 print("\n") print("\n") print("学生証\n") print("\n") print("\n") print("\n") print("

学生証

\n") printf("

学籍番号: %d

\n", seito) printf("

氏名: %s%s

\n", si, mei) printf("

性別: %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文書) の実行結果 (テキストエリアに入力していない状態) 学生証を作ります!

学生証作成プログラム


このプログラムでは、学生証を作ることができます!


企画意図

現代では、インターネットを通じて授業を受けられるというシステムが構築されている。

在宅で授業が受けられるため、今後そのような形態が増加することが予想される。

それは、若い世代の私達だけでなく、幅広い年代の人が利用することも有り得る。

インターネットの普及に対応し、Web上にも学生証を持つことによって、学生証の紛失も減るのではないか。

また、私達もカード型式の学生証を持っているが、カードがなくても身分証明ができるようになればいいのではないかと考えた。


以上の理由から、このプログラムの作成に至った。

プログラムの利用によって、インターネット上のサービスがより使いやすいものになってほしい。

1: あなたの氏名を入力してください。

苗字:

名前:

2: あなたの性別を選んでください。


3: 下の選択肢から、あなたの年齢を選んでください。

年齢:


4: 「現在お住まいの都道府県」を選んでください。

都道府県:


5: あなたの住所(都道府県の後の「市町村・番地等」)と電話番号を入力してください。

住所:

電話番号: - -


6: Eメールアドレスを入力してください。

アドレス:


7: パスワードを入力してください。(任意)

※なお、半角で10文字までです。※

パスワード:


著作権・ご意見・ご感想

このプログラムは村上茉奈美が著作権を保有しています。

このプログラムの入手・実行・改変・再配布は自由に行なって構いません。

ただし、このプログラムを取り扱うことで生じたいかなる結果に対しても著作権者は責任を負いません。ご了承下さい。

ご意見・ご感想は下記のアドレスまで。

c111135@g.koeki-u.ac.jp


基礎プログラミングII 後期広告ページへ

村上茉奈美のトップページへ

・ gakusei.rb(プログラム) の実行結果 (テキストエリアに入力し、それを送信した後) ・その 1 学生証

学生証

学籍番号: 10

氏名: 佐藤太郎

性別: 男

年齢: 41~50歳

住所: 福岡県福岡市〜〜町○丁目×番地

電話番号: 090-2222-1111

Eメールアドレス: ○○@ruby.jp

パスワード: tarou

・その 2 学生証

学生証

学籍番号: 12

氏名: 加藤ゆい

性別: 女

年齢: 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 学生証

学生証

学籍番号: 11

氏名: 佐藤太郎

性別: 男

年齢: 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 学生証

学生証

学籍番号: 13

氏名: 加藤ゆい

性別: 女

年齢: 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作品は、今後も 日常生活でよく使われるものになると思い、私は興味を持った。 共同学習者: 浅沼佑香 ・ 伊藤詩野