$ _SESSION变量的未定义偏移量

时间:2014-05-06 01:46:15

标签: php session-variables shopping-cart

我一直在努力创建一个非常简单的购物车,而我的$_SESSION数组出现了问题。这是一个学校项目,我试图让它尽可能简单。

我得到的错误是:

  

注意:未定义索引:购物车在C:\ xampp \ htdocs \ Final \ menu.php上      第31行

     

注意:未定义的偏移量:C:\ xampp \ htdocs \ Final \ menu.php中的5      第31行

if(isset($_GET['id'])){
    $product_id = $_GET['id'];
    $_SESSION['cart'][$product_id]++;
    print_r($_SESSION);
    print "<br>";
    print_r($_GET);
}

一旦我向特定product_id添加了多个项目,错误就会消失。这是我读过的教程解释为向购物车添加商品的方式。有什么建议吗?

2 个答案:

答案 0 :(得分:0)

看起来$ _SESSION ['cart']尚不存在。因为它将是一个数组,首先使用:

实例化它
if(!array_key_exists('cart', $_SESSION)) $_SESSION['cart'] = array();

由于您尚未向$_SESSION['cart'][$product_id]分配任何内容,因此在尝试增加此类错误时会出现此类错误。您可以尝试:

$_SESSION['cart'][$product_id] = (array_key_exists($product_id, $_SESSION['cart'])) ? $_SESSION['cart'][$product_id] +1 : 1;

if声明:

if(array_key_exists($product_id, $_SESSION['cart'])) $_SESSION['cart'][$product_id]++;
else $_SESSION['cart'][$product_id] = 1;

答案 1 :(得分:0)

执行$_SESSION['cart'][$product_id]++;时,您确实在做:

$_SESSION['cart'][$product_id] = $_SESSION['cart'][$product_id] + 1;
//                               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ generates warning if they keys do not exist yet
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^ assigns without problems if they keys do not exist yet

使用新创建的键的赋值不是问题,php会生成警告,试图获取$_SESSION['cart'][$product_id]的实际值。

要解决此问题,您应该正确初始化变量:

$_SESSION['cart'][$product_id] = isset($_SESSION['cart'][$product_id])
                                    ? $_SESSION['cart'][$product_id]++ 
                                    : 1;