まず、Flashから送られたデータをもとにアンケート集計を行うCGIプログラムを作ります。
CGIのアンケートプログラムは、以下のようになります。
enqdata.cgi
1
#!/usr/local/bin/perl 2 3#----- アンケートデータファイル 4$logfile = "./enqdata.dat"; 5 6#----- データの値の読み込み 7if ($ENV{'REQUEST_METHOD'} eq "POST") { 8read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'}); 9} 10if ($ENV{'REQUEST_METHOD'} eq "GET") { 11$buffer = $ENV{'QUERY_STRING'}; 12} 13$selectNum = -1; 14@getlist = split(/&/,$buffer); 15foreach(@getlist) { 16($key,$value) = split(/=/,$_); 17if ($key eq 'selectdata') { 18$selectNum = $value; 19} 20} 21 22#----- アンケートデータファイルの読み込み 23$count = 0; 24open(IN, "$logfile"); 25while(<IN>) { 26$data = $_; 27chomp($data); 28if ($count == $selectNum) { 29$data++; 30} 31$enqdata[$count] = $data; 32$count++; 33} 34close(IN); 35 36#----- データをFlashへ送る 37print "Content-type: text/plain\n\n"; 38 39for ($cnt = 0; $cnt < $count ; $cnt++) { 40print "dat$cnt=$enqdata[$cnt]&"; 41} 42 43#----- データの書き換え 44open(OUT,">$logfile"); 45for ($cnt = 0; $cnt < $count ; $cnt++) { 46print OUT "$enqdata[$cnt]\n"; 47} 48close(OUT); 49exit; 1行目:Perlプログラムの最初に必要な行です。
4行目:アンケートデータのファイル名「./enqdata.dat」を$logfileという変数に格納しておきます。
7〜12行目:Flashからのデータ読み込みを行います。
$logfileのファイルを開き、$buferという変数に読み込みますが、GETで送られてきてもPOSTで送られてきても、読み込めるようにしています。13行目:訪問者が選択した項目の番号$selectNumの初期値として-1を入れておきます。もし訪問者がアンケートに答えず選択項目がない場合は-1になります。
14〜20行目:Flashからのデータ$bufferを分解して、「selectdata」という変数名で送られてきたデータがあれば、$selectNumにその値を代入します。
23〜34行目:アンケートデータファイルからデータを1行ずつ読み込み、出力用のデータ$enqdataの配列に1つずつ代入していきます。
26行目:$logfileから読み込んだ1行のデータは「$_」という変数に入っていますので、これを$data変数に代入します。
27行目:1行のデータを読み込んだら最後に改行データが付いてくるので。chomp関数で改行を削除します。
28行目:項目のインデックス$countとFlashで選択された項目の番号$selectNumとが同じであれば、そのデータのカウント$dataを1行増やします。
37〜41行目:アンケート集計の結果を、Flashの変数として渡せるフォーマットにして送ります。「data0 = データ0 & data1 = データ1・・・・・・」というフォーマットで送られます。
44〜48行目:アンケート集計の結果を、$logfileに書き出して保存します。
Shirley's i-box | Shirley's little-box | Dreamweaver Technique | JAVA Script sample | CSS sample | JAVA Applet sample