下記のようにしてスコアランキングを作成して、html(.php)に表示させるようにしました。
問題はpost送信ボタンでスコアを送信した後に、一旦 ./record.txt にスコアが記録されます。それをphpページでスコア反映を表示させようとして、リロードすると、画像のような「再送信をします。」という二重送信エラー表示が出てしまいます。
「再試行」ボタンを押してリロードしても”,,2018/10/02-12:15”というスコアを
./record.txtに送っているようなのでスコアランキングに問題はないのですが、
エラー表示を出さないようにする方法はありますか?
(ちなみに、get送信をすると同じ記録が2個ランキングに載ってしまうので
余計良くありません)
宜しくお願い致します。
<!DOCTYPE html> <html lang="ja"> <head> ・・・・ </head> <body>・・・・
<p9>名前/ニックネーム</p9> <div class=send_data> <form action="" method="POST"> <p><input type="text" name="nickname" maxlength="8" size="13"></p> <input type="hidden" name="score" value="" id="score"> <p><input type="submit" value="記録送信"></p> </form> </div>
・・・・
<script> // phpにてスコア保存 <?php $score=$_POST['score']; $user=$_POST['nickname']; $s_date=date( "Y/m/d-H:i", time()); $text=$score.",".$user.",".$s_date."\n"; //log.txtにスコアを保存 $fp = fopen("./record.txt", "a"); fwrite($fp, $text); fclose($fp); ?> ・・・・・ </script> </body> </html><div class="content4"> <p11>score name time<br></p11> <?php // CSV ファイルを読み込み、$data配列に格納 $handle = fopen("./record.txt", "r"); while (($row = fgetcsv($handle, 1000, ",")) !== FALSE) { if ( $row[0] > 0 ) { $data[] = array( 'score'=>$row[0] ,'nickname'=>$row[1], 's_date'=>$row[2], ); } } fclose($handle); // 列方向の配列を得る foreach ($data as $key => $row) { $score[$key] = $row['score']; $user[$key] = $row['nickname']; $s_date[$key] = $row['s_date']; } // データを スコアの昇順にソートする array_multisort($score, SORT_ASC, $user, SORT_DESC, $s_date, SORT_ASC, $data); // 結果を10件表示 for( $i=0 ; $i<15 ; $i++ ) { print "$score[$i] $user[$i] $s_date[$i] <br>\n"; } ?> </div>
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。