PHP将GET变量附加到SESSION


PHP appending GET vars to SESSION

我想制作一个简单的购物车,它接受$_GET变量并将其放入$_SESSION变量中。我尝试过的代码是:

<?php 
    session_start();
    if (is_numeric($_GET['add'])) $_SESSION[(string)$_GET['add']] = 1; ?>

因为我的项目ID是数字的,所以我首先进行检查,以停止将随机内容添加到会话变量中。然后我做一个var_dump来查看结果。我第一次用什么运行代码?add=102我得到:

array(1) { [102]=> int(1) }

然后我用?再次运行脚本?add=108我得到:

array(1) { [108]=> int(1) }

我想要的是:

array(2) { ["102"]=> int(1), ["108"]=> int(1) }

我做错了什么?我的概念是将$_GET变量转换为字符串,并将数量1和$_GET的字符串值关联存储在$_SESSION中。这应该允许我添加尽可能多的项目,只要它们的id不相同,这就是我想要的。

以下是我尝试过的替代方案:

strval($_GET['add']), 
(string)($_GET['add']), 
$_GET['add']

似乎什么都不管用。

如有任何帮助,我们将不胜感激。

不能使用数字$_SESSION键。在会话中创建另一个数组,例如$_SESSION['items']

然后:

session_start();
if(is_numeric($_GET['add']))
{
    $_SESSION['items'][(string)$_GET['add']] = 1;
}

当您的会话中有其他信息时,稍后对该项数组进行迭代要容易得多。

我意识到这是Satya的评论和mthie的回答的融合,但我认为完整的答案应该是

  1. 建议您将正在构建的阵列封装在其自己的命名位置以及
  2. 您需要每次add to数组,而不是overwrite

所以试试

<?php
    session_start();
    if(is_numeric($_GET['add'])) {
       $_SESSION['add'][][(string)$_GET['add']] = 1;
    }
?>