Op deze website gebruiken we cookies om content en advertenties te personaliseren, om functies voor social media te bieden en om ons websiteverkeer te analyseren. Ook delen we informatie over uw gebruik van onze site met onze partners voor social media, adverteren en analyse. Deze partners kunnen deze gegevens combineren met andere informatie die u aan ze heeft verstrekt of die ze hebben verzameld op basis van uw gebruik van hun services. Meer informatie.

Akkoord

Vraag & Antwoord

Webprogrammeren & scripting

[php & mysql] loop binnen een loop

Anoniem
Annie
8 antwoorden
  • Situatieschets:
    Ik heb 4 tabellen in m'n mysql db:
    1. leverancier
    2. bekledingtypen
    3. stoelen
    4. koppeltabel bekleding_stoelen

    Nu is het zo, een leverancier heeft een assortiment stoelen en een assortiment bekleding. Voor elke stoel zijn een aantal bekledingstypen mogelijk (maar niet allemaal!).

    nu wil ik in een cms-je aangeven welke bekleding er nog aan een stoel gekoppeld kan worden. Dus de kleding van dezelfde leverancier als de geselecteerde stoel, maar waar nog geen relatie is aangemaakt in de koppeltabel.

    Ik wilde dit doen door middel van een for-loop binnen een for-loop:
    [code:1:1df38551b9]
    $rs = $myDBC->getData("SELECT bekleding_id,naam FROM bekleding WHERE leverancier_id = '" . $_POST['leverancier'] . "'");
    $num = mysql_num_rows($rs);

    $ss = $myDBC->getData("SELECT * FROM stoel_bekleding WHERE stoel_id = '" . $_POST['stoel'] . "'");
    $oum = mysql_num_rows($ss);

    for($i=0 ; $i < $num ; $i++ ){

    $naam = mysql_result($rs, $i, 'naam');
    $id = mysql_result($rs, $i, 'bekleding_id');

    for ($n=0 ; $n < $oum ; $n++){
    $bestaand = mysql_result($ss, $n, 'bekleding_id');

    if($id != $bestaand){
    echo "<div style=\"float: left;\"><input type='checkbox' value='" . $id . "'> " . $naam . "<br></div>";
    }
    }
    }
    [/code:1:1df38551b9]

    Het is dus de bedoeling dat de bekleding van dezelfde leverancier als de stoel die nog niet is gekoppelt wordt weergegeven met een checkbox.

    Het lijkt erop dat met het doorlopen van de eerste for-loop de tweede for-loop en if-statement worden genegeerd.

    Weet iemand wat ik over het hoofd zie?
  • Dit is de eerste keer dat ik dergelijke loops zie voor gegevens uit een databank te halen, misschien ligt het daar aan?
  • echt waar?

    Hoe parse jij je results van een resultset dan?
  • de gebruikelijke procedure is volgens mij mysql_fetch_array/assoc
    ow te gebruiken op een result en hierop eventueel ifs en dergelijke op los te laten…

    http://nl.php.net/manual/en/function.mysql-fetch-array.php
    http://nl.php.net/manual/en/function.mysql-fetch-assoc.php
    http://nl.php.net/manual/en/function.mysql-fetch-row.php
  • Ik gebruik iets in de aard van:[code:1:a2668916c3]$res = mysql_query ("SELECT …", $db);

    while ($ligne = mysql_fetch_object ($res))
    {

    }[/code:1:a2668916c3]
  • oke, dat doe ik in principe ook, ik gebruik alleen een andere loop.
  • Volgens mij moet het mogelijk zijn om je stoelen en/of bekleding te outer-joinen op de koppeltabel. Daar waar je null values terugkrijgt is dan nog geen koppeling gemaakt.

    Ik kan je datamodel alleen niet helemaal volgen; waar sla je de relatie tussen leveranciers en stoelen en de relatie tussen leveranciers en bekleding op?
  • @annie
    Stoelen heeft een kolom: leverancier_id
    Bekleding heeft ook een kolom: leverancier_id

    @de oplossing
    Nu is het zo dat er meerdere (maar niet allemaal) bekledingtypen mogelijk zijn voor een bepaalde stoel. Deze relaties zijn in de tabel stoel_bekleding opgeslagen.

    Wat deed ik nu fout?
    stel resultset 1 was: ( 1 | 2 | 3 | 4 ) dit waren alle bekleding_id's van een bepaalde leverancier, maar ik wil alleen de bekleding_id's die nog niet gekoppeld zijn aan een stoel, maar evt wel gekoppeld kunnen worden.

    Nu wilde ik op de hierboven beschreven manier middels een loop controleren of "1" voorkwam in resultset 2. stel resultset 2: ( 1 | 4 ). Dus bij controle van 1 krijg ik 1 == 1, dus true die bestaat al, waar ik niet aan had gedacht is dat als ik van resultset 1 ga controleren 2 == 1 false krijg. en 1 uit resultset 2 alsnog ge-echo-ed wordt.

    Ik heb het nu op een andere manier gedaan,hier de oplossing :
    mocht er ooit nog iemand op een zelfde probleem stuitten….
    [code:1:415a1f99fb]

    $rs = $myDBC->getData("SELECT bekleding_id, naam FROM bekleding WHERE leverancier_id = " . $_POST['leverancier']);
    $num = mysql_num_rows($rs);

    $bekleding = array();

    for ($i=0;$i<$num;$i++) {
    $bekleding[$i] = mysql_result($rs,$i,'bekleding_id');
    }

    $res = $myDBC->getData("SELECT bekleding_id FROM stoel_bekleding WHERE stoel_id = " . $_POST['stoel']);
    $numr = mysql_num_rows($res);

    for ($i=0;$i<$num;$i++) {
    for ($j=0;$j<$numr;$j++) {
    if ($bekleding[$i] == mysql_result($res,$j,'bekleding_id')) {
    $bekleding[$i] = "";
    }
    }
    }

    for ($i=0;$i<$num;$i++) {
    if ($bekleding[$i] != "") {
    echo "<input type='checkbox' name='c" . $i . "'value='" . $bekleding[$i] . "'> " . mysql_result($rs,$i,'naam') . "<br>";
    }
    }
    [/code:1:415a1f99fb]

Beantwoord deze vraag

Dit is een gearchiveerde pagina. Antwoorden is niet meer mogelijk.