我想我的问题是了解$ _POST处理。
所以我有两个页面可以处理2个表单。第1页要求提供将在第2页中使用的一些信息。提交后,表单操作使用相同的页面,然后在验证时重定向到下一页,但仅在 $ _ GET 变量时处理数据?usersubmit = 1 即可。
<form action="<?=$_SERVER['PHP_SELF']?>?usersubmit=1" method="post" name="form1">
<input type="text" name="field1">
</form>
所以说我有一个名为form1.php的页面。提交后发送给form1.php?usersubmit = 1。该页面现在将发布的数据分配给会话变量,然后通过标题重定向到form2.php('location:form2.php')。
<?
if($_GET['usersubmit']){
if($_POST['field1']){
#if valid then assign session variable and redirect to next form
$_SESSION['field1'] = $_POST['field1'];
header("location:form2.php");
}else{
#if invalid send error message
$error = true;
}
}
?>
我的问题在于用户点击浏览器上的“后退”按钮来编辑上一个表单中的数据。浏览器不会重新发布此数据,只是显示一个空白表单。我不想使用$ _SESSION数据来填写表单,因为我怀疑重新发布方法可能是一个更快,更少问题的修复。
我还尝试了javascript重定向而不是标题,但浏览器非常智能,无法将您发送回想要重定向的页面,因此它无法正常工作。
任何帮助理解这一点将不胜感激。 感谢。
答案 0 :(得分:0)
通常后退按钮将使用与先前位置页面加载时使用的所有相同的get和post变量。服务器端头重定向将不允许您使用后退按钮到达上一页,因为此重定向在服务器端完成。
有两种方法可以使用javascript window.location
进行重定向,这会将您之前的位置放入浏览器历史记录中,因此后退按钮会起作用,而location.replace
也不会在您的历史记录中放置链接,因此不允许您使用后退按钮进入上一页。
或者,您可以使用第二页来处理页面形式......
答案 1 :(得分:0)
此外,您应该在代码中使用htmlentities()。它会关闭安全漏洞(有关详细信息,请参阅http://www.html-form-guide.com/php-form/php-form-action-self.html)。
<form action="<?=$_SERVER['PHP_SELF']?>?usersubmit=1" method="post" name="form1">
应该改为如下所示。
<form action="<?=htmlentities($_SERVER['PHP_SELF'])?>?usersubmit=1" method="post" name="form1">