login  Naam:   Wachtwoord: 
Registreer je!
 Forum

aantal +1 in een array ipv nieuwe toevoegen

Offline JLT - 21/02/2006 16:12 (laatste wijziging 21/02/2006 16:36)
Avatar van JLTPHP interesse Hallo iedereen,

Ik ben redelijk nieuw met PHP. Ik ben bezig met het maken van een script voor een winkelmandje. Hierbij werk ik met een array welke gevuld wordt met de producten, aantal en prijzen. Deze array sla ik op in een sessie. Zodat ik deze later weer kan opvragen.

Tot dusver werkt alles goed behalve dat als ik nu 2x hetzelfde product aanklik ik 2x dit product te zien krijg. Graag wil ik zien dat het aantal veranderd van 1 in 2 of van 2 in 3 etc..

Hier is het stukje script waarmee ik bezig ben.

  1.  
  2. if ($_GET['winkel']) {
  3. $titel = $_GET['titel'] ;
  4. $aantal = 1 ;
  5. $prijs = $_GET['prijs'] ;
  6.  
  7. $_SESSION['winkel'][] = array(
  8. "titel" => $titel,
  9. "aantal" => $aantal,
  10. "prijs" => $prijs
  11. );


De variabelen laat ik binnenkomen d.m.v. de GET manier omdat ik deze in een link (url) verstuur naar deze pagina.

Zou iemand mij kunnen vertellen hoe ik een stukje script toevoeg dat ervoor zorgt dat er geen dubbele bestellingen in komen te staan????

Alvast super bedankt!
Jelte

6 antwoorden

Gesponsorde links
Offline Rens - 21/02/2006 16:54
Avatar van Rens Gouden medaille

Crew algemeen
  1. "aantal" => $_SESSION['winkel']['aantal']+1
Offline JLT - 22/02/2006 09:51
Avatar van JLT PHP interesse Hey Rensjuh,

Geloof dat dit wel moet gaan werken maar ik zie ff niet hoe. Moet ik nu een nieuw "if" statement maken en hier een vergelijking in zetten iets als dit...

  1. if ($_GET['titel']==$_SESSION['winkel']['titel']) {
  2. $_SESSION['winkel'][] = array(
  3. 'aantal' => $_SESSION['winkel']['aantal']+1
  4. );


Want dit werkt namelijk niet echt...? Zou je me nog heel even uit de brand kunnen helpen:D

Grtzz
Jelte
Offline Thomas - 22/02/2006 12:17 (laatste wijziging 22/02/2006 12:29)
Avatar van Thomas Moderator De methode van Rensjuh werkt niet als het item nog niet in je winkelmandje zit denk ik. Hoeveel is <onbekend> + 1?

Het is ook fout, omdat de index $_SESSION['winkel'][?]['aantal'] vergeten wordt...

Ik denk dat je onderscheid moet maken tussen het wel of niet aanwezig zijn van het product "titel" in je winkelmand. Je huidige opzet van de gegevensstructuur is niet echt handig, want je moet in $_SESSION['winkel'] gaan zoeken naar het product getiteld "titel"...

  1. <?php
  2.  
  3. if(isset($_GET['winkel'])) {
  4. $titel = $_GET['titel'];
  5. $prijs = $_GET['prijs'] ;
  6.  
  7. // zat het product al in je mandje? Zoeken :(
  8. $found = false;
  9. $i = 0;
  10. while(!$found && $i < sizeof($_SESSION['winkel']))
  11. {
  12. if($_SESSION['winkel'][$i]['titel'] == $titel) $found = true;
  13. $i++;
  14. }
  15.  
  16. // gevonden?
  17. if($found)
  18. {
  19. // verhoog aantal met 1
  20. $_SESSION['winkel'][$i]['aantal']++;
  21. }
  22. else
  23. {
  24. // product bestond nog niet - aanmaken
  25. $_SESSION['winkel'][] = array(
  26. "titel" => $titel,
  27. "aantal" => 1,
  28. "prijs" => $prijs
  29. );
  30. }
  31. }
  32. ?>

(code niet getest)

Ook zou ik niet met $_GET werken, of ten minste controleren of "titel" numeriek is (ik neem aan dat dit unieke product-id's zijn)?

Een handigere opzet van $_SESSION['winkel'] zou kunnen zijn:

  1. "winkel" => array(
  2. "product_id" => array(
  3. "prijs" => <prijs_hier>,
  4. "aantal" => <aantal_hier>
  5. )
  6. )


Dan kun je direct zien of een product al in je winkelmand voorkomt of niet...
Offline JLT - 22/02/2006 14:28 (laatste wijziging 22/02/2006 14:42)
Avatar van JLT PHP interesse De reden waarom ik zo werk is omdat ik vooraf niet weet wat de artikelen zijn en wat ze kosten. Elke maand komt er een nieuwe krant uit. Deze krant bevat boeken.

Deze boeken maak ik actief met een link waarin ik de variabelen mee zend. (link1.php?titel=dsds&prijs=8.60). Dit is de snelste manier voor mij. Vandaar! Hoe bedoel je dat laatste voorbeeld? Sorry maar ben niet nog niet zo lang bezig met complexe array's

Ik heb trouwens je script geprobeerd. Het doet al een stuk meer dan mijn scriptje Maar als ik twee verschillende voorwerpen toevoeg gaat alles nog goed totdat ik een tweede (van hetzelfde product) toevoeg. Dan telt het script 1 bij de onderste in de lijst dus niet het 1e voorwerp(welke ik 2x heb aangeklikt) maar het 2e voorwerp krijgt een 2 bij aantal???

Kijk hier anders maar even (stukje makkelijker dan uitleggen)
www.alphaplus.nl/ramsjkrant/test/test1.php

Wat nu linkjes zijn worden natuurlijk images... Dit is nog een test omgeving.

Groeten,
jelte
Offline Thomas - 22/02/2006 18:14
Avatar van Thomas Moderator Ow, je moet als ie een match vindt zorgen dat $i niet verhoogd wordt, dus regel 11 t/m 15 veranderen naar:

  1. while(!$found && $i < sizeof($_SESSION['winkel']))
  2. {
  3. if($_SESSION['winkel'][$i]['titel'] == $titel)
  4. {
  5. $found = true;
  6. }
  7. else
  8. {
  9. $i++;
  10. }
  11. }


Dan werkt het denk ik.
Offline JLT - 22/02/2006 19:18
Avatar van JLT PHP interesse Ja super dit werkt! Thanx.. Ik zal je scriptje eens goed onder de loep nemen. Kijken waar ik de fout ben in gegaan!

Grtz
Jelte
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.406s