“header()” php 函数是不是取消设置全局变量?
Posted
技术标签:
【中文标题】“header()” php 函数是不是取消设置全局变量?【英文标题】:Does "header()" php function unset global variables?“header()” php 函数是否取消设置全局变量? 【发布时间】:2011-11-08 16:13:05 【问题描述】:如果并非所有字段都以正确的方式填写,脚本将发出错误信号并重定向回同一页面,其中 header 函数使用 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 数组中的全局变量吗?
你知道我可以采用什么样的解决方案吗?也许是会话?
提前致谢,
马特奥!
【问题讨论】:
【参考方案1】:$_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;
【讨论】:
会话开始后我应该什么时候销毁它?什么时候字段都填写成功了? @Matteosession_destroy()
在脚本执行完成时被隐式调用。除非您有理由在脚本完成之前关闭会话,否则您不需要调用它。 session_destroy()
不删除会话变量。我只是断开当前脚本与会话的连接。
@Matteo 请参阅上面关于在使用后取消设置 $_SESSION
存储的帖子【参考方案2】:
有人知道标头函数是否取消设置 $_REQUEST 数组中的全局变量吗?
不,它没有。 Cookie ($_COOKIE
) 将保留。
显然$_GET
将包含您在重定向中的任何内容(例如:$_GET['error_empty'] = 'yes') and
$_POST` 将是空的,因为您没有发布。
所以$_REQUEST
将是$_COOKIE
和您设置的新$_GET
参数的组合。
无论如何,您可能不应该使用$_REQUEST
。准确指定您希望请求参数的位置...
【讨论】:
【参考方案3】:它没有,但它确实提出了一个新请求。新请求意味着新的$_REQUEST
不一定包含所有旧数据。 $_COOKIE
仍然存在,但 $_GET
和 $_POST
将是新的意思,$_REQUEST
将反映这一点。 ($_FILES
也将为空,当它不在 `$_REQUEST 中时,它是另一个用户提供的值将被重置)。
如果您想恢复表单,您需要将所有变量放在标题中的url中,或者使用$_SESSION
或setcookie
然后从$_GET
、$_SESSION
或$_COOKIES
.
【讨论】:
所以旧值将无法再访问?这就是为什么如果使用命令 结果将为空?$_FILES
很久以前就从 $_REQUEST
中删除了。
没错。因为$_REQUEST
依赖于浏览器的输入,如果浏览器发出新的请求,那么$_REQUEST
就会被清空。
@Null 我的措辞不好。固定。以上是关于“header()” php 函数是不是取消设置全局变量?的主要内容,如果未能解决你的问题,请参考以下文章