为什么我看不到我在第一个脚本中设置的请求变量?

时间:2013-03-17 16:39:41

标签: php request superglobals

当我尝试从我在第一个脚本中设置的status数组中检索变量$_REQUEST[](然后进行重定向)时,我只看到警告Undefined index: status。这是为什么 ?

<?php
        $_REQUEST['status'] = "success";
        $rd_header = "location: action_script.php";
        header($rd_header);
?>

action script.php

<?php
echo "Unpacking the request variable : {$_REQUEST['status']}";

3 个答案:

答案 0 :(得分:4)

您要找的是sessions

<?php
    session_start();
    $_SESSION['status'] = "success";
    $rd_header = "location: action_script.php";
    header($rd_header);
?>

<?php
    session_start();
    echo "Unpacking the request variable : {$_SESSION['status']}";

请注意,在两个页面的顶部添加了session_start()。正如您在我发布的链接中所读到的那样,这是必需的,并且必须在您希望使用会话的所有页面上。

答案 1 :(得分:4)

这是因为您的header()语句会将用户重定向到全新的网址。任何$_GET$_POST参数都不再存在,因为我们不再位于同一页面上。

您有几个选择。

1-首先,您可以使用$_SESSION在页面重定向中保留数据。

session_start();
$_SESSIONJ['data'] = $data; 
// this variable is now held in the session and can be accessed as long as there is a valid session.

2-在重定向时将一些获取参数附加到您的URL -

$rd_header = "location: action_script.php?param1=foo&param2=bar";
header($rd_header);
// now you'll have the parameter `param1` and `param2` once the user has been redirected.

对于第二种方法,this documentation might be usefull。这是一种从名为http_build_query()的数组创建查询字符串的方法。

答案 2 :(得分:2)

您正在寻找的可能是发送GET参数:

$rd_header = "Location: action_script.php?status=success";
header($rd_header);

可以在action_script.php中通过:

检索
$_GET['status'];

在这种情况下,您并不真正需要会话或Cookie,但您必须考虑用户可以轻松编辑GET帖子的事实。