「みんな教えて! 選手権!!」開催のお知らせ

フォームのサブミット後にプログラムが走るようになっている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']) { 処理 }
?>

A 回答 (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'])を
行わないといけない場合は、
メタタグのリフレッシュを使うといいかもしれません。
    • good
    • 0
この回答へのお礼

ありがとうございます!
キャッシュ関係かと色々やっていたのですが、そうではなかったのですね。。今回はPOSTの結果を表示する処理なのでリダイレクトは無理なようです。ありがとうございます。すごく理解できました!

お礼日時:2006/06/29 13:23

同じ処理をもう一度実行するからですね。


送信データをセッションに残しておいて、
更新ボタンを押した時にセッションの中身と比べて処理するのはどうでしょう?
    • good
    • 0
この回答へのお礼

ありがとうございます。
比較して同じ場合は処理をせずリダイレクトで、というようなやり方で試してみたいと思います。ありがとうございます!

お礼日時:2006/06/29 13:26

更新ボタンを押す=前ページのsubmitを再度実行する


です。
そのせいで何かデータが重複してしまったりするのであれば
チェック処理を絡ませれば良いです。
    • good
    • 0
この回答へのお礼

ありがとうございます。
大変参考になります!

お礼日時:2006/06/29 13:24

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


おすすめ情報