[PHP] Logikproblem in einer For-Schleife

Toby

Cadet 4th Year
Registriert
Mai 2003
Beiträge
107
Hallo zusammen,
wäre prima wenn mir jemand mit dieser For-Schleife etwas helfen könntet. Ich komme leider nicht auf die Lösung:

Bei dieser Schleife werden Daten aus einer MySQL-Datenbank ausgelesen und dann in einem PHP-Dokument ausgelesen.

Die Schleife gibt eine Überschrift aus, danach folgenden die Details. Die Anzahl der Details ist unterschiedlich.

Mein Problem ist, das genau vor der Überschrift eine Tabelle geöffnet werden soll.
Diese geöffnete Tabelle sollte dann NACH dem letzten Detaildatensatz geschlossen werden ! Nur wie bekomme ich die Sache gehandelt ? Da es immer unterschiedlich viele Detaildatensätze sind.
Die Schleifenstruktur für die Ausgabe sieht stark vereinfacht so aus:

PHP:
$datum = 0;
for (Solange Daten aus SQL-Abfrage vorhanden sind)
   {
	         
              if( $datum != $Termindatum[$i] )
                   {  
	               $datum = $Termindatum[$i]; 
	               echo "<table><tr><td>";  #Tabelle öffnen
	               echo " Überschrift ".$Termindatum; #Überschrift schreiben		   
	               }

    echo $Details; #Details schreiben
   
    echo "</td></tr></table>";    # genau hier liegt der Hund begraben,  DIES SOLL NUR NACH DEM LETZTEN DETAILDATENSATZ GESCHEHEN !  (Wie gesagt die Anzahl ist variabel, je nachdem viele Ereignisse auf einen Termin treffen) 
}
 
Ich versteh jetz nicht genau, wie die Tabelle aussehen soll, aber ich denk du meinst das:
PHP:
$datum = 0;
for (Solange Daten aus SQL-Abfrage vorhanden sind)
   {             
              if( $datum != $Termindatum[$i] )
                   {  
                   $datum = $Termindatum[$i]; 
                   echo "<table><tr><td>";  #Tabelle öffnen
                   echo " Überschrift ".$Termindatum; #Überschrift schreiben           
                   }

    echo $Details; #Details schreiben 
}
echo "</td></tr></table>";    # genau hier liegt der Hund begraben,  DIES SOLL NUR NACH DEM LETZTEN DETAILDATENSATZ GESCHEHEN !  (Wie gesagt die Anzahl ist variabel, je nachdem viele Ereignisse auf einen Termin treffen)

So wird vor der Überschrift die Tabelle geöffnet und nach Abfrage aller Datensätze wieder geschlossen, ganz einfach :)
 
PHP:
echo "<table>";
$datum = 0;
for (Solange Daten aus SQL-Abfrage vorhanden sind)
   {             
              if( $datum != $Termindatum[$i] )
                   {  
                   $datum = $Termindatum[$i]; 
                   echo "<tr><td>";  #Tabelle öffnen
                   echo " Überschrift ".$Termindatum; #Überschrift schreiben           
                   }

    echo $Details; #Details schreiben 
   echo "</td></tr>";
}
echo "</table>";    # genau hier liegt der Hund begraben,  DIES SOLL NUR NACH DEM LETZTEN DETAILDATENSATZ GESCHEHEN !  (Wie gesagt die Anzahl ist variabel, je nachdem viele Ereignisse auf einen Termin treffen)
ich glaube er meint eher SO

EDIT: Obwohl ich mir da gar nicht mehr sicher bin...
EDIT2: Na gut. Es ist irgendwie quatsch was ich geschrieben habe. Hab glaube ich nicht richtig gelesen. Aber irgendwie hätte ich das eh komplett anders gemacht.
Warum kann man Beiträge eigentlich nicht löschen?
 
Zuletzt bearbeitet:
Oder soll das ganze nach Termindaten unterteilt werden? Dann müsstest du das Schließen der Tabelle in die if-Abfrage integrieren:

PHP:
$datum = 0;
$table_opened = false;
for (Solange Daten aus SQL-Abfrage vorhanden sind)
   {
             
              if( $datum != $Termindatum[$i] )
                   {  
                   $datum = $Termindatum[$i]; 
                   if (table_opened)
                      {
                          echo "</td></tr></table>";
                          $table_opened = false;
                      }
                   echo "<table><tr><td>";  #Tabelle öffnen
                   $table_opened = true;
                   echo " Überschrift ".$Termindatum; #Überschrift schreiben           
                   }

    echo $Details; #Details schreiben
   

}
echo "</td></tr></table>";

oder so ähnlich, ist vielleicht jetz nicht besonders elegant :)

Edit: Wenn du es tatsählich so meinst, wär es wohl einfacher wenn du nicht alle Datensätze auf einmal aus der DB holst sondern jeweils die mit identischem Termindatum und diese dann jeweils durch eine for-Schleife jagst...
 
Zuletzt bearbeitet:
Ich würde mal sagen das is ne while schleife eleganter für :)

So z.B

PHP:
$datum = 0;
$table_opened = false;
  while($daten = mysql_query($bla)
   {
             
              if( $datum != $Termindatum[$i] )
                   {  
                   $datum = $Termindatum[$i]; 
                   if (table_opened)
                      {
                          echo "</td></tr></table>";
                          $table_opened = false;
                      }
                   echo "<table><tr><td>";  #Tabelle öffnen
                   $table_opened = true;
                   echo " Überschrift ".$Termindatum; #Überschrift schreiben           
                   }

    echo $Details; #Details schreiben
   

}
echo "</td></tr></table>";

Mit ner forschleife geht das wohl nicht so wie du meinst!
 
Zurück
Oben