为什么PHP变量仍然没有定义


Why is PHP varible still undefined?

我正在处理三个PHP文件。其中两个用作网页,另一个在外部服务器端脚本中。服务器端脚本包含在两个网页文件中,我想做的是在第一页上有一些按钮,根据点击的按钮,用数据填充第二页,然后重定向到它。

使用下面的代码,我们的想法是点击按钮,找出点击了哪个按钮,然后调用函数来运行正确的查询并设置所需的变量。我不明白为什么没有设置变量。

感谢所有看到这个的人!

首页按钮(index.php):

<input type="submit" id='details' name='details' value='Submit'/>

加载页面时变量未定义的第二页:

<h4><?php echo $selected_button; ?></h4>

外部脚本:

function detailBuilder(){
    $selected_button = "Option One";
    //header('Location: details.php'); if this is here, the page still redirects but the variable doe not get set
    //More will happen here once it works
}
if(isset($_POST['details'])){
    detailBuilder();
    header('Location: details.php');
}

正如一些人之前指出的,您重定向到另一个文件。在这一点上,所有本地定义的变量都消失了——您不再可以访问它们。

查看PHP文档中的PHP会话。会话将允许您将这些变量从一个请求转移到另一个请求。但是,只有当您运行某种形式的Web服务器时,会话才会起作用。

更新:还需要注意的是,正如其他人(再次)指出的那样,$selected_button="选项一"将仅适用于函数detailBuilder的"范围"内。因此,调用detailBuilder()会在函数内创建一个名为$selected_button的变量,然后立即丢弃它

更新2.0:很抱歉有这么多更新。以下是设置会话的示例:

更新3.0:稍微更新了代码

第一件事。确保您已开始会话。

session_start();

您必须在任何php脚本开始时调用session_start()!这意味着每次执行的第一个文件的顶部应该有session_start()。

外部脚本:

$_SESSION["selected_option"] = "Option One";

最初未定义的脚本:

$selected_details  = $_SESSION["selected_option"];
?>
<h4><?=$selected_details?></h4>