2012-01-16 19 views
1

PHPページを更新するときにフォームを再処理しないようにする方法はありますか?私はそれらに挿入機能を持つPHPファイルへのリンクをリフレッシュするときにフォームを再送信しないようにしたいと思います。たとえば、新しいノートのために、各ページの上部にあるユーザーが書いた一連のメモを処理しています。明白なヘッダー関数を持つ別のPHPファイルを作成することに加えて、それを行う別の方法がありますか?PHPページでフォームを再送信しないようにする

答えて

14

Post-Redirect-Get Patternを使用してください。

  1. 受け入れるデータは
  2. 問題POSTリクエストにGET要求をリダイレクト応答
  3. プロセスを受け入れ
  4. 号200応答

あなたがからのデータを表示する必要がある場合送信されたものは、リダイレクト先のURLのクエリ文字列などに行IDなどを含めます。

+0

ああ、毎日新しい何かを学んでください:) –

+0

リクエストを受け取り、200の応答を出すことはどういう意味ですか? –

+0

ブラウザは「GET/url/you/redirected/to HTTP/1.1」というリクエストを発行し、サーバーは「HTTP/1.1 200 OK」、その他のヘッダーといくつかのコンテンツで応答します。 – Quentin

1

最も適切な方法は、フォームを処理した後にheader("location: form.php");呼び出しを行うことです。それはフォームページにリダイレクトされ、リフレッシュすると、ブラウザはフォームデータを再送信しません。

また、受信したデータを既に処理しているかどうかを確認することもできますが、それでもデータを再送信するというブラウザの警告メッセージが表示されます。

誰かが戻るボタンを使用し、誤って[送信]を再度クリックした場合にのみ、両方を行うことがあります。

1

最初にフォームを処理するときにフラグを設定するだけで、後で確認して再処理を中止できます。セッション変数またはクッキーは正常に動作します。

1

ノンスを1度だけ使用できるページにノンスを入れると、同じノンスが入っていればページの挿入はできません。

1

フォームの処理後にユーザーを新しいページにリダイレクトします。

フォームはdo-something.phpへのPOSTリクエストです。私は入力データをチェックし、データが有効であればデータを処理し、do-something.php?somethingdoneにリダイレクトします。したがって、ユーザーはPOST要求を再送しなくてもF5を押すことができます。

関連する問題