Hallo allemaal,

Ik hoop een beetje hulp te kunnen krijken bij het volgende script dat ik heb geschreven. Ik heb een while loop in een while loop gezet en dit lijkt niet te werken.. (wellicht een bug)
Zie: 'A note to anyone nesting a while loop inside a while loop' op http://nl2.php.net/while

De suggestie die op bovenstaande pagina wordt gedaan schijnt wel te werken en daarbij gaat het om een foreach loop in de while loop te embedden.

Nu zit ik met mijn twee while loopjes en weet ik niet hoe ik die ene (die embed is) om moet zetten in een foreach lus.

Ik hoop dat iemand mij kan helpen, ik ga overmorgen op vakantie en had zo gehoopt dit nog voordat ik vertrek op te kunnen lossen zodat ik niet in Spanje aan foreach zit te denken :)

Alvast hartelijk bedankt voor de phphulp, zie onder voor script:

//-- email naar alle gebruikers waar de reservering(en) van verwijderd gaan worden.
$isql = "SELECT *, COUNT(IDgebruiker)FROM gereserveerd GROUP BY IDgebruiker, datum HAVING COUNT(IDgebruiker)>=1 AND datum <= '$datum8'";
$iresult = mysql_query($isql);
while($irow = mysql_fetch_array($iresult)) {
$ID = $irow['IDgebruiker'];
$rij = mysql_fetch_array(mysql_query("SELECT * FROM gebruiker WHERE idgebruiker=$ID"));
$aan = $rij['email'];
$van = "[email protected]";
$naam = $rij['achternaam'];
$onderwerp2 = "Uw reserveringen van $datum8 zijn verwijderd";

//onderstaande whileloop moet dus een foreach loop worden.
$iisql = "SELECT * FROM gereserveerd WHERE IDgebruiker=$ID AND datum <= '$datum8'";
$iiresult = mysql_query($iisql);
while($iirow = mysql_fetch_assoc($iiresult)) {
$IDartikel = $iirow['IDartikel'];
$artikel = $iirow['artikel'];
$aantal = $iirow['aantal'];
$merkdetails= "SELECT merk FROM $artikel WHERE id$artikel=$IDartikel";
$merk = mysql_result(mysql_query($merkdetails), 0);
$type_lijndetails = "SELECT type_lijn FROM $artikel WHERE id$artikel=$IDartikel";
$type_lijn = mysql_result(mysql_query($type_lijndetails), 0);
$message = $artikel . " - " . $merk . " - " . $type_lijn . " - " . $aantal . "\n";
}
}
Voila! Zelf opgelost.

Wellicht is de oplossing voor anderen nog interessant dus bij deze:

1. Van een bug bij een loop in een loop is volgens mij geen sprake. Aangezien ik de resultaten per mail wil versturen lijkt de loop voor problemen te gaan zorgen want die krijg je niet één twee drie in je mailtje. De truuk is om de resultaten in één variabele te vangen. Deze variabele is bijvoorbeeld $message . = ipv $message =
2. Tot zover was ik, maar de message truuk levert direct een probleem op wanneer je de whileloop op zijn beurt ook weer loopt. Dus bij een loop in een loop laat de $message . = zich helemaal vollopen met alle variablen die het op de weg van de hoofdloop tegenkomt. Een cumulatief effect dus.
Dit is op te lossen door aan het einde van je hoofd loop (hiervoor zit bij mij de mailfunctie) de variabele $message te unsetten met
unset($message);

Beetje ingewikkeld uitgelegd misschien, maar wellcht is dit een duwtje in de juiste richting van anderen.

//-- email naar alle gebruikers waar de reservering(en) van verwijderd gaan worden (mailscript en delete eruit gelaten).
$isql = "SELECT *, COUNT(IDgebruiker)FROM gereserveerd GROUP BY IDgebruiker, datum HAVING COUNT(IDgebruiker)>=1 AND datum <= '$datum8'";
$iresult = mysql_query($isql);
while($irow = mysql_fetch_array($iresult)) {
$ID = $irow['IDgebruiker'];
$rij = mysql_fetch_array(mysql_query("SELECT * FROM gebruiker WHERE idgebruiker=$ID"));
$aan = $rij['email'];
$van = "[email protected]";
$naam = $rij['achternaam'];
$onderwerp2 = "Uw reserveringen van $datum8 zijn verwijderd";

//Unset $message na deze while loop.
$iisql = "SELECT * FROM gereserveerd WHERE IDgebruiker=$ID AND datum <= '$datum8'";
$iiresult = mysql_query($iisql);
while($iirow = mysql_fetch_assoc($iiresult)) {
$IDartikel = $iirow['IDartikel'];
$artikel = $iirow['artikel'];
$aantal = $iirow['aantal'];
$merkdetails= "SELECT merk FROM $artikel WHERE id$artikel=$IDartikel";
$merk = mysql_result(mysql_query($merkdetails), 0);
$type_lijndetails = "SELECT type_lijn FROM $artikel WHERE id$artikel=$IDartikel";
$type_lijn = mysql_result(mysql_query($type_lijndetails), 0);
$message = $artikel . " - " . $merk . " - " . $type_lijn . " - " . $aantal . "\n";
}
Unset($message);
}
handig?
ik vat het niet.
beetje omslachtig

Reageren