#
二者択一アンケート
Tag(s):
Ruby
Webデザイン
CGI
お手軽なアンケートを書いてみる。まずはHTML部分から。
<form action="./enq1.rb" method=POST>
Q1:目玉焼きにかけるのは?
<input type="submit" name="ケチャップ" value="ケチャップ">
<input type="submit" name="マヨネーズ" value="マヨネーズ">
</form>
いたって単純。質問に対し回答ボタンを並べるだけ。
4: require 'cgi'
5: require 'pstore'
データを保存するためにPStoreを利用する。
6:
7: $SAFE = 1
8:
別に理由がないときは$SAFE = 1ぐらいが安全。安全でないファイル名でファイルを開いたりするうっかりミスを防げる。今回は関係ないけど。
9: cgi = CGI.new
10: a1 = 0
11: a2 = 0
12: db = PStore.new("enq1.db")
13: db.transaction do
14: db['a1'] = db.root?('a1')
? db['a1'] + 1 : 1 if !cgi['ケチャップ'].empty?
15: db['a2'] = db.root?('a2')
? db['a2'] + 1 : 1 if !cgi['マヨネーズ'].empty?
16: a1 = db.root?('a1') ? db['a1'] : 0
17: a2 = db.root?('a2') ? db['a2'] : 0
18: end
19:
選ばれた項目のカウンタを増やす。
20: print <<EOT
21: Content-Type: text/html; charset=EUC-JP
22:
23: <html>
24: <body>
25: <table border=0>
26: <tr><td>ケチャップ #{a1}
<td><img src="enq1b.rb" alt="graph"><td> #{a2} マヨネーズ
27: </table>
28: EOT
あとは表示するだけ。グラフ化するためにもう一つスクリプトを呼び出す。
10: def image_out(per)
11: print "Content-Type: image/png\n"
12: print "\n"
13: img = GD::Image.new(300, 20)
14: img.colorAllocate(255, 255, 255)
15:
16: blue = img.colorAllocate(0, 0, 255)
17: img.rectangle(0, 0, 299, 19, blue)
18: img.filledRectangle(0, 0, per * 299, 19, blue)
19:
20: img.png $stdout
21: end
グラフィックライブラリとしてGDを利用した。棒グラフならすぐに描ける。