Steffen: mysql_fetch_array Ergebnis mehrmals verwenden

Hallö zusammen,

ich hab ein kleines Problem, was mich des nachts zur Verzweiflung bringt... Ich will das Ergebnis einer Abfrage mehrmals nutzen, aber ich schaffe das nicht. Im Forum hab ich gefunden, dass man das Ergebnis in einem Array abspeichern soll und dann beliebig oft darauf Zugriff hat. Daher meine Zeilen:

if   (mysql_numrows($ausgabe) > 0)
     {
     $phpgesetztereferenzen = array();
     $z = 0;
     while ($reihe = mysql_fetch_array($ausgabe))
         {
         $phpgesetztereferenzen['$z'] = $reihe;
           echo $phpgesetztereferenzen['$z']['dateiname'].'<br>';
            $z++;
         }
     }

for ($r = 0; $r < 10; $r++)
         {
         echo $phpgesetztereferenzen['$r']['dateiname'].'<br>';
         }

Nun ratet mal, wie oft das Array ausgegeben wird? Falsch! Nur einmal. Die untere for Schleife erzeugt aus irgendwelchen Gründen keine Ausgabe, die ober while Schleife schon. Ich bin am verzweifeln, warum  funktioniert das nicht?

viele Grüße,
Steffen

  1. Hallo Steffen,

    bin zur späten Stunde leider auch zu müde den Fehler in deinem Code zu suchen, aber versuch mal die variante.....

    $abfrage = mysql_query("SELECT * FROM $dbtabelle");
    for ($i=0; $i<mysql_num_rows(abfrage); $i++)
    {
       $liste[$i] = mysql_fetch_array($abfrage);
    }
    //Ausgabe
    for ($i=0; $i<count($liste); $i++)
    {
       $liste[$i]['dateiname'];
    }

    ....
    mir ist bei dir nur aufgefallen, dass dein 'mysql_num_rows' falsch geschrieben ist..

    ...probiere es mal

    1. Hab folgendes eingehackt:

      $abfrage = mysql_db_query($datenbankname,$sql);
      for ($i=0; $i<mysql_num_rows($abfrage); $i++)
      {
      echo '1<br>';
         $liste[$i] = mysql_fetch_array($abfrage);
      }
      //Ausgabe
      for ($i=0; $i<count($liste); $i++)
      {  echo '2<br>';
         $liste[$i]['dateiname'];
      }

      Rate mal was kommt: Nur die 1 und die 2en. Aber jeweils 20mal, also liefert die Datenbankabfrage doch was zurück. Ich glaub ich steh total im Regen... Danke trotzdem.

      Hier nochmals alles im Kontext:

      $sql = "SELECT *
              FROM referenzen
              ORDER BY RAND()
              LIMIT 0, 20;";

      if (!($ausgabe = mysql_db_query($datenbankname,$sql)))
         {
         $meldung .= 'Konnte 2. Datenbankkommando nicht absetzen! ';
         $fehler = 1;
         }

      $abfrage = mysql_db_query($datenbankname,$sql);
      for ($i=0; $i<mysql_num_rows($abfrage); $i++)
      {
      echo '1<br>';
         $liste[$i] = mysql_fetch_array($abfrage);
      }
      //Ausgabe
      for ($i=0; $i<count($liste); $i++)
      {  echo '2<br>';
         $liste[$i]['dateiname'];
      }

      /*
      if   (mysql_num_rows($ausgabe) > 0)
           {
           $phpgesetztereferenzen = array();
           $z = 0;
           while ($reihe = mysql_fetch_array($ausgabe))
               {
               $phpgesetztereferenzen['$z'] = $reihe;
                 echo $phpgesetztereferenzen['$z']['dateiname'].'<br>';
                  $z++;
               }
           }

      for ($r = 0; $r < 10; $r++)
               {
               echo $phpgesetztereferenzen['$r']['dateiname'].'<br>';
               }
      */

  2. Hallihallo!

    $z = 0;
         while ($reihe = mysql_fetch_array($ausgabe))
             {
             $phpgesetztereferenzen['$z'] = $reihe;
               echo $phpgesetztereferenzen['$z']['dateiname'].'<br>';
                $z++;
             }
         }

      
    Hier wird zwar in jedem Schleifendurchlauf der richtige Wert übernommen und per echo ausgegeben, aber:  
    Wenn Du die echo- Zeile mal ersetzt durch:  
    ~~~php
      
       echo 'Im Element mit dem Index '.'$z'.' wird abgespeichert: '.phpgesetztereferenzen['$z']['dateiname'].'<br>';  
    
    

    (Achte dabei auf das, was hinter "index" steht), wirst Du feststellen, daß hier immer wieder das gleiche Arrayelement befüllt wird.
    Und zwar das mit dem Index: (string) $z

    Du willst aber das Arrayelement mit dem derzeitigen Wert von (int) $z befüllen, also ist Dir geholfen, wenn Du einfach nur die beiden Hochkommata wegnimmst:

      
       $phpgesetztereferenz[$z] = $reihe;  
    
    

    for ($r = 0; $r < 10; $r++)
             {
             echo $phpgesetztereferenzen['$r']['dateiname'].'<br>';
             }

    Hier ist es ähnlich: Du versuchst auf ein Arrayelement mit dem Index (string) '$r' zuzugreifen, aber das existiert gar nicht.
    Der Zugriff wie gewünscht ist analog zu oben:

      
        echo $phpgesetztereferenzen[$r]['dateiname'].'<br>';  
    
    

    Deine bisherige untere Schleife hat übrigens wohl eine Ausgabe erzeugt, und zwar exakt so viele '<br>'s wie $phpgesetztereferenz Elemente hat.

    Zusammenfassung: Wenn man einzelne Hochkommata um einen Variablennamen herumsetzt, wird das als Stringangabe gewertet, und der jeweilige Wert nicht eingesetzt. Möchtest Du einfach nur Zugriff auf den Wert einer Variablen, notiere sie ohne die Hochkommata.

    Ich hoffe, damit konnte ich Dir helfen...

    Viele liebe Grüße,
    Der Dicki

    1. Hallihallo!

      Korrektur in einer Kleinigkeit:

      Deine bisherige untere Schleife hat übrigens wohl eine Ausgabe erzeugt, und zwar exakt so viele '<br>'s wie $phpgesetztereferenz Elemente hat.

      Es gab 10 "<br>"s... (Flüchtigkeitsfehler meinerseits, sorry)

      Viele liebe Grüße,
      Der Dicki

      1. Es gab 10 "<br>"s... (Flüchtigkeitsfehler meinerseits, sorry)

        ;-) *lacht* ja, die hab ich auch gesehen...

        danke für die super Erklärung! Echt ausführlich und verständlich. Kleiner Fehler, grosse Wirkung... Dann geh ich jetzt mal etwas entspannter schlafen.

        viele Grüße,
        Steffen

        1. echo $begrüßung;

          danke für die super Erklärung! Echt ausführlich und verständlich. Kleiner Fehler, grosse Wirkung... Dann geh ich jetzt mal etwas entspannter schlafen.

          Zwei weitere wichtige Hilfsmittel beim PHP-Entwickeln sind:

          • error_reporting auf E_ALL stellen, dann werden Hinweismeldungen bei Zugriffen auf nicht initialisierte Variablen (auch Array-Elemente) nicht mehr unterdrückt.
          • Kontrollausgabe der Variableninhalte mit echo, print(), var_dump() und/oder print_r(). Damit kann man sehen, wenn Variablen (auch Arrays) etwas anderes enthalten als man vermutet.

          echo "$verabschiedung $name";