phillip: schleifen in schleife

hallo!
ich habe folgenden code:

<?php
      while ($row2 = @mysql_fetch_array($sql_res2))   //schleife 1
       {
        ?>
          <tr>
         <td>
         <select name="vereins_id[]">
           <?php
          while ($row4 = @mysql_fetch_array($sql_res4))  //schleife 2
           {
            echo "<option ";
            if ($row2["vereins_id"] == $row4["id"]) { echo "selected "; }
            echo "value="".$row4["id"]."">".$row4["name"]."</option>";
           }
           ?>
         </select>
         </td>
         <td>
         <select name="user_id[]">
           <?php
          while ($row3 = @mysql_fetch_array($sql_res3))   //schleife 3
           {
            echo "<option ";
            if ($row2["user_id"] == $row3["id"]) { echo "selected "; }
            echo "value="".$row3["id"]."">".$row3["name"]."</option>";
           }
           ?>
         </select>
         </td>
          </tr>
         <?php
       }
?>

das problem ist, dass die beiden schleifen 2 und 3 nur beim ersten durchgang von schleife 1 ausgeführt werden. also angenommen die erste schleife wird 10 mal durchgeführt, dann werden zwar 10 zeilen in der tabelle als ausgabe erstellt und auch alle select felder, nur werden den select forms nicht die zugehörigen option tags angefügt. also werden die beiden inneren schleifen nicht mehr ausgeführt. weiss jemand woran das liegen kann?
danke,

phillip

  1. Hi,

    das problem ist, dass die beiden schleifen 2 und 3 nur beim ersten durchgang von schleife 1 ausgeführt werden. also angenommen die erste schleife wird 10 mal durchgeführt, dann werden zwar 10 zeilen in der tabelle als ausgabe erstellt und auch alle select felder, nur werden den select forms nicht die zugehörigen option tags angefügt. also werden die beiden inneren schleifen nicht mehr ausgeführt. weiss jemand woran das liegen kann?

    Das liegt daran, dass der Zeiger des Arrays am Ende sitzt und somit keine Elemente mehr ausgelesen werden können. Müsstest das Array wieder zurücksetzten.

    HTH

    Franz

    1. Das liegt daran, dass der Zeiger des Arrays am Ende sitzt und somit keine Elemente mehr ausgelesen werden können. Müsstest das Array wieder zurücksetzten.

      hmm wenn ich das mit reset($row3); mache kommt da Warning: reset() [function.reset]: Passed variable is not an array or object in ....

  2. Γειά σου, phillip!

    <?php
    [Code]
    ?>

    das problem ist, dass die beiden schleifen 2 und 3 nur beim ersten durchgang von schleife 1 ausgeführt werden. also angenommen die erste schleife wird 10 mal durchgeführt, dann werden zwar 10 zeilen in der tabelle als ausgabe erstellt und auch alle select felder, nur werden den select forms nicht die zugehörigen option tags angefügt. also werden die beiden inneren schleifen nicht mehr ausgeführt. weiss jemand woran das liegen kann?

    Wie Franz bereits erwähnt hat, musst du den Datensatz-Zeiger innerhalb des Abfrage-Ergebnisses wieder an den Anfang desselben bewegen. mysql_fetch_array() verschiebt ihn bei jedem Aufruf um eine Stelle weiter nach "hinten" im Abfrage-Ergebnis, mit mysql_data_seek() kannst du ihn zurück auf z. B. den Anfang des Abfrage-Ergebnisses setzen. Konkret musst du dafür deinen Code wie folgt verändern:

    while (...) # Schleife 1  
    {  
        ...  
        while ($row4 = @mysql_fetch_array ($sql_res4)) # Schleife 2  
        {  
            ...  
        }  
        mysql_data_seek ($sql_res4, 0); # Zurücksetzen des Datensatz-Zeigers  
        while ($row3 = @mysql_fetch_array($sql_res3)) # Schleife 3  
        {  
            ...  
        }  
        mysql_data_seek ($sql_res3, 0); # Zurücksetzen des Datensatz-Zeigers  
        ...  
    }
    

    Αντίο!
    Sven aus Bonn

    --
    Ἀεὶ πάντα ῥεῖ.
    Selfcode: ie:% fl:( br:> va:} ls:[ fo:) rl:( n4:{ ss:| de:> js:| ch:) mo:} zu:) - Selfcode dekodieren - Selfcode-Info
    1. Hi!

      Danke, das funktioniert wunderbar! Vielen Dank!
      Grüße aus Husum

      Phillip