2012-01-21 14 views
0

私は自分のページ "thePage.php"に次のことを気付きました。私のページのthePage.phpには、ユーザーが自分の名前とメールアドレスを入力して送信ボタンをクリックするフォームがあります。以前のフォーム投稿を破棄するようブラウザに指示します。

1)ユーザーが別のページからリンクをクリックしたためにPage.phpに到達すると、サーバーからthePage.phpが呼び出されます。 、

<div> 
    <a id="logged-in-status" hef="http://mySite/thePage.php"> Click to go to the data entry page</a>  
</div> 

thePageがブラウザに表示された後、サーバーから取得された:ここで は、上のクリックしたときに、サーバーからthePage.phpを取得し、ブラウザに表示し、そのリンクを持っているhtmlですブラウザの「リロード」ボタンをクリックすると、サーバーからリロードされたページが表示されます。

上記のdivは、私のindex.phpランディングページに表示されます。ユーザーが上記のリンクをクリックすると、サーバーからpage.phpが要求され、ブラウザに表示されます。 thePage.phpには「名前と電子メールを入力」フォームがあります。空白、まだ入力されていない、または送信されたフォームを含むthePage.phpがロードされた後、ブラウザの「リロード」ボタンをクリックすると、ページがリロードされます。 「情報を再送信しようとしています」という警告メッセージは表示されません。ただし、ユーザーがフォームデータを入力した場合(または入力しない場合)は、「送信」ボタンを押します。このフォームの最初の送信後、(1)のリロード動作は、上記は失われる。フォームが空白のままで、ユーザーが「提出」ボタンを押しても、ブラウザは内部的に「ダーティビット」を設定しているように見えるので、ブラウザのリロードボタンをクリックすると、ブラウザは「ああ、このページのフォーム - 少なくとも1回は提出されました - フォーム提出の結果を無視し、今から - フォームが1回提出されてから - 私はもはやなりませんページをリロードするだけです。「以前に送信した情報を再送信する」というメッセージボックスが表示されます。「

ここで私がしたいことがあります。私は、ページ上のフォームが提出されたとしても、ブラウザが内部で設定した「汚れたビット」をクリアしたいと思います。私はちょうどクリックしたかのように、ブラウザを上記の(1)私がthePageに導かれた別のページのリンクは、ページ上のフォームが送信されたことをブラウザが「忘れる」ようにします。

これを行う方法が必要です。もしあなたがそれについて考えているなら--Page.phpへのリンクが他の場所からクリックされると、 'ダーティビット'がクリアされ、ページの再読み込みの振る舞いは(上記の(1)のように 're-send info' 2)。

ブラウザーに「ページ外のリンクからthe page.phpへアクセスしたばかりのように見える」というプログラム的な方法はありますか?このページの以前のフォームの投稿はすべて忘れてしまいました。 "

+0

あなたは約200語の単語を失ってしまいました。これを少し簡略化したいかもしれません。 – mrtsherman

+0

私は、ページをリロードするときにPOSTデータを再送することを考えています(たとえばF5)...すべてのブラウザと同じように、そうですか? – madflow

+0

ブラウザの「ダーティビット」の概念がプログラムで公開されている - プログラムで操作できるのか?私はそのページにアンカーリンクを経由してthe pageに到着したかのように、ブラウザが条件(1)に戻るようにしたい。 – wantTheBest

答えて

1

PHPスクリプトでフォームデータを解析したら、代わりにheader()を使用してページに戻してください。これにより、再送データ通知が防止されます。

<?php 
////Parse form 
header("Location: http://Wherever"); 
exit(); 
?> 

フォームを知る必要がある場合

が失敗しただけで $_GETで送信し、それを拾う/正常に送信されました。

?php 
////Parse form 
header("Location: http://Wherever?notice=successful"); 
exit(); 
?> 
+0

+1、ありがとう、ありがとう。ブラウザに「汚れたビットをリセットし、ユーザーがこのページにフォームを投稿したことがないと仮定して、ページを読み込んだと仮定してプログラム的な方法があるかどうかを確かめたいと思っていました。クリックされたこのページへのページ外のリンクへ。 – wantTheBest

+0

現在、このようにブラウザを操作することはできません。 Getを使ったこのポストリダイレクトは、現在、それを実行する最善の方法です。再送信設定のトークンなどを防ぐことができますが、重複した送信について心配する必要はありませんが、メッセージは表示されます。 – Zac

関連する問題