我想制作一个简单的购物车,它接受$_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的回答的融合,但我认为完整的答案应该是
- 建议您将正在构建的阵列封装在其自己的命名位置以及
- 您需要每次
add to
数组,而不是overwrite
所以试试
<?php
session_start();
if(is_numeric($_GET['add'])) {
$_SESSION['add'][][(string)$_GET['add']] = 1;
}
?>