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

Php 如何在页面之间维护post变量,php,forms,post,Php,Forms,Post,可能是愚蠢的提问时间: 在许多网站上,当用户提交表单时,会检查信息,如果信息不正确,会将其重定向回表单,所有/大部分信息仍保持不变并输入表单。例如,他们输入了错误的密码,但在重定向后,他们的用户名在表单中仍然完好无损。我想知道做这件事的最佳方法 我做了一些测试: post1.php: <?php $_POST['user']='name'; header('Location: post2.php'); ?> post2.php: <?php if(!empty($_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回显'nope post3'。这表明在重定向后,post值不会保留。但是,当使用当前版本的post1.php时,我只能让post2.php回显“nope post2.”,这意味着手动设置$\u POST变量不起作用,或者我可以在验证页面上输入$\u POST['var']=$\u POST['var'],它将通过另一个重定向保存POST变量

我知道这可以通过会话变量来实现,但我觉得这很快就会变得一团糟

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


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

正如您所提到的,在这种情况下,使用$\u会话更合适。当你把这样的东西:

$\u会话['formVariables']=$\u POST

然后,您可以在返回form1.php页面时引用这些变量

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


有什么特别的原因让你想在不同的页面而不是表单上进行验证吗?

你没有在第一页上发布任何内容,你只是在没有任何发布数据的情况下重定向到post2.php。你需要更改此$_post['user']='name';to$name=$\u POST['user'];首先,为什么使用会话变量会变得混乱?这是做你想做的事情的明显和常见的方式。what@Fred ii-说你不能设置$\u POST变量这是PHP引擎中的一个全局变量,你只能读取。只有http post协议设置了它的值。Weel当你想做一篇文章时,这里有一个如何做的链接:如果我在同一页上做验证,我的失败行会有什么不同?我目前设置了SESSION['errormessage']=“您的密码错误”,然后重定向到原始页面。如何在不重定向的情况下终止脚本并动态更改页面?当您进行验证并设置$\u会话['errormessage']时,您可以创建如下表单: