login  Naam:   Wachtwoord: 
Registreer je!
 Forum

Winkelwagen class

Offline DaOxx - 25/10/2004 23:32 (laatste wijziging 25/10/2004 23:33)
Avatar van DaOxxPHP beginner Hallo allen,

Ik heb nu een class opgezet voor m'n winkelwagen alleen loop nog tegen een probleem aan:

Als ik een product toevoeg met bijvoorbeeld id 6 en vervolgens probeer ik dit nog een keer verhoogt hij hem netjes zoals het hoort. Als ik nu daarna product met bijvoorbeeld id 7 en vervolgens probeer ik dit nog een keer, dan verhoogt hij hem niet zoals hij eigenlijk wel zou moeten doen maar voegt hij hem opnieuw toe.

Dit is mijn class, heb nu al een hele tijd zitten zoeken maar ik kan het probleem niet vinden. Er zitten nu wel wat extra dingen in maar kijk daar maar niet naar want delete en de debug functie werkt gewoon. Hoop dat iemand van jullie het ziet bvd dank.
  1. <?php
  2. class ShoppingCar
  3. {
  4. var $input;
  5.  
  6. // Dit is de consturctor die aangeeft aan de class dat $input een array is.
  7. function ShoppingCar()
  8. {
  9. $this->input = $_SESSION['shop'];
  10. }
  11.  
  12.  
  13. // Dit is de functie die zoekt naar naar het product_id en deze terug stuurd.
  14. function findProduct($productId)
  15. {
  16. for ($i=0; $i < count($this->input); $i++)
  17. {
  18. if ($this->input[$i]['id'] == $productId)
  19. {
  20. return $i;
  21. }
  22. return -1;
  23. }
  24. }
  25.  
  26.  
  27. // Doormiddel van deze functie word er een product toegevoegd.
  28. function addProduct($productId,$productName,$productAantal)
  29. {
  30. // Hier bekijkt hij of het product id al in de array bestaat.
  31. $product = $this->findProduct($productId);
  32.  
  33. // In de functie FindProduct geeft hij of het productId mee terug of -1,
  34. // als hij groter is dan -1 bestaat hij al.
  35. if ($product > -1)
  36. {
  37. if ($this->input[$product]['name'] == $productName)
  38. {
  39. $this->input[$product]['aantal'] += $productAantal;
  40. } else {
  41. echo 'De ingevoerde productid komt al voor inde array maar de namen komen niet met elkaar overeen.';
  42. }
  43. // Beëindigd de functie.
  44. return;
  45. }
  46.  
  47. // Product toevoegen aan de array.
  48. $this->input[] = array('id' => $productId,
  49. 'name' => $productName,
  50. 'aantal' => $productAantal);
  51. }
  52.  
  53. // Doormiddel van deze functie word en één product verwijderd.
  54. function deleteProduct($productId)
  55. {
  56. // Word gezocht naar het product in de array, als hij niet bestaat is hij gelijk aan -1.
  57. $product = $this->findProduct($productId);
  58. if ($product == -1)
  59. {
  60. // Als hij gelijk is aan -1 functie beëndigen.
  61. return;
  62. }
  63. // Als hij wel bestaat verwijderen uit de array.
  64. unset($this->input[$product]);
  65. }
  66.  
  67. // Doormiddel van deze functie word de array in de class weer omgezet naar een sessie
  68. function setSession()
  69. {
  70. $_SESSION['shop'] = $this->input;
  71.  
  72. }
  73.  
  74. // Debug methode die alles in de array weergeeft.
  75. function debug()
  76. {
  77. echo'<code><pre>';
  78. print_r($this->input);
  79. echo'</pre></code>';
  80. }
  81. }
  82. ?>

7 antwoorden

Gesponsorde links
Offline Metalhead - 25/10/2004 23:35
Avatar van Metalhead HTML gevorderde Ik heb geen verstand van php, maar kan
$this->input[$product]['aantal'] += $productAantal
wel?
Offline DaOxx - 25/10/2004 23:37
Avatar van DaOxx PHP beginner Ja dat kan, en als je leest zie je dat het probleem niet daar ligt, kwam hij maar zover ;)
Offline bosgroen - 26/10/2004 01:10 (laatste wijziging 26/10/2004 01:13)
Avatar van bosgroen Gouden medaille

PHP interesse
ik vind de fout echt niet, toch enkele tips (opletten, eenvoudiger maken,...):
- kan je wel een array in een session steken (waarschijnlijk wel, maar ben het niet zeker)
- ipv van onbekende id's te gebruiken voor jouw input-array, kun je beter vandeneerstenkeer de productid gebruiken
  1. <?php
  2. $this->input[$productId] = array('id' => $productId,
  3. 'name' => $productName,
  4. 'aantal' => $productAantal);
  5.  
  6.  
  7.  
  8. //dan wordt deze functie een stuk makkelijker
  9. function findProduct($productId)
  10. {
  11. if(isset($this->input[$productId]))
  12. return $productId;
  13. else
  14. return -1;
  15. }
  16.  
  17. ?>

ochja, en werk je toch met die for-lus, dan zou ik je wel aanraden met een foreach-lus te werken, die maken de boel (de lus) een stuk makkelijker.
- kversta trouwens niet waarom je nog even controleert ofdat de productnamen gelijkend zijn

maar zoals al gezegd, ik vind geen fout
Offline DaOxx - 26/10/2004 12:20 (laatste wijziging 26/10/2004 12:21)
Avatar van DaOxx PHP beginner hoe wil je de foreach lus toepassen in deze situatie? Of heb je misschien een andere oplossing?
Offline xSc - 26/10/2004 12:30
Avatar van xSc Onbekend Ik heb het niet echt goed bestudeerd, maar is het niet zo dat de pointer binnen je (session)array aan het begin gezet moet worden?
Offline DaOxx - 26/10/2004 12:32
Avatar van DaOxx PHP beginner Ik gebruik de sessie niet om er doorheen te lopen. Zoals je ziet verwijs ik de sessie in de constructor naar de class $input var. Vervolgens roep ik daarna de setSession object aan. Op een of andere manier gaat er iets niet goed in de findProduct opbject, de pointer staat zeker op 0 want bij 0 is het de enige waar hij het goed doet.
Offline DaOxx - 26/10/2004 16:48
Avatar van DaOxx PHP beginner Heb zojuist eindelijk de fout gevonden en het is ook logisch ook namelijk het volgende:
Ik had dit en dit is fout:
  1. function findProduct($productId)
  2. {
  3. for ($i=0; $i < count($this->input); $i++)
  4. {
  5. if ($this->input[$i]['id'] == $productId)
  6. {
  7. return $i;
  8. }
  9. return -1;
  10. }
  11. }


Zo heb ik nu en zo werkt hij:
  1. function findProduct($productId)
  2. {
  3. for ($i=0; $i < count($this->input); $i++)
  4. {
  5. if ($this->input[$i]['id'] == $productId)
  6. {
  7. return $i;
  8. }
  9. }
  10. return -1;
  11. }


Ik had m'n return iets te vroeg ingezet waardoor hij net verder dan 0 door de array heen liep
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.218s