Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Koszyk na zakupy
Forum PHP.pl > Forum > PHP
kakq
Tym razem mam nadzieje ze mi ktos pomoze a nie mi zamknie moj temat.

Zajrzałbyś do regulaminu - nie byłoby problemów - NuLL

Witam pisze maly sklepik internetowy i mam taki problem: artykuly dodane do koszyka powiedzmy 3 i kazdego jest po 2 w koszyku zapisywane sa do bazy danch

  1. CREATE TABLE `sklep_zamowienia` (
  2. `id` int(5) NOT NULL AUTO_INCREMENT,
  3. `produkt` varchar(5) DEFAULT NULL,
  4. `cena` varchar(100) DEFAULT NULL,
  5. `z_ilosc` varchar(200) NOT NULL DEFAULT '',
  6. `uid` varchar(100) NOT NULL DEFAULT '',
  7. PRIMARY KEY (`id`)
  8. ) TYPE=MyISAM AUTO_INCREMENT=46 ;



ale nie zupelnie poniewaz do bazy zapisuje sie tylko jeden produkt z koszyka ten ostatni ktory zostal do niego dodany.

Jak zrobic by do bazy dodawaly sie wszystkie produkty z koszyka?questionmark.gif?
Koszyk juz dzialal i wszystko bylo ok ale musialem dorobic zamawianie w ilosciach produktow a nie tylko jeden i od tego mometu niemoge sobei poradzic:(

To jest skrypt koszyka:

  1.     
  2. <?
  3. ?>
  4. <?='<?xml version="1.0" encoding="ISO-8859-2"?>';?>
  5. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
  6.   "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
  7. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="pl"><head>
  8. <meta http-equiv="Content-type" content="text/html; charset=iso-8859-2" />
  9. <title>tytuł strony</title></head><body>
  10.  
  11. <p><b>Koszyk</b> / <a href="index.php">wróć do towarów</a></p>
  12.  
  13. <?
  14. $sql_serwer = "";
  15. $sql_login  = "";
  16. $sql_haslo  = "";
  17. $sql_baza   = "";
  18. $sql_tabela = "sklep_produkty";
  19.  
  20. function odbierz($txt) {
  21.   if (get_magic_quotes_gpc()) $txt = stripslashes($txt);
  22.   return str_replace(array('',"'"), array('',"'"), trim($txt));
  23. }
  24.  
  25.  
  26. $id = odbierz($_REQUEST["id"]);
  27. $sz = isset($_REQUEST["sz"])?number_format($_REQUEST["sz"],0,".",""):"";
  28.  
  29. if ($id<>"") {
  30.   if (mysql_connect($sql_serwer, $sql_login, $sql_haslo)
  31.     and mysql_select_db($sql_baza)) {
  32.     $wynik = mysql_query("SELECT * FROM $sql_tabela WHERE id='$id'");
  33.     
  34.       
  35.  
  36.   }
  37.   if ($wynik and mysql_num_rows($wynik)==1) {
  38.     $dane = mysql_fetch_array($wynik);
  39.     $_SESSION["koszyk"]["$id"]["nazwa"]=$dane["nazwa"];
  40.     $_SESSION["koszyk"]["$id"]["cena"]=$dane["cena"];
  41.  
  42.     if ($sz=="") $_SESSION["koszyk"]["$id"]["ile"]++;
  43.     else if ($sz>=1) $_SESSION["koszyk"]["$id"]["ile"]=$sz;
  44.     else if ($sz<=0) unset($_SESSION["koszyk"]["$id"]);
  45.   }
  46. }
  47.  
  48.  
  49. if (count($_SESSION["koszyk"])>0) {
  50.   echo "<table border="1">
  51.   <colgroup>
  52.     <col />
  53.     <col align="right" />
  54.     <col align="center" />
  55.     <col align="right" />
  56.   </colgroup>
  57.   <tr><th>nazwa</th><th>cena</th><th>sztuk</th><th>łącznie</th></tr>";
  58.  
  59.   foreach($_SESSION["koszyk"] as $indeks=>$kosz) {
  60.     echo "<tr>";
  61.     echo "<td>{$kosz["nazwa"]}</td>";
  62.     echo "<td>{$kosz["cena"]} zł</td>";
  63.     echo "<td>
  64.     <form action="koszyk.php" method="get" style="display:inline;">
  65.       <div style="display:inline;">
  66.       <input type="hidden" name="id" value="$indeks" />
  67.       <input type="text" name="sz" value="{$kosz["ile"]}"
  68.         style="width:25px;" />
  69.       <input type="submit" value="zmień" style="width:45px;" />
  70.     </div></form>
  71.     <form action="koszyk.php" method="get" style="display:inline;">
  72.       <div style="display:inline;">
  73.       <input type="hidden" name="id" value="$indeks" />
  74.       <input type="hidden" name="sz" value="0"
  75.         style="width:25px;" />
  76.       <input type="submit" value="usuń" style="width:45px;" />
  77.     </div></form>
  78.     </td>";
  79.     echo "<td>".number_format($kosz["cena"]*$kosz["ile"],2,".","");
  80.     echo " zł</td>";
  81.     echo "</tr>";
  82.     $lacznie +=$kosz["cena"]*$kosz["ile"];
  83.     
  84.     
  85.   }
  86.   echo "<tr><td colspan="3" align="right">
  87.   w sumie: </td><td>";
  88.   echo number_format($lacznie,2,".","")." zł</td></tr>";
  89.   echo "</table>";
  90.  
  91.  
  92.  
  93. ?>
  94.     
  95.     
  96.     <form method="post" action="d_zamow.php">
  97.         
  98.         <input type="hidden" name="id" value="$indeks" />
  99.                   <input type="hidden" name="id" value="$indeks" />
  100.       <input type="hidden" name="sz" value="0"
  101.         style="width:25px;" />
  102.  
  103. <input type="hidden" name="id" value="<? echo $indeks; ?>">    
  104. <input type="hidden" name="zamowienie" value="nowe">
  105. <input type="hidden" name="sz" value="<? echo $kosz["ile"]; ?>">
  106. <P>
  107.     <input type="submit" name="submit" value="Dodaj  do koszyka"></p>
  108. </form>
  109.     
  110.     
  111.     
  112.  
  113.  
  114.     <?
  115.     mysql_close();
  116.   
  117. } else echo "<p>Koszyk jest pusty...</p>";
  118.  
  119.  
  120.  
  121.  
  122.  
  123. ?>
  124.  
  125. </body>
  126. </html>


A to skrypt dodawania do bazy:
Kod php:
  1. <?
  2. include("./polacz.php");
  3.  
  4. if ($id) {
  5.     $sesia = $HTTP_COOKIE_VARS["sesia"];
  6.     if ($zamowienie == 'nowe') {
  7.         
  8.  
  9.         
  10.         $query = "insert into sklep_zamowienia (produkt,uid,z_ilosc) values ('$id','$sesia','$sz')";
  11.         mysql_query($query);
  12.  
  13.     
  14.     } elseif ($zamowienie == 'zmiana') {
  15.         $query = "update sklep_zamowienia set  z_ilosc='$ile' where z_uid='$sesia' and z_id='$id'";
  16.         mysql_query($query);
  17.         ?>zmieniono zamówienie<?
  18.     }
  19. }
  20. }
Nosfi
hmm ..

Nie wiem w czym masz problem ... z tego co widze dla kazdej pozycji znajdujacej sie w koszyku generujesz osobny formularz zmiany ilosci:

  1. <?php
  2.  
  3. foreach($_SESSION["koszyk"] as $indeks=>$kosz) {
  4. // [...]
  5. echo "
  6. <form action="koszyk.php" method="get" style="display:inline;">
  7. <div style="display:inline;">
  8. <input type="hidden" name="id" value="$indeks" />
  9. <input type="text" name="sz" value="{$kosz["ile"]}"
  10. style="width:25px;" />
  11. <input type="submit" value="zmień" style="width:45px;" />
  12. </div></form>
  13. ";
  14. // [...]
  15. }
  16.  
  17. ?>

przez co modyfikacji ulega konkretna pozycja

moze wygodniej bylo by wszystkie pozycjie zarzucic do tablicy:
  1. <?php
  2.  
  3. echo '<form action="koszyk.php" method="post">';
  4.  
  5. $counter = 0;
  6. foreach($_SESSION["koszyk"] as $indeks=>$kosz) {
  7.  $counter++;
  8.  // [...]
  9.  echo '
  10. <input type="hidden" name="id_' . $counter . '" value="' . $indeks . '"> 
  11. <input type="text" name="sz_' . $counter . '" value="' . $kosz["ile"] . '">
  12. ';  // ukryty identyfikator i wartosc do zmiany
  13.  
  14.  // [...]
  15. }
  16.  
  17. echo '
  18. <input type="hidden" name="elements" value="' . $counter . '"> 
  19. <input type="submit" value="zmień">
  20. </form>';
  21.  //pakujesz wszystko do tablicy
  22.  
  23. ?>

zmieniasz pola ILOSC we wszystkich polach i modyfikujesz je jednoczesnie:

  1. <?php
  2.  
  3. for($cal = 1; $cal <= $HTTP_POST_VARS['elements']; $cal++){
  4. $id_pozycji = $HTTP_POST_VARS['id_' . $cal];
  5. $sz_ilosc = $HTTP_POST_VARS['sz_' . $cal];
  6.  
  7. $query = "update sklep_zamowienia set z_ilosc='$sz_ilosc' where z_uid='$sesia' and z_id='$id_pozycji'";
  8. mysql_query($query);
  9. }
  10.  
  11. ?>


mogłdem coś pokręcić po drodze, ale chodzi głównie o samą idee ...

Pozdrówka
TomASS
Opisze jak to robie ja:

1. Mam dwie tabele: zamowienia i skladowe_zamowienia
2. Tabela zamowienia ma statusy (dostarczono, w drodze, do magazynu itp...miedzy innymi jest tam koszyk)
3. Tabela skladowe_zamowienia ma pole min. ID_zamowienia
4. Jesli dodaje cos do koszyka to sprawdzam czy ten klient ma juz zamowienie o statusie 'Koszyk', bo kilku takich nie moze miec. Jesli istnieje to, pobieram ID, a jesli nie istnieje, to tworze i tez mam ID.
5. Klient dodaje do tabeli skladowe_zamowienia
6. Gdy kliknie 'skaldam zamowienie' to zmieniam tylko status zamowienia o znanym ID.
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.