2011-08-16 71 views
3

我想改正我的脚本中双提交的问题。当我按提交它只更新MySQL一次(这是我想要的)。但是,当我刷新它再次更新MySQL。一旦刷新按钮被击中,似乎忽略if语句。我会怎么做,以阻止这种刷新时双提交php

这里是我的代码

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> 

回答

7

当您刷新页面 - 在POST发送AGAIN

一些浏览器实际上是警告你这种事情发生。

为了防止我做:

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> 
+0

谢谢你不仅是在帮助我,但给我解释为什么 – Aaron

+0

@Aaron - 没问题^ _^ – Neal

+0

我宁愿形式使用CSRF令牌比一个提交,但我创建2请求不得不说这是一个相当整洁和容易实施的伎俩。也许死();在header()之后; ? – edorian

1

当你刷新页面。浏览器再次发布所有数据。于是同样的事情再次发生这是一个标准的行为做事后再次曾这样

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

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

克服这个浏览器重定向到同一页:当你重新加载页面,如果它被张贴,您的浏览器重播相同的请求(与POST)。

为了避免这种情况,您可以使用重定向到同一页面,使用:

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

这将刷新页面,通过GET请求。这将防止双重帖子。

4

我使用一个会话从重新发布保持。

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