如何在页面之间维护post变量

时间:2013-10-25 19:26:15

标签: php forms post

可能是愚蠢的提问时间:

在许多网站上,当用户提交表单时,会检查信息,如果信息不正确,则会将其重定向回表单,所有/大部分信息仍然完好无损并输入到表单中。例如。他们输入了错误的密码,但在重定向后,他们的用户名在表单中仍然完好无损。我想知道可以做到这一点的最佳方法。

我做了一些测试:

post1.php:

<?php
$_POST['user']='name';
header('Location: post2.php');
?>

post2.php:

<?php
if(!empty($_POST['user'])){
    header('Location: post3.php');
    //echo 'post: '.$_POST['user'];
}
else{
    echo 'nope post2.';
}
?>

post3.php:

<?php
if(!empty($_POST['user'])){
    echo 'post: '.$_POST['user'];
}
else{
    echo 'nope post3.';
}
?>

在post1.php上使用表单时,我可以将post3.php发送到echo 'nope post3.',这表明在重定向后post值不会停留。但是,当使用当前版本的post1.php时,我只能将post2.php发送到echo 'nope post2.',这意味着手动设置$ _POST变量不起作用,或者我可以在验证页面上输入{{1}并且它会通过一次重定向来保存post变量。

我知道这可以使用SESSION变量来完成,但我觉得这很快就会变得混乱。

在您评论安全风险之前,我显然不会对任何敏感信息这样做。

TL:博士;在表单验证失败后,如何最好地将变量发送回表单所在的页面?

1 个答案:

答案 0 :(得分:3)

我认为正如你所提到的,在这种情况下使用$ _SESSION更合适。当你提出类似的东西时:

  

$ _ SESSION ['formVariables'] = $ _POST;

然后当你回到form1.php页面时,你可以参考这些变量。

最好的解决方案是在表单的同一页面上进行验证,方法是在表单前加入验证脚本,然后如果所有内容都正确重定向到相关页面。

为什么你想在不同的页面上进行验证而不是形式,有什么特别的共鸣吗?