質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

1回答

2334閲覧

javascriptでクイズを作り,記録を保存したいです。

oshibuchiryo5

総合スコア11

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2016/07/25 01:36

編集2016/07/25 07:06

こんにちは。
プログラミング,まったくの初心者ですが,ホームページ上でクイズを作り,その記録を保存できないか,と考えています。そこで 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/&/&amp;/g; $val =~ s/</&lt;/g; $val =~ s/>/&gt;/g; $val =~ s/"/&quot;/g; $val =~ s/'/&#39;/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/ツール等のバージョンなど)
より詳細な情報

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

TAKAYASU

2016/07/25 01:38

該当のソースコードの項目に作成したソースコードを記載すると回答が得られやすくなりますよ。
oshibuchiryo5

2016/07/25 01:43

ご指摘ありがとうございます。 これでよろしいでしょうか?
shi_ue

2016/07/25 01:53

コードはコードブロックで囲んでいただけませんか? ```(バッククオート3つ)で囲み、前後に改行をいれるか、コードを選択して「</>」ボタンを押すとコードブロックになります。
oshibuchiryo5

2016/07/25 04:20

デベロッパーツールで確認してみたところ,Uncaught SyntaxError: Invalid or unexpected token record cgi:1 と出ました。te2ji様がご指摘された意味なのでしょうか。
kei344

2016/07/25 04:24

'''(カンマ3つ)ではなく ```(バッククオート3つ)です。記入エリアの右部分あたりにリアルタイムに結果が表示されていると思うので、そこを見ながら調整してください。
kei344

2016/07/25 04:34

引き続きコードブロックの修正はお願いするとして、jsファイルも同じくコードブロックで追記してください。
oshibuchiryo5

2016/07/25 06:54

追記しようと思ったのですが,文字数が10000を超えてしまうためか,上手く行きません。record cgi の中にエラーがあるということなのでしょうか。
oshibuchiryo5

2016/07/25 09:27

ありがとうございます。やってみます。
guest

回答1

0

ベストアンサー

エラー内容や、問題箇所の特定ができていないので、切り分けられませんが、エスパー的回答をするとcgi/record.cgiがないんじゃないの?って感じです。

投稿2016/07/25 02:03

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

oshibuchiryo5

2016/07/25 07:01

record.cgiはあるようなのですが,その中にエラーがあるようなのです。
退会済みユーザー

退会済みユーザー

2016/07/25 08:16

では、そちらを切り分けですね。 perl みたいなので、質問し直すか、タグ付け直すかして、perl が分かる人にコメントもらえるようにした方がいいです。 ちなみに、デベロッパーツールのネットワークタブを選び、ダウンロードファイルから、record.cgi を選択、 Preview か Response を選ぶと、エラーメッセージが表示されている可能性があります。そちらを見れば、問題箇所がわかるかも。
oshibuchiryo5

2016/07/25 09:27

ありがとうございます。試してみます。
oshibuchiryo5

2016/07/25 22:58

#!/usr/local/bin/perl デベロッパーツールによるとここに下線が引いてありました。perlの方で質問し直そうかと思います。
oshibuchiryo5

2016/07/31 10:38

おかげさまで理解が深まりました。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問