目前我正在使用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}
每次输出相同。
答案 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()需要第二个参数作为数组,这里是一个数字。