Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Problem z koszykiem
Forum PHP.pl > Forum > PHP
zomfire
Witam, otóż nie jestem zbyt ogarnięty w PHP. Bynajmniej nie na tyle by załapać tworzenie koszyka do sklepu.
Mam taki oto kod:
  1. <?php
  2. function koszyk(){
  3.  
  4. $iloscproduktu = mysql_real_escape_string($_POST['ilosc']);
  5. $nazwaproduktu = mysql_real_escape_string($_POST['nazwa']);
  6. $cenaproduktu = mysql_real_escape_string($_POST['cena']);
  7. //Sprawdzenie, czy użytkownik nie dodał większej ilości produktu niż w bazie
  8. $cart = mysql_query("SELECT * FROM asortyment WHERE nazwa = '$nazwaproduktu'");
  9. $cartrow = mysql_fetch_assoc($cart);
  10. if ($iloscproduktu > $cartrow['ilosc']){
  11. $iloscproduktu=$cartrow['ilosc'];
  12. }
  13. //
  14. $idproduktu = filter_var($_POST['id'], FILTER_SANITIZE_STRING);
  15. $iloscproduktu = filter_var($_POST['ilosc'], FILTER_SANITIZE_NUMBER_INT);
  16.  
  17. $nowy_produkt = array('nazwa'=>$nazwaproduktu, 'id'=>$idproduktu, 'ilosc'=>$iloscproduktu, 'cena'=>$cenaproduktu);
  18.  
  19. if(isset($_SESSION["koszyk"])){
  20. $found = false;
  21. foreach ($_SESSION["koszyk"] as $cartitem)
  22. {
  23. if($cartitem["id"] == $idproduktu){
  24. $produkt[] = array('nazwa'=>$nazwaproduktu, 'id'=>$idproduktu, 'ilosc'=>$iloscproduktu, 'cena'=>$cenaproduktu);
  25. $found = true;
  26. }else{
  27. $produkt[] = array('nazwa'=>$nazwaproduktu, 'id'=>$idproduktu, 'ilosc'=>$iloscproduktu, 'cena'=>$cenaproduktu);
  28. }
  29. }
  30.  
  31. if($found == false)
  32. {
  33. $_SESSION["koszyk"] = array_merge($produkt, $nowy_produkt);
  34. }else{
  35. $_SESSION["koszyk"] = $produkt;
  36. }
  37.  
  38. }else{
  39. $_SESSION["koszyk"] = $nowy_produkt;
  40. }
  41. }
  42. ?>
  43. <?php
  44. function koszykmenu(){
  45.  
  46. if(isset($_SESSION["koszyk"]))
  47. {
  48. foreach ($_SESSION["koszyk"] as $cart)
  49. {
  50. echo $cart['nazwa'];
  51. }
  52. }else{
  53. echo "Twój koszyk jest pusty!";
  54. }
  55. }
  56. ?>

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:
  1. if(!empty($_GET["koszyk"])) {
  2. switch($_GET["koszyk"]) {
  3. case "add":
  4. if ( isset($_POST['id']) ){
  5. $idtowaru = mysql_real_escape_string($_POST['id']);
  6. $koszykprodukt = mysql_query("select * from asortyment where id_towaru = '$idtowaru'");
  7. $Addrow=mysql_fetch_assoc($koszykprodukt);
  8. if ($Addrow['ilosc']<$_POST['ilosc']){
  9. $_POST['ilosc']=$Addrow['ilosc'];
  10. }
  11. $nowy_towar = array(array('nazwa'=>$Addrow['nazwa'], 'id_towaru'=>$Addrow['id_towaru'], 'ilosc'=>$_POST['ilosc'], 'cena'=>$Addrow['cena']));
  12. if (isset($_SESSION['koszyk'])){
  13. foreach ($_SESSION['koszyk'] as $dodaj_towar){
  14. if ($dodaj_towar['id_towaru']==$_POST['id']){
  15. $towar[] = array('nazwa'=>$dodaj_towar["nazwa"], 'id_towaru'=>$dodaj_towar["id_towaru"], 'ilosc'=>$_POST['ilosc'], 'cena'=>$Addrow["cena"]);
  16. $istnieje = TRUE;
  17. }else{
  18. $towar[] = array('nazwa'=>$Addrow['nazwa'], 'id_towaru'=>$Addrow['id_towaru'], 'ilosc'=>$_POST['ilosc'], 'cena'=>$Addrow['cena']);
  19. $istnieje = FALSE;
  20. }
  21. }
  22. if (istnieje == TRUE){
  23. $_SESSION["koszyk"] = $towar;
  24. }else{
  25. $_SESSION["koszyk"] = array_merge($towar, $nowy_towar);
  26. }
  27. }else{
  28. $_SESSION['koszyk']=$nowy_towar;
  29. }
  30. }
  31. break;
  32. case "remove":
  33. foreach ($_SESSION['koszyk'] as $usun_towar){
  34. if($_GET["id"] == $usun_towar['id_towaru']){
  35. unset($_SESSION["koszyk"][$usun_towar]);
  36. }
  37. }
  38. break;
  39. default:
  40.  
  41. break;
  42. }
  43. }

Skrypt wyświetlający produkty w tabeli:
  1. if(isset($_SESSION["koszyk"]))
  2. {
  3. echo "Produkty w koszyku: <br>";
  4. echo "<table class='tabelka'>";
  5. echo "<tr>";
  6. echo "<td class='tabelka_nazwy'>Usuń</td>";
  7. echo "<td class='tabelka_nazwy'>Nazwa karty</td>";
  8. echo "<td class='tabelka_nazwy'>Ilosc</td>";
  9. echo "<td class='tabelka_nazwy'>Cena</td></font>";
  10. echo "<td class='tabelka_nazwy'>Suma</td></font>";
  11. echo "</tr>";
  12. foreach ($_SESSION["koszyk"] as $cart){
  13. echo "<tr class='swap'>";
  14. echo "<td><a class='links2' href='koszyk.php?koszyk=remove&id=".$cart['id_towaru']."'>Usuń</a></td>";
  15. echo "<td>".$cart['nazwa']."</td>";
  16. echo "<td>".$cart['ilosc']." szt.</td>";
  17. echo "<td>".$cart['cena']."zł</td>";
  18. $suma=$cart['cena']*$cart['ilosc'];
  19. $razem=$razem+$suma;
  20. echo "<td>".$suma."zł</td>";
  21. echo "</tr>";
  22. }
  23. echo "</table>";
  24. echo "<b>Razem: </b>".$razem."zł";
  25. if (!empty($_POST['link'])){
  26.  
  27. }else{
  28. $_POST['link']="katalog.php";
  29. }
  30. echo "<center><b><a href='".$_POST['link']."' class='links2'>Kontynuuj zakupy</a></b></center>";
  31. }else{
  32. echo "<b>Twój koszyk jest pusty!</b>";
  33. }
  34. }

Katalog produktów:
  1. if ($obAmount==0){
  2. echo '<font size="5">Wyniki wyszukiwania: </font><br>';
  3. echo '<font color="red" size="4">Nic nie znaleziono!</font>';
  4. echo '<br><br><br><br><br><br><br><br>';
  5. }else{
  6. echo '<font size="5">Wyniki wyszukiwania: </font><br>';
  7. echo'Znaleziono: '.$obAmount.' produktów<br /><br />';
  8. echo "<table class='tabelka'>";
  9. echo "<tr>";
  10. echo "<td class='tabelka_nazwy' onclick=''>Obrazek</td>";
  11. echo "<td class='tabelka_nazwy'>Nazwa karty</td>";
  12. echo "<td class='tabelka_nazwy'>Ilosc</td>";
  13. echo "<td class='tabelka_nazwy'>Stan</td>";
  14. echo "<td class='tabelka_nazwy'>Edycja</td>";
  15. echo "<td class='tabelka_nazwy'>Cena</td></font>";
  16. echo "<td class='tabelka_nazwy'>Koszyk</td></font>";
  17. echo "</tr>";
  18. for($x=0;$x<$obAmount;$x++)
  19. {
  20. $row=mysql_fetch_assoc($result);
  21. echo "<tr class='swap'>";
  22. echo "<td><img class='image' align='center' src='images/cards/".$row['id_towaru'].".jpg'></img></td>";
  23. echo "<td>".$row['nazwa']."</td>";
  24. echo "<td>".$row['ilosc']."</td>";
  25. echo "<td>".$row['stan']."</td>";
  26. echo "<td>".$row['edycja']."</td>";
  27. echo "<td>".$row['cena']."zł</td>";
  28. echo "<form method='POST' action='koszyk.php?koszyk=add'>";
  29. 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>";
  30. echo "</td>";
  31. echo "</form>";
  32. echo "</tr>";
  33. }
  34. echo '</table>';
freewalker
INSERT INTO tabela VALUES ('','zmienna1','zmienna2');

ta pierwsza wartość powinna być pusta a tabela powinna mieć ten rekord ustawiony na auto_increment,INT, UNSIGNED, UNIQUE, w ten sposób zapewnisz sobie unikalność wpisów
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.