Spalten einer Tabelle dynamisch generieren

Flachs

Grünschnabel
Guten Morgen und ein freundliches Hallo an alle User hier,

hoffe, dass ich das richtige Forum gewählt habe.


Ich habe eine MySQL Datenbank als Datenspeicher. Nun möchte ich eine Tabelle mit php anhand der Daten erstellen lassen. Habe nun mehrere Stunden gesucht aber nichts zu dem Thema gefunden. :( Ist ja nichts neues denkt man sich, nur ist es diesmal umgedreht.
Ich möchte eine Tabelle ausgeben mit fester Zeilenanzahl, jedoch dynamischer Spaltenanzahl welche je nach gefundenen rows aus der Datenbank erzeugt werden soll.
In reinem Html sieht die Tabelle dann ja folgendermaßen aus:
HTML:
<table width="500">
            <tr>
        <th>Überschrift1</th>
        <td>1</td>
        <td>1</td>
        <td>1</td>
      </tr>
      <tr>
        <th>Überschrift2</th>
        <td>2</td>
        <td>2</td>
        <td>2</td>
      </tr>
      <tr>
        <th>Überschrift3</th>
        <td>3</td>
        <td>3</td>
        <td>3</td>
      </tr>
    </table>
Und da ist mein Problem. Wie packe ich dies nun in eine while-schleife und das noch ohne es zu umständlich zu machen? Kann da jemand helfen oder hat vielleicht einen fertigen Codeschnipsel den ich mir mal verinnerlichen kann?

Vielen Dank schon mal im Voraus.

Flachs
 
Hallo Flachs,

ich hatte das in meiner SQL-Klasse mal so gelöst:
PHP:
    private function table( $query, $summary = null, $caption = null )
    {
        $temp = $this->result( $query );

        if ( !empty( $temp ) && $this->getQueryType() == 'select' ) {
            if ( !empty( $summary ) ) {
                $summary = ' summary="'.$summary.'"';
            }
    
            if ( !empty( $caption ) ) {
                $caption = '<caption>'.$caption.'</caption>'."\n";
            }

            $res = '<table class="sqltable"'.$summary.'>'."\n";
            $res.= '<thead>'."\n".'<tr class="sqltrhead">'."\n";

            $headers = array_keys( $temp[0] );
            foreach ( $headers as $header ) {
                $res.= '<th><p>'.$header.'</p></th>'."\n";
            }

            $res.= '</tr>'."\n".'</thead>'."\n".'<tbody>'."\n";

            $i = 0;
            foreach ( $temp as $content ) {
                if ( $i % 2 ) { $trclass = 'sqltrtwo'; }
                else { $trclass = 'sqltrone'; }
                $res.= '<tr class="'.$trclass.'">'."\n";

                foreach ( $content as $value ) {
                    $res.= '<td><p>'.$value.'</p></td>'."\n";
                }

                $res.= '</tr>'."\n";
                $i++;
            }

            $res.= '</tbody>'."\n".$caption.'</table>'."\n";
        } else {
            $res = null;
        }

        return $res;
    }

In $this->result( $query ) wird das Ergebnis des SQL-Query's in einem zweidimensionalen Array gespeichert ($array[int]['KEY']).

Ist zwar nicht genau das was Du suchst, aber evtl. hilft es Dir ja.

Gruß
 
PHP:
$sql = 'SELECT * FROM test';
$result = mysql_query($sql);


//Inhalt der DB-Tabelle auslesen und bereits 'verdreht' in ein Array speichern mit dem Feld als Index
$table = array();
while($item = mysql_fetch_assoc($result)){
    foreach($item as $field => $value){      
        $table[$field][] = $value;    
    } 
}

//Ausgeben des ganzen
echo '<table>';
foreach($table as $field => $row){
    echo '<tr>';
    echo "<th>{$field}</th>";
    foreach($row as $value){
        echo "<td>{$value}</td>";
    }
    echo '</tr>';
}
echo '</table>';

So sollte das gehen......
 
Zurück