PHP将GET变量附加到SESSION

时间:2013-08-14 08:54:09

标签: php session-variables shopping-cart

我想制作一个简单的购物车,它带有$ _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']

似乎没什么用。

任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:3)

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

然后:

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

稍后,当您在会话中有其他信息时,迭代这个项目数组要容易得多。

答案 1 :(得分:0)

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

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

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