我正在尝试对购物车进行编码,更具体地说,是对已添加到购物车中的商品进行总计。
我有一些代码应该将产品价格添加到“订单总额”变量中。
它检查会话变量中是否存在值,然后根据存储在 mysql 表中的结果行 id 检查这些“id”。对于会话值中的每个 id,相应的价格将添加到总价中。
如果该项目存在特价,则该价格成为价格。
但是,现在实际发生的情况是,当我将一件商品添加到购物车时。总起来没问题。当我将两件商品添加到购物车时,我只看到添加到购物车的第一件商品的总价值。
由于这是一些旧代码的转换(到准备好的语句),我假设在某个地方我错过了这个的一些关键方面......像mysqli_data_seek
.
由于我目前对准备好的语句的了解并不多,因此我可能在循环出现的方式上犯了错误。
如果有人可以通过这个并发现我编码的问题,或者提供一些关于我如何以更好的方式完成这项任务的信息......这将非常感激!
谢谢
这是代码:
if (isset($_SESSION['orderItem']) && count($_SESSION['orderItem']) > 0)
{
$ordersItem = sanitize($_SESSION['orderItem']);
$ordersItemJoined = join($ordersItem, ',');
if ($stmt = $link->prepare("
SELECT i.id, i.price, s.specialPrice, s.start, s.end
FROM items i
LEFT JOIN item_specials s
ON s.id = i.id
WHERE i.id
IN (?)
"))
{
$stmt->bind_param("i", $ordersItemJoined);
$stmt->execute();
$stmt->bind_result($itemsId, $itemsPrice, $itemsSpecialPrice, $itemsSpecialStart, $itemsSpecialEnd);
while ($stmt->fetch())
{
// Apply sale price if it exists
if ($itemsSpecialPrice > 0)
{
if ( ($itemsSpecialStart < date('Y-m-d H:i:s')) && ($itemsSpecialEnd > date('Y-m-d H:i:s')) )
{
$itemsPrice = $itemsSpecialPrice;
}
}
$itemsQuantity = sanitize($_SESSION['itemQuantity'][$itemsId]);
foreach ($ordersItem as $itemToTotal)
{
if ($itemToTotal == $itemsId)
{
$cartTotal += $itemsPrice*$itemsQuantity;
}
}
}
$stmt->close();
}
}