より具体的には、ショッピング カートに追加されたアイテムの合計を使用して、ショッピング カートをコーディングしようとしています。
「注文合計」である変数に製品価格を追加することになっているコードがいくつかあります。
セッション変数内に値があるかどうかを確認し、それらの「ID」を mysql テーブルに格納されている結果の行 ID と照合します。セッション値の各 ID について、対応する価格が合計に追加されます。
この商品に特別価格が存在する場合は、その価格が価格になります。
ここで実際に起こっていることは、カートに 1 つのアイテムを追加したときです。合計しても問題ありません。カートに 2 つのアイテムを追加すると、最初にカートに追加されたアイテムの合計値しか表示されません。
これはいくつかの古いコードの (準備されたステートメントへの) 変換であるため、リングのどこかでこの重要な側面を見逃していると思います... のようなもの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();
}
}