3

スクリプトの二重送信の問題を修正しようとしています。送信を押すと、mysqlは1回だけ更新されます(これが私が望むものです)。ただし、更新を押すと、mysqlが再度更新されます。更新ボタンを押すと、ifステートメントは無視されるようです。これを止めるために私は何をしますか

これが私のコードです

if (isset($_POST['submitButton'])) { 
//do something
 }


<form action = "table.php" method="post">
<label for="submitButton"></label>
<input type="submit" name="submitButton" id="submitButton"
value="Submit Form"/>
</form>
4

5 に答える 5

7

ページを更新すると、投稿が再度送信されます

一部のブラウザは、実際にその発生について警告します。

それを防ぐために:

if (isset($_POST['submitButton'])) { 
//do something

//..do all post stuff
header('Location: thisPage.php'); //clears POST
}


<form action = "table.php" method="post">
<label for="submitButton"></label>
<input type="submit" name="submitButton" id="submitButton"
value="Submit Form"/>
</form>
于 2011-08-16T17:07:37.613 に答える
5

再投稿を防ぐためにセッションを使用します。

session_start();

 if( isset($_SESSION['your_variable']) && 
     $_SESSION['your_variable'] == $_POST['your_variable'] ){
    // re-post, don't do anything. 
 }
 else{
    $_SESSION['your_variable'] = $_POST['your_variable'];
    // new post, go do something.
 } 
于 2012-01-30T19:12:51.087 に答える
2

これは標準の動作です。ページをリロードすると、投稿された場​​合、ブラウザは同じリクエストを(POSTを使用して)再生します。

これを回避するには、同じページへのリダイレクトを使用できます。

 <?php
 header("location:".$mycurrentURl);

これにより、getリクエストを介してページがリロードされます。これにより、二重投稿が防止されます。

于 2011-08-16T17:09:56.963 に答える
1

ページを更新するとき。ブラウザはすべてのデータを再度投稿します。したがって、このようにもう一度ブラウザを同じページにリダイレクトした後、これを克服するために同じことが再び起こります

    if (isset($_POST['submitButton'])) { 
         //do something

         header("location:table.php");
    }
于 2011-08-16T17:09:27.483 に答える
1

私は通常これについて心配することはなく、ユーザーが望まない限り再投稿しないことに依存しています。ただし、禁止したい場合は、ナンスを使用できます。

http://en.wikipedia.org/wiki/Cryptographic_nonce

于 2011-08-16T17:11:00.317 に答える