2015-12-19 3 views
2

Моя корзина не работает правильно.PHP корзина для покупок не работает

Если я добавить один элемент в корзину он работает соответствующим образом, но когда я добавить второй или несколько элементов, телега кажется себя странно ...

При добавлении второго пункта, количество второго элемента начинается с 2.

Количество вновь добавленного товара начинается с количества предметов, которые указаны в корзине. Он также увеличивается с количеством предметов в корзине.

После добавления третьего пункта, то пункт отображается как столько раз, сколько есть элементы его телега ...

Как можно изменить его, чтобы добавить один элемент и только приращение на единицу, если этих пунктов, существующих в корзине?

Заранее благодарен!

<?php 
    require "core.inc.php"; 
    require "connect.inc.php"; 
?> 
<html> 
<head> 
<meta charset="UTF-8"> 
<title>Winkelwagen</title> 
<link rel="stylesheet" type="text/css" href="winkelwagen.css" /> 
<link rel="stylesheet" type="text/css" href="topAndMenuHeader.css" /> 
</head> 

<body bgcolor="#8A8B93"> 
<div id="container"> 
<?php include "topAndMenuHeader.php"; ?> 
<div id="content"> 
    <p class="opmaakTitel">Winkelwagen</p> 
    <?php 
     if (isset($_GET['itemID'])) { 
      $itemID = $_GET['itemID']; 

      $sql = "SELECT * FROM items WHERE id=$itemID"; 

      if ($query = mysql_query($sql)) { 
       $numRows = mysql_num_rows($query); 
       if ($numRows == 1) { 
        $artID = mysql_result($query, 0, 'id'); 
        $artNaam = mysql_result($query, 0, 'artNaam'); 
        $artPrijs = mysql_result($query, 0, 'artPrijs'); 
      $artAfbeelding = mysql_result($query, 0, 'artAfbeelding');    
        $artAantal = 1; 

        $index = -1; 

        if (isset($_SESSION['cart'])) { 
         unserialize(serialize($_SESSION['cart'])); 
         for ($i = 0; $i < count($_SESSION['cart']); $i++) 
         { 
          if ($_SESSION['cart'][$i]['id'] ==  
         $_GET['itemID']) { 
           $index = $i; 
          } 
          if ($index == -1) { 
           array_push($_SESSION['cart'], 
      array('id'=>$artID, 'naam'=>$artNaam, 'prijs'=>$artPrijs, 
      'afbeelding'=>$artAfbeelding, 'aantal'=>$artAantal)); 
          } else { 
           $_SESSION['cart'][$index]['aantal']++; 
          } 
         } 
    } else { 
     $_SESSION['cart'] []=array('id'=>$artID, 
     'naam'=>$artNaam,'prijs'=>$artPrijs, 
     'afbeelding'=>$artAfbeelding,'aantal'=>$artAantal); 
       } 
      } 
     } 
    } 

    foreach ($_SESSION['cart'] as $cart) { 
    echo '<div id="artikelSpace">'; 
    echo '<div id="artikel">'; 
    echo  '<div id="afbeelding">'; 
    echo'<imgsrc="data:image/jpeg;base64,' 
    .base64_encode($cart['afbeelding']).'" />'; 
    echo  '</div>'; 
    echo  '<div id="naam">'; 
    echo   '<p>'.$cart['naam'].'</p>'; 
    echo  '</div>'; 
    echo  '<div id="aantal">'; 
    echo   '<form action="winkelwagen.php" method="POST">'; 
    echo    'Aantal:'; 
    echo    '<input type="text" name="aantal" value="' 
    .$cart['aantal'].'" style="width: 50px; margin: 0px 20px 0px 20px" />'; 
    echo    '<input type="submit" name="wijzigAantal" 
    value="Wijzig" style="width: 100px; 
    border-radius: 5px; font-weight: bold;" />'; 
    echo   '</form>'; 
    echo  '</div>'; 
    echo  '<div id="prijs">'; 
    echo   '<p>Prijs: €'.($cart['prijs'] * $cart['aantal']).'</p>'; 
    echo  '</div>'; 
    echo  '<div id="verwijder">'; 
    echo   '<ul>'; 
    echo    '<li><a href="#">Verwijder</a></li>'; 
    echo   '</ul>'; 
    echo  '</div>'; 
    echo '</div>'; 
    echo '</div>'; 
    } 
    ?> 
</div> 
</div> 
</body> 
</html> 
+1

Вы должны изучить расширения mysqli или PDO, поскольку расширения mysql обесцениваются. –

+0

Благодарим вас за ответ – IvoryNL

ответ

1

Вы должны инициализировать переменную $index в каждой итерации цикла, как это:

// your code 

if (isset($_SESSION['cart'])) { 
    unserialize(serialize($_SESSION['cart'])); 
    for ($i = 0; $i < count($_SESSION['cart']); $i++) { 
     $index = -1; // initialize $index in each iteration 
     if ($_SESSION['cart'][$i]['id'] == $_GET['itemID']) { 
      $index = $i; 
     } 
     if ($index == -1) { 
      array_push($_SESSION['cart'], array('id'=>$artID, 'naam'=>$artNaam, 'prijs'=>$artPrijs, 'afbeelding'=>$artAfbeelding, 'aantal'=>$artAantal)); 
     } else { 
      $_SESSION['cart'][$index]['aantal']++; 
     } 
    } 
} else { 
    $_SESSION['cart'][]=array('id'=>$artID, 'naam'=>$artNaam,'prijs'=>$artPrijs, 'afbeelding'=>$artAfbeelding,'aantal'=>$artAantal); 
} 

// your code 

Sidenote: Не используйте mysql_ расширения базы данных, они были устаревшими в PHP 5.5. 0 и были удалены в PHP 7.0.0. Используйте вместо этого mysqli или PDO. И это why you shouldn't use mysql_ functions.

+0

Спасибо за ваш ответ! К сожалению, проблема все еще остается ... Могу я просто перейти от mysql к mysqli или мне нужно что-то настроить для этого? – IvoryNL

+0

@IvoryNL Нет, переход от 'mysql' к' mysqli' не будет иметь никакого отношения к вашей бизнес-логике. –

+0

Благодарим вас за ответ. Я попытаюсь использовать mysqli вместо – IvoryNL