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

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

フォームの内容を再投稿するとエラーになります。

こんにちは。 アンケートプログラムをPHPで作っています。 送り先のHTMLでは、すべての質問が回答されているか(ラジオボタンが押されているか)をJavascriptの関数でチェックして、回答もれがなかったらtrueを返し、HTMLのonsubmit属性が許可を出し、phpにリンクします。そして、phpでは、アンケート結果をcsvファイルに書き込みます。 回答もれがあった場合、「すべての問いに答えなさい」というalertが出ます。そして、onsubmit属性はphpリンクへの許可を出しません。 問題はこの後なのですが、 すべてのラジオボタンをチェックしたあと、送信するとphpの側でエラーが出ます。 csvファイルにはデータは書き込まれるのですが、とにかくブラウザー上にエラーの表示が出ます。 どこを直せばいいのか見当もつかず困っています。 何かアドバイスがあればよろしくお願いいたします。

  • PHP
  • 回答数2
  • ありがとう数0

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

  • ベストアンサー
  • 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

  • PHP フォームについて

    PHP初心者です。HTMLとPHPを使って、アンケートフォームを作っています。 ネットで色々と調べていたのですが、基本の構成がわからないので教えてください。 HTMLとPHPの別々のファイルで構成されているフォームと、HTMLにPHPを書き込みをしてHTMLの1つのファイルで構成しているものなどがありました。どの方法でやるとよいのでしょうか? また、同じ内容でもPHPの書き方が違うような感じがするのですが、PHPには同じ動作でも沢山の書き方があるのでしょうか?ウェブサイトによって書き方が違うので少し混乱しています。 [アンケートフォーム内容] テキスト・複数行のテキスト・メール・ラジオボックス・チェックボックス・添付ファイル(添付ファイルは難しいのであれば、無しにします)のフォームの部品をいれたいです。 [動作] 1、顧客がアンケートフォームの入力 2、入力内容を私のメールに転送する のシンプルな動作です。 また、ラジオボタンやチェックボックスをつけると、PHPの構文が難しくなるのでしょうか? 宜しくお願いします。

    • ベストアンサー
    • PHP
  • 戻ると、記入フォームの内容が消えるのはなぜ?

    よくあるWEB上のアンケートフォームなどで、 記入したあとOKボタンを押し、「記入漏れがあります」と指摘されて、ブラウザのバックキーで戻ると(あるいは指定のボタンで戻ると)、記入した内容がすべて消えていて、またイチから入力し直し…ということがたまにあります。 これは一般的には、ユーザー側の問題なのでしょうか? サイト側の問題なのでしょうか? 詳しい方がいましたらどうぞ教えてください。m(_ _)m

    • ベストアンサー
    • HTML
  • アンケート結果をcsv出力できるようにしたいのですが。。。

    このようなアンケートがあるとします。 //アンケートスタート ●Q1 あなたはhtmlを使いこなしていますか? ラジオボタン回答1 使いこなしている ラジオボタン回答2 あまり使いこなしているといえない ラジオボタン回答3 ぜんぜん使いこなしていない ●Q2 Q1で「あまり使いこなしているといえない」 「ぜんぜん使いこなしていない」と回答した方のみお答えください。 その理由はどのようなものですか? チェックボックス回答1 むずかしい チェックボックス回答2 わかりにくい チェックボックス回答3 勉強不足 チェックボックス回答4 時間が無い チェックボックス回答5 そのほか 【送信ボタン】 //アンケートエンド ■上のようなアンケートで、送信ボタンを押すと、データがcsv形式でサーバ上に蓄積されるには、どうしたらよいでしょうか? ※結果がメール送信されるアンケートしか作ったことが無いので、 前回実施したアンケートが大量に回答があったため、集計に大変苦労してしまいましたので、メールで送信ではなく、自動的に蓄積されるようにしたいです。 この場合はcgiなのでしょうか、javascript利用なのでしょうか。よろしくお願いします。

    • ベストアンサー
    • HTML
  • フォーム内の二つのテーブルのうち一つのテーブル内のオブジェクトの内容のみをクリアしたい

    フォーム内にテーブルを二つ作成しました。 テーブル1の中のあるチェックボックスのチェックが入っているかいないかにより テーブル2のオブジェクト(テキスト、ラジオボタン、チェックボタン)の内容を全てクリアしたいのです。 テキストは中身を消して、ラジオボタン、チェックボタンはチェックを はずしたいということです。 テーブル1はそのままで、テーブル2のみ初期状態にしたいのです。 まとめてクリアしたいのですが、出来ないのでしょうか?

  • 二重投稿防止

    いつもお世話になっております。 現在PHPで開発を行なっております。 form タグに OnSubmit をつけて二重投稿を防止しようと思ったのですが OnSubmit をつけるとエラーチェックを通ってくれません。 簡易的なものでいいので、二重投稿を防止いたいと思います。 何かアドバイス等お願いいたします。 よろしくお願いいたします。 test.php ----------------------------------------- <? if ($_SERVER['REQUEST_METHOD'] == 'POST') {  // 確認画面へ  if ($_POST['cfm']) {   // エラーチェック  } } ?> <form name="form1" method="post" action="test.php enctype="multipart/form-data" OnSubmit="document.form1.cfm.disabled=true;return true;">  <input name="name" type="text" value="<?= $_POST['name'] ?>">  <input name="cfm" type="submit" value="確認画面へ"> </form> ----------------------------------------- <環境> PHP:5.2.5

    • 締切済み
    • PHP
  • QuickFormのradioボタンでエラーが出る

    require_once("HTML/QuickForm.php"); $form = new HTML_QuickForm(); $ques[] = &HTML_QuickForm::createElement('radio', null, 'Yes', 'Yes', '1');←”ここでエラーがでる” $ques[] = &HTML_QuickForm::createElement('radio', null, 'No', 'No', '2'); $form->addGroup($ques, 'ques'); $form->addRule('ques', '入力してください。', 'required', null, 'client'); if ($form->validate()){ $form->freeze();} $form->addElement('submit','submit', '送信'); require_once("HTML/QuickForm/Renderer/ArraySmarty.php"); $renderer= new HTML_QuickForm_Renderer_ArraySmarty($smarty); $form->accept($renderer); $smarty->assign('form', $renderer->toArray()); $file = 'test.tpl'; $smarty->display($file) ----------------------------------------------------------- HTML_QuickFormでラジオボタンをチェックしたいのですが、「←”ここでエラーがでる”」の部分で、Fatal error: [] operator not supported for strings in /virtual/パス/test.php on line 19←ここの数字はエラー行 のエラーがでます。 どうやったら、エラーを回避できるか分かりません。 よろしくお願いします。

    • 締切済み
    • PHP
  • データの内容によって表示させる画面を切り替えるには?

    Javaを使った開発をしています。 <form name="form1234" method="post" action="/xxxx/xxxx" onsubmit="xxxxx"> HTMLフォームで5個のラジオボタンがあり、選択したボタンによって表示させる画面を変更させたい(上記action= の内容を変えたい)のですがうまくいきません。よい方法があればおしえてください。 HTML側でのコントロール自体、無理でしょうか?

    • ベストアンサー
    • HTML
  • フォームのradioを使ってsubmitした内容を次の画面のradioボタンに反映するには?

    フォームのradioボタンを使ってsubmitしたときに、次の画面で最初からradioボタンの前頁で選択したところにチェックを入れておくにはどのようにすればよいのでしょうか。用途としては、データベースをmysqlとphpでつくっており、修正画面をつくっておるのですが、元データの内容に合わせて最初からradioボタンにチェックをいれたいとおもい、質問させていただきました。よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • HTMLでボタンを設置して、ボタンが押されたらHTMLの内容を書き換え

    HTMLでボタンを設置して、ボタンが押されたらHTMLの内容を書き換えたいのですが。 HTMLでできるのでしょうか? いくつかのリンクがあり、それぞれ横にチェックボックスが付いています。 チェックボックスがONの場合そのリンク表示を削除したいのです。

    • ベストアンサー
    • HTML
  • フォームボタン

    PHPとHTMLの違いが今イチよくわかっていないんですが、HPを作成している者です。 業者の方が作ったPHPやHTMLファイルを引き継いで、それを元に更新したり、自分で新たにHTMLファイルを作って更新したりしています。 GoLiveを使っているのですが「ボタン」のリンクの変更の仕方がわかりません。ヘルプを読んでみたりもしましたが、載っていないようなので質問させてもらいました。 あるページに「フォーム領域」を使っていたところがあったので真似てやってみたのですが、サーバーにおいてブラウザでみるとリンク先をフォーム領域で変更したはずなのに前のリンクのままでした。なにか特別な方法があるのでしょうか? リンク先というのがPHPファイルなのですが、自分で少し変更したPHPの会員種別選択(register_xxx.php){登録ボタンを押す}→会員情報登録(register_info_input.php)にしたいのですが、ブラウザで見ると会員種別選(register_xxx.php){登録ボタンを押す}→以前の設定PHPファイルにいってしまいます。(会員種別選択を2回繰り返す形になってしまっています。)それと、会員情報入力ページが本来なら入力項目が15ぐらいあるのに4項目しか表示されなくなってしまいました。 どうしたら良いのか教えてください。

    • ベストアンサー
    • CSS

専門家に質問してみよう