こんにちは。
プログラミング,まったくの初心者ですが,ホームページ上でクイズを作り,その記録を保存できないか,と考えています。そこで Quiz generator script というjsファイルを公開しているsawa's factory というサイトを見つけました。このサイトにあるランキング登録のできるクイズを使用させてもらいたいと考えたのです。しかしながら最近は更新がなされていないようで,いろいろと困っております。
###発生している問題・エラーメッセージ
http://sawa-s.com/quiz-generator-ranking.html
ランキングに登録される点数を獲るとなぜか画面がストップしてしまします。
どなたか原因を教えていただけないでしょうか。
###該当のソースコード
css
#!/usr/local/bin/perl
#------------------------------------------------------------------------
Quiz Generator Script Ranking+
Copyright 2012 Sawa's Factory
http://sawa-s.com/quiz-generator-ranking.html
#------------------------------------------------------------------------
use strict;
use lib "./lib";
use Jcode;
#一覧&ランキング&設定ファイルの指定
my $listing_file="data/listing.dat";
my $ranking_file="data/ranking.dat";
my $config_file="data/config.dat";
------------ 設定ここまで ------------
my %in = &read_param; my @rc_d=('none','month','year'); my @youbi = ('Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'); my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time); $year += 1900; $mon += 1; $mon = sprintf( "%02d", $mon ); $mday = sprintf( "%02d", $mday ); $hour = sprintf( "%02d", $hour ); $min = sprintf( "%02d", $min ); $sec = sprintf( "%02d", $sec ); my $date="$year/$mon/$mday"; my $time= "$hour:$min:$sec"; my @d_array =(0,$mon,$year); if ($in{a} eq "lh"){&listing_html;} if ($in{a} eq "rh"){&ranking_html;} if ($in{a} eq "lr"){&listing_regist;} if ($in{a} eq "rr"){&ranking_regist;} if ($in{a} eq "lc"){&listing_clear;} if ($in{a} eq "rc"){&ranking_clear;} &output_js("alert('CGIエラー:不明な処理です');\n"); exit; sub listing_html { my $output_data="listing_data=[\n"; open(LTF,"$listing_file") or &output_js("alert('CGIエラー:ファイルオープンエラー');\n"); my $i=0; while (<LTF>) { my ($host,$skey,$akey,$date,$time,$name) = split(/<>/); if ($i > 0){$output_data .= ",";} $output_data .= "[$skey,$akey,'$date','$time','$name']\n"; $i ++; } close(LTF); $output_data .= "];\nquiz_listing_open();\n"; if ($i == 0){$output_data = "alert('一覧はまだ登録されていません。');\n";} &output_js($output_data); exit; } sub ranking_html { my $output_data="ranking_data=[\n"; open(RKF,"$ranking_file") or &output_js("alert('CGIエラー:ファイルオープンエラー');\n"); my $i=0; while (<RKF>) { my ($host,$skey,$date,$time,$name,$comment) = split(/<>/); if ($i > 0){$output_data .= ",";} $output_data .= "[$skey,'$date','$time','$name','$comment']\n"; $i ++; } close(RKF); $output_data .= "];\nquiz_ranking_open();\n"; if ($i == 0){$output_data = "alert('ランキングはまだ登録されていません。');\n";} &output_js($output_data); exit; } sub listing_clear { open(LTF,">$listing_file") or &output_js("alert('CGIエラー:ファイルオープンエラー');\n"); print LTF ""; close(LTF); if ($in{a} eq "lc"){&output_js("alert('一覧ファイルをクリアしました。');\n");} } sub ranking_clear { open(RKF,">$ranking_file") or &output_js("alert('CGIエラー:ファイルオープンエラー');\n"); print RKF ""; close(RKF); open(CFF,">$config_file") or &output_js("alert('CGIエラー:ファイルオープンエラー');\n"); print CFF "$rc_d[$in{rc}]=$d_array[$in{rc}]"; close(CFF); if ($in{a} eq "rc"){&output_js("alert('ランキングファイルをクリアしました。');\n");} } sub listing_regist { #ランキングクリアチェック open(CFF,"$config_file") or &output_js("alert('CGIエラー:ファイルオープンエラー');\n"); my $config = <CFF>; close(CFF); if ($config eq ""){$config="none=0";} my ($key,$val) = split(/=/,$config); my $r_clear=0; if ($key ne $rc_d[$in{rc}]){$r_clear=1;} else { if ($val ne $d_array[$in{rc}]){$r_clear=1;} } if ($r_clear == 1){&ranking_clear;} #listing登録処理 Jcode::convert(\$in{n}, 'sjis'); my $host = &get_host; open(LTF,"$listing_file") or &output_js("alert('CGIエラー:ファイルオープンエラー');\n"); my @lines=<LTF>; close(LTF); my $addline="$host<>$in{sk}<>$in{ak}<>$date<>$time<>$in{n}<>\n"; #重複しない場合 過去に登録した同じホスト名を取り除く if ($in{ld} == 1){ my @nline=(); foreach (@lines){ my ($hs,$dammy) = split(/<>/); if ($hs ne $host){push(@nline, $_);} } @lines=@nline; } unshift(@lines, $addline); while ($#lines+1 > $in{ln}) { pop(@lines); } open(LTF,">$listing_file") or &output_js("alert('CGIエラー:ファイルオープンエラー');\n"); print LTF @lines; close(LTF); #ランキングの順位判定 open(RKF,"$ranking_file") or &output_js("alert('CGIエラー:ファイルオープンエラー');\n"); my @rlines=<RKF>; close(RKF); my $sw=0; my $i=1; my $rank= 0; if ( $#rlines < 0 ){$rank= 1;} else {$rank=@rlines+1;} if ($rank > $in{rn}){$rank=0;} my $oldrank= $in{rn}+1; if ($in{rd} == 1){ foreach (@rlines){ my ($dhs,$dsk,$ddam) = split(/<>/); if ($dhs eq $host){$oldrank=$i;} $i ++; } } $i=1; foreach (@rlines){ my ($rhs,$rsk,$dam) = split(/<>/); if ($rsk <= $in{sk}){ $rank= $i; last; } $i ++; } if ($in{rd} == 1 && $rank > $oldrank){$rank=0;} #JS送信 my $output_data = "cgi_rank=$rank;\nending();\n"; &output_js($output_data); exit; } sub ranking_regist { #登録処理 Jcode::convert(\$in{n}, 'sjis'); Jcode::convert(\$in{cm}, 'sjis'); my $host = &get_host; open(RKF,"$ranking_file") or &output_js("alert('CGIエラー:ファイルオープンエラー');\n"); my @lines=<RKF>; close(RKF); my $addline="$host<>$in{sk}<>$date<>$time<>$in{n}<>$in{cm}<>\n"; my $sw=0; my $result=0; my @nline=(); foreach (@lines){ my ($rhs,$sk,$dammy) = split(/<>/); if ($sk <= $in{sk} && $sw == 0){ push(@nline, $addline); $sw = 1; $result=1; } if ($in{rd} == 1 && $rhs eq $host){ $result=2; } else { push(@nline, $_); } } if ($sw == 0 && $result == 0){ push(@nline, $addline); $result=1; } while ($#nline+1 > $in{rn}) { pop(@nline); } open(RKF,">$ranking_file") or &output_js("alert('CGIエラー:ファイルオープンエラー');\n"); print RKF @nline; close(RKF); #JS送信 my $output_data = "result=$result;\nranking_regist_result();\n"; &output_js($output_data); exit; } sub get_host{ # ホスト名を取得 my $host = $ENV{'REMOTE_HOST'}; my $addr = $ENV{'REMOTE_ADDR'}; # ホスト名が取得できない場合、IPからホスト名を取得する if ($host eq "" || $host eq $addr) { $host = gethostbyaddr(pack("C4",split(/\./,$addr)),2) || $addr; } return $host; } sub read_param { my ($buf,%in); $buf = $ENV{QUERY_STRING}; foreach ( split(/&/, $buf) ) { my ($key,$val) = split(/=/); $key =~ tr/+/ /; $key =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("H2", $1)/eg; $val =~ tr/+/ /; $val =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("H2", $1)/eg; $key =~ s/[<>"'&\r\n]//g; $val =~ s/&/&/g; $val =~ s/</</g; $val =~ s/>/>/g; $val =~ s/"/"/g; $val =~ s/'/'/g; $val =~ s/\r\n/<br>/g; $val =~ s/\n/<br>/g; $val =~ s/\r/<br>/g; $in{$key} .= "\0" if (defined($in{$key})); $in{$key} .= $val; } return %in; } sub output_js{ # print "Content-Type: text/javascript\n\n"; # 送信 print "$_[0]"; exit; }
###試したこと
ランキングがないものは問題なく作動しています。jsファイルやcssを比べて見たのですがどうしてもわかりませんでした。よろしくお願いします。
###補足情報(言語/FW/ツール等のバージョンなど)
より詳細な情報
回答1件
あなたの回答
tips
プレビュー