购物车的PHP会话数组没有更新

时间:2014-03-19 17:41:37

标签: php arrays session-variables shopping-cart

目前我正在使用php会话阵列制作购物车。我是一个纯粹的菜鸟。我面临的问题是会话变量没有相应地更新。当给出相同的产品时,应该增加数量。但它没有这样做:

<?php
session_start();
// get the product id
//$id = isset($_GET['productID']) ;
$pid = $_GET['productID'] ;

/* 
 * check if the 'cart' session array was created
 * if it is NOT, create the 'cart' session array
 */
if(!isset($_SESSION['cart'])){
    session_start();
    $_SESSION['cart']=array("id","qty");
}

// check if the item is in the array, if it is, do not add
if (in_array($pid, $_SESSION['cart'])){
    $cart[$pid]++;
    echo "yes";
    include "../includes/dbconn.php";
    $result=mysql_query("select product_name from mast_product where id=$pid");
    $row=mysql_fetch_row($result);
    $sizes=sizeof($cart);
    print_r($cart);
    echo json_encode(array('msg' => 'Success','pname' => $row[0],'total'=> '3'));
}

// else, add the item to the array
else{
    $cart[$pid]=1;
    echo "No";
   include "../includes/dbconn.php";
    $result=mysql_query("select product_name from mast_product where id=$pid");
    $row=mysql_fetch_row($result);
    $sizes=sizeof($cart);
    print_r($cart);
    echo json_encode(array('msg' => 'Success','pname' => $row[0],'total'=>$cart[$pid]));
}

 ?>

print_r($ cart)的输出为:NoArray([28] =&gt; 1){“msg”:“成功”,“pname”:“HTC One”,“total”:1}

每次输出相同。

1 个答案:

答案 0 :(得分:0)

每次创建新会话时,您都会在array("id","qty")变量中存储$_SESSION['cart']

但在下面的代码if(in_array($pid, $_SESSION['cart'])) {...}中,您正在检查$pid数组中的$_SESSION是否为真,因为您在进行会话时已存储array("id","qty")。因此,每次进入你的else块时都会生成相同的输出,因为没有数据库更新查询。

您需要将$pid存储在$ _SESSION数组中而不是array("id","qty")

代码:

if (!isset($_SESSION['cart'])){
    session_start();
    $_SESSION['cart'] = $pid;
}

您还需要在开头初始化$ cart变量。

以下检查应该是

if ($pid == $_SESSION['cart']) {...} or if (in_array($pid, $_SESSION)){...}

不是

if (in_array($pid, $_SESSION['cart'])){...}

因为in_array()需要第二个参数作为数组,这里是一个数字。