簡體   English   中英

更新購物車功能添加新項目,而不是更新現有項目

[英]Update cart function adds new items instead of updating existing

當用戶單擊“添加到購物車”時,會發出ajax請求,並將商品添加到購物車。 檢索產品ID,然后從數據庫中提取所需的詳細信息並將其放入購物車會話數組。 這一切都很好。

public function AddToCart()
{
    if($_SERVER['REQUEST_METHOD'] == 'POST') {
        $quantity = 1;
        $prod_id = $_POST['prod_id'];
        $prod_data = $this->ProductFendModel->GetProductByIdCart($prod_id);

        $data = [
            'prod_name' => $prod_data->prod_name,
            'sale_price' => $prod_data->sale_price,
            'sp_name' => $prod_data->sp_name    
        ];

        $response = array();
        $message = '';    
        $key = "{$prod_id}";

        if (empty($_SESSION['cart_array'][$key])) {
            $_SESSION['cart_array'][$key] = array(
                'prod_id' => $prod_id,
                'quantity' => $quantity,
                'prod_name' => $data['prod_name'],
                'sale_price' => $data['sale_price'],
                'sp_name' => $data['sp_name']
            );
        }
        else {
            $_SESSION['cart_array'][$key]['quantity'] += $quantity;
        }

        $response['success'] = true;
        $response['message'] = 'Product added to cart';

        echo json_encode($response);
    }
}

但是,當我嘗試更新購物車時,它會復制具有正確數量的現有商品,而不是僅更新購物車中已有商品的數量。 例如,如果我的購物車中有2件物品,我現在得到4。前2件具有原始數量,新添加的2件具有正確數量。

public function UpdateCart()
{
    if($_SERVER['REQUEST_METHOD'] == 'POST') {
        foreach($_POST['prod_id'] as $key => $id)
        {
            $qty = $_POST['quantity'][$key];
            $_SESSION['cart_array'][$key]['quantity'] = $qty;
        }
    }
}

我看到的一件事是,在UpdateCart中,您以關聯數組的形式訪問$ _POST ['prod_id'],但在AddToCart中以整數形式訪問。 foreach($_POST['prod_id'] as $key => $id) vs $prod_id = $_POST['prod_id']; 另外,在生產中使用此變量之前,請不要忘記過濾POST變量! 即使您只是將數據寫入會話中,甚至可以按類型進行清理,這都是非常好的做法,這樣您就可以更確定地在運行時擁有該控件。

如果這不能為您指明正確的方向,則可以考慮發布$ _SESSION和$ _POST轉儲。 另外,如果您尚未這樣做,請使用PHPUnit。 即使有最佳使用方法,使用起來也不是很復雜。

至於請求變量,您可以將數組傳遞給函數或您的類,而不是直接從函數內部訪問狀態變量。 這樣做可以避免邏輯過於復雜,並可以將應用程序設計的大部分保留在短期工作內存中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM