□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■ ------------------ CGI・3分クッキング ---------------------(^○^)~~ 発行日:1999年7月27日 毎週火曜と金曜発行 Vol.【007】 ●PR●━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ★☆★☆★あなたの自動車保険を安くする!『保険スクエアBang!』★☆★☆★  【自動車保険が安く】なって【商品券が当たる】ダブルチャンス! click< http://a.clickincome.net/md/dk?mid=06bea6caf7dafc3865da21f9689a1ebc > ⇔⇔Web新撰組News http://www.web-kyoto.com/ ⇔⇔⇔⇔⇔⇔⇔⇔⇔⇔⇔⇔ 梅雨があけました。学生の方は夏休みですね〜。 楽しいですね〜〜きっと・・・。 毎日四角い画面に向かって、暑い時のとは別の汗をたらして頑張ってます。 遊びに行きたいよ〜。 ⇔⇔⇔⇔⇔⇔⇔⇔⇔⇔⇔⇔⇔⇔⇔⇔⇔⇔⇔⇔⇔⇔⇔⇔⇔⇔⇔⇔⇔⇔⇔⇔⇔⇔ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━●PR● □■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■ 【今日の献立:娯楽の殿堂其之五】==========================================   今回でいよいよ娯楽の殿堂は完成です。   前回の問題点として、データファイルを無駄に開いたり閉じたりしている、 というものがありました。   そこで、最初に&ReadDataで読み込んでいるのはよしとして、&ShowHtmlサブルーチン での読み込みをやめてしまいましょう。   最初に読み込んだデータを使用します。   ただ、足し算や引き算が行われた場合には、変数名は@newlineになりますので、 計算が行われたかどうかをチェックしなければいけません。   以下、娯楽の殿堂の完成形です。kacchoii.dataとhanarakkyo.cgiを同一のディレ クトリに入れ、kacchoii.dataのパーミッションを606に、hanarakkyo.cgiのパーミッ ションを705にします。 kacchoii.data(データファイル) はぎちゃん:10000 もたえ:-10000 鷹:20 hanarakkyo.cgi #!/usr/local/bin/perl $CgiName="./hanarakkyo.cgi"; $DataFile="./kacchoii.data"; $pushed=0; #(1) &get_formdata; &ReadData; if(!$FORM{'action'}){ $FORM{'action'}="showhtml"; } foreach $line (@Lines) { chop($line); ($key,$point) = split(/:/,$line); if($key eq $FORM{'name'}){ if($FORM{'action'} eq "push"){ $point++; }elsif($FORM{'action'} eq "pull"){ $point--; } push(@newlines,join(':',$key,$point)); $pushed=1; #(2) }else{ push(@newlines,$line); } } if($FORM{'action'} ne "showhtml"){ &WriteData(@newlines); } &ShowHtml; exit; #データを読み込むサブルーチン sub ReadData { open(IN,"$DataFile"); @Lines=; close(IN); } #データを書き込むサブルーチン sub WriteData { local(@NewLines)=@_; local($line); open(OUT,"> $DataFile"); foreach $line (@NewLines) { print OUT $line,"\n"; } close(OUT); } #フォームからデータを得るサブルーチン sub get_formdata { local($buffer,$name,$value,@pairs); if ($ENV{'REQUEST_METHOD'} eq "POST"){ read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'}); } else { $buffer = $ENV{'QUERY_STRING'}; } @pairs = split(/&/,$buffer); foreach (@pairs) { ($name, $value) = split(/=/, $_); $value =~ tr/+/ /; $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; $value =~ s/[\r\n]//g; $value =~ s//>\;/g; $FORM{$name} = $value; } } # html表示のサブルーチン sub ShowHtml { if($pushed == 1){ #(3) @Lines=@newlines; } foreach $data (@Lines){ $data =~ s/\n$//; push(@lines,$data); push(@keys,(split(/:/,$data))[1]); } sub bykey { $keys[$b] <=> $keys[$a];} @sorted = @lines[sort bykey $[..$#lines]; print <<"EOL"; Content-type: text/html 娯楽の殿堂 娯楽の殿堂
EOL foreach $data (@sorted) { ($name,$point)=split(/:/,$data); print <<"EOL"; EOL } print <<"EOL";
なまえ点数  
$name $point
EOL } #ここまで   #(1)の$pushed変数がチェックに使う変数です。初期値を0にしておき、 足し算か引き算が行われると、この値を1にします。それが#(2)の部分です。   #(3)で、$pushedが1の時は@Lines変数の中身を@newlinesにしています。   まあ、改良の余地はまだまだあるのですが、とりあえずこれで「娯楽の 殿堂」は完成ということにしておきます。   次回からは、おみくじCGIを作っていくことにします。 ===============================================================【続く】 ---------------------------------------------------------------------- このメールマガジンは、 Subject部が、CGI3分クッキング【Vol.番号】は、まぐまぐ様にて、 ( http://www.mag2.com/ ) Subject部が、CGI3分クッキング Vol.【番号】は、Macky様にて、 ( http://macky.nifty.ne.jp/ ) Subject部が、CGI3分クッキング番号 は、Pubzine様にて、 配布致しています。 メールマガジンの解除について まぐまぐ様の解除は、 http://www.web-kyoto.com/dp/3min/ に、削除及び登録フォームを用意致しております。 Macky様の解除は、 http://macky.nifty.ne.jp/ を参考して下さい。 Pubzine様の解除は、 http://www.pubzine.com/srchid.asp?keyword=1379 に、削除及び登録フォームを用意致しております。 ---------------------------------------------------------------------- (^○^)/~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 【お願い】 このマガジンについてのお問い合わせは、WEB新撰組メーリングリストで、 お願い致します。 参加方法は、 http://www.web-kyoto.com/ml/ を参考にして下さい。 はぎちゃんに対する質問・苦情は、このメールマガジンのリプライでどうぞ。 麗しいお嬢様の愛情は個人的に大歓迎ですが、アニキの愛情は勘弁して下さい。 【今回の担当】 WEB新撰組CGIプログラマー はぎちゃん(萩原 逸郎)でした。                 監修 組長(津田 羊子)&鷹(津田 貴史) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\(^○^)