【问题标题】:Adding quantity to basket item is adding a new item添加数量到购物篮项目是添加一个新项目
【发布时间】:2017-01-06 16:28:42
【问题描述】:

我正在创建一个篮子,我想要的是如果再次添加一个已经在篮子中的项目,那么原始项目的数量将被追加 1。

当我添加一个已经在购物篮中的项目时,会添加一个新项目,并且可以通过在原始项目上单击 +1 来追加这个新项目的数量。

basket.php

<?php
  foreach ($_SESSION["basket"] as $basketItemArray) {                   
?>

<form role="form" action="includes/functions/create_shopping_cart.php" method="post">
    <button type="submit" name="basket-button" class="btn btn-default" value="<?php echo $basketItemArray["item_id"]; ?>"><i class="fa fa-plus" aria-hidden="true"></i></button>
    <? echo $basketItemArray["quantity"]; ?>
    <button class="btn btn-default"><i class="fa fa-minus" aria-hidden="true"></i></button>
</form>

上面的表单通过+按钮的值发送item_id

create_shopping_cart.php

$product_id = $_POST['basket-button'];
$sql = "SELECT * FROM menu WHERE product_id='".$product_id."'";

$result = $connection->query($sql);
$row = $result->fetch_assoc();

if (empty($_SESSION["basket"])) {
    $_SESSION["basket"]  = array( 

    array( "item_id"=>$row['product_id'], "item_name"=>$row['name'],"quantity"=>1 , "price"=>$row['price']) );

} else {
    // There is already a basket to append to
    $current_basket = $_SESSION["basket"];

    $found = false;
    foreach($_SESSION['basket'] as $product)
    {
        if($product_id == $product['item_id']) {
            $found = true;
            break;
        }
    }

    if($found)
    {
        $_SESSION['basket'][$product_id]['quantity'] ++;               
    } else {
        $new_basket  = array( 

        array( "item_id"=>$row['product_id'], "item_name"=>$row['name'],"quantity"=>1 , "price"=>$row['price']) );

        $_SESSION['basket'] = array_merge($current_basket, $new_basket);      
    } 
}

结果

【问题讨论】:

  • 您是否检查过$found 是否设置为true
  • 是的,当我尝试这个时,$found 设置为 true
  • 去掉 ++ 之前的空格会发生什么?
  • 当 $found 为真时,您是否还检查了 if 循环的正确部分?
  • 是的,正确的部分被执行了。

标签: php session session-variables


【解决方案1】:

您没有定位/使用购物篮中产品的索引。 试试这个:

$product_id = $_POST['basket-button'];
$sql = "SELECT * FROM menu WHERE product_id='".$product_id."'";

$result = $connection->query($sql);
$row = $result->fetch_assoc();

if (empty($_SESSION["basket"])) {
    $_SESSION["basket"]  = array( 

    array( "item_id"=>$row['product_id'], "item_name"=>$row['name'],"quantity"=>1 , "price"=>$row['price']) );

} else {
    // There is already a basket to append to
    $current_basket = $_SESSION["basket"];

    $found = false;
    $id = '';
    foreach($_SESSION['basket'] as $key=>$product)
    {
        if($product_id == $product['item_id']) {
            $found = true;
            $id    = $key;
            break;
        }
    }

    if($found)
    {
        $_SESSION['basket'][$id]['quantity']++;               
    } else {
        $new_basket  = array( 

        array( "item_id"=>$row['product_id'], "item_name"=>$row['name'],"quantity"=>1 , "price"=>$row['price']) );

        $_SESSION['basket'] = array_merge($current_basket, $new_basket);      
    } 
}

您的代码可以进一步优化,但现在更重要的是让它正常工作。

【讨论】:

  • 谢谢你的工作,但我必须做的唯一调整是在将数量附加到购物篮时,唯一需要的参数是 [$id] - [$product_id] 停止工作。
  • 好的,我在代码中更改了它。处理整个系统并摆脱 foreach 的更好方法是使用 product_id 作为篮子索引。这样,您可以通过检查 if (isset $_SESSION['basket'][$product_id]) 直接定位它,而不是使用 'array_merge' 你做 '$_SESSION['basket'][$product_id] = $new_basket'
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-15
  • 1970-01-01
  • 2017-07-23
  • 1970-01-01
相关资源
最近更新 更多