muderseb: For-Schleife will nicht wie sie soll...

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";
  }
?>

  1. 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.

    1. 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

      1. 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

        1. 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.

          1. 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

            --
            sh:( fo:| ch:? rl:( br:> n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|
  2. 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";