Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP] KOSZYK SKLEPU, dodawanie produktu do koszyka
kielich
post
Post #1





Grupa: Zarejestrowani
Postów: 442
Pomógł: 4
Dołączył: 28.12.2008
Skąd: Warszawa

Ostrzeżenie: (20%)
X----


Witam,
Tworzę koszyk i mam błąd który nie wiem jak obejść mianowicie o to kod:

  1. $koszyk = new Zend_Session_Namespace('koszyk'); //Zmienna sesyjna koszy
  2.  
  3. $dane['id'] = $id;
  4. $dane['sztuk'] = 1;
  5. $koszyk->dane[] = $dane;
  6.  
  7.  
  8. if($id==1): //sprawdzamy czy juz jest to id (ja sprawdzałem tylko na ID 1 - dla większego komfortu (IMG:style_emoticons/default/tongue.gif) )
  9. foreach($koszyk->dane as $dane => $k):
  10. $koszyk->dane[$dane]['sztuk'] ++; //zwiekszamy liczbe sztuk o jeden
  11. endforeach;
  12. endif;
  13.  
  14. print_r($koszyk->dane);

i błąd polega na tym że dodaje tę 1 sztukę więc tak jak ma dodawać ale dodatkowo tworzy nowe rekordy w tablicy a ja bym chciał aby zmienił tylko ilość w danym produkcie.
Gdzie się zakręciłem (IMG:style_emoticons/default/questionmark.gif)

Ten post edytował kielich 8.08.2010, 21:23:06
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
zegarek84
post
Post #2





Grupa: Zarejestrowani
Postów: 1 332
Pomógł: 294
Dołączył: 12.10.2008
Skąd: Olkusz

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


zamień tą metodę na inną - trochę mi tu coś nie gra - nie wiem, czy masz gdzieś redirekta czy co [akurat nie w metodzie], jeśli już to wcześniej zobaczysz skok o 2 [zamieniłem też tutaj strukturę tabeli koszyka]:
  1. public function koszykAction() {
  2. $filtr = new Application_Model_statyczne_filtry();
  3. $id = (integer) $filtr->filtrowanie_id($this->getRequest()->getParam('id'));
  4. $koszyk = new Zend_Session_Namespace('koszyk');
  5. $koszyk->setExpirationSeconds(7200);
  6.  
  7. if (isset($id) && $id !== 0):
  8. if (!isset($koszyk->dane[$id])) { //DODAWANIE
  9. $dane = array('sztuk'=>1);
  10. $koszyk->dane[$id] = $dane;
  11. } else { //ZWIĘKSZANIE LICZBY
  12. ++$koszyk->dane[$id]['sztuk'];
  13. }
  14. // WYŚWIETLANIE
  15. foreach ($koszyk->dane as $id_key => $info_produkt):
  16. echo 'To jest ID: ' . $id_key . ' ma sztuk: ' . $info_produkt['sztuk'] . '<br />';
  17. endforeach;
  18. endif;
  19. }
  20. // KOSZYK O STRUKTURZE
  21. //$koszyk->dane=array(
  22. // INTEGER_klucz_produktu => ARRAY_dodatkowe_dane_produktu
  23. //);

a wogóle to bym to podzielił na 2 części razem z redirektem gdyż różne rzeczy o indexacji słyszałem...
  1. class koszyk {
  2.  
  3. private $koszyk;
  4.  
  5. public function __construct() {
  6. $this->koszyk = new Zend_Session_Namespace('koszyk');
  7. $this->koszyk->setExpirationSeconds(7200);
  8. }
  9.  
  10. public function dodajAction() {
  11. $filtr = new Application_Model_statyczne_filtry();
  12. $id = (integer) $filtr->filtrowanie_id($this->getRequest()->getParam('id'));
  13. $this->koszyk = new Zend_Session_Namespace('koszyk');
  14. $this->koszyk->setExpirationSeconds(7200);
  15.  
  16. if (isset($id) && $id !== 0):
  17. if (!isset($this->koszyk->dane[$id])) { //DODAWANIE
  18. $dane = array('sztuk'=>1);
  19. $this->koszyk->dane[$id] = $dane;
  20. } else { //ZWIĘKSZANIE LICZBY
  21. ++$this->koszyk->dane[$id]['sztuk'];
  22. }
  23. endif;
  24. // PRZEKIEROWUJEMY NA KOSZYK COBY WYŚWIETLIĆ ZAWARTOŚĆ
  25. header('Location: ' . $ADRES_DO_KOSZYKA);
  26. }
  27.  
  28. public function koszykAction() {
  29. // WYŚWIETLANIE ZAWARTOŚCI
  30. $str = '';
  31. foreach ($this->koszyk->dane as $id_key => $info_produkt):
  32. $str .= 'To jest ID: ' . $id_key . ' ma sztuk: ' . $info_produkt['sztuk'] . '<br />';
  33. endforeach;
  34. return $str;
  35. }
  36. }
  37.  
  38. //a tak najlepiej to by było dane przekazywać metodą POST gdzie jeszcze dodatkowo mógłbyś zdefiniować ile sztuk ktoś chce kupić
  39. class koszyk2 {
  40.  
  41. private $koszyk;
  42.  
  43. public function __construct() {
  44. $this->koszyk = new Zend_Session_Namespace('koszyk');
  45. $this->koszyk->setExpirationSeconds(7200);
  46. }
  47.  
  48. public function dodajAction() {
  49. $id = (integer) $_POST['id'];
  50. $ile = (integer) $_POST['ile'];
  51. // PASUJE SPRAWDZIĆ ALBO TUTAJ ALBO PRZY WYŚWIETLANIU CZY JEST W BAZIE PRODUKT O TYM ID - PROPONUJĘ PRZY WYŚWIETLANIU I JEŚLI W BAZIE NIE MA TO TAKIE INDEKSY POUSUWAĆ
  52. // TRZEBA JESZCZE PAMIĘTAĆ, BY KTOŚ NIE ZAMÓWIŁ WIĘCEJ NIŻ JEST DOSTĘPNYCH PRODUKTÓW
  53. // CENY NIE PRZECHOWUJ W SESJI ZWŁASZCZA JESLI KOSZYK CHOĆ KILKA GODZIN MA ŻYWOTNOŚCI - POBIERAJ PRZY WYŚWIETLANIU Z BAZY...
  54. if ($id !== 0 && $ile !== 0):
  55. if (!isset($this->koszyk->dane[$id])) { //DODAWANIE
  56. $dane = array('sztuk'=>$ile);
  57. $this->koszyk->dane[$id] = $dane;
  58. } else { //ZWIĘKSZANIE LICZBY - o tyle ktoś dokupuje
  59. $this->koszyk->dane[$id]['sztuk'] += $ile;
  60. }
  61. endif;
  62. // PRZEKIEROWUJEMY NA KOSZYK COBY WYŚWIETLIĆ ZAWARTOŚĆ
  63. header('Location: ' . $ADRES_DO_KOSZYKA);
  64. }
  65.  
  66. public function koszykAction() {
  67. if (reset($this->koszyk->dane) === false) return false; //PUSTY KOSZYK I NIC NIE MA - ZWRACAMY JAKIŚ WIDOK PUSTKI...
  68. // POBIERAMY AKTUALNE INFO z bazy w stylu "SELECT * FROM produkty WHERE `id` IN (...)
  69. $in = implode(', ', array_keys($this->koszyk->dane));
  70. // $sql='SELECT * FROM `produkty` WHERE `id` IN ('.$in.')';
  71. //...
  72. //ODPYTUJEMY BAZE O AKTUALNE PRODUKTY;
  73. $produkty_z_bazy = array();//NIE PUSTE JUŻ... I NAJLEPIEJ TAK JUŻ UŁOŻONY JAK W KOSZYKU PO ID PRODUKTU
  74. // CENĘ W BAZIE PRZECHOWYWAĆ JAKO INTEGER A POTEM PODZIELIĆ PRZEZ 100..
  75. // JAK NIE MUSZE TO NIE UŻYWAM FOREACH - ALE RÓŻNICY TO NIE ROBI
  76. $to_del = array();
  77. $bufor = '';
  78. $razem = 0;
  79. do {
  80. $id_key = key($this->koszyk->dane);
  81. if (!isset($produkty_z_bazy[$id_key])) {
  82. $to_del[] = $id_key;
  83. continue; // POMIJAMY NIE POPRAWNE WIERSZE
  84. };
  85. // TRZA BY ZROBIĆ JESZCZE JEDNEGO IFA CZY PRODUKTU W BAZIE NIE MA MNIEJ NIŻ W KOSZYKU I JESLI TAK TO W KOSZYKU ZMIENIĆ LICZBĘ NA MNIEJSZĄ
  86. $sztuk = $this->koszyk->dane[$id_key]['sztuk'];
  87. $za_produkt_razem = $sztuk * $produkty_z_bazy[$id_key]['cena'];//cena dalej jest 100 razy większa.
  88. $razem += $za_produkt_razem;
  89. $bufor .= 'To jest ID: ' . $id_key . ' ma sztuk: '
  90. . $this->koszyk->dane[$id_key]['sztuk'] . ' o łącznej wartości: '
  91. . floor($za_produkt_razem / 100) . ',' . $za_produkt_razem % 100 . '<br />';
  92. } while (next($this->koszyk->dane) !== false);
  93. if (isset($to_del[0]))
  94. for ($i = 0, $count = count($to_del);$i < $count;++$i)
  95. unset($this->koszyk->dane[$i]);
  96. $bufor .= 'RAZEM: ' . floor($razem / 100) . ',' . $razem % 100;
  97. return $bufor;
  98. }
  99. }
Go to the top of the page
+Quote Post

Posty w temacie
- kielich   [PHP] KOSZYK SKLEPU   8.08.2010, 13:10:02
- - nospor   $koszyk->dane[] = $dane; przeciez ten...   8.08.2010, 13:18:33
- - kielich   tak wiem . Wypisałem tak [PHP] pobierz, plaintext...   8.08.2010, 14:25:54
- - dr_bonzo   Do koszyka wstawiaj strukture/obiekt ktor bedzie z...   8.08.2010, 15:43:33
- - kielich   napisałem tak [PHP] pobierz, plaintext $kos...   8.08.2010, 20:08:33
|- - zegarek84   zwróć uwagę jak wstawiasz do koszyka kolejne produ...   9.08.2010, 10:32:07
- - kielich   Dziękuje za opowiedz ale szczerze mówiąc do niczeg...   9.08.2010, 11:06:54
- - zegarek84   pokaż gdzieś ale w całości skrypt którym dodajesz ...   9.08.2010, 11:22:05
- - kielich   O to cały kod [PHP] pobierz, plaintext publ...   9.08.2010, 11:30:53
|- - zegarek84   Cytat(kielich @ 9.08.2010, 11:30:53 )...   9.08.2010, 12:09:04
- - kielich   No jednak to nic nie dało kiedy dodam do koszyk wy...   9.08.2010, 12:25:18
- - zegarek84   to podaj gdzieś cały kod - zmienić się zmieniło bo...   9.08.2010, 12:34:15
- - kielich   Napisałem cały kod już jest po prostu użyty poprze...   9.08.2010, 12:43:49
- - zegarek84   czy na pewno zamieniłeś sobie te pętle foreach??.....   9.08.2010, 13:35:14
- - kielich   $id jest liczba(integer) jak widać jest filtr...   9.08.2010, 13:45:42
- - zegarek84   zamień tą metodę na inną - trochę mi tu coś nie gr...   9.08.2010, 16:22:51
- - kielich   Czy ty na prawdę pisałeś to specjalnie dla mnie ...   9.08.2010, 17:44:49
- - zegarek84   Cytat(kielich @ 9.08.2010, 18:44:49 )...   9.08.2010, 18:37:36


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

 



RSS Aktualny czas: 2.10.2025 - 16:58