刷新php时重复提交

pu82cl6c  于 2023-01-16  发布在  PHP
关注(0)|答案(5)|浏览(135)

我正在尝试修正我的脚本中的双重提交问题。当我按提交键时,它只会更新mysql一次(这正是我想要的)。然而,当我点击刷新键时,它会再次更新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>
ohtdti5x

ohtdti5x1#

刷新页面时-POST再次发送
有些浏览器实际上会警告您这种情况。
为了防止这种情况发生,我会:

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

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

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

7fhtutme2#

我使用会话来防止转发。

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.
 }
taor4pac

taor4pac3#

这是标准行为:当你重新加载页面时,如果它被发布了,你的浏览器会重放同样的请求(使用POST)。
要避免这种情况,您可以使用重定向到同一页面,其中:

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

这将通过get请求重新加载页面。这将防止重复发布。

lmyy7pcs

lmyy7pcs4#

当你刷新这页.浏览器发布所有的数据again. so-同样的事情再次发生克服这之后做某事重定向浏览器到相同的页again一次象这样

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

         header("location:table.php");
    }
utugiqy6

utugiqy65#

我通常不担心这一点,只要用户不重新张贴,除非他们想。但是,如果你想禁止它,你可以使用一个nonce
http://en.wikipedia.org/wiki/Cryptographic_nonce

相关问题