添加到购物车会话无法正确创建

时间:2016-05-25 11:23:02

标签: php session

我已经创建了一个添加到购物车功能我不确定我是否已经完美发展。

当我尝试添加新的会话购物车项目时,它没有为我设置数量,pid正在正确插入,但我无法存储的其他两个选项,如果我尝试创建变量$_SESSION['cart']['pid']

它工作正常,但当我尝试添加另一个会话变量$_SESSION['cart']['option1']时,它无法正常工作

if(isset($_POST['cart'])) {
    $pid  = $_POST['product_id'];
    $qty  = $_POST['qty'];
    $opt1 = $_POST['opt1'];
    $opt2 = $_POST['opt2'];

    if(isset($_SESSION['cart']['pid'][$pid])) {
        $_SESSION['cart']['pid'][$pid]++;
        $_SESSION['cart']['opt1'][$pid] = $opt1;
        $_SESSION['cart']['opt2'][$pid] = $opt2;
        if($qty > 1) {
            $_SESSION['cart']['pid'][$pid] = $qty;
        }
    } else {
        $_SESSION['cart']['pid'][$pid] = 1;
        if($qty > 1) {
            $_SESSION['cart']['pid'][$pid] = $qty;
        }
    }
}

<form method="POST" action="result.php">
     <input type="text" name="product_id" placeholder="Product Id" />
     <input type="text" name="qty" placeholder="Quantity" />
     <input type="text" name="opt1" placeholder="A" />
     <input type="text" name="opt2" placeholder="b" />
     <input type="submit" name="cart" value="Add To Cart" />
</form> 

如果我在正确的轨道上并且正确开发了添加购物车功能,请告诉我

1 个答案:

答案 0 :(得分:1)

我认为您很困惑,特别是当您添加已存储的会话产品时:

当您的购物车中已有product_id时,请写下:

$_SESSION['cart']['pid'][$pid]++;

...所以你从你的pid会话索引中丢失了product_id。

也许你应该只在另一个pid中添加数量 - &gt;变量...而不是改变pid值。

if(isset($_POST['cart'])) {
    $pid  = $_POST['product_id'];
    $qty  = $_POST['qty'];
    $opt1 = $_POST['opt1'];
    $opt2 = $_POST['opt2'];

    // Create the prodcut_id array if it does not exist
    if(!isset($_SESSION['cart']['pid'][$pid])) {
        $_SESSION['cart']['pid'][$pid] = array();
    }

    // Is the same item already stored? (same opt1 and opt2)
    $sameItem = false;

    if (!empty($_SESSION['cart']['pid'][$pid])) {
        foreach ($_SESSION['cart']['pid'][$pid] as $key => $product) {
             // Same options item?
             if ($product['opt1'] == $opt1 && 
                 $product['opt2'] == $opt2) {
                  $sameItem = $key;
             }
        }
    }

    if ($sameItem !== false) {
        // Change the quantity
        $_SESSION['cart']['pid'][$pid][$sameItem]['qty'] += $qty;
    } else {
        // Store the item as new array key
        array_push($_SESSION['cart']['pid'][$pid], 
               array('qty' => $qty, 'opt1' => $opt1, 'opt2' => $opt2);
    }

}

顺便问一下,你正在使用session_start()吗?