2011-09-01 98 views
5

我开发PHP脚本包含HTML表单。“header()”php函数是否取消设置全局变量?

如果不是所有字段填写正确的方式脚本会发出错误信号,并重定向回用头功能相同的页面与get方法设置错误变量是:

header("Location: registration_page.php?error_empty=yes"); 

我脚本有一个错误处理部分,其中突出显示包含错误的字段,但我想保持字段的值正确填充。

我实现这个功能,因为我在这等问题发现:

How can I keep a value in a text input after a submit occurs?

但问题是,当页面重新打开表将不包含旧值。

我的问题是:没有任何人知道,如果头功能会取消$ _REQUEST数组中的全局变量?

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

在此先感谢,

Matteo!

回答

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; 
+0

开始会话的时候应该销毁它吗?当字段全部被成功填写? – Matteo

+1

@Matteo'session_destroy()'在脚本执行完成时被隐式调用。除非您有理由在脚本完成之前关闭会话,否则无需调用它。 'session_destroy()'_不去除会话变量。我只是将当前脚本从会话中断开。 –

+0

@Matteo在使用之后,请参阅上面关于取消设置'$ _SESSION'存储的文章的附加内容 –

3

有没有人知道如果头函数取消$ _REQUEST数组中的全局变量?

不,不。 Cookies($_COOKIE)将保留。

显然$_GET将包含任何你必须在重定向(如:$_GET['error_empty'] = 'yes') and $ _POST`将是空的,因为你不张贴

所以$_REQUEST将是$_COOKIE组合和新的$_GET参数你。设置。


你可能不应该使用$_REQUEST无论如何,正是指定您希望您的请求参数是...

2

它没有,但它确实提出了新的要求。新的请求意味着一个新的$_REQUEST,它不一定包含所有的旧数据。 $_COOKIE将仍然存在,但$_GET$_POST将成为新的含义$_REQUEST将反映这一点。 ($_FILES也将是空的,虽然它不在$ _REQUEST中,但它是用户提供的另一个值将被重置)。

如果你想恢复的形式,你需要要么把所有的变量在url中的标头,或使用$_SESSIONsetcookie,然后从$_GET$_SESSION$_COOKIES恢复。

+0

所以旧值将无法访问了,这就是为什么如果使用命令 ? 结果会是空的? – Matteo

+0

很久以前''_FILES'已从'$ _REQUEST'中移除。 – NullUserException

+1

没错。因为'$ _REQUEST'取决于来自浏览器的输入,如果浏览器发出新的请求,则$ _REQUEST被清空。 – cwallenpoole