0

ショッピング カート内のアイテムの小計を計算する必要があります。カートに追加された商品は、商品 ID の配列としてセッション変数に保存されます。

まず、カート配列の ID を使用してデータベースから製品情報 (名前、価格など) を取得し、カート内のすべての商品の価格を追加する必要があります。同じ製品の。

テスト カートの合計金額は 96,049.98 であるはずですが、コードは合計金額 18 を返しています。どこから取得したのかわかりません。

コードは次のとおりです。

function subTotal() {
global $db;
global $table_prefix;
$table = $table_prefix . "products";

foreach($_SESSION['cart'] as $item) {
    $sql = $db->prepare("SELECT * FROM $table WHERE id = :id");
    $sql->bindParam(":id", $item[0]);
    $sql->execute();

    $amount = 0;
    $product = $sql->fetch(PDO::FETCH_ASSOC);
    foreach($product as $price) {
        $amount += $price['price'];
    }
}   
return $amount;
}
4

3 に答える 3

2

反復ごとに値$amountを 0 に再起動しています。

上部で初期化してみてください:

function subTotal() {
global $db;
global $table_prefix;
$table = $table_prefix . "products";
$amount = 0;  //MOVED HERE at the top

foreach($_SESSION['cart'] as $item) {
    $sql = $db->prepare("SELECT * FROM $table WHERE id = :id");
    $sql->bindParam(":id", $item[0]);
    $sql->execute();

    $product = $sql->fetch(PDO::FETCH_ASSOC);
    foreach($product as $price) {
        $amount += $price['price'];
    }
}   
return $amount;
}
于 2013-05-03T13:23:55.833 に答える
1

$amount = 0ループから外すだけ。各製品ループでリセットされているため。

$amount = 0;
foreach($_SESSION['cart'] as $item) {
    $sql = $db->prepare("SELECT * FROM $table WHERE id = :id");
    $sql->bindParam(":id", $item[0]);
    $sql->execute();    
    $product = $sql->fetch(PDO::FETCH_ASSOC);
    foreach($product as $price) {
        $amount += $price['price'];
    }
} 
于 2013-05-03T13:23:43.483 に答える
1

コメントで述べたように: ショッピング カートに商品を保存する方法を変更できる場合は、コードを次のようにリファクタリングできます。

function subTotal() {
    $db = $GLOBALS['db'];
    $table_prefix = $GLOBALS['table_prefix'];

    $table = $table_prefix . "products";
    $totalPrice = 0;

    // assuming that you actually store ($id => $amount) pairs
    $ids = join(',', array_map('intval', array_keys($_SESSION['cart'])));

    $stmt = $db->prepare("SELECT id, price FROM $table WHERE id IN ($ids)");
    while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
       $amount = $_SESSION['cart'][$row['id']];
       $totalPrice += $amount * $row['price'];
    }

    return $totalPrice;
}

仮に、ショッピング カート変数に次のようなものが含まれているとします。

array(
   4 => 1,   // 1 item with ID 4
   22 => 8   // 8 items with ID 22
)
于 2013-05-03T13:37:21.010 に答える