|
今、ネットランキングについてやっていますが、 CGIで分からないものがあります。自分はスコアの 低い方が上で、高いほうが下という風にしたいんです。 CGIについての知識があまり無いので誰か教えてください。
#!/usr/bin/perl
require 'tonyuLib.pl';
# written by Hoge- Ship
$password='******';
$data='data/hiscore';
$maxEntry=100;
$title='ネットランキング';
$cginame='hiscore.cgi';
print <<"EOF"; Content-type: text/html
<html> <title>$title</title> <body> <center> <h2>$title</h2> EOF
$wait='##########wait for registration####'; $ok=&tonyuLib'makeRankParam($password); $nscore=$tonyuLib'r{'score'}; $ntime=$tonyuLib'r{'time'}; $nname=$tonyuLib'r{'name'}; $nurl=$tonyuLib'r{'url'}; $nmail=$tonyuLib'r{'mail'};
open IN,$data; while (<IN>) { push @lin,$_; } close IN;
if ($ok && $nscore) { $outed=0; $time=time; open OUT,">$data"; $pt=0; foreach $l (@lin) { ($score,$name,$mail,$url)=split(/,/,$l); if ($nscore>$score && !$outed) { print OUT "$nscore,$time,$wait\n"; $outed=1; } if (!($mail =~ /$wait/) || $time-$name<3600 ) { print OUT $l; } } if ($#lin+1<$maxEntry && !$outed) { print OUT "$nscore,$time,$wait\n"; $outed=1; } close OUT; if ($outed ) { &inputName } else { ¬Ranked; } } else { if ($ntime) { open OUT,">$data"; $pt=0; foreach $l (@lin) { ($score,$name,$mail,$url)=split(/,/,$l); if ($name eq $ntime) { print OUT "$score,$nname,$nmail,<tr><tr><tr><$nurl\n"; $pt++; } else { if ($pt<$maxEntry) { print OUT $l; if (!($mail =~ /$wait/)) { $pt++; } } } } close OUT; &printRank; } elsif ($nscore) { ®istError; } else { &printRank; } }
print "</center>"; ©right;# この行は毎回必ず実行してください
sub printRank { print <<"EOF"; <table> <tr><td>得点</td><td>名前</td></tr> EOF open IN,$data; while (<IN>) { s/\n$//; $l=$_; ($score,$name,$mail,$web)=split(/,/,$l); if (!($mail =~ /$wait/)) { print "<tr>"; print "<td>$score</td>"; print "<td>"; print "<a href=\"mailto:$mail\">" if $mail; print "$name"; print "</a>" if $mail; print "</td>"; if ($web) { print "<td><a href=\"$web\">HomePage</a></td>"; } print "</tr>"; } } close IN; print <<"EOF"; </table> EOF }
sub inputName { print <<"EOF"; Congratulations!<HR> $nscore点なので登録できます!
<form action="$cginame"> <input type="hidden" name="time" value="$time"> お名前<input type=text name="name">
メールアドレス<input type=text name="mail">
Webページアドレス<input type=text name="url">
<input type="submit" value="ok"> </form>
EOF }
sub notRanked{ print <<"EOF"; Sorry....<HR> $nscore点はランクインしません。 EOF }
sub registError{ print <<"EOF"; error!<HR> 登録できません。原因として次のことが考えられます <ul> <li> プログラムを書き換えた<P>
アーカイブ内のファイルを書き換えると登録できなくなります。 アーカイブを解凍しなおしてください。
フォルダ内に余分なファイルがあるとうまくいかないことがあるので、フォルダを上書きせずに、 一度フォルダを削除することをおすすめします。 <P> <li> Tonyuランタイムではなく、Tonyu開発環境からプログラム実行している<P>
このゲームの開発環境であるTonyu Systemからは登録できません。
</ul> EOF
}
# 著作権表示。ここから下は変更、削除しないでください。 sub copyright { print <<"EOF"; <HR> <div align="right"> <a href="http://tonyu.kake.info.waseda.ac.jp">Tonyu System</a> Hi-Score Ranking Program/Written by Hoge- Ship </div> </body></html> EOF }
|