可能是愚蠢的问题时间:
在许多网站上,当用户提交表单时,会检查信息,如果不正确,则会将其重定向回表单,所有/大部分信息仍然完好无损并输入到表单中。 例如,他们输入了错误的密码,但在重定向后,他们的用户名在表单中仍然完好无损。我想知道可以做到这一点的最佳方法。
我做了一些测试:
后1.php:
<?php
$_POST['user']='name';
header('Location: post2.php');
?>
帖子2.php:
<?php
if(!empty($_POST['user'])){
header('Location: post3.php');
//echo 'post: '.$_POST['user'];
}
else{
echo 'nope post2.';
}
?>
后3.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 变量不起作用,或者我可以在验证页面上输入 $_POST['var']=$_POST['var']
,它将通过另一个重定向保存 post 变量。
我知道这可以使用 SESSION 变量来完成,但我觉得这可能会很快变得混乱。
在您评论安全风险之前,我显然不会对任何敏感信息这样做。
TL:博士;表单验证失败后,如何最好地将变量发送回表单所在的页面?
我认为正如你提到的,在这种情况下使用 $_SESSION 更合适。当你把这样的东西:
$_SESSION['表单变量'] = $_POST;
然后,当您返回form1.php页面时,您可以引用这些变量。
最好的解决方案是在表单之前包含验证脚本,然后在表单之前包含验证脚本,然后在所有内容正确的情况下重定向到相关页面。
有什么特别的原因,为什么你想在与表单不同的页面上进行验证?