Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MYSQL]Koszyk na zakupy - problem z SQL
Forum PHP.pl > Forum > Przedszkole
Rahman
Witam

Mam za zadanie do szkoły zrobić sklepik internetowy. W swojej bazie mam między innymi tabele:

Produkty: ID_prod pk, ID_kat pk, itd,
Koszyk: ID_koszyk int pk, ID_cookie varchar(50), ID_prod, ilosc,
Zamowienia: ID_zam pk, ID_klienta, suma, data, zrealizowane,
Pozycje_zamowienia: ID_zam, ID_prod, ilosc.

Skrypt na koszyk działa, bez problemu dodaje, usuwa, przelicza koszyk. Mam problem jak dalej przejść
z procesem zakupu, do realizacji. Chciałbym to zrobić w ten sposób:

W formularzu znajdującym sie w koszyk.php, mam ukryte pole ktorego wartością jest cookie kupującego.
Gdy chce zrealizować koszyk pobierane jest to polę, dodatkowo gdy nie jest zalogowany, przed realizacją koszyka wymuszane jest logowanie, przy logowaniu ustawiana jest zmienna $_SESSION['USERID'] na ID klienta pobrana z bazy danych. Dalej chce przerzucić zawartość tabeli koszyk do (poza ID_cookie i ID_koszyk) do tabeli pozycje_zamowione, oczywiscie tylko te rekordy gdzie pole ID_cookie w koszyku jest równe cookie przyznanemu klientowi, znając też id klienta, wrzucam do tabeli zamowienia dane, musze tez w formularzu miec ukryte pole przechowujące sumę zamówienia, po wrzuceniu danych do tabeli zamowienia i pozycje_zamowione chce usunąć koszyk, tak samo jesli klient nie zrealizuje zamowienia, to chce aby po uplywie np 24h zawartosc tabeli z polami o tym cookie była kasowana, i nie wiem za bardzo jak to zrobić żeby tak było, nie wiem jak stworzyć jakąś jakąś procedurkę przenoszącą z jednej tabelki do drugiej...

Kod
<a href="koszykowka.php">&lt;&lt; Kontynuuj zakupy</a>


Druga sprawa to jak zrobić żeby z poziomu koszyka wracać nie tylko do strony koszykówka.php, bo nie będzie wywoływany tylko z niej, ale zawsze do poprzedniej strony??

Muszę to pracę oddać na piątek, a jak nie będę miał koszyka w sklepie to porażka:/
Pomoże ktoś?

Jakby ktoś potrzebował wrzucam skrypt:
  1. <?php //ob_start();?>
  2.  
  3. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  4. <html xmlns="http://www.w3.org/1999/xhtml">
  5. <head>
  6. <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
  7. <script language="JavaScript">
  8.  
  9. function UpdateQty(item)
  10. {
  11. itemId = item.name;
  12. newQty = item.options[item.selectedIndex].text;
  13.  
  14. document.location.href = 'koszyk.php?action=update_item&id='+itemId+'&qty='+newQty;
  15. }
  16.  
  17. </script>
  18. <title>Untitled Document</title>
  19. </head>
  20.  
  21. <body>
  22. <table cellspacing="0" >
  23.  <tr>
  24. <td bgcolor="#FF0000"><font color="#FFFFFF">Ilosc</font></td>
  25. <td bgcolor="#FF0000"><font color="#FFFFFF">Produkt</font></td>
  26. <td bgcolor="#FF0000"><font color="#FFFFFF">Cena</font></td>
  27. <td bgcolor="#FF0000"><font color="#FFFFFF">Usun</font></td>
  28.  
  29.  
  30.  
  31.  
  32. <?php 
  33. require_once ("include/polaczenie.php");
  34.  /*$host = "localhost";
  35. $user = "test";
  36. $pass = "test";
  37. $dbname = "sklep";
  38.  
  39. $connection = mysql_connect($host,$user,$pass) or die (mysql_errno().": ".mysql_error()."<BR>");
  40. mysql_select_db($dbname); 
  41.  */
  42.  
  43.  
  44. function GetCartId()
  45. {
  46.  
  47.  
  48. if(isset($_COOKIE["ID_koszyk"]))
  49. {
  50. return $_COOKIE["ID_koszyk"];
  51. }
  52.  
  53. else
  54. {
  55. setcookie("ID_koszyk", session_id(), time()+((3600*24)*30));
  56.  
  57.  
  58. }
  59. }
  60.  
  61. switch($_GET["action"])
  62. {
  63. case "add_item":
  64. {
  65. AddItem($_GET["id"], $_GET["qty"]);
  66. ShowCart();
  67. break;
  68. }
  69. case "update_item":
  70. {
  71. UpdateItem($_GET["id"], $_GET["qty"]);
  72. ShowCart();
  73. break;
  74. }
  75. case "remove_item":
  76. {
  77. RemoveItem($_GET["id"]);
  78. ShowCart();
  79. break;
  80. }
  81. default:
  82. {
  83. ShowCart();
  84. }
  85. }
  86.  
  87. function ShowCart(){ 
  88.  
  89. $suma=mysql_query("select sum(ilosc) from koszyk");
  90. $row1 = mysql_fetch_array($suma);
  91.  
  92. $result = mysql_query("select * from koszyk inner join produkty on koszyk.ID_prod = produkty.ID_pr
    od where koszyk.ID_cookie = '"
     . GetCartId() . "' order by produkty.nazwa_prod asc");
  93. while($row = mysql_fetch_array($result))
  94. {
  95. // Increment the total cost of all items
  96.  $totalCost += ($row["ilosc"] * $row["cena"]);
  97.  
  98. ?>
  99. <tr>
  100. <td width="15%" height="25">
  101. <font face="verdana" size="1" color="black">
  102. <select name="<?php echo $row["ID_prod"]; ?>" onChange="UpdateQty(this)">
  103. <?php
  104.  
  105. for($i = 1; $i <= 20; $i++)
  106. {
  107. echo "<option ";
  108. if($row["ilosc"] == $i)
  109. {
  110. echo " SELECTED ";
  111. }
  112. echo ">" . $i . "</option>";
  113. }
  114. ?>
  115. </select>
  116. </font>
  117. </td>
  118. <td width="55%" height="25">
  119. <font face="verdana" size="1" color="black">
  120. <?php echo $row["nazwa_prod"]; ?>
  121. </font>
  122. </td>
  123. <td width="20%" height="25">
  124. <font face="verdana" size="1" color="black">
  125. PLN <?php echo number_format($row["cena"], 2, ".", ","); ?>
  126. </font>
  127. </td>
  128. <td width="10%" height="25">
  129. <font face="verdana" size="1" color="black">
  130. <a href="koszyk.php?action=remove_item&id=<?php echo $row["ID_prod"]; ?>">Usun</a>
  131. </font>
  132. </td>
  133. </tr>
  134. <?php
  135. }?>
  136. <form method="post" action="realizuj.php"/> 
  137. <tr><?php $ciastko=GetCartId(); ?>
  138. <input type="hidden" name="ciastko" value="<?php echo $ciastko;?>"/>
  139. <input type="hidden" name="suma" value="<?php echo $row1["sum(ilosc)"];?>"/>
  140. <td width="100%" colspan="4">
  141. <hr size="1" color="red" NOSHADE>
  142. </td>
  143. </tr>
  144. <tr>
  145. <td width="70%" colspan="2">
  146. <font face="verdana" size="1" color="black">
  147. <a href="koszykowka.php">&lt;&lt; Kontynuuj zakupy</a>
  148. </font>
  149. </td>
  150. <td width="30%" colspan="2">
  151. <font face="verdana" size="2" color="black">
  152. <b>Suma: <?php echo number_format($totalCost); echo $row["ilosc"];?>&nbsp;PLN&nbsp;&nbsp;&nbsp;Ilosc: <?php echo $row1["sum(ilosc)"];?></b>&nbsp;<input type="submit" value="Realizuj"/>
  153. </font>
  154. </td>
  155. </tr>
  156.  
  157. </form>
  158. </table>
  159.  
  160.  
  161. <?php
  162. }
  163.  
  164. ?>
  165.  
  166.  
  167. <?php
  168.  
  169.  
  170.  
  171. function AddItem($itemId, $qty)
  172. {
  173. $result=mysql_query("select count(*) from koszyk where ID_cookie='".GetCartId()."' and ID_prod=$itemId");
  174.  
  175. $row=mysql_fetch_row($result);
  176. $numRows=$row[0];
  177.  
  178. if($numRows==0)
  179. {
  180. //Produkt nie znajduje sie w koszyku wiec,
  181. //mozna go dodac
  182. @mysql_query("insert into koszyk(ID_cookie, ID_prod, ilosc) values('".GetCartId()."', $itemId, $qty)");
  183. }
  184. else
  185. {
  186. //Produkt jest juz w koszyku, zwiekszenie sztuk
  187. UpdateItem($itemId, $qty);
  188. }
  189.  
  190.  
  191.  
  192.  
  193.  
  194. }
  195. function UpdateItem($itemId, $qty)
  196. {
  197. mysql_query("update koszyk set ilosc=$qty where ID_cookie='".GetCartId()."' and ID_prod = $itemId");
  198. }
  199. function RemoveItem($itemId)
  200. {
  201. mysql_query("delete from koszyk where ID_cookie = '".GetCartId(). "' and ID_prod=$itemId");
  202. }
  203.  
  204. ?>
  205.  
  206.  
  207. </body>
  208. </html>
  209.  
  210.  
  211. <?php //ob_flush();
  212. ?>



Pozdrawiam
Cysiaczek
To nie ten dział, bo zadań domowych nie odrabiamy. Przenoszę na Giełda Ofert -> Poszukuję i opatruje tagiem [wolontariat].
Rahman
no dzięki za zajebistą pomoc!, a jakbym nie napisałem że to chodzi o zadanie domowe to byś nie przeniosła?, spoko, trzeba było do razu napisać ile za to chcesz, pozatym ja nie prosiłem o rozwiązanie na tacy, tylko o to czy jest możliwe, równocześnie do tabeli pozycje_zamowione wrzucić pobrany wczesniej klucz główny z tabeli zamówienia i równocześni skopiować do niej 2 pola z tabeli koszyk i tyle, a Ty przesniosłaś ten temat w miejsce które nikt nie zagląda, jeszcze raz dzięki śliczne, to jest właśnie typowa polska mentalność, pozdrawiam serdecznie!
Hacker
Jeżeli tylko o to pytasz czy to możliwe to odpowiem, że tak.
Będziesz z takiej odpowiedzi zadowolony? Nie sądzę.
Jakoś po Twoim pierwszym poście nie widać, że prosisz o pomoc (poza tytułem), a o gotowe rozwiązanie.
To jest właśnie typowa polska mentalność prośba o odrobienie pracy domowej bez żadnego własnego wkładu (dlaczego nie próbowałeś tego zrobić i w razie wystąpienia problemów napisać na forum?)
Zamknęli manual php i mysql?
Google na zapytanie "php mysql sklep" nie dawało żadnych wyników?
I jeszcze do tego masz pretensje do administratora, że przeniósł ten temat do odpowiedniego działu. Zastanów się czasem nad tym co piszesz...
Rahman
akurat się mylisz co do tego, moze źle sformułowałem ten temat i tak został odczytany i wiem co to jest dokumentacja i właśnie do niej zaglądam, i robię sam ten skrypt, po prostu doszedłem do miejsca w którym mam problem z komendą SQL, męcze ten koszyk i tyle, zresztą nie ważne już, nie wiesz ile pracy już w to włozyłem, co robię, jak to robię, że robię to za 2 osoby itd, więc swoje komentarze zachowaj dla siebie i nie oceniaj kogoś pochopnie.



Pozdrawiam
Cysiaczek
Podałeś jedynie, jak skrypt ma wyglądać (skrypt, nie zapytanie SQL). Za formę tego tematu, z którego niewiele można zrozumieć powinienem (to słowo sugeruje płeć : ) od razu go zamknąć i wywalić a Tobie kazać nauczyć się pisać po polsku, aby ktoś Cię mógł zrozumieć. Jedyne, co sie rzuca w oczy, to tekst o zadaniu domowym, które musisz mieć na piątek. Przeczytaj sobie:
Cytat
W formularzu znajdującym sie w koszyk.php, mam ukryte pole ktorego wartością jest cookie kupującego.
Gdy chce zrealizować koszyk pobierane jest to polę, dodatkowo gdy nie jest zalogowany, przed realizacją koszyka wymuszane jest logowanie, przy logowaniu ustawiana jest zmienna $_SESSION['USERID'] na ID klienta pobrana z bazy danych. Dalej chce przerzucić zawartość tabeli koszyk do (poza ID_cookie i ID_koszyk) do tabeli pozycje_zamowione, oczywiscie tylko te rekordy gdzie pole ID_cookie w koszyku jest równe cookie przyznanemu klientowi, znając też id klienta, wrzucam do tabeli zamowienia dane, musze tez w formularzu miec ukryte pole przechowujące sumę zamówienia, po wrzuceniu danych do tabeli zamowienia i pozycje_zamowione chce usunąć koszyk, tak samo jesli klient nie zrealizuje zamowienia, to chce aby po uplywie np 24h zawartosc tabeli z polami o tym cookie była kasowana, i nie wiem za bardzo jak to zrobić żeby tak było, nie wiem jak stworzyć jakąś jakąś procedurkę przenoszącą z jednej tabelki do drugiej...

i powiedz szczerze, czy to nie jest typowa polska mentalność - napisać coś bez ładu i składu i jeszcze mieć pretensje do całego Świata? Trzeba być wolontariuszem, żeby w ogóle starać się to zrozumieć. Rada moja jest taka - naucz się definiować problemy i prezentować je w prostych zdaniach.

Zamykam ten temat, bo nie ma o czym dyskutować. Jeśli jednak autor uważa inaczej, może sie skontaktować z kimkolwiek z zespołu moderującego i przedstawić swoje racje.

Pozdrawiam.

--edit - Przenoszę na Przedszkole i otwieram (będzie nowy post)
Rahman
Rozwiązałem już swój powyższy problem.

Mam pytanie odnośnie mojego koszyka, czy mogę jego zawartość pokazywać na innych stronach?
to znaczy zeby w naglowku strony była pokaza ilość i suma koszyka, jesli koszyk nie jest zrobiony na zmiennych sesji,
tylko operuje na tablicach?

Próbowałem zmienić zmienne na $_SESSION, zawartosc jest pokazywana wszedzie, z tym ze kiedy chce usunac jakis przedmiot z koszyka to jego wartosc i ilosc pozostaje, w odwrotna strone dziala dobrze. Istanieje jakis zasięg który będzie widoczny wszędzie poza $_SESSION?

Pomoze ktoś?


Pozdrawiam
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.