HeikoH: Ergebnis aus Tabelle ausgeben

Hallo alle miteinander,

ich versuche aus eine Tabelle einer mySQL Datenbank die Werte darzustellen in einer Tabelle, aber

1. ich weiss nicht wieviele Spalten die Tabelle enthält
2. ich weiss nicht wieviele Reihen die Tabelle enthält
3. es muss im Ergebnisfeld neben den Datensatz auch der passende Spaltenname angegeben werden

Bis jetzt schaut es so aus (funktioniert aber auch nicht so ganz, ist aber vielleicht schon nahe dran):

print "<table border="1"><tr>";
$ergebnis = mysql_query("select * from $prod_id");
$anz_felder = mysql_num_fields($ergebnis);
for($x = 0; $x < $anz_felder; $x++){
 $feldname=mysql_field_name($ergebnis, $x);
 print "<td>$feldname</td>\n";
 }
print "</tr>";

// ab hier kommt der fehlerhafte Bereich

while ($datensatz = mysql_fetch_row($ergebnis)){
 print "<tr>\n";
 foreach($datensatz as $feld){
  $anz_felder = mysql_num_fields($ergebnis);
  for($x = 0; $x < $anz_felder; $x++){
   $feldname=mysql_field_name($ergebnis, $x);
   print "<td>$feldname: $feld</td>\n";
   }}
  print "</tr>\n";
 }
print "</table>\n";

Das Problem ist die WHILE Schleife mit der FOR Schleife zu kombienieren.
Wer kann da mir auf die Sprünge helfen?

  1. Hallo Heiko,

    // ab hier kommt der fehlerhafte Bereich

    while ($datensatz = mysql_fetch_row($ergebnis)){
    print "<tr>\n";
    foreach($datensatz as $feld){
      $anz_felder = mysql_num_fields($ergebnis);
      for($x = 0; $x < $anz_felder; $x++){
       $feldname=mysql_field_name($ergebnis, $x);
       print "<td>$feldname: $feld</td>\n";
       }}
      print "</tr>\n";
    }
    print "</table>\n";

    Wer kann da mir auf die Sprünge helfen?

    Du schachtelst 3 Schleifen:

    while (...) {
      foreach (...) {
        for (...) {
        }
      }
    }

    Die innere for-Schleife kannst Du Dir schenken. Die ist zwar im Tabellenkopf notwendig, in den eigentlichen Zeilen wird diese jedoch durch die foreach-Schleife, die den Datensatz in die Felder aufteilt, ersetzt. Daher:

    while (...) {
      ...
      foreach ($datensatz as $index => $feld) {
        print "<td>$feld"</td>\n";
      }
      ...
    }

    Warum Du den Feldnamen wiederholst, ist mir unklar, deswegen habe ich es weggelassen.

    Christian

    --
    Hast Du einen Beitrag? Nur her damit!
    http://aktuell.de.selfhtml.org/tippstricks/beitrag.htm
    SELF-Code: (http://emmanuel.dammerer.at/selfcode.html)
    sh:) fo:) ch:] rl:( br:> n4:& ie:% mo:) va:) de:] zu:) fl:( js:| ss:) ls:[
    1. Hallo Christian,

      aus der WHILE Schleife habe ich jetzt auch eine FOR gemacht, so habe ich den besseren Überblick, danke für den Ansatz.
      Um den FELDNAMEN(Spaltenname) ging es mir bei der ganzen Sache.
      Die Ausgabe sind Textfelder, Wert ist $feld und Name ist $feldname

      Komplett sind es dann so aus:

      $num = mysql_num_rows($ergebnis);
      for($i=0; $i<$num; $i++){
       print "<form method="post" action="$PHP_SELF?action=bearbeiten"><tr><td>\n";
       print "<input type="hidden" name="prod_name" value="$prod_name">";
       print "<input type="hidden" name="prod_id" value="$prod_id">";
       print "<input type="submit" name="p_aendern" value="ändern">";
       print "<input type="submit" name="p_loeschen" value="löschen"></td>\n";
       $anz_felder = mysql_num_fields($ergebnis);
       for($x = 0; $x < $anz_felder; $x++){
        $feldname=mysql_field_name($ergebnis, $x);
        $eni = mysql_result($ergebnis, $i, $feldname);
        if($feldname == "id")
         print "<input type="hidden" name="$feldname" value="$eni">\n";
        else
         print "<td><input type="text" name="$feldname" value="$eni"></td>\n";
        }
       print "</tr></form>\n";
       }

      Herzlichen Dank noch mal!

      Heiko

      Du schachtelst 3 Schleifen:

      while (...) {
        foreach (...) {
          for (...) {
          }
        }
      }

      Die innere for-Schleife kannst Du Dir schenken. Die ist zwar im Tabellenkopf notwendig, in den eigentlichen Zeilen wird diese jedoch durch die foreach-Schleife, die den Datensatz in die Felder aufteilt, ersetzt. Daher:

      while (...) {
        ...
        foreach ($datensatz as $index => $feld) {
          print "<td>$feld"</td>\n";
        }
        ...
      }

      Warum Du den Feldnamen wiederholst, ist mir unklar, deswegen habe ich es weggelassen.

      Christian