【发布时间】:2023-03-27 12:20:02
【问题描述】:
有没有办法在我刷新 php 页面时避免重新处理表单?在刷新带有插入功能的 php 文件的链接时,我想防止重新发送表单。例如,我正在处理用户在每页顶部写的一系列笔记以获取新笔记。除了明显地创建一个带有标头函数的单独 php 文件之外,还有其他方法吗?
【问题讨论】:
标签: php
有没有办法在我刷新 php 页面时避免重新处理表单?在刷新带有插入功能的 php 文件的链接时,我想防止重新发送表单。例如,我正在处理用户在每页顶部写的一系列笔记以获取新笔记。除了明显地创建一个带有标头函数的单独 php 文件之外,还有其他方法吗?
【问题讨论】:
标签: php
如果您需要显示提交内容中的数据,请在(例如)您重定向到的 URL 的查询字符串中包含行 ID 或类似内容。
【讨论】:
$_POST 中没有数据)。
最好的方法是在处理完表单后拨打header("location: form.php"); 电话。这会将您重定向回表单页面,如果您刷新,浏览器将不会重新发送表单数据。
或者,您可以检查您是否已经处理了收到的数据,但这仍然会给您一个浏览器警告消息,提示您将重新发送数据。
您可以同时使用这两种方法,以防有人使用后退按钮并不小心再次单击了提交。
【讨论】:
只需在您第一次处理表单时设置一些标志,以便稍后检查并中止重新处理。会话变量或 cookie 可以正常工作。
【讨论】:
您可以将一个 nonce 放入只允许使用一次的页面中,这样如果您看到相同的 nonce 进入,您就不会插入页面。
【讨论】:
我在处理完表单后将用户重定向到一个新页面。
该表单是对do-something.php 的 POST 请求。我检查输入数据,如果验证通过,我会处理数据并重定向到do-something.php?somethingdone。因此,用户可以在不重新发送 POST 请求的情况下按 F5。
【讨论】:
我尝试使用 header("Location:..."), $_POST = array(), unset($_POST),但是(我知道为什么)它们在我的 php 页面中不起作用。
所以,我所做的,我只是用了
echo '< script>window.location.replace("http://.../this.php")</script>'
?效果很好!可能不是个好主意,我正在学习 PHP 第 4 周。
【讨论】: