For-Schleife will nicht wie sie soll...
muderseb
- php
Hallo zusammen,
Auf meiner Seite möchte ich meine Artikel und die dazugehörigen Kommentare aus MySQL auslesen lassen. So weit, so funktioniert's.
Problem: Auf der Startseite möchte ich nur die drei neuesten Artikel (und auch nur die drei neuesten Kommentare) ausgeben. Dafür habe ich eine For-Schleife nach der Anleitung aus Quake.php.net gebaut, mit dem Unterschied, dass ich zwei Bedingungen formuliert habe. Ich weiß jetzt nicht, ob's vielleicht daran liegt, jedenfalls klappt es nicht: Zwar gibt PHP auch bei "error_reporting (E_ALL);" keinen Fehler aus, die For-Schleife bricht aber auch nicht nach den ersten drei Kommentaren wie geplant ab. Woran liegt das?
Hier der relevante Code:
<?php
// Daten aus Tabelle für Artikel werden ausgewählt
$sq1 = "SELECT
Titel,
Inhalt,
Autor,
ID,
Datum
FROM
Artikel
ORDER BY
Datum DESC";
$result1 = mysql_query($sq1) OR die(mysql_error());
// Ab hier wird dann die Website zusammengebaut.
echo "<div id="Grundstruktur">\n";
if (mysql_num_rows($result1)) {
for($i=0; $i<2, $row = mysql_fetch_assoc($result1); $i++) {
echo "<div class="Artikel">\n";
echo "<h1>\n";
echo $row["Titel"];
echo "</h1>\n";
echo "<p>\n";
echo $row["Inhalt"];
echo "</p>\n";
echo "<p>\n";
echo $row["Autor"];
echo "</p>\n";
// Ab hier wird der jweilige Kommentarabschnitt eingebaut...
// Daten aus Tabelle für Kommentare werden ausgewählt.
$sq2 = "SELECT
Inhalt,
Autor,
Datum
FROM
kommentare
WHERE
NEWS_ID = '".$row['ID']."'
ORDER BY
Datum DESC";
$result2 = mysql_query($sq2) OR die(mysql_error());
// Daten aus dieser Tabelle werden ausgelesen.
echo "<div class="comments">\n";
echo "<h1>\n";
echo "Letzte Kommentare\n";
echo "</h1>\n";
if (mysql_num_rows($result2)) {
for($j=0; $j<2, $row = mysql_fetch_assoc($result2); $j++) {
echo "<p>\n";
echo $row["Inhalt"];
echo "\n";
echo "<br />\n";
echo $row["Autor"];
echo ", am ";
echo $row["Datum"];
echo "\n";
echo "</p>\n";
}
mysql_data_seek ($result2, 0);
} else {
echo "<p>Leider momentan kein Kommentar vorhanden.</p>\n";
}
?>
die For-Schleife bricht aber auch nicht nach den ersten drei Kommentaren wie geplant ab. Woran liegt das?
for($i=0; $i<2, $row = mysql_fetch_assoc($result1); $i++) {
Du möchtest doch sicher, dass die Schleife so lange läuft, wie "i kleiner als 3 ist und mysql_fetch_assoc() einen anderen Wert als false zurückgibt"? Das solltest du auch so schreiben, und zwar beinahe wortwörtlich.
Hallo,
danke für den Tipp, tatsächlich hat ein einfaches AND gefehlt!
(Für alle:)
Man schreibt dann also:
for($j=0; $j<2 AND $row = mysql_fetch_assoc($result2); $j++)
Nochmals danke und Grüße,
Sebastian
Hallo,
ich bin da nicht wirklich der Experte, aber würde es nicht auch Sinn machen, deine DB-Abfrage von vornherein auf die maximal gewünschten 3 Einträge zu begrenzen mit LIMIT 3?
Gruß Gunther
ich bin da nicht wirklich der Experte, aber würde es nicht auch Sinn machen, deine DB-Abfrage von vornherein auf die maximal gewünschten 3 Einträge zu begrenzen mit LIMIT 3?
Das wäre natürlich noch besser, dann könnte man sich die ganze Zählerei sparen.
Mahlzeit,
Das wäre natürlich noch besser, dann könnte man sich die ganze Zählerei sparen.
Das wäre nicht besser, das wäre das einzig sinnvolle. Ich meine, Du kaufst Dir auch nicht einen ganzen Sack Kartoffeln und schleppst ihn nach Hause, wenn Du nur 2 essen willst und den Rest wegschmeißt.
MfG,
EKKi
echo $begrüßung;
[...] eine For-Schleife [...] mit [...] zwei Bedingungen [...] die For-Schleife bricht aber auch nicht nach den ersten drei Kommentaren wie geplant ab. Woran liegt das?
for($j=0; $j<2, $row = mysql_fetch_assoc($result2); $j++) {
Arbeitet wie im Handbuch-Kapitel zu for beschrieben. »In expr2, all expressions separated by a comma are evaluated but the result is taken from the last part.«
echo "$verabschiedung $name";