コンセプト。
- 入力チェックはしない。
フォームに入ってきたものを処理するだけ。
- データベースは使わない。
- 加工は Excel でする。Excel 形式の CSV で保存する
- ファイルロックとかを真面目に考えるのが嫌なので、
1回答は1ファイルにする。(flock ぐらいはするけど)
- 再利用性は考えない。設定ファイルは使わない。
その都度プログラムを修正する。
- 入力フォームは自前で書く。
(元データ + ワンライナーとかで自動生成してから加工する、と)
enquatesubmit.cgi
http://www.pochi.cc/~sasaki/src/enquatesubmit_cgi
ポイントをいくつか。
元のフォームは SJIS で書く。
SJIS にしておけば Excel が扱いやすい。
Text::CSV_XS は binary モードで開く。
my $csv = Text::CSV_XS->new({binary=>1});
要素が入っていないときは、スペース1つを代わりに入れる。
foreach my $value (@itemlist){
if ($q->param($value)){
push (@columns, $q->param($value));
} else {
push (@columns, ' ');
}
}
回答の場所をウェブからアクセスできるところに置くなら
.htaccess に以下のような感じに書いてアクセス制限する。
(123.123.123.123 は適当なものに変更)
Options Indexes
order deny,allow
deny from all
allow from 127.0.0.1 123.123.123.123
回答をまとめて取り出すのには、シェル等で結合してやればOK。
CGI にするなら以下のような感じ。
header.csv にレコード名を書いておけばグラフ化するとき楽。
#!/bin/sh
printf "Content-Disposition: attachment; filename=data.csv\n\n"
cat header.csv
for i in 0* ; do cat $i ; printf "\n" ; done
getcsv.cgi
http://www.pochi.cc/~sasaki/src/getcsv_cgi