Andreas Cloos: zu dumm um ein Select aus Datenbankeinträgen zu erstellen

Hallo Zusammen,

ich steh mal wieder auf dem Schlauch! Ziel ist eine Select-Liste in einem Formular, die
1.) als sichtbare Werte, also zw. <select> und </select> Mitgliedsnamen enthält, aber
2.) als value die Mitgliedsnummer des jeweiligen Mitgliedes.

Zusammengebaut habe ich das folgende Script, welches auch brav die erste Anforderung erfüllt leider jedoch überall nur als value die erste Mitgliedsnummer einträgt. Ich denke, der Fehler liegt
a) zwischen den Ohren und
b) bei dieser blödsinnig verschachtelten while-for-Kombination...
Aber ich kriege es nicht hin :-( Das ist das Script:

<?php
 require("config.inc.php");
 $link=mysql_connect( $sqlhost ); mysql_select_db( $database );

$anfrage="SELECT mitgliedsnr FROM stammdaten ORDER BY id;";
  $ergebnis=mysql_query($anfrage) or die;
  $nameanfrage="SELECT name FROM stammdaten ORDER BY id;";
  $nameergebnis=mysql_query($nameanfrage) or die;

("<p class='TEXT'><b>Ergebnis:</b><br>Fehlermeldung = ".mysql_error(). "</p>");

echo mysql_num_rows($ergebnis)." Datensätze<p> ";
  echo "<select name='mitgliedsnummer' size='1'>";

while ($zeile=mysql_fetch_row($ergebnis))
 {
 while ($namezeile=mysql_fetch_row($nameergebnis))
  {
  for ($i=0;$i<mysql_num_fields($ergebnis);$i++)
   {
   for ($j=0;$j<mysql_num_fields($nameergebnis);$j++)
    {echo "<option value='$zeile[$i]'>".$namezeile[$j]."</option>";
     };
   };
  };
 };
  echo "</select>";
  mysql_free_result($ergebnis); mysql_close($link);
?>

Kann mir bitte mal auf den Kopf hauen und auf die Sürnge helfen? Danke!

Greetz,
Andreas

  1. Hi,

    b) bei dieser blödsinnig verschachtelten while-for-
       Kombination...

    genau. ;-)

    while ($zeile=mysql_fetch_row($ergebnis))
    {
    while ($namezeile=mysql_fetch_row($nameergebnis))
      {

    Beim ersten Schleifendurchgang der äußeren while-Schleife saugt die innere while-Schleife den gesamten Puffer des 2. SELECT-Statements leer.
    Für alle weiteren Durchgänge der äußeren while-Schleife hat die innere also keine Daten mehr.

    Es sieht so aus, als müßtest Du zumindest das Absaugen des Ergebnisses des 2. SELECT-Statements aus der while-Schleife heraus nehmen und diese Werte lokal (in einem Array?) speichern und diesen dann immer wieder abarbeiten (dann sinnvollerweise mit "for", weil Du ja jetzt bereits weißt, was auf Dich zukommt).

    Viele Grüße
          Michael

    1. Hallo,

      warum 2 Schleifen? warum so kompliziert

      Versuche es so:

      <?php
       require("config.inc.php");
       $link=mysql_connect( $sqlhost ); mysql_select_db( $database );
        $anfrage="SELECT name, mitgliedsnr FROM stammdaten ORDER BY id;";
        $ergebnis=mysql_query($anfrage) or die;
        echo "<select name='mitgliedsnummer' size='1'>";
       while ($zeile=mysql_fetch_row($ergebnis))
          {echo "<option value='$zeile[1]'>".$zeile[$0]."</option>";
           }
        echo "</select>";
        mysql_free_result($ergebnis); mysql_close($link);
      ?>

      btw: nach dem "}" bitte _kein_ ";" ..

      GRuss Sven

      1. Moin Sven,

        abgesehen von

        {echo "<option value='$zeile[1]'>".$zeile[$0]."</option>";
             }

        perfekt! Müßte {echo "<option value='$zeile[1]'>".$zeile[0]."</option>"; } heißen, aber da bin ja jetzt sogar ich noch drauf gekommen!

        Danke Dir, Du hast mir mindestens ein paar Stunden Schlaf geschenkt!

        Ich muß ja zugeben, daß ich Michaels Lösungsansatz nicht oder nur mit Mühe nachvollziehen konnte. Aber so ist ja viel einfacher!

        Greetz,
        Andreas

        1. Hi,

          Müßte {echo "<option value='$zeile[1]'>".$zeile[0]."</option>"; } heißen, aber da bin ja jetzt sogar ich noch drauf gekommen!

          Stimmt das war ein Vertipper ..

          Gruss Sven

        2. Hi Andreas,

          Ich muß ja zugeben, daß ich Michaels Lösungsansatz nicht oder nur
          mit Mühe nachvollziehen konnte.

          ich habe auch gar keinen Lösungsansatz geliefert. ;-)

          Ich habe lediglich versucht, zu erklären, wieso bei Deinem Versuch der erste Durchgang zu anderen Ergebnissen führt als weder weitere - nämlich weil Deine Schachtelung der Schleifen mit dem Absaugen der Cursor nicht zusammenpaßt.

          Daß es mit "Auffalten" der zweiten Schleife eine besonders elegante Lösung gibt, das zu erkennen hätte ich Deinen kompletten Quelltext verstehen müssen - den Cursor-Effekt habe ich aber nach 15 Sekunden gesehen und dachte, das alleine würde Dir schon deutlich weiter helfen.

          Viele Grüße
                Michael