2013-12-18 106 views
3

我有一个网页,其中包含一个使用POST方法的表单并引用它提交的同一页面。我正在使用一个PHP包含文件,其中包含在设置提交值时运行的if语句。但是,由于某种原因,在一次提交之后,每次刷新页面时,都会将表单提交之前提交的数据(在刷新页面之前,浏览器会警告此信息)。是什么导致了这种情况,我可能做错了什么?页面刷新导致表单提交

+0

显示一些代码,我们只能推测到那时。 – Julio

+1

这是刷新表单提交结果页面时的预期行为。如果你链接到或导航到的网址而不是刷新你将得到没有提交页面。 –

+0

这是您通过** POST **提交表单时的预期行为,然后刷新 – Leonardo

回答

1

这是预期的。您应该将表单提交给具有唯一URL的处理程序,无论它是查询字符串还是不同的URI。一种解决方案(许多)是改变你的表单操作:

<form action="?action=submit" method="post"> 

,然后在PHP脚本处理表单,然后更改上下文回网址没有查询字符串

if (!empty($_POST['action']) && $_POST['action'] == 'submit') { 
    // do stuff 
    header('Location: '.$_SERVER['SCRIPT_NAME']); 
    die(); 
} 
+0

我会加入处理器,重定向到第三页。否则,如果用户刷新着陆页,他们将再次提交他们的数据。 – Tim

+0

重定向到没有查询字符串的同一页面是“第三页” – sjagr

0

我与我的一个网页有同样的问题。 原因是,当浏览器警告你它会再次提交表单时,这意味着当你点击一个提交按钮时,它会变成同样的东西。

我做了2件事情,以避免它,但我相信有很多其他方式。 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 
} 

?> 

另一个你可以做的事情是将页面重定向到除了处理表单的页面之外的其他页面。我相信这是最安全的。

0

阻止这种情况的另一种方法是将发布数据移至会话,重定向,从会话收集回发并删除会话发布数据。

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 
} 

将此设置为默认设置,您不应该对发布数据有任何问题。
只有文件上传有例外。在这种情况下重定向* *后处理manualy。