Web アンケートシステム パイロット版 完成

 先月に他学部の教授から依頼された,Webのフォームから回答するアンケートシステムのパイロット版が完成しました。8月2日に『Excelで普通に開けるUTF-8のCSVファイルについて』という記事を書きましたが,その作業をこの2日間で集中して行いました。

 PerlによるCGIプログラミングは久し振りでしたが,現4年生が2年次のゼミで用いた教科書や前任校のゼミで用いた教科書に記述されているレベルの技を駆使してアレンジすることで,項目数や要素の種別には拘わらない,汎用のプログラムが出来上がりました。

 CSV形式のファイルとしてデータを書き出す際,初めは先頭のデータを別扱いして,カンマ及びデータをループで回して繋ぎましたが,教科書を捲っていたら,フォームから受け取ったデータをsplit関数を使うのに対して,データをカンマ区切りでつなぐといった目的に最適なjoin関数があることを思い出し,これを利用して,とてもコンパクトな仕上がりとなりました。

 開発を進めるに当たって,自宅のPC上ではWindows XPのころからインストールしてあったPerlがWindows7環境に変えても引き継がれていましたが,今までコマンドプロンプト上で単独で利用していたせいか,これがWideStudioという統合環境に含まれているものだということをすっかり忘れていました。そこで先ず,WideStudioをバージョンアップしました。この統合環境ではgccが標準としてインストールされ,他にオプションとして,Perl,Python,rubyを利用することができます。

 また,Apacheはプリインストールモデルでしたが,これまでこのPCでは利用したことがなく,版も古かったので,こちらもバージョンアップしました。実際のサーバ上にプログラムをアップロードしてから試すのは,オフラインでエラーメッセージを読みながらバグ出しをしてからでないと,開発しようがありませんので,こういったツールは必須です。

 最後まで出ていたエラーが"Premature end of script headers"というもので,ファイルへの書き出しでも,UTF-8の文字コードで作成されたものに書き出すので,ヘッダは付けておかないといけないということかと思い,
 print "Content-type: text/html; charset=$CHARSET\n\n";
の1行をファイルを開く前に加えたらおさまりました。こういうところは夜中に作業をしていると,ファイルにはデータをすべて書き出せているのに,何故エラーが出るのか不思議で考えがつかず,寝て起きたら「そうか」と思い至りました。

 しかし,実はCGIプログラム自体よりも厄介なのは,ラジオボタンやチェックボックスが未選択の場合,その項目の値はsubmit時に何も送付されないということでした。単に,type="hidden"としたダミーの要素を加えた場合,普通の要素を選択した場合には重複してデータが送信されてしまうので,ネット上の技術情報を参考にしながら,試行錯誤を重ねました。

 結局,ラジオボタンでは
 
の様なインラインのcssを用いて,これがグループ内で初期値として選択されている状態にしました。また,チェックボックスでは
 
 
といった,インラインのJavaScriptを用いて,チェックボックスがクリックされたら,選択された場合も選択を外された場合も,type="hidden"の要素の値が変わるという手法を採用しました。

 今回は質問項目が100以上で,個々の項目のon/offを個別に調べて行く様なものは作れないので,却って汎用性の高いものが出来上がって,良い経験になりました。学生達の教育にも何らかの形でフィードバックできる日が来ると思います。

by 神保 雅人

ブログ気持玉

クリックして気持ちを伝えよう!

ログインしてクリックすれば、自分のブログへのリンクが付きます。

→ログインへ

なるほど(納得、参考になった、ヘー)
驚いた
面白い
ナイス
ガッツ(がんばれ!)
かわいい

気持玉数 : 0

この記事へのコメント

この記事へのトラックバック