【问题标题】:$_SESSION array is being overwritten$_SESSION 数组被覆盖
【发布时间】:2018-01-29 23:35:49
【问题描述】:

背景:
我有一个带有分页复选框 表单。我已经使每次按下分页按钮时,无论它们是下一个上一个1234最后一页 - 它们都从您所在的特定页面发布复选框值。
然后将 POST 值设置为 SESSION。
以上所有工作正常!

问题:
假设我在分页的第 1 页,我选中了一个复选框,并且该值(假设值为“111”)设置为 POST 和 SESSION。然后我单击第 2 页,再选中一个值为“222”的复选框,然后单击第 3 页。

现在只要我点击第三个链接,会话值就会被 222 覆盖!
我想要的是数组为 111、222。
我想保留第 1 页的前一个值,基本上只是继续添加到数组中,直到我完成,而不会被覆盖。

代码是:

    if(isset($_POST['bundleAdId'])) 
    $_SESSION['bundleAdId'] = $_POST['bundleAdId'];

我了解,由于上面的代码,每当 POST 被触发时,所有 POST 值都会一遍又一遍地输入到会话中。

但是我怎样才能只添加到数组而不是覆盖?

【问题讨论】:

  • 试过类似:$_SESSION['bundleAdId'][] = $_POST['bundleAdId'];?也许阅读arrays
  • 您想在该会话中保存多个值吗?
  • 我试过了,它奏效了。哇,我怎么没见过这个。关于覆盖会话/在分页中保持 POST 值,我连续两个晚上在整个互联网上搜索,您是第一个建议添加 [] 的人。太棒了,非常感谢!
  • @Swift123,这表明您对 php 数组并不完全满意。就在manual
  • $_SESSION[] 只不过是一个数组。阅读PHP arrays

标签: php session checkbox


【解决方案1】:

你需要把它做成一个数组,如下所示:-

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

但先应用检查:-

if(!empty($_POST['bundleAdId'])){ 
    $_SESSION['bundleAdId'][] = $_POST['bundleAdId'];
}

【讨论】:

  • @cale_b 不,使用 PHP 松散类型和变量转换,您不必这样做。
  • @cale_b 如果你这样做,那么每次你重新初始化数组时它都会变空。所以问题还是一样
  • 如果你愿意的话,这并不是你真正想要的方式。首先,不,我认为它不会产生通知。你应该试试看。尝试访问未声明的变量时会生成通知,但不会为初始化变量而生成通知,这就是本示例中发生的情况。
  • 是的,你是对的。过于谨慎!感谢您的推动。
  • @AlivetoDie:这些检查代码都不是必需的,也不是我所看到的改进。
猜你喜欢
  • 2012-02-24
  • 2012-05-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多