从数据库而不是会话中获取特定产品的数量 - 购物车(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
属性(考虑到 products
和 cart
表是如何连接的):
$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 中的特定产品类别计数
WooCommerce cookie 和会话 - 获取购物车中的当前产品