【发布时间】:2012-02-22 10:02:51
【问题描述】:
我设置的条件是
if(isset($_POST)){
//do some action
}
第一次检查条件时,它工作正常,但如果用户刷新页面,它会第二次执行操作。我应该如何检查?
【问题讨论】:
-
不明白你的问题?
-
我认为 stackoverflow 本身必须有数千个答案......
我设置的条件是
if(isset($_POST)){
//do some action
}
第一次检查条件时,它工作正常,但如果用户刷新页面,它会第二次执行操作。我应该如何检查?
【问题讨论】:
您可以在数据库中插入或更新后取消设置提交按钮,例如 unset($_POST['btn_submit']);
【讨论】:
$_POST会被重新填充。
$_POST。 3. PHP 更新数据库。 4. PHP 删除$_POST 的数据。 5. 用户通过刷新重新提交表单数据。 5. PHP 重新填充 $_POST 与用户提交的数据。 6. PHP 更新数据库。 7. PHP删除$_POST中的数据。
为防止重复发布,通过使用浏览器刷新,请考虑此解决方案。
【讨论】:
使用the Post-Redirect-Get pattern。
刷新只会重新加载第 4 步返回的页面,无需重复第 2 步。
【讨论】:
一般来说,表单处理可以分为3个步骤:
重定向是为了避免表单在刷新时再次提交。
因此,在您的情况下,在处理之后,您可以再次将用户重定向回相同的表单。如果他刷新页面,表单将不会再次提交,因为浏览器被重定向并且最后一个操作是GET请求,而不是POST。
要在 PHP 中进行实际重定向,您可以使用 header 函数:
if(isset($_POST)) {
...
// redirect back to the form
header("Location: form.php");
}
【讨论】:
Location HTTP 响应标头采用绝对 URI,而不是相对 URI。不要依赖浏览器纠错。 (至少有一个浏览器会在向用户抱怨错误时重定向)。
操作成功后,可以通过重定向页面来解决刷新问题
if(isset($_POST))
{
// do some action
// redirect to same page so that values will not get posted again
header("location:samepage.php");
}
【讨论】:
Location HTTP 响应标头采用绝对 URI,而不是相对 URI。不要依赖浏览器纠错。 (至少有一个浏览器会在向用户抱怨错误时重定向)。