首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >更新购物车功能添加新项目,而不是更新现有项目

更新购物车功能添加新项目,而不是更新现有项目
EN

Stack Overflow用户
提问于 2018-02-02 23:22:50
回答 1查看 34关注 0票数 0

当用户点击'add to cart‘时,就会发出一个ajax请求,并将商品添加到购物车中。检索产品ID,然后从数据库中提取所需的详细信息并放入购物车会话数组中。这一切都运行得很好。

代码语言:javascript
复制
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个项目具有正确的数量。

代码语言:javascript
复制
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;
        }
    }
}
EN

回答 1

Stack Overflow用户

发布于 2018-02-02 23:47:53

我看到的一件事是,在UpdateCart中,您以关联数组的形式访问$_POST‘’prod_id‘,而在AddToCart中则是以整数的形式访问。foreach($_POST['prod_id'] as $key => $id) vs $prod_id = $_POST['prod_id'];。另外,不要忘记在生产环境中使用它之前过滤POST变量!这确实是一个很好的实践,即使您只是将数据写入到会话中,甚至可以允许您按类型进行清理,这样您就可以更确定您在运行时拥有这种控制权。

如果这不能为您指明正确的方向,您可以考虑发布$_SESSION和$_POST转储。此外,如果您还没有这样做,请使用PHPUnit。使用它并不是很复杂,尽管有最好的使用方法。

对于请求变量,您可以将数组传递给函数或您的类,而不是直接从函数中访问状态变量。这样做可以避免使逻辑过于复杂,并允许您在短期工作内存中保留应用程序设计的较大部分。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48585780

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档