PHP MySQL-Tabelleninhalt in PHP-Datei

AMD4Ever

Ensign
Registriert
Apr. 2008
Beiträge
188
Hallo,

seit einiger Zeit beschäftige ich mich mit PHP. Das Erstellen von Tabellen aus dem PHP funktioniert mit ner Schleife recht gut und zuverlässig.

Nun habe ich ein Formatierungsproblem, womit ich beim Gestalten meiner eigenen Seite zu Problemen stoße.

Und zwar folgendes: Es bestehen Datensätze, die einer ID zugeordnet sind, wunderbar
Aber nun möchte ich diese der ID zugeordneten Datensätze nicht in einer Zeile stehen haben, sondern in einer Spalte.

Zum Verständnis habe ich das Problem mal in eine Bilddatei gepackt.

Wie bekommt man das am Einfachsten hin?

Ziel und Zweck habe ich damit, meine Seite mehr oder weniger dynamisch zu gestalten, um den Programmieraufwand ähnlicher Informationen in Grenzen zu halten.

unbenannt6w9r3ovuca.png



Vielen Dank für eure Hilfe im Voraus ;-)
 
mir würde als lösung nur einfallen dass du ein 2dimensionales array machst, die daten zeilenweise in dieses array schreibst und danach allerdings spaltenweise ausliest und in die <td> </td> felder schreibst...
 
najo einfach ein 2d array

zwischenspeicher[][] und dann bei jedem durchlauf von der fetch schleife eben

zwischenspeicher[0] = wert1;
zwischenspeicher[1] = wert2;
...
i++;

und dann in umgekehrter reihenfolge durchgehen

zwischenspeicher[j] -> immer zuerst i bis zum maximum durchgehen, dann j inkrementieren und mit i neu anfangen. denn i sind die unterschiedlichen datensätze und j die unterschiedlichen spalten
 
bzw. wenn das ganze nicht dynamisch ist (sondern immer gleich viele spalten vorhanden sind) kannst du auch einfach bei jedem datensatz das auf mehrere arrays aufteilen und dann ein array nach dem anderen ausgeben in die tabelle

ID[]
Name[]
Vorname[]
...
usw. Aber mit einem 2d array finde ich es eleganter, vorallem weil man es mit einem vorhergehenden abfragen der tabellenstruktur dynamisch machen kann.
 
die Spalten in den Datensätzen sind immer gleich viele, bzw es sind alle voll.

Also in jeder Zeile stehen gleich viele Informationen. Kann aber sein, dass ein Wert "0" ist. Sollte aber für MySQL bzw auch PHP kein großes Problem sein.
 
PHP:
$sql = "SELECT `ID`,`Name`,`Vorname`,`Straße`, `PLZ`, `Wohnort` FROM `deine_db` ORDER BY `ID` ASC";


$result = mysql_query($sql);


while( $holder = mysql_fetch_row($result) ){
   $storage[] = $holder;
}



print "<table>";

for( $i = 0; $i < mysql_num_fields($result); $i++ ){

   print "<tr>";
   for( $a = 0; $a < sizeof($storage); $a++ ){
      if( $a == 0 ){
         print "<td>".mysql_field_name( $result, $i )."</td>";
         print "<td>".$storage[$a][$i]."</td>";
      } else {
         print "<td>".$storage[$a][$i]."</td>";
      }
   }
   print "</tr>";

}

print "</table>";


Hab's nicht getestet, aber das sollte die Antwort auf dein Problem sein... ( eventuelle Tippfehler o.Ä. musst du also möglicherweise beheben, das Prinzip sollte aber mit meinem Post klar sein und damit dein Problem gelöst )



Hier eine kleine Beschreibung, was genau mein Code tut:


$sql ist einfach nur 'ne Var für die sql-Abfrage.

$result vollzieht den eigentlichen MySQL-Query.

while( $holder = mysql... lädt dir jede einzelne Datenzeile, die $result enthält, in ein numerisch indiziertes array namens $storage

Da du eine Tabelle haben willst, hab ich die Schleifen schon jeweils mit print "<table>"; u.s.w. ergänzt

Die äußere Schleife for( $i = 0; $i < mysql_num_fields($result); $i++ ){ läuft genau so viele Durchläufe, wie du Spalten in der MySQL-DB hast.
Jeder Durchlauf generiert hierbei genau 1. Zeile der Tabelle, womit die Zeilen schon Mal gegessen wären.

Die innere Schleife for( $a = 0; $a < sizeof($storage); $a++ ){ durchläuft jedes einzelne Element von $storage, also anders ausgedrückt: Jede Datenzeile deiner MySQL-Tabelle.
Je nachdem wo sich die äußere Schleife befindet, also z.B. Spalte 1 ( =Name ), schreibt die innere Schleife Spalte für Spalte in deine HTML-Tabelle alle $storage-Elemente auf und liest hierbei nur $storage[$a][$i], also eben nur den Namen, wenn sich die äußere Schleife halt dort grad befindet.

Wenn die äußere Spalte bei $i = 2 ist ( =Vorname ) würde die $a-Schleife jeweils nur die Vornamen auslesen aus $storage u.s.w. u.s.f.

Das if( $a == 0 ){ steht dort, damit die Überschrift, also der Spaltenname, immer an erster Stelle steht.
Für jede Spalte die geschrieben wird, gibt es ja einen Anfang vo $a = 0 ist, dort muss, bevor $a anfängt die MySQL-Daten zu verarbeiten, ja aber der MySQL-Spaltenname (z.B.) auftauchen, um die einzelnen Zeilen deiner HTML-Tabelle zu beschriften.

Mit dem IF fang ich also den ersten Durchlauf jeder Zeile der HTML-Tabelle ab und setz ihr per mysql_field_name($result, $i) den Spaltennamen der jeweiligen Spalte der MySQL-Tabelle vorweg.


Schönen Abend noch ;)
 
Zuletzt bearbeitet:
Hi, danke für die Umformatierung.

Das Konzept ist ja echt nen Dreizeiler ;-)

Was mich daran nur stört ist, dass man wenig Einfluss auf den Inhalt hat. Wenn man quasi dort nehmen wir mal an Werte drin stehen hat und man möchte eine Einheit manuell hinzufügen, steht man dann auf dem Schlauch.

Ich habe das Konzept von dir nicht weiterverfolgt, obwohl dieses schön kurz ist, aber wie gesagt keinen Einfluss auf die Daten hat, bzw diese nicht nachformatieren kann.

Trotzdem vielen Dank dafür. ;-)
 
Hi,

verstehe dein Problem nicht - du kannst doch manuell in der inneren Schleife noch hinzufügen was du gern hättest?

VG,
Mad
 
In der Tat @Madman1209

Ich verstehe den Einwand auch nicht genau? @AMD4Ever

Abgesehen davon, bist du ja nicht gezwungen per print oder echo den Inhalt sofort auszugeben...

Du kannst ja auch einfach ein weiteres Array, beispielsweise $htmloutput o.Ä. erstellen und dort dann den Inhalt speichern...


Der Code würde dann so aussehen:

PHP:
$sql = "SELECT `ID`,`Name`,`Vorname`,`Straße`, `PLZ`, `Wohnort` FROM `deine_db` ORDER BY `ID` ASC";


$result = mysql_query($sql);


while( $holder = mysql_fetch_row($result) ){
   $storage[] = $holder;
}


$htmloutput = array();

for( $i = 0; $i < mysql_num_fields($result); $i++ ){

   $htmloutput[$i] = array();
   for( $a = 0; $a < sizeof($storage); $a++ ){
      if( $a == 0 ){
         $htmloutput[$i][0] = mysql_field_name( $result, $i );
         $htmloutput[$i][1] = $storage[$a][$i]."</td>";
      } else {
         $htmloutput[$i][$a+1] = $storage[$a][$i];
      }
   }

}

Somit hättest du ein voll manipulierbares Array $htmloutput, wenn du denn unbedingt damit noch was größeres tun willst (was man aber an und für sich, wie mein Vorredner schon anmerkte, auch direkt in den Schleifen machen könnte).




Später könntest du dann $htmloutput ganz bequem per foreach auslesen lassen:

PHP:
print "<table>";

foreach( $htmloutput as $spalteninhalt ){
   print "<tr>";
   foreach( $spalteninhalt as $zeileninhalt ){
       print "<td>".$zeileninhalt."</td>";
   }
   print "</tr>";
}

print "</table>";
 
Zuletzt bearbeitet:
Zurück
Oben