Grüß Gott,
Also der Tabellenkram ist eigentlich nur dazu da, um ein gültige Htmltabelle um Deine dynamischen Inhalten zu bauen.
Kurz um, Deine Schleife muss innerhalb des Table Elemetes aktiviert werden.
Nein, Du must keinen Ergebisse Multiplizieren, Ein einziger Datensatz besteht bei Dir halt aus zwei Werten.
Ich hab da jetzt mal was zusammengeswurschdelt, das es Dir vielleicht einfacher macht.
Das Ganze besteht jetzt aus drei Teilen.
1. Erster Teil besteht aus Datenbankanfrage und bilden der Zelleninhalte
2. Zweiter Teil besteht aus einer Funktion, die die Tabelle dann mit Deinenen Inhalten zusammen baut.
3. Als drittes, kommt halt der Funktionsaufruf
Am Anfang musst Du natürlich Deine Verbindungsdaten eintragen
An der Stelle richtetst Du den Inhalt für jeweils eine Zelle her. Du bist völlig frei in der Gestaltung.
- Code: Select all
// Erstelle die Inhalte einer Zelle
while($zeile = mysql_fetch_array($result))
{
$Inhalt[] =
// Hier die Inhalte einer Zelle bestimmen wie Du es gerne hättest.
"<span class='name'>". $zeile['kategorie'] ."</span>\n<br>\n
<span class='beschreibung'>".$zeile['beschreibung']."</span>\n<br>\n";
// Ende!
}
Der Inhalt wird in einem Array gespeichert und in der Funktion weiterverarbeitet. In der Funkion musst Du auch die Anpassungen für das Aussehen der Tabelle vornehmen.
Aber Achtung, der Tabellenbauer ist nicht perfekt, liefert aber wenn man in nicht mutwillig verarscht eine saubere Tabelle. Natürlich müssten da vielleicht auch noch ein paar Wächter rein oder eine bessere Struktur her. Womöglich mit mehr Templatecharakter usw. Ganz zu schweigen davon, gibt es sogar eine Pearklasse für sowas glaub ich mal.
Also geh vorsichtig damit um.
Versuchs halt mal.
- Code: Select all
<?PHP
######## Erster Teil
error_reporting(E_ALL & ~E_NOTICE & ~E_WARNING);
$cfg['DB_verbindung'] = mysql_connect('localhost','root','xxx')
or die ('kein Server');
$cfg['DB_auswahl'] = mysql_select_db('test',$cfg['DB_verbindung'])
or die ('Keine Datenbank');
$Anzahl['ausgabe_limit'] = false; // Wenn die Anzahl der Datensätze
// begrenzt sein soll, mit numerischem
// Wert festlegen. Kannste später zum
// blättern umbauen
// Erstelle die Datenbankabfrage
$sql = 'SELECT
`kategorie`,
`beschreibung`
FROM
`rubriken`';
// ergänze die DBAnfrage um das Limit falls gesetzt
if($Anzahl['ausgabe_limit'])
$sql .=" WHERE 1 LIMIT 0,".$Anzahl['ausgabe_limit'];
// Halte das Ergebnis fest
$result = mysql_query($sql,$cfg['DB_verbindung'])
or die (mysql_error().'<br>'.$sql);
// Erzeuge ein Array, in dem die Zelleninhalte gespeichert werden.
$Inhalt = array();
// Erstelle die Inhalte einer Zelle
while($zeile = mysql_fetch_array($result))
{
$Inhalt[] =
// Hier die Inhalte einer Zelle bestimmen wie Du es gerne hättest.
"<span class='name'>". $zeile['kategorie'] ."</span>\n<br>\n
<span class='beschreibung'>".$zeile['beschreibung']."</span>\n<br>\n";
// Ende!
}
##### zweiter Teil
/**
* Die Funktion kannnst Du natürlich in eine andere Datei auslagern
* und mit include(tabellen_funktion.inc.php); wieder in die aktuelle
* Datei reinholen. Die Formatierung der Tabelle und der Zelle musst Du
* hier vornehmen
*/
function baue_tabelle($Inhalt)
{
// Anzahl der Spalten
$Anzahl['spalten'] = 2; // Anzahl der gewünschten Spalten
// Formatierung der Tabelle
$format['tabelle'] = "<table class='tabelle' width='450' border='1'>\n";
$format['zeile'] = " <tr class='zeile'>\n";
$format['zelle'] = " <td class='zelle'>\n\n";
$format['leere_zelle'] = " "; // Wie soll die leeren/leere Zelle gefüllt sein?
// Anzahl der Gesamtmenge an Datensätzen
$Anzahl['elemente'] = count($Inhalt);
// Aufgerundet die Anzahl der resultierenden Zeilen
$Anzahl['zeilen'] = ceil($Anzahl['elemente'] / $Anzahl['spalten']);
// Gesamtanzahl der resultierenden Zellen
$Anzahl['zellen'] = $Anzahl['spalten'] * $Anzahl['zeilen'];
// Anzahl an leeren "<td> </td>" Zellen ermitteln.
$Anzahl['leere_zellen'] = $Anzahl['zellen'] - $Anzahl['elemente'];
/*
// 3. Baue Tabelle mit den ermittelten Informationen.
// Setze Tabellenzähler auf "1", damit nicht "0/3==0" eintritt.
// Wird benötigt um neue Zeile aufzumachen.
*/
$zaehler['tabelle'] = 1;
// schreibe Tabellenkopf
echo $format['tabelle'];
echo $format['zeile'];
for($i=0;$i < count($Inhalt);$i++)
{
echo $format['zelle'];
echo $Inhalt[$i]."\n\n";
echo " </td>\n";
/*
// Wenn Zellenanzahl pro Spalte erreicht ist schreibe "</tr>\n<tr>\n".
// Ist allerdings auch der letzte Eintrag erreicht, mache kein neue Zeile auf.
// überlasse das Zeilen Ende dem "$Anzahl['leere_zellen']" auffüller.
*/
if($zaehler['tabelle'] % $Anzahl['spalten'] == 0 AND
$zaehler['tabelle'] != $Anzahl['zellen']):
echo "</tr>\n";
echo "<tr>\n";
endif;
// erhöhe Tabellenzähler um 1
$zaehler['tabelle']++;
} //while($zeile = mysql_fetch_array($result1))
/*
// fülle die Differenz zwischen "$Anzahl['zellen']"
// und tatsächlichen Einträgen "$Anzahl['elemente']" mit "<td> </td>".
// Ist der Wert "$Anzahl['leere_zellen']" = "0".
// D.h es gibt keine neue Zeile mehr, dann schreib auch keine.
*/
if($Anzahl['leere_zellen'] != 0 )
{
for($x=1; $x <= $Anzahl['leere_zellen'];$x++){
/**
* Eine leere Zellen pro Eintrag.
* Wenn für einen Eintrag mehrere Zellen benutzt werden, dann
* hier anpassen.
*/
echo"<td>\n".$format['leere_zelle']."</td>\n";
}
}
// schreibe Tabellenende.
echo "</tr>\n";
echo "</table>\n";
}
##################### FUNKTION ENDE
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html lang="de">
<head>
<title>Tabellenbauer</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<style type="text/css">
span.name{font-size:100%;font-weight:bold;}
span.beschreibung{font-size:80%}
</style>
</head>
<body>
<?PHP
###### Dritter Teil
// Wenn keine Daten vorhanden, dann baue auch keine Tabelle
if(count($Inhalt) !=0)
baue_tabelle($Inhalt,$anzahl);
else
echo "keine Daten vorhanden";
?>
</body>
</html>
ciao, Stefan