Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Cookies - Koszyk
Forum PHP.pl > Forum > PHP
Reptile ReX
Witam, mam pewne pytanie, mianowicie chcę zrobić koszyk oparty na Cookies i mam pewien problem.
Poleciałem na łatwiźnie i znalazłem klasę do obsługi koszyka.

Produkty ładnie wędrują do koszyka, ale chciałbym, aby ilość produktów tego samego produktu była sumowana.

Przedstawmy to tak:

Mamy do kupienia Marchewkę, kupujemy 100 sztuk (1 zł szt.) - do cookies "cart" wędruje ID_PROD - 100 - MARCHEWKA - 1.
Nagle dzwoni żona i mówi że potrzebuje jeszcze 50 marchewek, więc wklepujemy 50 i akceptujemy.

I chciałbym aby w cookies było:

ID_PROD - 150 - MARCHEWKA - 1

Niestety, naszym oczom pokazuje się tylko:

ID_PROD - 50 - MARCHEWKA - 1

Czyli uciekło nam 100 poprzednich marchewek.

Albo jestem już zmęczony i nie myślę logicznie, albo coś tutaj nie gra, proszę o jakąś podpowiedź.
Dołączam tą klasę, której używam, jest tam funkcja updateitem, ale nie za bardzo wiem jak i kiedy jej użyć.

Dziękuję

  1. <?php
  2. /*
  3. Basket class for e-commerce purpose
  4.  
  5. Version : 0.5
  6. Type:Class
  7. Category:Shopping Carts
  8. License: GNU General Public License
  9.  
  10. Description: This class provides methods for add, remove, update and remove all items
  11. from a basket. The basket works with a session cookie, saving the product ID
  12. and quantity in an array for simple accesing it.
  13. There's an example in this category... called "Basket example using basket class"
  14. */
  15.  
  16. class basket {
  17. var $items;
  18. var $empty;
  19.  
  20. function basket()
  21. {
  22. global $cart;
  23. if(isset($cart))
  24. {
  25. $this->items=unserialize(stripslashes($cart));
  26. if ( gettype($this->items) == "array" )
  27. {
  28. $this->empty=false;
  29. }
  30. else
  31. $this->empty=true;
  32. }
  33. else
  34. $this->empty=true;
  35. }
  36.  
  37. function additem($id, $name, $count, $prix)
  38. {
  39. if ($this->items[$id][1] > 0 )
  40. {
  41. $this->items[$id][1]+=$count;
  42. }
  43. else
  44. {
  45. $this->items[$id][0]=$name;
  46. $this->items[$id][1]=$count;
  47. $this->items[$id][2]=$prix;
  48. $this->items[$id][3]=stripslashes($name);
  49. }
  50. setcookie("cart",serialize($this->items),0,"/");
  51. $this->empty=false;
  52. }
  53.  
  54. function removeitem($id) {
  55. $tmp=""; // Don't forget to initialize !
  56. if(!$this->empty) {
  57. while(list($x,$y)=each($this->items)){
  58. if($x!=$id) $tmp[$x]=$y;
  59. };
  60. };
  61. $this->items=$tmp; // Or this will have no effect !
  62. setcookie("cart",serialize($this->items),0,"/");
  63. if(count($this->items)==0) $this->empty=true;
  64. }
  65.  
  66. function resetArray($basket)
  67. {
  68. reset($basket->items);
  69. }
  70.  
  71. function countItems($basket)
  72. {
  73. if(!$basket->empty)
  74. {
  75. while ( list($x,$y,) = each($basket->items) )
  76. {
  77. $ant++;
  78. }
  79. }
  80. return $ant;
  81. }
  82. function sumItems($basket)
  83. {
  84. if(!$basket->empty)
  85. {
  86. while ( list($x,$y,) = each($basket->items) )
  87. {
  88. $ant = $ant + $y[1];
  89. }
  90. }
  91. return $ant;
  92. }
  93. function printItems($b)
  94. {
  95. if(!$b->empty)
  96. {
  97. while ( list($x,$y,) = each($b->items) )
  98. {
  99. echo "$x ".$y[0]." ".$y[1]." <a href=\"kosz.php?action=R&id=$x\">Remove</a><br>";
  100. }
  101. }
  102. }
  103. function updateitem($id,$count){
  104. $this->items[$id][1]=$count;
  105. setcookie("cart",serialize($this->items),0,"/");
  106. }
  107.  
  108. function removeall(){
  109. setcookie("cart",NULL,0,"/");
  110. $this->empty=true;
  111. }
  112.  
  113. }
  114. ?>
CuteOne
Mamy to zrobić za ciebie?

1. Sprawdź czy cookie istnieje
2. Sprawdź czy product_id z cookie jest identyczny jak ten z którym chcesz go zsumować
3. Sumowanie i zapis
Reptile ReX
Cytat
Albo jestem już zmęczony i nie myślę logicznie, albo coś tutaj nie gra, proszę o jakąś podpowiedź.

Napisałem że proszę tylko o podpowiedź...

Wyszło moje zmęczenie, dzisiaj rano bez problemu rozwiązałem problem smile.gif.
Ale mam kolejny, mianowicie w ciastkach jest także SESSION_ID, a chciałbym wyświetlić sam koszyk...
Przy foreach wyczyta mi także session_id

Co mógłbym zrobić ?
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.