Eine Schleife in einer anderen
Goodfriend
- php
Hallo,
ich habe ein Tabelle, die mit Inhalten von der Datenbank gefüllt wird. Es ist einmal der Inhalt der Kategorie und dann der Inhalt. Diese sollen über eine Schleife jeweils ausgelesen werden.
<table width="120" cellspacing="2" cellpadding="1" border="0">
<?php
$sql = "SELECT * FROM cat;";
$result = mysql_query($sql) OR die(mysql_error());
for($row=0; $row = mysql_fetch_assoc($result); $row++)
{
$cat=$row['name'];
?>
<tr>
<td>
<table width='120' border='0' cellspacing='2' cellpadding='1' style='border:1px solid #800000;'>
<tr>
<td class='header'><b>» <?php echo"$cat"; ?></b></td>
</tr>
<?php
$sql = "SELECT * FROM links WHERE cat='$cat';";
$result = mysql_query($sql) OR die(mysql_error());
for($row=0; $row = mysql_fetch_assoc($result); $row++)
{
$name=$row['name'];
$href=$row['href'];
?>
<tr>
<td class='mzell'><a href='<?php echo"$href"; ?>' border='0'><?php echo"$name"; ?></a></td>
</tr>
<?php
}
?>
</table>
</td>
</tr>
<tr>
<td class='zeile'> </td>
</tr>
<?php
}
?>
</table>
Wenn ich nun dies so mache (mit Zellen, der zweiten Tabelle), dann wird nur eine Tabelle ausgegeben. Wenn ich aber nun den Inhalt der Zelle rauslösche, dann werden alle Hauptfelder (Also alle Tabellen angezeigt). Wo ist der Fehler? Oder gehen Schleifen in Schleifen nicht?.
MfG Goodfriend
Hello,
for-Schleifen sind eigentlich dedizierte Schleifen, deren Laufbedingung sich während des Laufens nicht ändern sollte. Für variante Schleifen kannst Du while benutzen.
Dass die Programmier-Systeme die eigentlich falsche Anwendung heute trotzdem oft unterstützen macht die for-Schleife eingetlich auch obsolete. Das liegt eben daran, dass "Hochsprachen" das Rad oft neu erfinden und Dinge übernehmen, die eigentlich nur den Prozessor etwas angehen.
Harzliche Grüße aus http://www.annerschbarrich.de
Tom
Hi,
ein kurzes Studium deines Codes lässt mir ein Problem ins Auge springen: Du benutzt zum großen Teil gleiche Variablen in beiden Schleifen. Inwieweit das zu Problemen führt hängt vom jeweiligen Code ab, aber in deinem Fall ist zumindest die Verwendung von $result meiner Ansicht nach gefährlich (vorausgesetzt PHP verfügt nicht über eine automatische Erkennung, die das auf verschiedenen Ebenen automatisch getrennt verwaltet).
Konkret sieht es für mich so aus, als machst du am Anfang eine Abfrage mit dem Ergebnis x, über das die erste Schleife eigentlich gehen soll, sobald du aber das erst Mal in die Schleife läufst überschreibst du den result-Zähler mit der Abfrage für die internet Schleife - Konsequenz: Wenn die äußere Schleife zum zweiten mal ein mysql_fetch_assoc macht, dann tut sie dies nicht auf dem Originalergebnis sondern auf dem aus der inneren Abfrage. Selbiges gilt (theoretisch!) für $row, dadurch dass du das unten aber nicht mehr verwendest ist das nicht schlimm.
MfG
Rouven
Ah, danke. Soetwas habe ich mir auch schon überlegt. Werde es nachher mal ausprobieren.
MfG
Goodfriend