【问题标题】:PHP Sessions and Form input names getting confused [closed]PHP会话和表单输入名称变得混乱[关闭]
【发布时间】:2013-07-01 17:38:09
【问题描述】:

我看到一些奇怪的行为:

我有 2 个会话设置了一些值:$_SESSION['shippingZip']$_SESSION['shippingOption']

然后我的代码通过这段代码发布表单中发送的输入值:

$shippingOption = $_POST['shippingOption'];
Print_r ($_SESSION);
$shippingZip = $_POST['shippingZip'];

在此通道中,这些 POST 将变为空。但是,当它应该显示以前分配给它的字符串时,打印显示我的会话 $_SESSION['shippingOption'] 为空。 -------------------------- 发布完整的证明 会话加载了一些数据:

$_SESSION['shippingOption'] = $shippingOption;
$_SESSION['shippingZip']= $shippingZip;

然后:

Print_r ($_SESSION);
$shippingOption = $_POST['shippingOption'];
Print_r ($_SESSION);
$shippingZip = $_POST['shippingZip'];
Print_r ($_SESSION);

输出:

Array ( [itemAdded] => 1 [Payment_Amount] => 46.52 [cart] => Array ( [4] => Array ( [itemId] => 4 [qty] => 1 ) ) [shippingOption] => FIRST CLASS [shippingZip] => 10025 [shippingPrice] => 1.52 ) 
Array ( [itemAdded] => 1 [Payment_Amount] => 46.52 [cart] => Array ( [4] => Array ( [itemId] => 4 [qty] => 1 ) ) [shippingOption] => [shippingZip] => 10025 [shippingPrice] => 1.52 ) 
Array ( [itemAdded] => 1 [Payment_Amount] => 46.52 [cart] => Array ( [4] => Array ( [itemId] => 4 [qty] => 1 ) ) [shippingOption] => [shippingZip] => [shippingPrice] => 1.52 

您可以清楚地看到在每次 POST 之后,同名的 SESSION 是如何失去其价值的。太疯狂了!!!

【问题讨论】:

  • 您在什么/哪里设置会话?用什么数据?
  • $_SESSION$_POST 之间没有关系。你能把你看到的东西展示出来吗,从你的描述中很难理解。
  • 特别是,如果print_r($_SESSION) 显示为空,为什么您认为会话正在继承 POST 值?
  • 当我将 Print 放在 $shippingOption 之前,$_SESSION['shippingOption'] 会显示预期的字符串值。当我把它放在(如示例中)之后,会话 $_SESSION['shippingOption'] 显示为空
  • 您是否曾经使用过早已弃用的session_register() 函数?这将解释一个普通(但全局)变量覆盖会话变量。

标签: php forms session post


【解决方案1】:

$_POST 不直接填充$_SESSION。您需要将值分配给会话

$_SESSION['shippingOption'] = $_POST['shippingOption'];

编辑

在您发布更多代码后,您似乎没有在设置 $shippingOption; 之前定义它 $_SESSION['shippingOption'] = $shippingOption;

确保顺序如下:

$shippingOption = $_POST['shippingOption'];
$_SESSION['shippingOption'] = $shippingOption;

【讨论】:

  • 正如我的问题中提到的,我在代码的前面为这些会话分配了值
  • 发布该代码。我敢打赌 1. 你没有正确设置它们,或者 2. 你的表单没有正确传递 $_POST 值。无论哪种方式,您都需要发布更多代码。
  • 更新了帖子。并添加输出以显示 Sessions 如何按顺序释放它们的值
  • 您是在将$shippingOption; 添加到$_SESSION['shippingOption'] = $shippingOption; 之前还是之后定义它?
  • 之前。否则 Print 将永远不会显示这些 Sessions 的值......对吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-07-14
  • 2014-07-02
  • 1970-01-01
  • 2014-06-24
  • 2015-04-15
  • 1970-01-01
  • 2010-11-19
相关资源
最近更新 更多