Tutorial MySQL Gästebuch - von Werner-Zenk.de
Dieses Gästebuch erfordert eine MySQL-Datenbank. Hier zeige ich, wie ich das Gästebuch direkt in NOF eingebaut habe.
Bitte ladet Euch die Skripte von meinem Download-Archiv als “2018-06-10 mysql_gaestebuch.zip” herunter und entpackt diese ZIP-Datei.
Ich beschreibe hier die ältere Version vom: 25.09.2016. Die Dateien können sich geändert haben. Hier eine neuere Version mit SQLite-Datenbank.
Öffnet das entpackte Verzeichnis mysql_gaestebuch. Lest Euch die Datei lies_mich.txt aufmerksam durch und befolgt genau die dort angegeben Schritte zur Einrichtung des Gästebuchs.
Voraussetzung ist eine MySQL Datenbank, die Ihr lediglich bei Eurem Provider als neue Datenbank erstellen müsst und PHP 5.4 (oder höher). Sämtliche benötigten Tabellen richtet das Skript gb_install.php von Webbausteine.de selbstständig ein. Gewisse Kenntnisse in HTML, CSS, JavaScript und PHP werden nur notwendig, wenn Ihr das Erscheinungsbild des Gästebuchs ändern und an Eure Wünsche anpassen wollt.
Zunächst öffnet Ihr die Datei gb_einstellungen.php und tragt die Verbindungsdaten zur MySQL-Datenbank ein. Bei 1&1 sieht das dann ungefähr so aus:
// Verbindungsdaten zur Datenbank
$DB_HOST = "db123456789.db.1and1.com"; // Datenbank-Host
$DB_NAME = "db123456789"; // Datenbank-Name
$DB_BENUTZER = "dbo123456789"; // Datenbank-Benutzer
$DB_PASSWORT = "HierDeinPasswort"; // Datenbank-Passwort
Kopiert, nachdem Ihr alle Einstellungen in der Datei gb_einstellungen.php vorgenommen habt, sämtliche Dateien in das Verzeichnis auf Euren Server, in dem die Seite liegt, auf der Ihr das Gästebuch anzeigen lassen wollt. Ruft die Datei gb_install.php einmalig auf und Eure Datenbank wird vollständig eingerichtet.
Ich habe in meinem Beispiel hier das Gästebuch gleich auf der Startseite dieses Projektes eingebaut und dementsprechend auch alle Dateien der Anwendung in das Stammverzeichnis kopiert.
Zunächst baut Ihr die Verlinkung zu der CSS-Datei in die HTML der Seite ein, die Ihr natürlich beliebig anpassen könnt:
> Layout markieren > Fenster “Layout-Eigenschaften” > Button “HTML” > “Zwischen Head Tags”
<link rel="stylesheet" href="gb_style.css">
Nun wollte ich hier, dass das Gästebuch direkt auf meiner NOF-Seite angezeigt wird - also habe ich mir den PHP-Code zur Anzeige aus dem Original-Skript gb.php, das Ihr hier sehen könnt, von Webbausteine.de kopiert und natürlich meine Seite mit dem Gästebuch auf die Dateierweiterung .php umgestellt.
> Menü oben > Bearbeiten > Benutzerdefinierte Namen > Dateierweiterung > .php wählen
Dazu habe ich die Datei gb.php mit meinem Windows-Editor geöffnet und folgenden Code in den HTML-Code Editor eines Textfeldes kopiert.
> Textfeld doppelklicken (Cursor blinkt) > Fenster “Text-Eigenschaften” > mittlere Button oben “Textfeld” > Button “HTML” > Code einfügen
In diesem Skript wird etliche mal auf die Datei gb.php verwiesen. Da ich das Skript aber hier direkt in meine NOF-Startseite index.php eingebaut habe, musste ich diese Verweise alle auf meine Seite index.php ändern - hier blau markiert. Ändert also diese 5 Verweise auf den Datei-Namen der Seite, auf der Ihr dieses Skript einbaut - bei mir ist das hier die Startdatei index.php. Bitte verwendet die Textformatierung “UTF-8”, in der die Skripte auch abgelegt sind. Tragt Eure eMail Adresse ein. Kopiert also alles ab dem Tag <?php bis zum abschließenden Tag ?>. Hier der bei mir eingebaute Code:
<?php
/*
* Gästebuch - gb.php (utf-8)
* - https://werner-zenk.de
* - modifiziert von Tommy
*/
include "gb_einstellungen.php";
if (!isset($_GET["eintragen"])) {
print '<p>» <a href="index.php?eintragen">In das Gästebuch eintragen</a></p>';
// Anzahl der Seiten berechnen
$select = $verbindung->query("SELECT `id` FROM `" . $TABELLENNAME . "` WHERE `anzeige` = '1'");
$AnzahlDatensaetze = $select->rowCount();
if ($AnzahlDatensaetze > 0) {
$Seitenanzahl = ceil($AnzahlDatensaetze / $EINTRAEGE_SEITE);
$AktuelleSeite = isset($_GET["seite"]) ? $_GET["seite"] : 1;
$AktuelleSeite = ctype_digit($AktuelleSeite) ? $AktuelleSeite : 1;
$AktuelleSeite = $AktuelleSeite < 1 || $AktuelleSeite > $Seitenanzahl ? 1 : $AktuelleSeite;
$Versatz = $AktuelleSeite * $EINTRAEGE_SEITE - $EINTRAEGE_SEITE;
// Gästebucheinträge auslesen
$select = $verbindung->query("SELECT `name`, `nachricht`, `bewertung`, `datum`
FROM `" . $TABELLENNAME . "`
WHERE `anzeige` = '1'
ORDER BY `datum` " . ($EINTRAEGE_IO == "Ende" ? "ASC" : "DESC") . "
LIMIT " . $Versatz . ", " . $EINTRAEGE_SEITE);
if ($datensaetze = $select->fetchAll(PDO::FETCH_OBJ)) {
// Link-, und Formular-Navigation
print '<form action="index.php" method="get" autocomplete="off">' . $AnzahlDatensaetze . ($AnzahlDatensaetze > 1 ? ' Einträge' : ' Eintrag') . ' - Seite: ' .
(($AktuelleSeite - 1) > 0 ? '<a href="?seite=' . ($AktuelleSeite - 1) . '" title="Zurück zu Seite ' . ($AktuelleSeite - 1) . '">◄</a>' : '') .
' <input type="text" value="' . $AktuelleSeite . '" name="seite" size="3" maxlength="4" title="Seitenzahl eingeben und die Eingabetaste drücken." onClick="this.select()"> von ' . $Seitenanzahl .
(($AktuelleSeite + 1) <= $Seitenanzahl ? ' <a href="?seite=' . ($AktuelleSeite + 1) . '" title="Weiter zu Seite ' . ($AktuelleSeite + 1) . '">►</a>' : '') .
'</form>';
// Gästebucheinträge anzeigen
foreach($datensaetze as $datensatz) {
sscanf($datensatz->datum, "%4s-%2s-%2s", $jahr, $monat, $tag);
print '<dl class="eintrag"><dt><b>' . $datensatz->name . '</b> ' .
bewertung($datensatz->bewertung) . ' <small> ' . (kalender($tag, $monat, $jahr)) . '</small></dt><dd>' .
code($datensatz->nachricht) . '</dd></dl>';
}
// Navigation Zurück /Weiter
if ($AnzahlDatensaetze > $EINTRAEGE_SEITE) {
print '<p>' . (($AktuelleSeite - 1) > 0 ? '<a href="?seite=' . ($AktuelleSeite - 1) . '">◄ Zurück</a> ' : '') . ' ' .
(($AktuelleSeite + 1) <= $Seitenanzahl ? '<a href="?seite=' . ($AktuelleSeite + 1) . '">Weiter ►</a>' : '') . '</p>';
}
}
}
}
else {
// In das Gästebuch eintragen
$name = isset($_POST["name"]) ? $_POST["name"] : "";
$nachricht = isset($_POST["nachricht"]) ? $_POST["nachricht"] : "";
// Benutzereingaben überprüfen
$Fehler = array("name"=>"","nachricht"=>"","sicherheit"=>"",);
if (isset($_POST["submit"]) ||
isset($_POST["vorschau"])) {
$Fehler["name"] = strlen($_POST["name"]) <= 3 ? 'Bitte füllen Sie dieses Feld aus (min. 3 Zeichen)!<br>' : '';
$Fehler["name"] = strip_tags($_POST["name"]) != $_POST["name"] ? 'HTML-Tags sind nicht erlaubt!<br>' : $Fehler["name"];
$Fehler["nachricht"] = strlen($_POST["nachricht"]) < 10 ? 'Bitte füllen Sie dieses Feld aus (min. 10 Zeichen)!<br>' : '';
$Fehler["nachricht"] = strip_tags($_POST["nachricht"]) != $_POST["nachricht"] ? 'HTML-Tags sind nicht erlaubt!<br>' : $Fehler["nachricht"];
$Fehler["sicherheit"] = (!isset($_POST["vorschau"]) && md5($_POST["zip"]) != $_POST["zip2"]) ? 'Die Sicherheitsabfrage ist leider falsch!<br>' : '';
}
// Auswahlliste "Webseite Bewertung"
$stern = "✪ "; // Weitere Sterne: ✩ bis ✽
$bewertung = isset($_POST["bewertung"]) ? $_POST["bewertung"] : 0;
$bewertungsauswahl = "\n <select name='bewertung' id='Bewertung'>\n <option value='0'>keine</option>";
for ($value = 1; $value <= 4; $value++) {
$bewertungsauswahl .= "\n <option value='" . $value . "'" .
((isset($_POST["bewertung"]) ? $_POST["bewertung"] : "") == $value ?
" selected='selected'" : "") . ">" . str_repeat($stern, $value) . "</option>";
}
$bewertungsauswahl .= "\n </select>\n ";
// Sicherheitsabfrage - Zufallszahlen generieren
$Z0 = array(mt_rand(1, 9), mt_rand(1, 9));
$Z1 = max($Z0); $Z2 = min($Z0);
$Spam = $Z1 . " + &#" . (48 + $Z2) . ";";
$Schutz = md5($Z1 + $Z2);
// Formular erstellen
$Formular = $javascript . '
<p>» <a href="index.php">Das Gästebuch anzeigen</a></p>
<form name="Form" action="index.php?eintragen" method="post">
<p>
<label> Name:
<span style="color:#FF0000">✲ ' . $Fehler["name"] . '</span>
<input type="text" name="name" value="' . $name . '" size="30" maxlength="30" required="required" autofocus="autofocus">
</label>
</p>
<p>
<label for="message"> Nachricht:</label>
<span style="color:#FF0000">✲ ' . $Fehler["nachricht"] . '</span>
' . (smiley()) . '<br>
<textarea name="nachricht" id="message" cols="40" rows="10" required="required">' . $nachricht . '</textarea>
</p>
<p>
<label>Bewertung: ' . $bewertungsauswahl . '</label> <small>Sterne von 1 bis 4</small>
</p>
<p>' .
($_SERVER["REQUEST_METHOD"] != "POST" ? '' :
'<p> <label> Sicherheitsabfrage:
<span style="color:#FF0000">✲ ' . $Fehler["sicherheit"] . '</span>
<code>' . $Spam . '</code> =
<input type="text" name="zip" size="4" autocomplete="off" required="required">
<input type="hidden" name="zip2" value="' . $Schutz . '"><br>
</p>') .
'<p>
<small>Bitte alle mit <span style="color:#FF0000">✲</span> markierten Felder ausfüllen.<br>
Beachten Sie, das Ihr Gästebucheintrag erst nach einer Prüfung frei geschaltet wird.</small><br><br>
<input type="submit" name="vorschau" value="Vorschau" formnovalidate="formnovalidate">  
' . ($_SERVER["REQUEST_METHOD"] == "POST" ? '<input type="submit" name="submit" value="Eintragen">' : '') . '
</p>
</form>
';
// Vorschau
if (isset($_POST["vorschau"]) &&
strlen($_POST["name"]) >= 4 &&
strlen($_POST["nachricht"]) >= 10) {
print '<fieldset><legend>Vorschau</legend>
' . $name . ' ' . (bewertung($bewertung)) . '<br>'. code($nachricht, true) . '</fieldset>';
}
// Formular abgesendet
if (isset($_POST["submit"])) {
// Sind keine Benutzer-Eingabefehler vorhanden ...
if (implode("", $Fehler) == "") {
// ... in die Datenbank eintragen.
$insert = $verbindung->prepare("INSERT INTO `" . $TABELLENNAME . "`
SET
`anzeige`= :anzeige,
`name`= :name,
`nachricht`= :nachricht,
`bewertung`= :bewertung,
`datum`= NOW()");
if ($insert->execute([':anzeige'=>$ANZEIGESPERRE,
':name'=>$_POST["name"],
':nachricht'=>$_POST["nachricht"],
':bewertung'=>$_POST["bewertung"]])) {
$id = $verbindung->lastInsertId();
print '<p>Vielen Dank <i>' . $_POST["name"] . '</i>,<br>
Sie wurden in das Gästebuch eingetragen.<br><br>
» <a href="index.php">Zum Gästebuch</a></p>';
// E-Mail an den Admin versenden
if ($GB_INFO == "ja") {
mb_internal_encoding("UTF-8");
$Betreff = mb_encode_mimeheader("Neuer Gästebucheintrag", "UTF-8", "Q");
$Kopfzeile = "MIME-Version: 1.0;\nFrom: " . mb_encode_mimeheader($_POST["name"], "UTF-8", "Q") . "<mail@DeineDomain.de>" . "\nContent-Type: text/plain; Charset=UTF-8;\n";
@mail($EMAIL, $Betreff,
"Datum: " . date("d.m.Y H:i") .
" Uhr\nName: " . $_POST["name"] .
"\nNachricht:\n" . $_POST["nachricht"] .
"\n\nBearbeiten: " . $PFAD . "/gb_admin.php?id=" . $id, $Kopfzeile);
}
}
}
else {
// Formular und Benutzer-Eingabefehler ausgeben
print $Formular;
}
}
else {
// Formular ausgeben
print $Formular;
}
}
?>
Wie ich den “Smooth Scroll” dieser Seiten erstellt habe, könnt Ihr hier lesen.
Viel Spaß!