【问题标题】:Session Variable not sending to next page会话变量未发送到下一页
【发布时间】:2014-04-16 02:14:07
【问题描述】:

当用户点击提交时,我正在尝试为下拉菜单中选择的位置设置会话变量。目标是将此变量传递给另一个 php 页面,以便我可以显示他们选择的下拉选项以及 MYSQL 表中与之关联的两个值。

下面是我的第一个 php 文件中的一段代码。它显示了从 MYSQL 数据库中的值列表创建的下拉列表,以及我尝试为所选选项设置会话变量的位置。

session_start();
<form action="/locationsprocessing.php" method="post">
<select id="locations" name="locations"><? echo $option; ?></select>
<input type="submit" value="Submit" name="submit" id="submit">
</form> 
<?php
if (isset($_POST['submit'])) { 
  $_SESSION['locations'] = $_POST['locations'];
  $_SESSION['animal']   = 'cat';
} 

下面是我在第二页中调用会话变量进行显示的代码。如您所见,我输入了另一个变量用于测试目的。它应该显示“猫”,它确实如此。

session_start();
echo $_SESSION['animal'];
echo $_SESSION['locations'];  

还需要注意,locationsprocessing.php 使用标头运行重定向。但这就是该文件的全部功能。

我错过了什么吗?我经历了无数不同的 tuts 等等,并且一直盯着这段代码。我不明白为什么会这样

【问题讨论】:

  • 您是否在实际设置值的脚本中执行了 session_start() ?并在执行任何输出之前执行此操作?您必须在使用 $_SESSION 的任何地方都这样做。 PHP 无法神奇地及时返回并打开会话,因为您试图访问已在未调用 session_start() 的脚本中设置的会话变量。
  • 很抱歉没有添加该部分。是的,我做了 session_start();在每个带有变量的页面上。我只是忘记在这部分代码中复制并粘贴它。我修改了上面的代码以反映它包含在我的代码中。

标签: php mysql variables session


【解决方案1】:

您需要在需要使用会话的每个页面中启动会话:

<form action="/locationsprocessing.php" method="post">
<select id="locations" name="locations"><? echo $option; ?></select>
<input type="submit" value="Submit" name="submit" id="submit">
</form> 
<?php
if (isset($_POST['submit'])) { 
  session_start();
  $_SESSION['locations'] = $_POST['locations'];
  $_SESSION['animal']   = 'cat';
} 

【讨论】:

  • 我确实有 session_start();在创建或使用变量的每个页面上。
【解决方案2】:

这可能会出错:当您在问题的第一段代码中提交表单时,您将在表单中输入的数据发送到/locationsprocessing.php。您说该文件所做的只是重定向到另一个页面。这意味着在表单中输入的数据实际上已丢失。

我认为你想要做的是从第一段代码中删除表单处理代码,所以只剩下这个:

session_start();
<form action="/locationsprocessing.php" method="post">
<select id="locations" name="locations"><? echo $option; ?></select>
<input type="submit" value="Submit" name="submit" id="submit">
</form>

然后将删除的代码放入/locationsprocessing.php,如下所示:

session_start();
if (isset($_POST['submit'])) { 
  $_SESSION['locations'] = $_POST['locations'];
  $_SESSION['animal']   = 'cat';
  header('Location: ' . $destination);
}

$destination 将是问题中第二段代码所在页面的路径。

【讨论】:

  • 我做了您建议的更改,但没有奏效。事实上,“猫”不再出现在我被重定向到的页面上。所以基本上现在所有的工作都是重定向。我还尝试将以下代码放在 /locationsprocessing 页面上,但这也没有在重定向页面上产生任何输出。 $_SESSION['locations'] = $_POST['locations']; $_SESSION['动物'] = '猫'; header('位置:instantassist.us/formcontact');
  • 我确实包含了 session_start();即使您没有在答案中提及该部分,也在 /locationsprocessing.php 页面上。
猜你喜欢
  • 2013-05-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多