• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:フォームの内容を再投稿するとエラーになります。)

フォームの再投稿でエラーが発生する問題

このQ&Aのポイント
  • フォームの再投稿によりPHP側でエラーが発生しています。csvファイルにはデータが書き込まれるものの、ブラウザ上にエラーが表示されます。
  • アンケートプログラムをPHPで作成しており、送り先のHTMLでは回答の完全性をチェックしています。回答漏れがある場合は警告が表示され、再投稿はできません。
  • 現在の問題は、すべてのラジオボタンをチェックした後にフォームを送信すると、PHP側でエラーが発生することです。エラーの修正方法についてアドバイスをいただきたいです。

質問者が選んだベストアンサー

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

javascriptのvalidate処理はあくまでもユーザビリティをあげるための ものです。サーバー側ではどんなデータが飛んできても対処できるように それなりの処理をいれておく必要があります。 今回の件はjavascriptでフィルターされている前提で処理をはっしょって しまったのではないでしょうか? セキュリティ的にユーザーから送られてくるデータは一切信用しては いけません。

nice-chap
質問者

補足

レス、ありがとうございます。 コードを以下に示します。 ブラウザの「戻る」で戻って、チェックするラジオボタンを変えて 再送信するとエラーになる時があります(うまく行くときもあるようです)。 よろしくお願いします。 (クライアントサイド) <html> <head> <title>questuionnaire</title> </head> <body> <form name = "myform" action = "questionnaire.php" onsubmit = "return check()"> <hr> (1)あなたの好きな動物を選んでください。<p> <input type = "radio" name = "quiz0" value = "ライオン"> ライオン<p> <input type = "radio" name = "quiz0" value = "ブタ"> ブタ<p> <input type = "radio" name = "quiz0" value = "犬"> 犬<p> <input type = "radio" name = "quiz0" value = "ハムスター"> ハムスター<p> <hr> (2)あなたの好きな果物を選んでください。<p> <input type = "radio" name = "quiz1" value = "メロン"> メロン<p> <input type = "radio" name = "quiz1" value = "ミカン"> ミカン<p> <input type = "radio" name = "quiz1" value = "リンゴ"> リンゴ<p> <input type = "radio" name = "quiz1" value = "パイナップル"> パイナップル<p> <hr> (3)あなたの好きな国を選んでください。<p> <input type = "radio" name = "quiz2" value = "アメリカ"> アメリカ<p> <input type = "radio" name = "quiz2" value = "イギリス"> イギリス<p> <input type = "radio" name = "quiz2" value = "イタリア"> イタリア<p> <input type = "radio" name = "quiz2" value = "フランス"> フランス<p> <hr> <input name= "mybutton" type="submit" value="送信" > </form> <p> 送信ボタンをクリックしてください。<p> <p> <script language="Javascript"> var i; var n = 3;//question number var rn = 12;//radio button number function check() { var sum = 0;//sum for (i=0; i<12; i++) { if (document.myform.elements[i].checked == true) { sum=sum+1; } } if (sum != 3) { alert('すべての質問に答えてください。') return false; } else { return true; } } </script> </body> </html> -------------------------------- (サーバーサイド) <html> <head> <title>questionnaire</title> </head> <body> ご協力ありがとうございました。 <?php $q1 = $_REQUEST['quiz0']; $q2 = $_REQUEST['quiz1']; $q3 = $_REQUEST['quiz2']; $timestr = date("Y-m-d H:i:s"); //年月日時間の取得 $remote_address = $_SERVER["REMOTE_ADDR"]; //IPアドレス(リモートアドレス) $remote_host = gethostbyaddr($_SERVER["REMOTE_ADDR"]); //リモートホスト $qnum =3; $pointer=fopen("questionnaire.txt", "a"); //questionnaire.txt にテストの結果を追加する flock($pointer, LOCK_EX); fputs($pointer, $timestr); fputs($pointer,","); fputs($pointer, $remote_address); fputs($pointer, ","); fputs($pointer, $remote_host); fputs($pointer, ","); fputs($pointer, $q1); fputs($pointer, ","); fputs($pointer, $q2); fputs($pointer, ","); fputs($pointer, $q3); fputs($pointer, ","); fputs($pointer, "\r\n"); flock($pointer, LOCK_UN); fclose($pointer); ?> </body> </html>

すると、全ての回答が全文表示されます。

その他の回答 (1)

  • darlinr
  • ベストアンサー率27% (11/40)
回答No.1

エラーの内容を書いていただかないと回答のしようもありませんよ。

nice-chap
質問者

補足

レス、ありがとうございます。 コードを以下に示します。 ブラウザの「戻る」で戻って、チェックするラジオボタンを変えて 再送信するとエラーになる時があります(うまく行くときもあるようです)。 よろしくお願いします。 (クライアントサイド) <html> <head> <title>questuionnaire</title> </head> <body> <form name = "myform" action = "questionnaire.php" onsubmit = "return check()"> <hr> (1)あなたの好きな動物を選んでください。<p> <input type = "radio" name = "quiz0" value = "ライオン"> ライオン<p> <input type = "radio" name = "quiz0" value = "ブタ"> ブタ<p> <input type = "radio" name = "quiz0" value = "犬"> 犬<p> <input type = "radio" name = "quiz0" value = "ハムスター"> ハムスター<p> <hr> (2)あなたの好きな果物を選んでください。<p> <input type = "radio" name = "quiz1" value = "メロン"> メロン<p> <input type = "radio" name = "quiz1" value = "ミカン"> ミカン<p> <input type = "radio" name = "quiz1" value = "リンゴ"> リンゴ<p> <input type = "radio" name = "quiz1" value = "パイナップル"> パイナップル<p> <hr> (3)あなたの好きな国を選んでください。<p> <input type = "radio" name = "quiz2" value = "アメリカ"> アメリカ<p> <input type = "radio" name = "quiz2" value = "イギリス"> イギリス<p> <input type = "radio" name = "quiz2" value = "イタリア"> イタリア<p> <input type = "radio" name = "quiz2" value = "フランス"> フランス<p> <hr> <input name= "mybutton" type="submit" value="送信" > </form> <p> 送信ボタンをクリックしてください。<p> <p> <script language="Javascript"> var i; var n = 3;//question number var rn = 12;//radio button number function check() { var sum = 0;//sum for (i=0; i<12; i++) { if (document.myform.elements[i].checked == true) { sum=sum+1; } } if (sum != 3) { alert('すべての質問に答えてください。') return false; } else { return true; } } </script> </body> </html> -------------------------------- (サーバーサイド) <html> <head> <title>questionnaire</title> </head> <body> ご協力ありがとうございました。 <?php $q1 = $_REQUEST['quiz0']; $q2 = $_REQUEST['quiz1']; $q3 = $_REQUEST['quiz2']; $timestr = date("Y-m-d H:i:s"); //年月日時間の取得 $remote_address = $_SERVER["REMOTE_ADDR"]; //IPアドレス(リモートアドレス) $remote_host = gethostbyaddr($_SERVER["REMOTE_ADDR"]); //リモートホスト $qnum =3; $pointer=fopen("questionnaire.txt", "a"); //questionnaire.txt にテストの結果を追加する flock($pointer, LOCK_EX); fputs($pointer, $timestr); fputs($pointer,","); fputs($pointer, $remote_address); fputs($pointer, ","); fputs($pointer, $remote_host); fputs($pointer, ","); fputs($pointer, $q1); fputs($pointer, ","); fputs($pointer, $q2); fputs($pointer, ","); fputs($pointer, $q3); fputs($pointer, ","); fputs($pointer, "\r\n"); flock($pointer, LOCK_UN); fclose($pointer); ?> </body> </html>

すると、全ての回答が全文表示されます。

関連するQ&A