Variable Tabellen in PHP

Guten Tag,

ich wollte meine php-Dateien, speziell die Tabellen etwas dynamischer machen.
Wen ich Daten aus einer MySQL Tabelle ausgebe erstelle ich eine HTML Tabelle, die Zeile die sich wiederholen soll schreib ich in eine Schleife.

Jetzt dachte ich mir man müsste die Tabelle(n) in einer Funktion habe, die ich dann immer wieder aufrufe.
Allerdings stehe ich vor einigen Problemen.
a) die unterschiedliche Anzahl der Spalten
b) manchmal ein, manchmal zwei th.

Ich habe auch wenig Ahnung wie ich das machen müsste, ob man so was überhaupt macht.?

Ich habe schon ein bisschen im Netz gesucht, aber nicht so das wahre gefunden, Weiß jemand ein Tut, wo so etwas beschrieben ist?

Danke
GuckstDu

Nun, du möchtest ein Script was eine Datenbanktabelle komplett ausgibt, und selber erkennt, wie viele Splaten es hat und alle Als Index gekennzeichneten Spaltennamen als Überschriften (

) ausgibt?

Dann gucke dich doch mal im Bereich der Möglichkeiten mit SQL, und bei den ganzen MySQL Funktionen von PHP um.

de2.php.net/manual/de/book.mysql.php

Hallo,

fast;)
angenommen ich weiß wie viele Spalten ich habe, fehlt mir irgendwie ne Idee wie ich die Tabelle dynamisch gestallten kann.
Angenommen mysql_num_fields gibt mir 2 zurück, die Indexe kann ich nicht nutzen, da ich andere Bezeichnungen haben möchte.

[code]

[/code]

kann man so was irgendwie universeller erstellen, zB das ich an einer anderen Stelle der Datei, die gleiche Tabelle nur mit x Spalten mehr oder weniger und anderen colspan oder ganz auf die erste th verzichten.

Sorry wenn ich mich nicht verständlich ausdrücke.

MfG
GD

Haupttitel
Überschrift 1 Überschrift 2
Daten aus Tabelle Daten aus Tabelle

Doch doch, es kommt denke ich an. Hast du dir mal die SQL Referenzen und das Mysql Funktionen Manual, was ich verlinkt habe komplett durchgelesen ? es gibt sicher auch ne Möglichkeit, die assoziativen Indexe rauszukriegen. vllt auch irgendeine Konstellaton mit mysql_fetch_array()…

:smiley: natürlich noch nicht, meine Freundin sagt zwar immer ich sei schnell, aber so schnell bin ich wirklich nicht.

:wink: Danke

Hi Jw,

das “Beispiel #3 mysql_fetch_array() mit MYSQL_ASSOC” bringt mich schon ein bisschen weiter.
Jetzt muss ich das nur noch in td #s bringen.

MfG
GD

Wenn dein Hauptproblem derzeit noch ist, dass du nicht weisst, wie du über eine variable Anzahl von Array-Elementen loopen sollst - dann bietet sich ggf. auch eine foreach-Schleife an der Stelle an.

(Und wenn nicht - dann werde ich aus deiner Problembeschreibung wohl nicht so ganz schlau …)

Hier mal ein Code-Beispiel…das hilft meistens eh mehr :wink:

$sql = mysql_query("SELECT * FROM xyz"); //Query absetzen

echo "<table>"; //Tabellenanfang
while($row = mysql_fetch_assoc($sql)) //Zeile einlesen
{
   echo "<tr>";
   foreach($row as $elem)
     echo "<td>$elem</td>"; //Elemente ausgeben
   echo "</tr>";
}
echo "</table>"; //Tabellenende

vielen Dank

Michi,
das habe ich gesucht. Ich wusste nicht das ich ein ganzes "$row " loopen kann.
Ich denke ich komme jetzt klar.
Danke

Allerdings der Link von JW hat mich auch weiter gebracht.

MfG
GD

No Problem, dafür bin ich hier :wink:

Du solltest, wenn du schon eine Funktion schreibst, vorher aber noch überprüfen, ob du von der Query überhaupt ein Ergebniss erhälst, oder ob das ganze als Error endet :wink:
Poste doch mal den Code wenn du nichts dagegen hast. Ein Forum sieht mehr, und hat mehr Ideen als einer alleine.
Das was du da grade machst, mach es nämlich extrem einfach, mal eben für iwas eine datenbanklösung zu bekommen - ohne den ganzen auslesescripting krams.

!top

Hallo JW,

das werd ich machen, wenn ich es bis zu einer Funktion geschafft habe.

MfG
GD

Hallo,

ich bin jetzt einen Schritt weiter, ich weiß nur nicht ob das was ich mache Sinn macht. Die Ergebnisse stimmen. Falls es Ok sein sollte, dann spare ich mir sehr viel Arbeit.

$erg1 = mysql_query(“SELECT ma_id, name, vorname,email FROM ma”);

[code] function zeigeTab($FErg, $FTitelErg) {
$anz = mysql_num_fields($FErg);
$tab= “

”; //Tabellenanfang
$tab.= “”;
for($i=0;$i<$anz;$i++){ //Spalten für Kopf
$tab.= “";
}
$tab.= “”;
while($row = mysql_fetch_assoc($FErg)) //Zeile einlesen
{
$tab.= “”;
foreach($row as $elem)
$tab.= “”;
$tab.= “”;
}
$tab.= “
”.$FTitelErg[$i]."
$elem
”; //Tabellenende
    return $tab;
						}
$titel[0]="&nbsp;";
$titel[1]="zweiter Titel";
$titel[2]="dritter Titel";
$titel[3]="vierter Titel";

$tabelle=zeigeTab($erg1, $titel);

    echo $tabelle;

[/code]

Ich bekomme eine Kopfzeile mit 4 Einträgen und Ergebniszeilen.
Da ich viele Dateien mit mit Tabellenansichten habe ist das schon mal ganz gut, denke ich.

Richtig toll wäre es, wenn ich zb die ma_id nicht mit in der Anzeige hätte, aber in einigen Tabellen brauche ich sie als GET Parameter.
Dann muss ich wohl jede Spalte einzeln in die Funktion einbeziehen?

Danke
GD

Reicht dir das?

Wenn du nichts dagegen hast, fände ich es gut wenn wir hier nochmal eine weiterführende Funktion schreiben (alle zusammen - wenn Interesse besteht)

Etwas in der Richtung:

function readTable($tablename, $spalten=NULL, $where=NULL){

// korrektheit der angaben überprüfen

if(is_array($spalten)){
$sql = "SELECT ";
$count_fe = 0;
foreach($spalten AS $spalte){
if($count_fe > 0)
$sql .= ", ";
$sql .= "`".$spalte."`";
}
$sql .= " FROM `".$tablename."`".((is_string($where) && @strlen($where) > 0)? " WHERE ".$where : "");
}else{
$sql = "SELECT * FROM `".$tablename."`";
}

// abfrage, ergebniss spalten rauskriegen und ausgeben, die überschriften nach index in der farbe ändern etc. . quasi alles was möglich ist. ;)


if(!$error)
return $tablestring;
else
return $error;

} // function end

Hallo JW,

ich bin ja kein Profi in php.
Na klar habe ich Interesse, Ich muss mir Dein Script in Ruhe anschauen.
Da ist zu viel neu für mich, ich war ja schon froh das ich mein Script so hinbekommen habe;)

MfG
GD

Natürlich kannst du auf verschiedene Spalten verzichten :wink:

nur den idx aus dem Array löschen kannst du zB so:

while($row = mysql_fetch_assoc($sql))
{
  echo "<tr>";

  $idx = array_shift($row); //Löscht erstes Element aus Array und gibt es zurück
  foreach($row as $one)
     echo "<td>$one</td>";

  echo "</tr>";
}

ansonsten verzichtest du einfach komplett auf die Foreachschleife, und gibst die Elemente manuell an :wink:

Hallo, danke an alle.

Im Moment hänge ich leider an einem anderen Problem, sodass ich erst am WE hier weiter gucken kann.

MfG
GD

Ich mach mich auchnochmal mit den ganzen Mysql Funktionen vertraut. Iwie kann phpmyadmin das ja auch :wink: