Sönke Tesch: Daten Dynamisch nebeneinander

Beitrag lesen

Aber hier haben wir uns Missvertanden *g*

Möglich, mir kommt die Frage in der Tat etwas seltsam vor ;)

Angenommen ich habe 9 Datensätze in der Table, davon möchte ich jeweils 3 nebeneinander ausgeben...

id 1 2 3
x  x x x <--Datensatz 1
y  y y y <--Datensatz 2
z  z z z <--Datensatz 3

und diese 3 Datensätze möchte ich nun nebeneinander ausgeben...

Aha, das ist etwas klarer. Du wirst sicherlich eine Tabelle nutzen wollen, da Dir wahrscheinlich sonst alles durcheinander purzelt. Ich für meinen Teil baue Tabellen gerne erstmal als Feldvariable auf und gebe erst dann, nachdem ich die Daten "eingesammelt" habe, die Daten tatsächlich in die Seite aus (eben aus diesem Feld).
Das vereinfacht die Geschichte wesentlich, da eine HTML-Tabelle spalten-, dann zeilenweise ausgegeben werden muß, die Daten aber umgekehrt erscheinen. Es müssen also zwangsläufig Daten zwischengespeichert werden.

Wir legen dazu also ein Feld an, dessen erster Index die Spaltennamen enthält (oben: id, x, y, z). In der zweiten Dimension werden die Daten dazu gesammelt:

while ($row = mysql_fetch_assoc($result))
   {
    foreach ($row as $spaltenname=>$wert)
      $feld[$spaltenname][]=$wert;
   };

Der Inhalt von $feld sollte dann so aussehen:

$feld["id"][0]=0;
  $feld["id"][1]=0;
  $feld["x"][0]="x1";
  $feld["x"][1]="x2";
  $feld["y"][0]="y1";
  $feld["y"][1]="y2";
  etc..

Die Ausgabe ist etwas vertrackt, da Du ja unbedingt (nörgel;) drei Spalten haben willst:

$i=0; // $i wird unser Datensatzzähler
  while ($i<sizeof(reset($feld))) // sollte Anzahl Daten in $feld["id"] zurückgeben
   {
    foreach ($feld as $spaltenname=>$daten) // Zeilen ausgeben
     {
      echo $spaltenname.": "; // Zeilentitel = Name der Datenspalte
      for ($j=0;$j<3;$j++)
        echo " ".$daten[$i+$j];  // ..Daten ausgeben
      echo "\n";              // 3 Spalten vollbracht, neue Zeile
     };
    $i+=$j;                   // $i auf aktuellen Datensatz setzen; entspricht $i=$i+$j
   };

Das Skript gibt die Daten als reinen Text aus. Benutze entweder

header("Content-Type: text/plain");

als allererste Zeile im Skript oder füge die entsprechenden <tr>- und <td>-Tags ein.

Abschließende Bemerkung: Ich habe absolut keine Ahnung, ob das funktioniert, aber ich bin guten Mutes :)

Gruß,
  soenk.e