从数据库而不是会话中获取特定产品的数量 - 购物车(PHP 和 MySQL)

Posted

技术标签:

【中文标题】从数据库而不是会话中获取特定产品的数量 - 购物车(PHP 和 MySQL)【英文标题】:Get quantity of certain product from database instead of session - Shopping Cart (PHP & MySQL) 【发布时间】:2021-05-02 18:55:15 【问题描述】:

我一直在尝试从基于会话的 php 购物车开始创建一个持久的基于 mysql 的购物车应用程序。 cart 表的结构为 userid | productid | quantity | postingdate。 在基于会话的实现中,某个产品的数量信息存储在$_SESSION['cart'][$row['id']]['quantity'];;我在从数据库中的cart 表中检索特定产品的数量信息时遇到了麻烦,因为我似乎找不到如何提取$getquantity 查询所需的productId

$sql1 = "SELECT * FROM cart WHERE userid='$userId'"; //selects the user's cart
$query1=mysqli_query($con,$sql1);
if (!empty($query1))     //if the user's cart isn't empty
    while($row = mysqli_fetch_array($query1))
        $query = mysqli_query($con,"SELECT * FROM products JOIN cart ON cart.productid=products.id 
ORDER BY cart.postingDate DESC"); //selects all the products in the current user's cart
     
    $totalprice=0;
    $totalqunty=0;
    if (!empty($query)) 
        while ($row = mysqli_fetch_array($query))  //for each product
            //$quantity=$_SESSION['cart'][$row['id']]['quantity']; //SESSION IMPLEMENTATION
            $id = $row['id'];
            $quantity = mysqli_query($con,"SELECT quantity FROM cart WHERE userid='$userId' AND productid='$id'"); //MY IMPLEMENTATION, THE WRONG PART IS WITH $id
            $subtotal= $quantity*$row['productPrice']+$row['shippingCharge'];
            $totalprice += $subtotal;  
            $_SESSION['qnty']=$totalqunty+=$quantity; //SESSION IMPLEMENTATION
        
    


我尝试过$row['id'],但它从$query 返回的记录中返回了一个包含所有productid 的数组,而MySQl 似乎不接受它,而我需要$getquantity 来运行每个productid。请不要介意它如何容易受到 SQL 注入的影响,因为我将在稍后阶段讨论。

【问题讨论】:

嗨@Chiara,如果我正确理解了这个问题,你可以重写你的sql查询并按照userid对结果进行分组。例如,$sql1 = 'SELECT userid, productid, SUM(quantity) FROM cart WHERE userid="$userid" GROUP BY productid 谢谢,我会立即尝试@Mark! 【参考方案1】:

这是一个可行的解决方案:我可以选择 cart.quantity 属性(考虑到 productscart 表是如何连接的):

$sql1 = "SELECT * FROM cart WHERE userid='$userId'"; //selects the user's cart
$query1=mysqli_query($con,$sql1);
if (!empty($query1))     //if the user's cart isn't empty
    while($row = mysqli_fetch_array($query1))
        $query = mysqli_query($con,"SELECT products.productImage1 , products.productName ,
                                                    products.id, cart.productId, cart.quantity as qty, products.productPrice,
                                                    products.shippingCharge  FROM products JOIN cart ON cart.productid=products.id 
ORDER BY cart.postingDate DESC"); //selects all the products in the current user's cart
     
    $totalprice=0;
    $totalqunty=0;
    if (!empty($query)) 
        while ($row = mysqli_fetch_array($query))  //for each product
            $quantity=$row['qty'];
            $subtotal= $quantity*$row['productPrice']+$row['shippingCharge'];
            $totalprice += $subtotal;   
        
    

【讨论】:

以上是关于从数据库而不是会话中获取特定产品的数量 - 购物车(PHP 和 MySQL)的主要内容,如果未能解决你的问题,请参考以下文章

ajax 上的 JS 警报添加到购物车以获取 Woocommerce 中的特定产品类别计数

从 laravel 中的一个后缀获取所有会话

WooCommerce cookie 和会话 - 获取购物车中的当前产品

订单确认后如何从订购数量中减去可用数量?

Laravel 将相同产品的添加到购物车按钮添加到购物车,数量 +1

WordPress将会话数据从产品页面带到自定义插件中的购物车页面?