-1

可能是愚蠢的提问时间:

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

我做了一些测试:

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 变量不起作用,或者我可以在验证页面上输入$_POST['var']=$_POST['var']它会通过一个保存 post 变量更多重定向。

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

在您评论安全风险之前,我显然不会对任何敏感信息进行此操作。

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

4

1 回答 1

3

我认为正如您提到的那样,在这种情况下使用 $_SESSION 更合适。当您放置以下内容时:

$_SESSION['formVariables'] = $_POST;

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

最好的解决方案是在与表单相同的页面上进行验证,方法是在表单之前包含验证脚本,然后如果一切正确,则重定向到相关页面。

为什么要在与表单不同的页面上进行验证有什么特别的原因吗?

于 2013-10-25T19:34:22.090 回答