“header()”php函数是否取消设置全局变量?

时间:2011-09-01 19:21:28

标签: php html forms post get

我正在开发一个包含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数组中的全局变量?

你知道我可以采用什么样的解决方案吗?也许会话?

提前致谢,

利玛!

3 个答案:

答案 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中,或者使用$_SESSIONsetcookie然后从{{1}恢复},$_GET$_SESSION