login  Naam:   Wachtwoord: 
Registreer je!
 Forum

multi array een waarde vervangen (Opgelost)

Offline GroundZero - 24/02/2014 15:05
Avatar van GroundZeroLid Beste,

ik heb een multi array en wil nu een waarde vervangen. Echter vervangt hij de waarde niet.

Onderstaand mijn code, daaronder wat uitleg.

  1. if($_SERVER['REQUEST_METHOD'] == 'POST')
  2. {
  3. $i = 0;
  4.  
  5. foreach($_POST['amount_id'] as $value)
  6. {
  7. if($_POST['amount'][$i] != '')
  8. {
  9. $duplicate = false;
  10.  
  11. // check if we already have this value in our basket
  12. // and if so, update the current one instead of adding
  13. // a new array to the list
  14. if(isset($_SESSION['basket']))
  15. {
  16. foreach($_SESSION['basket'] as $node => $content)
  17. {
  18. if($content['product_id'] == $value)
  19. {
  20. echo $content['product_aantal'].'<br />';
  21.  
  22. // vervang door de nieuwe waarde
  23. $content['product_aantal'] = 100;
  24. $duplicate = true;
  25. }
  26. }
  27. }
  28.  
  29. if($duplicate == false)
  30. {
  31. $_SESSION['basket'][] = array(
  32. "product_id" => $value,
  33. "product_aantal" => $_POST['amount'][$i]
  34. );
  35. }
  36. }
  37. $i++;
  38. }
  39. }


Ik kijk door middel van een foreach naar de inhoud van de bestaande sessie. Komt een product_id reeds voor dan wil ik die overschrijven met de nieuwe waarde.

Wanneer ik zeg "$content['product_aantal'] = 100;" dan werkt dit niet en blijft gewoon de oude waarde van kracht.

Echter weergeeft hij wel de echo correct.

Kan iemand mij vertellen wat ik verkeerd doe aub?

3 antwoorden

Gesponsorde links
Offline Thomas - 24/02/2014 15:35
Avatar van Thomas Moderator Dit zal best op te lossen zijn, maar ik zou een andere aanpak kiezen.

Je product_id identificeert uniek een product lijkt mij zo?
Waarom maak je geen mapping product_id => aantal? Dan wordt je code stukken simpeler lijkt mij.

In je formulier kun je iets soortgelijks uithalen voor $_POST, maak gebruik van "POST arrays":

Formulier:
  1. Product 25: <input type="text" name="product_quantity[25]" value="5" /> stuks.[+/-/verwijder knop hier]


Code voor verwerken (hierbij ga ik er vanuit dat product_quantity totalen bevat, geen verschillen):
  1. <?php
  2. // ...
  3. // nieuwe producten/hoeveelheden toegevoegd?
  4. if (isset($_POST['product_quantity'])) {
  5. foreach ($_POST['product_quantity'] as $product_key => $amount) {
  6. // wat extra controles hier, bestaand product, numerieke hoeveelheid,
  7. // misschien voorraad controleren om te zien of je genoeg hebt voor de aanschaf?
  8. // gewoon naar $_SESSION kopieren...
  9. $_SESSION['basket'][$product_key] = $amount;
  10. }
  11. }
  12. // ...
  13. ?>


Keep it simple...
Bedankt door: GroundZero
Offline GroundZero - 24/02/2014 15:41 (laatste wijziging 24/02/2014 16:02)
Avatar van GroundZero Lid Mooie oplossing inderdaad, zou je echter kunnen vertellen waar de fout hem bij mij in de code zit? gewoon puur zodat ik weet wat ik verkeerd doe en dit geen 2e keer meer doe ;)

en inderdaad, product_id is altijd een unieke id per product dat klopt 

EDIT:

dit had het moeten zijn:

  1. $_SESSION['basket'][$i]['product_aantal'] = $_POST['amount'][$i];
Offline Thomas - 24/02/2014 15:58
Avatar van Thomas Moderator Je schrijft de nieuwe waarde weg naar een tijdelijke variabele / index ($content['product_aantal']), niet naar $_SESSION .
Gesponsorde links
Je moet ingelogd zijn om een reactie te kunnen posten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.201s