- ベストアンサー
フォーム送信後の更新ボタンでも$_POST変数が初期化されない
フォームのサブミット後にプログラムが走るようになっているtest.phpがあるのですが、フォーム送信後に更新ボタンを押しても再度ポストされるようになってしまっています。 ブラウザの更新ボタンを押したときには、ポストせずにフォームをクリアしたいのですが、どうすればできますでしょうか? <form method="post" action="<?php print($_SERVER['PHP_SELF']); ?>"> <input type=text name=aaa> <input type="submit" name="submit" value="submit"> </form> <?php if($_POST['submit']) { 処理 } ?>
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
fabuさん、こんにちは。 > フォームのサブミット後にプログラムが走るようになっているtest.phpがあるのですが、フォーム送信後に更新ボタンを押しても再度ポストされるようになってしまっています。 これはブラウザの仕様だと思います^^; 更新ボタンを押したときに「送信ボタンを押したとき」 をもう一度実行しています。 私の場合は、送信されたときの処理をどんな出力よりも上で行い、 処理後にheader()で自分自身のページへリダイレクトするようにしています。 これでページを開いた最初の状態に戻ります。 <?php // header()でリダイレクトするので // どんな出力よりも先に行う。 if($_POST['submit']) { /* 処理 */ header("Location: {$_SERVER['PHP_SELF']}"); exit; } ?> <form method="post" action="<?php print($_SERVER['PHP_SELF']); ?>"> <input type=text name=aaa> <input type="submit" name="submit" value="submit"> </form> どうしても出力後にif($_POST['submit'])を 行わないといけない場合は、 メタタグのリフレッシュを使うといいかもしれません。
その他の回答 (2)
- tacfore
- ベストアンサー率45% (5/11)
同じ処理をもう一度実行するからですね。 送信データをセッションに残しておいて、 更新ボタンを押した時にセッションの中身と比べて処理するのはどうでしょう?
お礼
ありがとうございます。 比較して同じ場合は処理をせずリダイレクトで、というようなやり方で試してみたいと思います。ありがとうございます!
- めとろいと(@naktak)
- ベストアンサー率36% (785/2139)
更新ボタンを押す=前ページのsubmitを再度実行する です。 そのせいで何かデータが重複してしまったりするのであれば チェック処理を絡ませれば良いです。
お礼
ありがとうございます。 大変参考になります!
お礼
ありがとうございます! キャッシュ関係かと色々やっていたのですが、そうではなかったのですね。。今回はPOSTの結果を表示する処理なのでリダイレクトは無理なようです。ありがとうございます。すごく理解できました!