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 Werner-Zenk.de herunter und entpackt die Datei mysql_gaestebuch.zip.

Ich beschreibe hier die 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.

  • Ihr gebt in der Datei gb_einstellungen.php Eure Administrator Zugangsdaten ein.
  • Ihr könnt verschiedene Einstellungen vornehmen, wie z.B. eine Benachrichtigung via e-Mail nach einem Eintrag zu erhalten oder auch nicht.
  • Mit Aufruf der Datei gb_admin.php könnt Ihr Euer Gästebuch verwalten - Einträge freischalten, editieren, löschen oder sperren.
  • In der Gästebuch-Verwaltung des Admins könnt Ihr auch HTML-Code, wie z.B. Links, eintragen. Dies ist für den Benutzer nicht möglich.

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>&raquo; <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) . '">&#9668;</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) . '">&#9658;</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>&nbsp;' .
     bewertung($datensatz->bewertung) . '&nbsp;<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) . '">&#9668; Zurück</a>&nbsp; ' : '') . ' ' .
   (($AktuelleSeite + 1)  <= $Seitenanzahl ? '<a href="?seite=' . ($AktuelleSeite + 1) . '">Weiter &#9658;</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 = "&#10026; "; // Weitere Sterne: &#10025; bis &#10045;
 $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 . " &#43; &#" . (48 + $Z2) . ";";
 $Schutz = md5($Z1 + $Z2);

 // Formular erstellen
 $Formular = $javascript . '
<p>&raquo; <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">&#10034; ' . $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">&#10034; ' . $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">&#10034; ' . $Fehler["sicherheit"] . '</span>&nbsp;
   <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">&#10034;</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"> &emsp;
  ' . ($_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>
     &raquo; <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ß!

Tutorials von Thomas Frei-Herrmann

diese Seite weiter empfehlen


Counter Statistik