Php 页面刷新导致表单提交
我有一个网页,其中包含一个使用POST方法的表单,并引用了提交的同一页面。我使用的是一个包含if语句的PHP include文件,该语句在设置submit值时运行。但由于某些原因,在一次提交之后,每次刷新页面时,它都会使用以前提交的数据提交表单(刷新页面之前浏览器会发出警告)。这是什么原因造成的?我可能做错了什么?这是意料之中的。您应该让表单提交给具有唯一URL的处理程序,不管它是查询字符串还是其他URI。一种(多种)解决方案是更改您的动作形式:Php 页面刷新导致表单提交,php,html,Php,Html,我有一个网页,其中包含一个使用POST方法的表单,并引用了提交的同一页面。我使用的是一个包含if语句的PHP include文件,该语句在设置submit值时运行。但由于某些原因,在一次提交之后,每次刷新页面时,它都会使用以前提交的数据提交表单(刷新页面之前浏览器会发出警告)。这是什么原因造成的?我可能做错了什么?这是意料之中的。您应该让表单提交给具有唯一URL的处理程序,不管它是查询字符串还是其他URI。一种(多种)解决方案是更改您的动作形式: <form action="?action
<form action="?action=submit" method="post">
<input type="hidden" name="action" value="submit" />
...
注意,查询字符串实际上不存在于<代码> $xPOST <代码>中,但我们保留它,因此浏览器不认为它是重定向循环。
< P>我的页面中有一个相同的问题。 原因是当浏览器警告您它将再次提交表单时,这意味着当您单击“提交”按钮时,表单将完全相同 我做了两件事来避免它,但我相信还有很多其他的方法。 1.成功提交表单后,不要让页面再次回显表单。 我的是这样的<?php
if(!isset($_POST['submit'])) {
include(form.php);// you can modify this according to your needs.
} else {
//display your message about what happened with the form.
}
?>
使用这种方法,您的页面将不会继续提交表单,但这不会阻止它在刷新时提交。
2.如果表单已提交,则创建一个控件输入,该输入带有一个值,指示表单已提交。例如,将其放入表单中:
<?=(isset($_POST['submit']))?"" :"<input type-"hidden" name="submit_stat" value="true" />" ; ?>
当您在表单提交时处理表单时,请使用php检查表单,并使脚本按如下方式作用于该变量:
<?php
if($_POST['submit_stat']==true) {
//do not process the form here.
//stop your script
}
?>
您可以做的另一件事是将页面重定向到处理表单的页面以外的其他页面。我相信这是最安全的方法。另一种防止这种情况的方法是将Post数据移动到会话、重定向、从会话收集Post并删除会话Post数据
if(!empty($_POST) && empty($_FILES)){
// move post to session
// redirect to same url (don't forget possible get query)
}else{
// collect post from session
// unset post from session
}
将其构建为默认设置,您应该永远不会遇到post数据问题。只有文件上传例外。在本例中,在*后处理之后手动重定向*。显示一些代码,在此之前我们只能推测。这是刷新表单提交结果页面时的预期行为。如果您链接到或导航到url而不是刷新,您将获得页面而不提交。这是通过POST提交表单然后刷新PRG,PRG时的预期行为!我会添加处理器,重定向到第三页。否则,如果用户刷新您的登录页,他们将再次提交数据。为了简单有效,重定向到没有查询字符串的同一页为“第三页”+1。我刚刚在你的代码中发现了一个在我看来像是打字错误的地方,希望我的更正没问题。@wkille谢谢-看起来社区(不是我)拒绝了它,可能是因为表单方法是
post
,所以可能仍然不起作用。不过,我确实改进了您的建议,并在查询字符串之外添加了隐藏输入,因此它保持为一个唯一的页面,并且浏览器不会抛出“重定向太多”的消息
if(!empty($_POST) && empty($_FILES)){
// move post to session
// redirect to same url (don't forget possible get query)
}else{
// collect post from session
// unset post from session
}