Prev / Next / /home/pochi/ChangeLog

アンケート CGI の雛型[computer]

2006-03-07

コンセプト。

- 入力チェックはしない。
  フォームに入ってきたものを処理するだけ。
- データベースは使わない。
- 加工は 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

Referrer (Inside): [2006-12-12-9]

permlink