利用 Cookie 儲存序列化的二維陣列,第一維代表每個商品,第二維包含商品 ID、數量、價格等屬性。所有操作(新增、修改、刪除、清空)皆針對 Cookie 中的陣列進行,處理完畢再序列化寫回 Cookie。
addcart($goods_id, $goods_num)function addcart($goods_id, $goods_num) {
$cur_cart_array = unserialize(stripslashes($_COOKIE['shop_cart_info']));
if (empty($cur_cart_array)) {
// 首次加入,建立新陣列
$cart_info[0][] = $goods_id;
$cart_info[0][] = $goods_num;
setcookie("shop_cart_info", serialize($cart_info));
} else {
// 檢查是否已存在相同商品
foreach ($cur_cart_array as $goods_current_cart) {
foreach ($goods_current_cart as $key => $goods_current_id) {
if ($key == 0 && $goods_current_id == $goods_id) {
echo "<script>if(confirm('購物車已有該商品,繼續購物按確定,查看購物車按取消')){history.go(-1)}else{window.location.href='xqs_cart.php'}</script>";
exit();
}
}
}
// 取得最大鍵值 +1 作為新索引
$ar_keys = array_keys($cur_cart_array);
rsort($ar_keys);
$max_array_keyid = $ar_keys[0] + 1;
$cur_cart_array[$max_array_keyid][] = $goods_id;
$cur_cart_array[$max_array_keyid][] = $goods_num;
setcookie("shop_cart_info", serialize($cur_cart_array));
}
}
delcart($goods_array_id)function delcart($goods_array_id) {
$cur_goods_array = unserialize(stripslashes($_COOKIE['shop_cart_info']));
unset($cur_goods_array[$goods_array_id]);
setcookie("shop_cart_info", serialize($cur_goods_array));
}
update_cart($up_id, $up_num, $goods_ids)function update_cart($up_id, $up_num, $goods_ids) {
// 先清空 Cookie,以便處理數量為 0 的商品
setcookie("shop_cart_info", "");
foreach ($up_id as $song) {
$goods_nums = current($up_num);
$goods_id = current($goods_ids);
next($up_num);
next($goods_ids);
// 數量為 0 時移除該項
if ($goods_nums == 0) {
unset($song);
continue;
}
$cur_goods_array[$song][0] = $goods_id;
$cur_goods_array[$song][1] = $goods_nums;
}
setcookie("shop_cart_info", serialize($cur_goods_array));
}
直接設定同名 Cookie 為空值:setcookie("shop_cart_info", "");
形成訂單時,可根據業務需求(積分、現金獎勵等)將購物車資料寫入資料庫。