我正在开发一个包含html表单的php脚本。
如果不是所有字段都以正确的方式填充,脚本将发出错误信号并使用标题函数重定向回同一页面,并使用get方法将错误变量设置为yes:
header("Location: registration_page.php?error_empty=yes");
我的脚本有一个错误处理部分,其中突出显示包含错误的字段,但我想保持字段的值正确填充。
我正在实现此功能,正如我在其他问题中所发现的那样:
How can I keep a value in a text input after a submit occurs?
但问题是,当页面重新打开时,表单将不包含旧值。
我的问题是:是否有人知道头函数是否取消了$ _REQUEST数组中的全局变量?
你知道我可以采用什么样的解决方案吗?也许会话?
提前致谢,
利玛!
答案 0 :(得分:8)
$_COOKIES
将保持不变,但$_POST
&当客户端移动到新页面时,$_GET
将被销毁。如果需要保留它们,则必须先将它们存储到$_SESSION
中,然后再调用重定向。
session_start();
$_SESSION['last_post'] = $_POST;
header("Location: http://example.com");
exit();
// On the redirected page, use the stored POST values and unset them in $_SESSION
session_start();
if (empty($_POST) && isset($_SESSION['last_post'])) {
$post = $_SESSION['last_post'];
unset($_SESSION['last_post']);
}
else $post = $_POST;
答案 1 :(得分:3)
有人知道header函数是否在$ _REQUEST数组中取消设置全局变量?
不,它没有。 Cookie($_COOKIE
)将保留。
显然$_GET
将包含重定向中的所有内容(例如:$_GET['error_empty'] = 'yes') and
$ _ POST`将为空,因为您没有发布。
因此$_REQUEST
将是$_COOKIE
和您设置的新$_GET
参数的组合。
无论如何,您可能不应该使用$_REQUEST
。准确指定您希望请求参数的位置......
答案 2 :(得分:2)
它没有,但确实提出了新请求。新请求表示新的$_REQUEST
,它不一定具有所有旧数据。 $_COOKIE
仍然存在,$_GET
和$_POST
将是新的含义$_REQUEST
将反映出来。 ($_FILES
也将为空,虽然它不在`$ _REQUEST中,但是另一个用户提供的值将被重置。)
如果要恢复表单,则需要将所有变量放入标题中的url中,或者使用$_SESSION
或setcookie
然后从{{1}恢复},$_GET
或$_SESSION
。