Werner-Zenk.de - Zur Startseite

Eine MySQL-Tabelle über Links sortieren

Tabellen haben oft den Nachteil das diese nicht vom Benutzer sortiert werden können, dabei ist es eigentlich ganz einfach, an PHP wird über einem Link nur der Name der DB-Tabellenspalte gesendet und ob diese aufsteigend oder absteigend sortiert werden soll.

Der Link dazu sieht etwa so aus:

datei.php?spalte=datum&sort=asc

Damit nun keine gefährlichen Anweisungen über den Link in unsere DB-Tabelle eingeschleust werden können, nehmen wir ein Array zu Hilfe in dem alle Spalten darin stehen die angezeigt und sortiert werden sollen:

$spalten = array(
 'titel',
 'autor',
 'nachricht',
 'datum',
);

Nun müssen wir einen Default-Wert für die Spalte $spalte (PHP-Variable) setzen wenn noch nichts über dem Link gesendet wurde:

$spalte = isset($_GET["spalte"]) ? $_GET["spalte"] : 'datum';

Dabei ist hier 'datum' der Default-Wert für die Spalte. Eine alternative Abfrage-Methode dazu wäre:

if (isset($_GET["spalte"])) {
 $spalte = $_GET["spalte"];
}
else {
 $spalte = 'datum';
}

Jetzt überprüfen wir ob der gesendete Wert $spalte sich in unserem Array $spalten befindet, wenn "false" von der in_array()-Funktion zurück gegeben wurde, wird der Default-Wert gesetzt:

if (!in_array($spalte, $spalten)) {
 $spalte = 'datum'; // Default-Wert
}

Das gleiche machen wir nun mit $sort, also mit der die Tabelle nun aufsteigend oder absteigend sortiert werden kann. Da es nur zwei Möglichkeiten (asc und desc) gibt schreiben wir das Array direkt in die Abfrage:

$sort = isset($_GET["sort"]) ? $_GET["sort"] : 'desc';

if (!in_array($sort, array('asc', 'desc'))) {
 $sort = 'desc'; // Default-Wert
}

Jetzt lesen wir die Datensätze aus, dieses wird hier über die PDO-Schnittstelle gemacht, weitere Infos zu PDO und der MySQL-Datenbank unter » Erster Eintrag in eine MySQL-Datenbank mit PDO

In der Anweisung fügen wir nach ORDER BY die Variablen $spalte und $sort hinzu.
$select = $db->query("SELECT `titel`, `autor`, `nachricht`, `datum`
                                FROM `nachrichten`
                                ORDER BY `" . $spalte . "` " . $sort);
$nachrichten = $select->fetchAll(PDO::FETCH_OBJ); 

Mit dem folgenden Code erzeugen wir nun die Links um die Tabelle zu sortieren. Dabei lesen wir das Array $spalten über eine foreach-Schleife aus und verknüpfen die Variablen und die Spalten-Namen zu einem Link.

echo '<table border="1"><tr>'; 
foreach ($spalten as $spalte) {
 echo '<th>' .
  ucfirst($spalte) .
  ' <a href="?spalte=' . $spalte . '&sort=asc" title="Aufsteigend sortieren">&#9650;</a>' .
  '<a href="?spalte=' . $spalte . '&sort=desc" title="Absteigend sortieren">&#9660;</a>' .
  '</th>';
}
echo '</tr>';

Nun werden die Daten der sortierten Tabelle noch ausgegeben:

foreach ($nachrichten as $nachricht) {
 echo '<tr><td>' . $nachricht->titel . '</td>' .
  '<td>' . $nachricht->autor . '</td>' .
  '<td>' . $nachricht->nachricht . '</td>' .
  '<td>' . $nachricht->datum . '</td></tr>';
}
echo '</table>';

Und so sollte das ganze dann in etwa aussehen: Live testen

[Bildschirmfoto] 
Tabelle sortieren

Tipps

Seiten dynamisch mit PHP erstellen
Vielleicht kennen Sie dieses Problem: Sie möchten gerne eine Seite ohne Frames erstellen, wollen aber auch nicht bei jeder Änderung an der Navigation alle Seiten ändern. Nur mit HTML gibt es hier keine Lösung und nicht jeder Benutzer hat JavaScript im Browser aktiviert, stattdessen sollten Sie auf PHP zurückgreifen.
Mit JSON Daten zwischen JavaScript und PHP austauschen
JSON, ist ein kompaktes Datenformat in einer einfach lesbaren Textform zum Zweck des Datenaustauschs zwischen Anwendungen.
Lokalen Webserver einrichten und verwenden
Um PHP-Scripte auszuführen benötigt man einen Webserver. Um nun nicht jede Datei zum testen erst per FTP auf seinen Webserver zu laden ist es sinnvoll, sich lokal auf dem Rechner einen sog. lokalen Webserver zu installieren.