2012-01-09 24 views
0

PHPの$ _POST配列のプログラム変更を無視して、私は$ _POST配列にその「addrecord」ボタンの値をリセット:Firefoxは、私は、フォームが押されて「addrecord」ボタンを提出検出

if(array_key_exists('addrecord', $_POST)) 
{ 
    var_dump($_POST); 

    if($_POST['addrecord'] == "ADD RECORD") 
    { 
     $_POST['addrecord'] = "Handled already."; // prevents a 'reload' 
                // from adding the same record again 
     // now do the 'addrecord' -- just once -- to the database 
    } 
    else 
    { 
     // yay -- we avoided adding the same record on a browser reload 
    } 
} 

Firefox 8の 'reload'ボタンをクリックすると上記のvar_dumpが私に表示されます ポスト配列の 'addrecord'の値が "Handled already"の文字列ではありません。 - それはまだ "ADD RECORD"です。

  • ユーザーが「addrecord」ボタンをクリックしたときに、サーバーがPOSTアレイとaddrecordボタンが値 は「RECORDを追加」している取得します - ここに私のフォーム上の録音ボタンを追加します:

     <input type="submit" name="addrecord" value="ADD RECORD" /> 
    
  • は、サーバー側では、私は「RECORDの追加」「addrecord」の値をされて見て、私はに「RECORDを追加」からPOST配列の「addrecord」要素 を変更する「既に処理さ。」

  • となり、サーバーは「レコードが追加されました!」というブラウザに新しいページを送信します。

は、だから、私はそれが「すでに取扱」に変更したため、「RECORDを追加」もはや「addrecord」要素のPOST配列の値のように思えるん。ユーザーがフォームの「レコードを追加」ボタンをもう一度押すのではなく、ページをリロードするだけの場合 - ブラウザはPOST配列を「Handled already」から「ADD RECORD」にどのように再設定できますか?なぜサーバーがページのリロードを受け取った場合、POST配列の 'addrecord'要素は以前に設定した値を失いますか「処理済」。

ブラウザで 'reload'をクリックすると、var_dumpが私に伝えます。つまり、POSTアレイの 'addrecord'値は、ユーザーが行ったとしても「ADD RECORD」に戻りますフォームのレコード追加ボタンをクリックしないでください。

なぜですか?ブラウザーには、サーバー上のPOST配列を埋めるために使用される値のキャッシュコピーがあるので、サーバー上のPHPでPOST配列を変更しても、ブラウザーはすべての古いフォームの値?

+1

少し参考http://en.wikipedia.org/wiki/Post/Redirect/Get – Yoshi

+0

+1よろしくお願いします。 – wantTheBest

答えて

1

はい、ブラウザはPOSTデータを覚えており、キャッシュされた情報はフォーム処理PHPコードで書いたものの影響を受けません。ユーザーがリロードを押すと、同じPOSTデータが再度送信されます。

リロードで同じデータを再度挿入しないようにする別の方法として、データベース列に「サブミッション識別子」列を含める方法があります。ユーザが記入するフォームを表示するときは、一意の識別子を持つ隠しフォームフィールドを含めます。PHPのuniqid()関数またはmicrotime()関数を参照してください。次に、あなたのいずれかのことができます。

a)はその提出IDとフォームが既に提出され、または

Bされているかどうかを確認するために、INSERTコマンドを送信する前に、データベースを照会)は、単にその新しい列にUNIQUEインデックスを追加します重複したレコードを作成することはできません。

+0

私はあなたに+1を与え、あなたの答えも受け入れました。私の良さは、助けになり、不思議な答えでした。それで、私が正しいと思うように、再ロード時のブラウザはPOST配列に再び現れる同じフォームデータを送信します。ありがとうございます - 'GIYF'と 'ああ、そんなに悲しいことを尋ねられるのは私です' snarkinessは私がスタックオーバーフローから遠ざかるようにします。問題に反応した人が質問に答えてくれることを願っています - あなたがしたことです - ありがとうSherlock42。 – wantTheBest

1

PHPで$ _POSTを設定すると、PHPが表示する内容を上書きします。 FirefoxはPOSTパラメータの変更について通知されることはありません。

あなたが達成しようとしていることは、ここでは非常に頻繁に、精巧に答えられています。 GIYF。

関連する問題