Mam taki oto kod:
<?php function koszyk(){ //Sprawdzenie, czy użytkownik nie dodał większej ilości produktu niż w bazie if ($iloscproduktu > $cartrow['ilosc']){ $iloscproduktu=$cartrow['ilosc']; } // $idproduktu = filter_var($_POST['id'], FILTER_SANITIZE_STRING); $iloscproduktu = filter_var($_POST['ilosc'], FILTER_SANITIZE_NUMBER_INT); $nowy_produkt = array('nazwa'=>$nazwaproduktu, 'id'=>$idproduktu, 'ilosc'=>$iloscproduktu, 'cena'=>$cenaproduktu); $found = false; foreach ($_SESSION["koszyk"] as $cartitem) { if($cartitem["id"] == $idproduktu){ $produkt[] = array('nazwa'=>$nazwaproduktu, 'id'=>$idproduktu, 'ilosc'=>$iloscproduktu, 'cena'=>$cenaproduktu); $found = true; }else{ $produkt[] = array('nazwa'=>$nazwaproduktu, 'id'=>$idproduktu, 'ilosc'=>$iloscproduktu, 'cena'=>$cenaproduktu); } } if($found == false) { }else{ $_SESSION["koszyk"] = $produkt; } }else{ $_SESSION["koszyk"] = $nowy_produkt; } } ?> <?php function koszykmenu(){ { foreach ($_SESSION["koszyk"] as $cart) { } }else{ } } ?>
Próbując dodać coś do kosza np. 1 produkt, nazwa produktu wyświetla się 8 razy, a gdy dodam kolejny to nazwa wyświetla się tylko tego drugiego produktu i to 16 razy, gdzie może tkwić błąd? Pozdro.
Okej doprowadziłem ten koszyk do takiej postaci, że gdy dodanie pierwszego produktu jest okej, aczkolwiek dodanie kolejnego skutkuje tym, że jest on nadpisywany i w rezultacie mogę mieć tylko jeden.
Skrypt odpowiadający za dodawanie i usuwanie produktów ze zmiennej sesyjnej:
switch($_GET["koszyk"]) { case "add": if ($Addrow['ilosc']<$_POST['ilosc']){ $_POST['ilosc']=$Addrow['ilosc']; } foreach ($_SESSION['koszyk'] as $dodaj_towar){ if ($dodaj_towar['id_towaru']==$_POST['id']){ $towar[] = array('nazwa'=>$dodaj_towar["nazwa"], 'id_towaru'=>$dodaj_towar["id_towaru"], 'ilosc'=>$_POST['ilosc'], 'cena'=>$Addrow["cena"]); $istnieje = TRUE; }else{ $towar[] = array('nazwa'=>$Addrow['nazwa'], 'id_towaru'=>$Addrow['id_towaru'], 'ilosc'=>$_POST['ilosc'], 'cena'=>$Addrow['cena']); $istnieje = FALSE; } } if (istnieje == TRUE){ $_SESSION["koszyk"] = $towar; }else{ } }else{ $_SESSION['koszyk']=$nowy_towar; } } break; case "remove": foreach ($_SESSION['koszyk'] as $usun_towar){ if($_GET["id"] == $usun_towar['id_towaru']){ } } break; default: break; } }
Skrypt wyświetlający produkty w tabeli:
{ foreach ($_SESSION["koszyk"] as $cart){ echo "<td><a class='links2' href='koszyk.php?koszyk=remove&id=".$cart['id_towaru']."'>Usuń</a></td>"; $suma=$cart['cena']*$cart['ilosc']; $razem=$razem+$suma; } }else{ $_POST['link']="katalog.php"; } }else{ } }
Katalog produktów:
if ($obAmount==0){ }else{ for($x=0;$x<$obAmount;$x++) { echo "<td><img class='image' align='center' src='images/cards/".$row['id_towaru'].".jpg'></img></td>"; echo "<td><input type='hidden' name='id' value='".$rowcat['id_towaru']."'><input type='hidden' name='link' value='search.php?query=".$_GET['query']."&sort=".$_GET['sort']."'></input></input><input type='text' name='ilosc' value='1' maxlength='3' size='1px' onclick='$(this).select();'></input><input type='submit' value='Dodaj'></input></ br>"; }