避免在php页面上重新发送表单

时间:2012-01-16 16:12:23

标签: php

当我刷新php页面时,有没有办法避免重新处理表单?我想在刷新带有插入功能的php文件的链接时阻止重新发送表单。例如,我正在处理用户在每页顶部写的一系列笔记,以获得新笔记。除了明显创建一个带头文件功能的单独的php文件之外还有另一种方法吗?

6 个答案:

答案 0 :(得分:15)

使用Post-Redirect-Get Pattern

  1. 接受发布请求
  2. 处理数据
  3. 发出重定向回复
  4. 接受获取请求
  5. 发出200回复​​
  6. 如果您需要显示已提交内容的数据,请在(例如)您重定向到的网址的查询字符串中包含行ID或类似内容。

答案 1 :(得分:1)

最好的方法是在处理表单后进行header("location: form.php");调用。这会将您重定向回到表单页面,如果刷新,浏览器将不会重新发送表单数据。

或者,您可以检查您是否已经处理了收到的数据,但这仍然会向您发出浏览器警告消息,表明您将重新发送数据。

您可以同时执行这两项操作,以防有人使用后退按钮并意外地再次单击“提交”。

答案 2 :(得分:1)

在第一次处理表单时设置一些标志,以便您可以检查它并稍后中止重新处理。会话变量或cookie可以正常工作。

答案 3 :(得分:1)

您可以将一个随机数放入只允许使用一次的页面中,这样如果您看到相同的随机数,则不要插入页面。

答案 4 :(得分:1)

我在处理完表单后将用户重定向到新页面。

表单是对do-something.php的POST请求。我检查输入数据,如果它有效,我处理数据并执行重定向到do-something.php?somethingdone。因此,用户可以按F5重新发送POST请求。

答案 5 :(得分:-1)

我尝试使用header(“ Location:...”),$_POST = array(), unset($_POST),但(为什么)他们在我的php页面中不起作用。

所以,我所做的只是使用

echo '< script>window.location.replace("http://.../this.php")</script>'

它的效果非常好!也许这不是一个好主意,我已经在第四周学习PHP。