login  Naam:   Wachtwoord: 
Registreer je!
 Forum

foreach() vraag (Opgelost)

Offline vh37 - 03/12/2009 20:08
Avatar van vh37Nieuw lid Hallo

Ik maak een winkelkarretje.
Ik wil dat gegevens uit mijn array worden verzonden via mail();
Maar als ik foreach gebruik(zoals hieronder vermeld) dan geeft ie het niet correct weer. Ik zou willen dat de gegevens zo uit zien in de verzonden e-mail:

Artikels Aantal Prijs
Product 1 | 2 | €5.00 |
Product 2 | 1 | €12.00 |

Kan dit?

  1. $aid = array();
  2. $anaam = array();
  3. $aprijs = array();
  4. $aqty = array();
  5. $output[] = '<form action="cart.php?action=update" method="post" id="cart">';
  6. $output[] = '<table width="500px" border="1">';
  7. $output[] = '<tr>';
  8. $output[] = '<td width="50%" align="center"><b>ARTIKEL</b></td>';
  9. $output[] = '<td width="15%" align="center"><b>AANTAL</b></td>';
  10. $output[] = '<td width="15%" align="center"><b>PRIJS</b></td>';
  11. $output[] = '<td align="center" width="20%"><b>VERWIJDER</b></td>';
  12. $output[] = '<tr>';
  13. $output[] = '</table>';
  14. foreach ($contents as $id=>$qty) {
  15. $select = mysql_query("SELECT * FROM webhosting WHERE id = '$id'") or die(mysql_error());
  16. while($g=mysql_fetch_object($select)){
  17. $prijs = $g->prijs;
  18.  
  19. $output[] = '<table width="500px" border="1">';
  20. $output[] = '<tr>';
  21. $output[] = '<td width="50%">'.$g->naam.'</td>';
  22. $output[] = '<td width="15%"><input type="text" name="qty'.$g->id.'" value=" '.$qty.'" size="3" maxlength="3" /></td>';
  23. $output[] = '<td width="15%"> &euro;'.($prijs).'</td>';
  24. $output[] = '<td align="center" width="20%"><a href="cart.php?action=delete&id='.$g->id.'" class="r">X</a></td>';
  25. $output[] = '<tr>';
  26. $output[] = '</table>';
  27. array_push($aid, $g->id);
  28. array_push($anaam, $g->naam);
  29. array_push($aprijs, $g->prijs);
  30. array_push($aqty, $qty);
  31. $total += $prijs * $qty;
  32. }
  33. }
  34. $output[] = 'Totaal: <strong>&euro;'.$total.'</strong><br /><br />';
  35. $output[] = '<div><button type="submit">Vernieuw</button></div><br />';
  36. $output[] = '</form><br /><br />';
  37. $today = date("F j, Y, g:i a");
  38. srand ((double) microtime( )*1000000);
  39. $random_number = rand( );
  40. $bericht = "";
  41. $bericht .= "Er is een bestelling geplaatst. Een overzicht van de bestelling vindt u hieronder.\n";
  42. $bericht .= "Bestelling geplaatst op:".$today." \n";
  43. $bericht .= "Betalingswijze: ".$_POST['betalingswijze']." \n";
  44. $bericht .= " \n";
  45. $bericht .= "Gegevens van de besteller: \n";
  46. $bericht .= " \n";
  47. $bericht .= "Voornaam: ".$_POST['voornaam']." \n";
  48. $bericht .= "Achternaam ".$_POST['achternaam']." \n";
  49. $bericht .= "E-Mail adres: ".$_POST['email']." \n";
  50. $bericht .= "Straat: ".$_POST['straat']." \n";
  51. $bericht .= "Huisnummer: ".$_POST['huisnummer']." \n";
  52. $bericht .= "Gemeente: ".$_POST['gemeente']." \n";
  53. $bericht .= "Postcode: ".$_POST['postcode']." \n";
  54. $bericht .= "Opmerking:".$_POST['opmerking']." \n";
  55. $bericht .= "-------- \n";
  56. $bericht .= "Bestelling: \n";
  57. $bericht .= " \n";
  58. foreach($anaam as $val) {
  59. foreach($aqty as $val2) {
  60. foreach($aprijs as $val3) {
  61. $bericht .= "artikel: ".$val." | aantal; ".$val2." | prijs:".$val3."\n".;
  62. }
  63. }
  64. }


Alvast bedankt voor jullie hulp.

5 antwoorden

Gesponsorde links
Offline kurohyou - 03/12/2009 23:49 (laatste wijziging 03/12/2009 23:57)
Avatar van kurohyou Oud lid is niet echt duidelijk aan de hand van jouw code wat je juist wilt maar werkt onderstaande niet?

  1. foreach($anaam as $val) {
  2. $bericht .= "artikel: ".$val." | aantal; ".$aqty." | prijs:".$aprijs."\n".;
  3. }


$aqty en $aprijs kan je beter eerst berekenen in je foreach en dan outputten. Zou handig zijn om een print_r te zien van je array natuurlijk om hierop verder een opossing te geven

ik heb juist je code eens bekeken in totaal, waarom steekt je alles in 3 aparte arrays? je kan toch gewoon 1 simpele 2 dimensionale array gebruiken
(1)
[artikel]->?
[aantal]->?
[prijs]->?
(2)
[artikel]->?
... enz

dan is het gemakkelijk om nadien er alles terug uit te halen ook. je doet dan gewoon een count op je array en daarop dan een loopje
Offline vh37 - 04/12/2009 13:30
Avatar van vh37 Nieuw lid Bedankt voor je antwoord,

ik heb alles eens in 1 array gestoken:

zo:
$test = array();
array_push($test, $g->naam, $qty, $g->prijs);

Als ik deze dan met een foreach output:
foreach($test as $key => $val) {
$bericht .= $val."\n";
}

en ik mail het dan door dan krijg ik zoiets:
Product 1 (naam product)
1 (aantal)
5.00 (prijs)
Product 2
2
10.00

Nu zo is het niet overzichtelijk omdat ik er geen tekst kan tussen plakken zoals prijs, aantal,...

Hoe zou jij het percies aanpakken?
Offline kurohyou - 04/12/2009 14:00 (laatste wijziging 04/12/2009 14:09)
Avatar van kurohyou Oud lid hey,

allereerst zou ik die array_push achterwege laten, is een pak trager dan gewoon $array[] = ... te gebruiken

  1. // in je foreach loopje bovenaan
  2. $array = array();
  3. $i = 0;
  4. foreach ($contents as $id=>$qty)
  5. {
  6. $array[$i]['product'] = $g->naam;
  7. $array[$i]['quantity'] = $qty;
  8. $array[$i]['price'] = $g->prijs;
  9. $i++;
  10. }
  11. // dan hier voor de waardes eruit te halen
  12. for ($i = 0; $i <= count($array); ++$i) {
  13. $bericht .= "artikel : " . $array[$i]['product'] . "| ";
  14. $bericht .= "hoeveelheid : " . $array[$i]['quantity'] . "| ";
  15. $bericht .= "prijs : " . $array[$i]['price'];
  16. }
Offline vh37 - 04/12/2009 16:22 (laatste wijziging 04/12/2009 16:25)
Avatar van vh37 Nieuw lid Hey bedankt het werkt.

Alleen nog 1 ding...

in de email geeft hij dus alle artikels, prijs,.. enzo weer maar er staat ook een lege array onder.

Zo dus:

Bestelling:

Artikel: Streaming 35 Luisteraars | Aantal: 2 | Prijs: €49
Artikel: | Aantal: | Prijs: €

print_r van de array geeft dit weer:

Array ( [0] => Array ( [product] => Product1 [quantity] => 1 [price] => 24.5 ) )

EDIT:
  1. for ($i = 0; $i <= count($winkelkar); ++$i) {
  2. // Moest dit worden:
  3. for ($i = 0; $i <= count($winkelkar[$i]); ++$i) {


Bedankt voor je hulp.
Offline kurohyou - 04/12/2009 16:28 (laatste wijziging 04/12/2009 16:29)
Avatar van kurohyou Oud lid je kan in je loopje < dan doen, maar normaal zou <= moeten werken, ik heb geen zicht op je totaal code nu maar kleiner dan zou het moeten doen

  1. for ($i = 0; $i < count($array); ++$i) {
  2.  
  3. }


oké had je update nog niet gelezen 
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.242s