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

429 阅读1分钟

非登录状态加入购物车(存入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);