Reyn: while in while

Hi, hab hier n kleines Problemchen :(

und zwar lies er einmal eine Datenbank "seite_kategorie" aus und denn denn inhalt der Navigationsleiste

Include("connect.inc.php");

$abfrage = "SELECT * FROM seite_kategorie";
 $ergebnis = mysql_query($abfrage, $verbindung);
 while($kategorie = mysql_fetch_object($ergebnis))
 {
 Echo"<tr><td width='140' height='40' align='left' valign='middle' style='background-image:url(Style/navigation/Navi1-1.jpg);'><div style='margin-top:2px; margin-left:5px; font-size:20px; color:#e00000;'>$kategorie->name</div></td></tr>";

$abfrage = "SELECT * FROM seite WHERE kategorie = '$kategorie->name'";
  $ergebnis = mysql_query($abfrage, $verbindung);
  while($row = mysql_fetch_object($ergebnis))
  {
  Echo"<tr><td class='menuoff' onmouseover="className='menuon';" onmouseout="className='menuoff';" onclick="location.href='?id=$row->id';">$row->name</td></tr>";
  }

Echo"<tr><td width='140' height='40' style='background-image:url(Style/navigation/Navi1-3.jpg);'></td></tr>";
 }

Hoffe Ihr könnt mir Helfen.

Vielen Dank in vorraus!

  1. Hi, hab hier n kleines Problemchen :(

    und zwar lies er einmal eine Datenbank "seite_kategorie" aus und denn denn inhalt der Navigationsleiste, aber $abfrage = "SELECT * FROM seite_kategorie"; wiedeholt er nicht obwohl in der Datenbank 3 einträge sind!

    Include("connect.inc.php");

    $abfrage = "SELECT * FROM seite_kategorie";
    $ergebnis = mysql_query($abfrage, $verbindung);
    while($kategorie = mysql_fetch_object($ergebnis))
    {
    Echo"<tr><td width='140' height='40' align='left' valign='middle' style='background-image:url(Style/navigation/Navi1-1.jpg);'><div style='margin-top:2px; margin-left:5px; font-size:20px; color:#e00000;'>$kategorie->name</div></td></tr>";

    $abfrage = "SELECT * FROM seite WHERE kategorie = '$kategorie->name'";
      $ergebnis = mysql_query($abfrage, $verbindung);
      while($row = mysql_fetch_object($ergebnis))
      {
      Echo"<tr><td class='menuoff' onmouseover="className='menuon';" onmouseout="className='menuoff';" onclick="location.href='?id=$row->id';">$row->name</td></tr>";
      }

    Echo"<tr><td width='140' height='40' style='background-image:url(Style/navigation/Navi1-3.jpg);'></td></tr>";
    }

    Hoffe Ihr könnt mir Helfen.
    und endschuldigung für Doppelposting, hab zu schneller finder :)
    Vielen Dank in vorraus!

    1. Hallo Reyn

      Include("connect.inc.php");

      $abfrage = "SELECT * FROM seite_kategorie";
      $ergebnis = mysql_query($abfrage, $verbindung);

      an dieser Stelle wäre es gut, wenn du mehr Fehlerbehandlung treiben würdest:

        
      if($ergebnis !== false) {  
        //do something  
      } else {  
        //error do whatever you like, for example report the error  
        echo 'Fehler bei der Datenbankabfrage ' . mysql_error() . '<br/>';  
      }  
      
      

      while($kategorie = mysql_fetch_object($ergebnis))
      {
        $abfrage = "SELECT * FROM seite WHERE kategorie = '$kategorie->name'";
        $ergebnis = mysql_query($abfrage, $verbindung);

      und hier liegt IMHO dein eigentliches Problem: du überschreibst $ergebnis. Nenne die Variable innerhalb der Schleife anders und alles wird gut (Vorschlag: nenn sie doch einfach $ergebnisKategorie ...) Ich würde auch $abfrage umbenennen, aber das ist nicht zwingend nötig, weil er die erste Abfrage ja schon ausgeführt hat, aber schöner wäre es Meiner Meinung nach schon. Ach ja: Falls du das tust, vergiss nicht, des auch bei mysql_query() zu berücksichtigen.

        
      $abfrageKategorie = "SELECT * FROM seite WHERE kategorie = '$kategorie->name'";  
      $ergebnisKategorie = mysql_query($abfrageKategorie, $verbindung);  
      
      

      ich meine: hier -----------------^
      Hab sowas selbst schon ab und zu vegessen (Code per Copy and Paste übernommen und übeall geändert, aber im mysql_query() noch die falsche Anfrage stehen gehabt), ist ziemlich ärgerlich.

      while($row = mysql_fetch_object($ergebnis))
        {
        }
      }

      und endschuldigung für Doppelposting, hab zu schneller finder :)

      Doppelposting? "finder"?

      liebe Grüße mbr

      1. Finger sollte es bedeuten :)

        was ein so kleiner mini befehl alles ausrichten kann hehe

        Vielen Dank :)

      2. Hello,

        und hier liegt IMHO dein eigentliches Problem: du überschreibst $ergebnis. Nenne die Variable innerhalb der Schleife anders und alles wird gut

        Da wird gar nichts gut, weil der/die gut Reyn nämlich lost handles auf Ergebnissets erzeugt, alse die handles auf die Ergebnissets überschreibt, und damit der Speicherplatz aufgefressen wird...

        Wenn man SQL-Queries in Schleifen ausführt, kommt man i.d.R. um ein "Free_Result" nicht drum herum.

        Es ginge bei anderer Abfragetechnik aber auch ohne diese Abfrageschleife!

        Ein harzliches Glückauf

        Tom vom Berg

        --
        Nur selber lernen macht schlau
        http://bergpost.annerschbarrich.de