login  Naam:   Wachtwoord: 
Registreer je!
 Forum

Invalid argument supplied for foreach()

Offline qubus - 08/10/2010 11:10
Avatar van qubusLid Hallo,

Ik gebruik onderstaand script voor een winkelwagensysteem.
Op een bepaalde pagina kan men in zijn winkelwagen kijken, en dat werkt prima, maar...
Er staat de volgende warning in de code : Invalid argument supplied for foreach()
Ik heb al gezocht, en lees dat het er aan moet liggen dat de uit te lezen string geen array is.
Volgens mij is hij dat wel, waar gaat het dan fout?

De functie voor toevoegen cart:
  1. function addCart($aantal, $artikel) {
  2.  
  3. if (!isset($aantal) || !is_numeric($aantal) || !isset($artikel) || !is_numeric($artikel)) { exit(); }
  4.  
  5. // Controleren of er al inhoud is op de winkelwagen
  6. if (empty($_SESSION['cart'])){
  7. $_SESSION['cart'][] = array("aantal" => $aantal, "artikel" => $artikel);
  8.  
  9. } else {
  10. $add = TRUE;
  11. foreach($_SESSION['cart'] as $index=>$inhoud){
  12. if ($inhoud['artikel'] == $artikel) { // Product al in de winkelwagen, dus aantal ophogen
  13. $_SESSION['cart'][$index]['aantal'] = $_SESSION['cart'][$index]['aantal'] + $aantal;
  14. $add = FALSE;
  15. }
  16. }
  17. if ($add) { // Niet aanwezig, dus toevoegen
  18. $_SESSION['cart'][] = array("aantal" => $aantal, "artikel" => $artikel);
  19. }
  20. }
  21. //return (print_r($_SESSION['cart']));
  22. }


En het stukje waarmee ik de $_SESSION['cart'] uit lees om weer te geven:

  1. foreach($_SESSION['cart'] as $index=>$product) {
  2. $query = mysql_query("SELECT naam, prijs, actieprijs, btw FROM artikelen WHERE id = '".$product['artikel']."'");
  3. $result = mysql_fetch_array($query);
  4. $query2 = mysql_query("SELECT percentage FROM btw WHERE id = '".$result['btw']."'");
  5. $result2 = mysql_fetch_array($query2);
  6. if ($result['actieprijs'] > 0) { $prijs = ($result['actieprijs'] / 100) * (100 + $result2['percentage']); }
  7. else { $prijs = ($result['prijs'] / 100) * (100 + $result2['percentage']); }
  8. ?>
  9. <tr>
  10. <td>
  11. <a href="index.php?pagina=cart&amp;verwijder=<? echo $product['artikel']; ?>"><img src="./image/verwijder_klein.png" border="0" alt="<? echo LANG_VERWIJDER; ?>" title="<? echo LANG_VERWIJDER; ?>" /></a>
  12. </td>
  13. <td align="center">
  14. <? echo $product['aantal']; ?>
  15. </td>
  16. <td>
  17. <a href="index.php?pagina=shop_artikel_detail&amp;id=<? echo $product['artikel']; ?>"><? echo $result['naam']; ?></a>
  18. </td>
  19. <td align="center">
  20. <? echo number_format($prijs, 2); ?>
  21. </td>
  22. <td align="center">
  23. <? $prijs2 = $product['aantal'] * number_format($prijs, 2);
  24. echo number_format($prijs2, 2);
  25. $totaalbedrag = $totaalbedrag + ($product['aantal'] * number_format($prijs, 2));
  26. ?>
  27. </td>
  28. </tr>
  29. <? } ?>


Hulp wordt zeer gewaardeerd, alvast bedankt!

2 antwoorden

Gesponsorde links
Offline Martijn - 08/10/2010 13:39
Avatar van Martijn Crew PHP zet dit is boven je foreach, dan zie je wat de waarde is:

  1. echo "<pre>";
  2. print_r($_SESSION['cart']);
  3. echo"</pre>";
Offline Filip - 08/10/2010 16:11 (laatste wijziging 08/10/2010 16:12)
Avatar van Filip IRC guru ipv je empty check kan je beter !is_array($_SESSION['cart']) controleren. Het moet een array zijn voor die in je foreach kan, en als er geen array inzit zitten er ook geen producten in.
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.204s