2017-01-06 4 views
0

Я создаю корзину, и я хочу, если элемент, который уже вставлен в корзину, добавляется снова, количество исходного элемента будет добавлено по 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);  
    } 
} 

Результат This is what the result of clicking the + button on the original item twice

+0

Вы проверили, установлено ли '$ found' в значение' true'? – RST

+0

Да, $ found установлен в true, когда я пытаюсь это сделать –

+0

Что происходит, когда вы удаляете пробел перед ++? – RST

ответ

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);  
    } 
} 

Ваш код может быть оптимизирован несколько больше, но сейчас это более важно, чтобы заставить его работать правильно.

+0

Спасибо, что это сработало, но единственное, что я должен был сделать, это добавить количество в корзину, единственным аргументом, который был нужен, был [$ id] - [$ product_id], чтобы он не работал. –

+1

Хорошо, я изменил это в коде. Лучший способ справиться с этой системой и избавиться от «foreach» - с помощью product_id как индекса корзины. Таким образом вы можете настроить таргетинг на него напрямую, установив 'if (isset $ _SESSION ['basket'] [$ product_id])' и вместо использования 'array_merge' вы делаете '$ _SESSION [' basket '] [$ product_id] = $ new_basket ' – RST