[PHP從小白到大牛]-031 PHP-商城項目(七)

非登陸狀態加入購物車(存入session)

// 若是沒有登陸, 購物車寫到session中
// 先經過商品id, 獲取商品的名稱, 縮略圖, 價格, 庫存
$product_result = queryOne("select name,pic,price,stock from {$prefix}product where id = $product_id");
// 獲取session, 判斷session是否已經有購物車的記錄
$cart_result = getSession('cart', 'shop') ? getSession('cart', 'shop') : [];
// 標記, 判斷該商品應該是新增仍是更新
$add = true;
// 遍歷session, 若是已經有值, 更新, 若是沒值, 插入
foreach ($cart_result as $key => $cart) {
    // 更新數量
    if ($cart['proid'] == $product_id) {
        $add = false;
        $cart['product_count'] = intval($cart['product_count']) + intval($product_count);
        $cart_result[$key] = $cart;
    }
}
// 新增購物車信息
if ($add) {
    array_unshift($cart_result, [
        'name' => $product_result['name'],
        'pic' => $product_result['pic'],
        'price' => $product_result['price'],
        'stock' => $product_result['stock'],
        'product_count' => $product_count,
        'proid' => $product_id,
        'id' => count($cart_result) + 1,
    ]);
}
// 保存session
setSession('cart', $cart_result, 'shop');
複製代碼

非登陸轉登陸, session和數據庫進行合併

  • 先把session中的數據寫入數據庫
  • 而後統一從數據庫裏查數據
$cart_session_result = getSession('cart', 'shop') ? getSession('cart', 'shop') : [];
// session的購物車信息, 寫入數據庫
if($cart_session_result){
    // 清除session中購物車
    deleteSession('cart','shop');
    foreach ($cart_session_result as $key => $cart_session) {
        add_cart($cart_session['proid'],$cart_session['product_count'],$current_user['id'],$prefix);
    }
    $cart_session_result = null;
}


// 查詢購物車
$sql = "SELECT {$prefix}product.name, {$prefix}product.id as proid, {$prefix}product.price, {$prefix}product.pic, {$prefix}product.stock, {$prefix}cart.product_count, {$prefix}cart.id FROM {$prefix}product INNER JOIN {$prefix}cart ON {$prefix}cart.product_id = {$prefix}product.id INNER JOIN {$prefix}user ON {$prefix}cart.user_id = {$prefix}user.id where user_id = " . $current_user['id'] . " order by {$prefix}cart.created_at desc";
$cart_result = queryAll($sql);
複製代碼
相關文章
相關標籤/搜索