フォームデータの再送信 についてお聞きします。

下記の start.php ページから始まります。
<?php
session_cache_limiter('private, must-revalidate');

?>
<form method="POST" action="next.php">
<select name="items" >
<option value="aa">aa</option>
<option value="bb">bb</option>
<option value="cc">cc</option>
</select>

セレクトボックスのデータをPOSTで次のページ("next.php")に渡しています。

 【←】(戻る)ボタンで start.php に戻った後、
【→】(進む)ボタンで next.php を表示する際、下記のメッセージページが表れます。
「フォーム再送信の確認
このウェブページを正しく表示するには、先ほど入力したデータが必要です。...[再読み込み] をクリックしてください。」

これはどういう理由ですか?また、この表示を出さずに次のページに進む方法を教えてください。

よろしくお願いします。

回答の条件
  • URL必須
  • 1人2回まで
  • 13歳以上
  • 登録:2011/05/23 12:44:50
  • 終了:2011/05/30 11:37:18

ベストアンサー

id:mattn No.3

mattn回答回数104ベストアンサー獲得回数232011/05/23 14:35:51

ポイント32pt

http://q.hatena.ne.jp/

※URLはダミー

これはどういう理由ですか?

ブラウザのキャッシュにnext.phpの表示状態が保持されてしまっているからです。

戻るをクリックした事で「next.phpに表示していた内容と整合性が取れなくなったよ」

とブラウザが警告しています。

また、この表示を出さずに次のページに進む方法を教えてください。

session_cache_limiter でキャッシュは無効に出来ます。

ただしキャッシュを無効にしたからといって問題解決になる訳ではありません。

先の画面に進めてしまいます。戻る/進むボタンを使えないようにする根本的な解決方法はありません。

Ajaxを使って1ページ内で画面を遷移(させた様にみえる様に)するか、next.phpでリダイレクトしてしまってPOST行為を消してしまうのも有効です。

※回答の中に間違っている回答がある様なので気をつけて。

id:gdwtseq

ありがとうございます。

ブラウザの仕様だから仕方ないのでしょうか(?)

2011/05/24 21:39:58

その他の回答(3件)

id:Banias No.1

Banias回答回数237ベストアンサー獲得回数192011/05/23 12:55:43

ポイント23pt

これはどういう理由ですか?

FORMタグの "items" の option が選択されていないためです。


また、この表示を出さずに次のページに進む方法を教えてください。

"items" の option を選択してからページを進んでください。

または、選択した値を Cookie に入れておけばできます。


参考 「Cookieの読み書き

id:chinchin-kozou No.2

chinchin-kozou回答回数198ベストアンサー獲得回数72011/05/23 13:20:46

ポイント23pt

PHPで 「Webページの有効期限が切れてます」となる時の傾向と対策

http://fdays.blogspot.com/2010/11/php-web.html

こちらが参考になります。

id:mattn No.3

mattn回答回数104ベストアンサー獲得回数232011/05/23 14:35:51ここでベストアンサー

ポイント32pt

http://q.hatena.ne.jp/

※URLはダミー

これはどういう理由ですか?

ブラウザのキャッシュにnext.phpの表示状態が保持されてしまっているからです。

戻るをクリックした事で「next.phpに表示していた内容と整合性が取れなくなったよ」

とブラウザが警告しています。

また、この表示を出さずに次のページに進む方法を教えてください。

session_cache_limiter でキャッシュは無効に出来ます。

ただしキャッシュを無効にしたからといって問題解決になる訳ではありません。

先の画面に進めてしまいます。戻る/進むボタンを使えないようにする根本的な解決方法はありません。

Ajaxを使って1ページ内で画面を遷移(させた様にみえる様に)するか、next.phpでリダイレクトしてしまってPOST行為を消してしまうのも有効です。

※回答の中に間違っている回答がある様なので気をつけて。

id:gdwtseq

ありがとうございます。

ブラウザの仕様だから仕方ないのでしょうか(?)

2011/05/24 21:39:58
id:a-kuma3 No.4

a-kuma3回答回数4558ベストアンサー獲得回数19032011/05/24 21:47:16

ポイント32pt

form で送信する内容によりますが、回避するだけだったら、form の method を POST → GET にすれば、あのメッセージは出なくなります。

ただ、「form の内容により」と書いたのは、POST にしている意味があるからです。

  • GET にすると、パラメータの内容がログに残る

  • 不用意に複数回送ってはいけないリクエストかもしれない



こういったあたりを無視しても構わないのであれば、method を変えちゃうのがお手軽です。


http://dummy/

id:gdwtseq

参考になります。ありがとうございました。

2011/05/25 18:11:13

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません