PHP/ MySQL Gästebuch Tutorial - Ausgabe der Einträge
Autor
Flitze
Klicks 134840
Keywords:
Gästebuch Tutorial, PHP Gästebuch erstellen, Guestbook, Gästebuch mit PHP und MySQL, Spamschutz für Gästebuch, Spam im Gästebuch, , Ausgabe, Einträge, Gästebuch
Klicks 134840
Rating für PHP/ MySQL Gästebuch Tutorial
4.1 von 10
Bewertungen133
Stand
05.07.2010
4.1 von 10
Bewertungen133
Keywords:
Gästebuch Tutorial, PHP Gästebuch erstellen, Guestbook, Gästebuch mit PHP und MySQL, Spamschutz für Gästebuch, Spam im Gästebuch, , Ausgabe, Einträge, Gästebuch
Breadcrumb:
Tutorials » PHP/ MySQL Gästebuch Tutorial » PHP/ MySQL Gästebuch Tutorial - Ausgabe der Einträge
6. Ausgabe der Einträge
[ADSENSE_LINE]Damit man die Einträge der verschiedenen User auch lesen kann, müssen sie aus der Datenbank geholt und entsprechend aufbereitet werden. Das kann z.B. so aussehen
PHP:
<?php
$sql = "SELECT
Email,
Homepage,
Name,
Datum,
Nachricht,
Editierung
FROM
Gaestebuch
ORDER BY
Datum DESC
";
$result = mysql_query($sql) OR die ("<pre>\n".$sql."</pre>\n".mysql_error());
while($row = mysql_fetch_assoc($result)) {
echo "<table>\n";
echo " <tr>\n";
echo " <td>\n";
echo " <table>\n";
echo " <tr>\n";
echo " <td>\n";
if (trim($row['Email'])== "")
echo " ";
else
echo "» <a href=\"mailto:".htmlentities($row['Email'], ENT_QUOTES)."\">Email</a>";
echo " </td>\n";
echo " </tr>\n";
echo " <tr>\n";
echo " <td>\n";
if (trim($row['Homepage'])== "")
echo " ";
else {
if (strtolower(substr($row['Homepage'], 0, 7)) =='http://')
echo "» <a href=\"".htmlentities($row['Homepage'], ENT_QUOTES)."\" target=\"_blank\">Homepage</a>";
else
echo "» <a href=\"http://".htmlentities($row['Homepage'], ENT_QUOTES)."\" target=\"_blank\">Homepage</a>";
}
echo " </td>\n";
echo " </tr>\n";
echo " </table>\n";
echo " </td>\n";
echo " <td>\n";
echo " <table>\n";
echo " <tr>\n";
echo " <td>\n";
echo htmlentities($row['Name'], ENT_QUOTES);
echo " </td>\n";
echo " </tr>\n";
echo " <tr>\n";
echo " <td>\n";
echo date('d.m.Y H:i \U\h\r', strtotime($row['Datum']))."\n";
echo " </td>\n";
echo " </tr>\n";
echo " </table>\n";
echo " </td>\n";
echo " </tr>\n";
echo " <tr>\n";
echo " <td>\n";
echo nl2br(htmlentities($row['Nachricht'], ENT_QUOTES))."\n";
if($row['Editierung']){
echo "<br>\n<br>\n";
echo "<span style=\"font-size:10px\">".nl2br(htmlentities($row['Editierung']))."</span>\n";
}
echo " </td>\n";
echo " </tr>\n";
echo "</table>\n";
?>
Das Ganze gehen wir jetzt mal einzeln durch. Zuerst fällt auf, das alle Ausgaben mit der Funktion htmlentities bearbeitet werden. Sie wandelt alle HTML beinflussenden Sonderzeichen ( wie z.B. < > " ' & ) so um, dass sie den Quellcode nicht mehr beeinflussen. Täte ich das nicht, könnte jemand sowas wie <script>alert( 'lol' );</script> in seinen Beitrag schreiben, sodass bei jedem Aufruf der Gästebuchseite eine Windows Error Message erscheinen würde. Auch </table></table></table></table>< /table> wäre denkbar, damit würde man das gesamte Layout zerschroten.
Aber kommen wir erstmal zum eigentlichen 'Abholen' der Daten. Diese hole ich mir aus der Datenbank und ordne sie absteigend nach dem Datum, damit die neusten Einträge auch ganz oben stehen. Das ist dieser Teil
PHP:
<?php
$sql = "SELECT
Email,
Homepage,
Name,
Datum,
Nachricht,
Editierung
FROM
Gaestebuch
ORDER BY
Datum DESC
";
$result = mysql_query($sql) OR die ("<pre>\n".$sql."</pre>\n".mysql_error());
while($row = mysql_fetch_assoc($result)) {
// ...
?>
Durch die while-Schleife gehe ich jeden Datensatz einzeln durch. Nun folgen die Prüfungen der einzelnen Daten, beginnend mit der Email-Adresse
PHP:
<?php
if (trim($row['Email'])== "")
echo " ";
else
echo "» <a href=\"mailto:".htmlentities($row['Email'], ENT_QUOTES)."\">Email</a>";
?>
Wurde keine Email-Adresse eingegeben, wird ein geschütztes Leerzeichen ausgegeben damit der IE die Tabellenzelle trotzdem noch darstellt. Wurde eine Email-Adresse eingegeben, wird sie in einen mailto:-Hyperlink verwandelt, der die Bezeichnung » 'Email' bekommt.
Danach folgt die Prüfung der Homepage
PHP:
<?php
if (trim($row['Homepage'])== "")
echo " ";
else {
if (strtolower(substr($row['Homepage'], 0, 7)) =='http://')
echo "» <a href=\"".htmlentities($row['Homepage'], ENT_QUOTES)."\" target=\"_blank\">Homepage</a>";
else
echo "» <a href=\"http://".htmlentities($row['Homepage'], ENT_QUOTES)."\" target=\"_blank\">Homepage</a>";
}
?>
Zuerst wird wieder geprüft, ob eine Homepage eingegeben wurde. Da wir einen gültigen Hyperlink auf die entsprechende Homepage erzeugen wollen, müssen wir sicherstellen, dass am Anfang der eingegebenen Homepage auch 'http://' steht. Ist dies der Fall, wird die Eingabe für die Ausgabe einfach übernommen. Ansonsten wird ein 'http://' hinzugefügt. Das ist nötig, weil man ja nich voraussetzen kann, dass der User auch wirklich immer 'http://' an den Anfang der Homepage schreibt. Die Bezeichnung des Links lautet » 'Homepage' respektive , falls keine Homepage angegeben wurde.
Nach der Homepage folgt die Ausgabe des Datums. Da dieses automatisch bei jedem Eintrag erzeugt wird, muss ich es nicht auf seine Existenz prüfen sondern kann gleich folgende Ausgabe erzeugen
PHP:
<?php
echo date('d.m.Y H:i \U\h\r', strtotime($row['Datum']))."\n";
?>
Dadurch, das wir das Datum in einer als DATETIME deklarierten Datenbankspalte speichern, erfolgt dessen Ausgabe als String. Allerdings ist dieser String nicht nach deutschem Maßstab formatiert. Um diesen Umstand zu korrigieren benutze ich die Funktionen date und strtotime. date formatiert mir einen timestamp meinen Wünschen entsprechend und strtotime wandelt den String der MYSQL-Datums-Spalte in den benötigten Timestamp um. Die genau Syntax der date Funktion sowie die verwendeten Parameter könnt ihr dem Manual entnehmen.
Last but not least kommt die Ausgabe der Nachricht mittels
PHP:
<?php
echo nl2br(htmlentities($row['Nachricht'], ENT_QUOTES))."\n";
if($row['Editierung']){
echo "<br>\n<br>\n";
echo "<span style=\"font-size:10px\">".nl2br(htmlentities($row['Editierung']))."</span>\n";
}
?>
Wie man sieht, wird die Nachricht zusätzlich zu htmlentities noch mit der Funktion nl2br bearbeitet. Diese Funktion sorgt dafür, dass die Absätze bzw. Zeilenumbrüche, die der User bei der Eingabe der Daten im Formular macht, auch im HTML-Quelltext als solche umgesetzt werden.
Dann wird geprüft, ob dieser Beitrag bereits von jemandem bearbeitet wurde, also ob eine Editierung vorgenommen wurde. Ist die der Fall, wird eine entsprechende Nachricht ausgegeben, ansonsten wird nicht ausgegeben. Wie diese Editierung zu Stande kommen kann, erkläre ich im folgenden Kapitel der Verwaltung.
Zurück zur vorigen Seite:
PHP/ MySQL Gästebuch Tutorial - Speichern in der Datenbank Weiter zur nächsten Seite:
PHP/ MySQL Gästebuch Tutorial - Verwaltung und Administration