Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP][MYSQL]Koszyk na zakupy - problem z SQL
Rahman
post 22.05.2008, 02:12:48
Post #1





Grupa: Zarejestrowani
Postów: 20
Pomógł: 0
Dołączył: 10.01.2008

Ostrzeżenie: (0%)
-----


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

Ten post edytował Cysiaczek 23.05.2008, 04:48:34
Powód edycji: dodałem tag (cysiaczek)
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 6)
Cysiaczek
post 22.05.2008, 03:18:13
Post #2





Grupa: Moderatorzy
Postów: 4 465
Pomógł: 137
Dołączył: 26.03.2004
Skąd: Gorzów Wlkp.




To nie ten dział, bo zadań domowych nie odrabiamy. Przenoszę na Giełda Ofert -> Poszukuję i opatruje tagiem [wolontariat].


--------------------
To think for yourself you must question authority and
learn how to put yourself in a state of vulnerable, open-mindedness;
chaotic, confused, vulnerability, to inform yourself.
Think for yourself. Question authority.
Go to the top of the page
+Quote Post
Rahman
post 22.05.2008, 14:06:37
Post #3





Grupa: Zarejestrowani
Postów: 20
Pomógł: 0
Dołączył: 10.01.2008

Ostrzeżenie: (0%)
-----


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!

Ten post edytował Rahman 22.05.2008, 14:14:12
Go to the top of the page
+Quote Post
Hacker
post 22.05.2008, 14:43:24
Post #4





Grupa: Zarejestrowani
Postów: 225
Pomógł: 0
Dołączył: 1.11.2005

Ostrzeżenie: (0%)
-----


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


--------------------
(\.../)This is Bunny
(O.o)Copy Bunny into your signature to help him...
(> <)...on his way to world domination
Go to the top of the page
+Quote Post
Rahman
post 22.05.2008, 15:19:12
Post #5





Grupa: Zarejestrowani
Postów: 20
Pomógł: 0
Dołączył: 10.01.2008

Ostrzeżenie: (0%)
-----


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

Ten post edytował Rahman 22.05.2008, 15:24:29
Go to the top of the page
+Quote Post
Cysiaczek
post 22.05.2008, 22:31:30
Post #6





Grupa: Moderatorzy
Postów: 4 465
Pomógł: 137
Dołączył: 26.03.2004
Skąd: Gorzów Wlkp.




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)


--------------------
To think for yourself you must question authority and
learn how to put yourself in a state of vulnerable, open-mindedness;
chaotic, confused, vulnerability, to inform yourself.
Think for yourself. Question authority.
Go to the top of the page
+Quote Post
Rahman
post 24.05.2008, 00:11:17
Post #7





Grupa: Zarejestrowani
Postów: 20
Pomógł: 0
Dołączył: 10.01.2008

Ostrzeżenie: (0%)
-----


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

Ten post edytował Rahman 27.05.2008, 20:15:38
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 14.08.2025 - 03:35