Php

Grundgerüst eines Gästebuch's mit PHP & MySQL - Part 1 (Php Tutorial)

Tutorial erstellt von SilentStormer, letzte Änderung am 04.07.2007

Heute wollen wir uns ein Gästebuch basteln.
Da dies ein wenig ausführlicher sein wird, wird es wohl eher an etwas Fortgeschrittene gerichtet sein.

Ganz am Anfang war die Datenbank - ohne der geht bei diesem Tutorial nichts. Vorrausgesetzt wird eine korrekt installierte MySQL-Datenbank.
Wenn diese zur Verfügung steht, dann füg bitte folgenden SQL-Befehl in deine Datenbank:

Code:
CREATE TABLE `tabellenname` (
  `id` int(11) NOT NULL auto_increment,
  `name` text NOT NULL,
  `email` text NOT NULL,
  `homepage` text NOT NULL,
  `icq` int(11) NOT NULL default '0',
  `message` text NOT NULL,
  `time` datetime NOT NULL default '0000-00-00 00:00:00',
  `ip` text NOT NULL,
  PRIMARY KEY  (`id`)
)



Für 'tabellenname' gib den gewünschten Namen deiner Tabelle ein, wo alle Daten für das Gästebuch gespeichert werden.

Nun mal eine Übersicht der Dateien, die wir nacheinander erstellen werden.

1. mysql_connectinfo.php
2. seitenaufteilung.php
3. umlaute.php
4. smileys.php
5. guestbook.php
6. gb-details.php


Wir erstellen also eine neue Datei und nennen sie 'mysql_connectinfo.php'. Wir brauchen sie, um, sie
später im Gästebuchscript zu inkludieren.

Code:
<?php

   $mysqlhost="localhost";
   $mysqluser="username";
   $mysqlpasswd="passwort";
   $mysqldbname="datenbankname";

   $link = @mysql_pconnect($mysqlhost, $mysqluser, $mysqlpasswd);
   if ($link == FALSE) {
     echo "<p><b>Leider kann keine Verbindung zur Datenbank hergestellt werden.";
     echo "Bitte versuchen Sie es später noch einmal.</b></p>n";
     exit();
   }
   mysql_select_db($mysqldbname);

?>


Wenn wir dies haben, können wir problemlos auf die Datenbank zugreifen.


Wir wollen natürlich nicht alle Gästebucheinträge auf einer Seite haben, sondern auf mehrere Seiten verteilt.
Ich habe in diesem Beispiel 5 Einträge pro Seite verwendet.
Damit diese Seitenaufteilung funktioniert, brauchen wir ein Seitenaufteilungs-Script. Wir erstellen dazu eine neue
Datei und nennen sie 'seitenaufteilung.php'.
(Anmerkung: für die Seitenaufteilung habe ich das tolle und sehr hilfreiche Script von Rene (ebenfalls in der
PHP-Anwendungen-Sektion von der-webdesigner.net zu finden) verwendet, falls es jemandem bekannt vorkommen sollte ;))

Code:
<?php

   $gesamt =  $uebergabe;
   $eintraege_pro_seite = $entrys;

   $num_sites = ceil($gesamt/$eintraege_pro_seite);

   if(empty($_GET['site'])) {
     $site = 1;
   }

   elseif($_GET['site'] <= 0 || $_GET['site'] > $num_sites) {
     $site = 1;
   }

   else {
     $site = $_GET['site'];
   }

   $links = array();

   if($site != 1) {
     $prev = $site-1;
     $links[] = "<a href"".$_SERVER['PHP_SELF']."?site=".$prev."">« vorige Seite</a>";
   }

   for($i=1;$i<=$num_sites;$i++) {
     if($i == $site) {
       $links[] = $i;
     }
     else {
       $links[] = "<a href="".$_SERVER['PHP_SELF']."?site=".$i."">".$i."</a>";
     }
   }

   if($site != $num_sites) {
     $next = $site+1;
     $links[] = "<a href="".$_SERVER['PHP_SELF']."?site=".$next."">nächste Seite »</a>";
   }

   $link_string = implode(" | ", $links);
   $start = ($site-1)*$eintraege_pro_seite;
   $start2 = $start+1;
   $ende = $start+$eintraege_pro_seite;

?>



Ich erkläre es hier jetzt nicht sehr genau. Wer das Tutorial von Rene genauer lesen will:
http://www.der-webdesigner.net/index.php?folder=php_anwendungen&tutname=seitenaufteilung


Die dritte Datei, die wir brauchen, nennen wir 'umlaute.php'.

Code:
<?php

  function umlaute($text){

    $text = str_replace(""","&quot;",$text); #Ersetzt "
    $text = str_replace(""","&quot;",$text); #Ersetzt "
    $text = str_replace("#","&#35;",$text); #Ersetzt #
    $text = str_replace("$","&#36;",$text); #Ersetzt $
    $text = str_replace("%","&#37;",$text); #Ersetzt %
    $text = str_replace("'","&#39;",$text); #Ersetzt '
    $text = str_replace("/","&#47;",$text); #Ersetzt /
    $text = str_replace("","&#92;",$text); #Ersetzt
    $text = str_replace("ä","&auml;",$text); #Ersetzt ä
    $text = str_replace("Ä","&Auml;",$text); #Ersetzt Ä
    $text = str_replace("ü","&uuml;",$text); #Ersetzt ü
    $text = str_replace("Ü","&Uuml;",$text); #Ersetzt Ü
    $text = str_replace("ö","&ouml;",$text); #Ersetzt ö
    $text = str_replace("Ö","&Ouml;",$text); #Ersetzt Ö
    $text = str_replace("<","&lt;",$text); #Ersetzt <
    $text = str_replace(">",">",$text); #Ersetzt >
    $text = str_replace("ß","ß",$text); #Ersetzt ß
    $text = ereg_replace("n","<br />",$text); #Ersetzt Zeilenumbruch

    return $text;
  }


  function umlauteDecode($text){

    $text = str_replace(""",""",$text); #Ersetzt "
    $text = str_replace(""",""",$text); #Ersetzt "
    $text = str_replace("#","#",$text); #Ersetzt #
    $text = str_replace("$","$",$text); #Ersetzt $
    $text = str_replace("%","%",$text); #Ersetzt %
    $text = str_replace("'","'",$text); #Ersetzt '
    $text = str_replace("/","/",$text); #Ersetzt /
    $text = str_replace("","",$text); #Ersetzt
    $text = str_replace("ä","ä",$text); #Ersetzt ä
    $text = str_replace("Ä","Ä",$text); #Ersetzt Ä
    $text = str_replace("ü","ü",$text); #Ersetzt ü
    $text = str_replace("Ü","Ü",$text); #Ersetzt Ü
    $text = str_replace("ö","ö",$text); #Ersetzt ö
    $text = str_replace("Ö","Ö",$text); #Ersetzt Ö
    $text = str_replace("<","<",$text); #Ersetzt <
    $text = str_replace(">",">",$text); #Ersetzt >
    $text = str_replace("ß","ß",$text); #Ersetzt ß
    $text = ereg_replace("<br />","n",$text); #Ersetzt Zeilenumbruch

    return $text;
  }

?>



Die Funktion 'umlaute' prüft den vom User ins Gästebuch eingetragenen Text auf Umlaute und ersetzt diese
gegebenenfalls.
Die zweite Funktion, 'umlauteDecode', ist für den ersten Teil dieses Tutorials nicht nötig. Im zweiten Teil
werden wir allerdings einen Administratonsbereich programmieren. Um das Ganze einigermaßen komfortabel zu
gestalten, werden wir vor der Ausgabe dann umlauteDecode anwenden, um uns nicht durch eine Anzahl von Sonderzeichen-
codes schlagen zu müssen.


Die 4. Datei lautet 'smileys.php'.

Code:
<?php

  function smileys($message){

  $message = str_replace(":)","<img src="guestbook/smile.gif">",$message);

   return $message;
  }


  function smileysDecode($message){

  $message = str_replace("<img src="guestbook/smile.gif">",":)",$message);

   return $message;
  }

?>


So sieht die Grundstruktur aus. Natürlich musst du nun die Links zu deinen Smileys ersetzen. Es können beliebig
viele Umwandlungen stattfinden - je nach dem, wieviele Smileys du hast.


Jetzt haben wir einmal die Datei, die wir später in die 'guestbook.php' inkludieren werden.
Nun kommen wir zur Hauptdatei.

Als erstes inkludieren wir mal die vorhin erstellte Dateien.

Code:
<?php
   include "mysql_connectinfo.php";
   include "umlaute.php";
   include "smileys.php";

   $uebergabe =  mysql_query("SELECT * FROM guestbook ORDER BY id DESC");
   $entrys = 5;

   include "seitenaufteilung.php";
?>


Der Variablen '$uebergabe' weisen wir die bereits vorhanden Datenzeilen in der Gästebuch-Datenbank zu. Wir
benötigen sie später in 'seitenaufteilung.php' (siehe weiter oben).
'$entrys' weisen wir die Anzahl der Beiträge zu, die wir auf einer Seite haben wollen (in unserem Beispiel 5).
Auch sie wird in 'seitenaufteilung.php' benötigt.


Nun brauchen wir zwei JavaScripts.
Wenn der User (auf freiwilliger Basis) Daten eingibt (z.B. ICQ, Homepage oder
Email), kann man per Klick auf einen Link diese Informationen einsehen, die in einem PopUp geöffnet werden.
Um dieses PopUp zu öffnen, brauchen wir das erste Script.
Das zweite Script macht es möglich, per Klick auf dem nebenstehenden Smiley den Code dazu (zB ':)') in das
Textfeld zu transferieren.

    Code:
<script type="text/javascript" language="JavaScript">
    <!--
      function popUp(URL) {
        day = new Date();
        id = day.getTime();
        eval("page" + id + " = window.open(URL, '" + id + "', 'toolbar=0,scrollbars=0,location=0,statusbar=1,menubar=0,resizable=1,width=350,height=200');");
      }

      function AddText(text) {
        var box = document.forms[[0]].formmessage;
        if (!box) {
          alert("Formularelement nicht gefunden");
          return;
        }
        if (box.createTextRange && box.caretPos) {
          var caretPos = box.caretPos;
          caretPos.text = caretPos.text.charAt(caretPos.text.length - 1) == ' ' ? text + ' ' : text;
        } else box.value += text;
      }
    -
    </script>



Nun definieren wir eine Variable, dir wir aus dem Formular (das mit der Methode 'POST' aufgerufen wurde) bekommen. Sie wird aktiv, sobald
Daten aus dem Formular kommen, d.h., sobald der Absende-Button gedrückt wird.
Anschließend prüfen wir ab, ob die gerade deklarierte Variable den Wert 2 enthält (warum gerade 2, dazu komme ich später).
Wenn dies der Fall ist, deklarieren wir den Rest der Variablen, die wir vom Formular bekommen, d.h., den angegebenen Namen, die
E-Mail-Adresse, die Homepage, ICQ-Nummer und natürlich die Nachricht selbst.

  Code:
$eintragen = $_POST['eintragen']; // Übergabeparameter, ob der Eintragen-Button gedrückt wurde

   if ($eintragen == '2') {

   $name = $_POST['formname']; // Name
   $mail = $_POST['formmail']; // Mail
   $homepage = $_POST['formhomepage']; // Homepage
   $icq = $_POST['formicq']; // ICQ
   $message = $_POST['formmessage']; // Nachricht



So, nun prüfen wir erstmal, ob überhaupt ein Name eingetragen wurde. Dazu dient die vordefinierte Funktion 'empty()'. Sie gibt FALSE zurück,
wenn in der Variable etwas drinnensteht, und TRUE, wenn die Variable leer ist.
Wenn also kein Name eingetragen wurde, dann schreiben wir in die Variable 'output' eine passende Fehlermeldung.
Dann wird dasselbe Verfahren mit der Nachrichten-Variable gemacht.

Code:
## falls kein Name eingetragen wurde

     if (empty($name)) {
       $output = $output."<tr><td>Du hast keinen Namen eingegeben</td></tr>";
     }

## falls keine Nachricht eingetragen wurde

     if (empty($message)) {
       $output = $output."<tr><td>Du hast keine Nachricht eingegeben</td></tr>";
     }



Wenn nun weder Nachricht noch Name leer sind, dann soll er die Nachricht in die Datenbank speichern.
Vorher wenden wir an der Nachricht (die in der Variable 'message' gespeichert ist) die zwei Funktionen an, die wir weiter oben bereits inkludiert haben.
Damit wird überprüft, ob in der Nachricht Umlaute und Smileys vorkommen und diese gegenfalls ersetzt.
Dann wird abgefragt, ob eine Homepage angegeben wurde oder nicht (der Wert 'http://' ist in unserem Fall standardmäßig vorhanden,
daher können wir die Funktion 'empty()' nicht anwenden, sondern müssen den Wert der Variable zuerst auf NULL setzen).

     Code:
if (!empty($message) && !empty($name)) {
## trage in die Datenbank ein

       $message = umlaute($message);
       $message = smileys($message);
       if ($homepage == 'http://') {
         $homepage = '';
       }


Nun tragen wir in die Datenbank ein.
Statt 'tabellenname' natürlich den Namen eurer Tabelle einfügen.
Ich erläutere dies nun nicht weiter, da die Namen der Befehle eigentlich rhetorisch sind. Einzig der Vermerk nach dem Query
sollte ich vielleicht noch erwähnen: mit 'or die' wird eine Fehlermeldung ausgegeben, falls die Eintragung fehlschlug bzw. der MySQL-Befehl
ungültig ist.

      Code:
$insert = mysql_query("INSERT INTO tabellenname (name, email, homepage, icq, message, time, ip) VALUES ('$name', '$mail', '$homepage', '$icq', '$message', now(), '".$_SERVER['REMOTE_ADDR']."')") or die('Technischer Defekt: '.mysql_error());


Nun prüfen wir ab, ob der Eintrag gemacht wurde. Wenn nicht, in die Ausgabevariable eine Fehlermeldung speichern.
Wenn schon, eine Erfolgsmeldung speichern.

Code:
## falls kein Eintrag in die Datenbank erstellt wurde

       if (!$insert) {
         $output = $output."<tr><td>Eintragen fehlgeschlagen</td></tr>";
       }

## wenn der Eintrag in die Datenbank eingetragen wurde

       else {
         $output = $output."<tr><td>Eintragen wurde erfolgreich in die Datenbank eingetragen!</td></tr>";
       }
     }


Wenn die Variable 'output' nun nicht leer ist (wenn wir alles richtig gemacht haben, DARF sie rein theoretisch gar nicht leer sein), dann
geben wir sie in Form einer ordentlich anzusehenden Tabelle aus.

Code:
## Fehlerausgabe
     if (!empty($output)) {
       ?>
         <table border="0" style="border-top:1px solid #000000;border-bottom:1px solid #000000;border-left:1px solid #000000;border-right:1px solid #000000;margin-left:20%;width:50%;color:#000000;background-color:#FFFFEE;text-align:center;margin:5px;padding:5px;">
          <?php echo $output; ?>
         </table>
       <?php
     }
   }
   ?>


Wichtig: die letzte Klammer nicht vergessen; damit schließen wir 'if ($eintragen == '2')'. Also die bisherigen Aktionen wurden nur ausgeführt,
wenn ein Eintrag getätigt wurde. Der nachfolgende Quelltext ist das Eintrageformular und die Anzeige der bisherigen Beiträge.

Hier kommt jetzt die Formularausgabe. Ich erläutere diese nicht weiter.

Code:
<form name="gb" method="post" action="guestbook.php">
  <table border="0">
    <tr>
      <td>
        <table width="250" border="0" cellpadding="0" cellspacing="0">
          <tr>
            <td colspan="2"> </td>
          </tr>
          <tr>
            <td>Name*:</td>
            <td><input name="formname" type="text" id="formname" maxlength="30" /></td>
          </tr>
          <tr>
            <td>E-Mail:</td>
            <td><input name="formmail" type="text" id="formmail" maxlength="30" /></td>
          </tr>
          <tr>
            <td>Homepage:</td>
            <td><input name="formhomepage" type="text" id="formhomepage" value="http://" maxlength="30" /></td>
          </tr>
          <tr>
            <td>ICQ:</td>
            <td><input name="formicq" type="text" id="formicq" maxlength="30" /></td>
          </tr>
          <tr>
            <td colspan="2"> </td>
          </tr>
        </table>
      </td>
      <td>Nachricht*:</td>
      <td><textarea name="formmessage" rows="10" id="formmessage"></textarea></td>
      <td>
        <table border="0">
          <tr>
            <td><a href="javascript:AddText(':)');"><img src='guestbook/smile.gif' border="0" alt="" /></a></td>
          </tr>
        </table>
      </td>
    </tr>
    <tr>
      <td colspan="2"> </td>
      <td><input type="submit" name="Submit" value="Eintragen"><input type="reset" name="Submit2" value="Leeren"><input name="eintragen" type="hidden" value="2"></td>
    </tr>
  </table>
</form>


Die Zeile mit '><a href="javascript:AddText(':)');">........... ist natürlich beliebig erweiterbar, je nachdem, wieviele Smileys wir in unserem
Gästebuch verwenden wollen.

Diese Zeile ist auch sehr wichtig: '<input name="eintragen" type="hidden" value="2">'
Da wir hier die bereits vorher definierte Variable 'eintragen' verwenden. Wir haben sie mit dem Wert (value) 2 belegt. Das muss nicht 2 sein. Sie dient
lediglich zur Überprüfung, ob der Button gedrückt wurde. Wenn der Wert von 'value' hier verändert wird, muss er allerdings auch oben bei der Abfrage
'if ($eintragen == '2')' geändert werden, da sonst keine Eintragung geschehen kann.
Das Attribut 'type=hidden' vermerkt, dass das Feld versteckt ist.

Nun machen wir noch ein paar Formatierungen, in dem wir eine kleine Anmerkung bezüglich des Ausfüllens sowie einen horizontalen Trennstrich machen.

   Code:
<p style="text-align:right;font-size:9px;">
     mit * markierte Felder müssen ausgefüllt werden
   </p>
   <hr align="right" noshade="noshade" />


Jetzt gehts an die Darstellung der bisherigen Beiträge.

Als Erstes erstellen wir eine Seitenauswahl, um die schon vorher angelegte Datei seitenaufteilung.php zu nutzen.

   Code:
<p>
     Einträge gesamt:
<?php

   $output_now = mysql_query("SELECT * FROM tabellenname ORDER BY id DESC LIMIT $start, $eintraege_pro_seite");
   $output_ges = mysql_query("SELECT * FROM tabellenname");
   $num = mysql_num_rows($output_ges);

   echo $num;
?>
     <br />
     dargestellte Beiträge: <?php echo "".$start2." - ".$ende.""; ?>
   </p>
   <p>
     Seitenauswahl:
     <?php echo "".$link_string.""; ?>
   </p>


Hier gilt natürlich wieder: 'tabellenname' durch den eigenen Namen ersetzen.

Die Ausgabe der bisherigen Einträge ist jetzt keine große Sache mehr.
Wir müssen nur mehr eine Schleife anlegen, die die Datensätze nacheinander ausliest und ausgibt.

   Code:
while ($row = mysql_fetch_array($output_now)) {
     $id_ = $row['id'];
     $name_ = $row['name'];
     $email_ = $row['email'];
     $homepage_ = $row['homepage'];
     $icq_ = $row['icq'];
     $message_ = $row['message'];
     $time_ = date("d.m.Y, H:i", strtotime($row['time'])); // Übergabe der Uhrzeit im richtigen Format

     ?>
     <div align="center">
       <table border="0" style="border:1px solid #000000;width:450px;background-color:#EEEEEE;">
         <tr style="background-color:#A0C2DE;margin:0px;padding:0px;">
           <td colspan="2" style="text-align:left;width:200px;"><?php echo $name_; ?></td><td style="text-align:right;width:200px;"><?php echo $time_; ?> Uhr</td>
         </tr>
         <tr>
           <td colspan="3"> </td>
         </tr>
         <tr>
           <td colspan="3"><?php echo $message_; ?></td>
         </tr>
         <tr>
           <td colspan="3"> </td>
         </tr>
         <tr style="background-color:#EEEEEE;">
           <td><?php if(!empty($email_) || !empty($homepage_) || !empty($icq_)) {?><a href="gb-details.php?nameurl=<?php echo $name_; ?>&homepageurl=<?php echo $homepage_; ?>&mailurl=<?php echo $email_; ?>&icqurl=<?php echo $icq_; ?>" target="_blank" onclick="popUp(this.href); return false">Details</a><?php } ?></td>
         </tr>
       </table>
     </div>
     <br />
<?php
   }
?>


Der Link zu den 'Details' wird nur angezeigt, wenn auch wirklich Details vorhanden sind, d.h., wenn der User Email, Homepage oder ICQ angegeben hat.

Code:
<p>
   Seitenauswahl:
   <?php echo "".$link_string.""; ?>
</p>


Ganz unten machen wir auch noch eine Seitennavigation - damit das ganze etwas komfortabler wird.


Die ganze Sache hat jetzt einen Haken: wir rufen, wenn wir auf Details klicken, eine gewisse Datei 'gb-details.php' mit einigen Parametern auf.
Das Problem ist nur, das es diese Datei noch gar nicht gibt.
Nun, an und für sich kein Problem - legen wir halt noch eine neue Datei an, wenn wir schon dabei sind.

Code:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/Transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de">
  <head>
    <title>Gästebuch - Details</title>
  </head>
  <body>
    <?php

   $name = $_GET['nameurl']; // Name
   $mail = $_GET['mailurl']; // Mail
   $homepage = $_GET['homepageurl']; // Homepage
   $icq = $_GET['icqurl']; // ICQ

?>


Hier deklarieren wir den HTML-Header und die Übergaben aus der URL (diese sind um Gegenteil zum Formular, das wir verwendet haben,
auf die Methode 'GET' ausgerichtet).

Nun geben wir nur noch die per URL-Parameter erhaltenen Informationen nacheinander aus - vorrausgesetzt, es wurde etwas übergeben. Wenn also
beispielsweise keine Homepage angegeben wurde, wird der Detailpunkt auch nicht angezeigt.

     Code:
<strong style="font-size: 30px;">
        <?php echo $name; ?>
      </strong>
      <br />
      <br />
      <table border="0">
        <?php if(!empty($mail)) { ?>
          <tr>
            <td><img src="images/mail.gif" border="0" alt="Mail:" /></td>
            <td><a href="mailto:<?php echo $mail; ?>"><?php echo $mail; ?></a></td>
          </tr>
        <?php } ?>
        <?php if(!empty($homepage)) { ?>
          <tr>
            <td><img src="images/homepage.gif" border="0" alt="Homepage:" /></td>
            <td><a href="<?php echo $homepage; ?>" target="_blank"><?php echo $homepage; ?></a></td>
          </tr>
        <?php } ?>
        <?php if(!empty($icq)) { ?>
          <tr>
            <td><img src="images/icq.gif" border="0" alt="ICQ:" /></td>
            <td><?php echo $icq; ?></td>
          </tr>
        <?php } ?>
      </table>
    <p style="text-align:center">
      <a href="javascript:window.close()">Fenster schließen</a>
    </p>

  </body>
</html>


Ganz unten haben wir noch einen Link eingebaut, der das PopUp-Fenster wieder schließt.


Das war es im Großen und Ganzen - unser erstes Gästebuch ist fertig.
Die ganzen Bilder, die ich während des Tutorials verwendet habe, können natürlich auch rausgelöscht oder alternativ durch eines eurer Bilder
ersetzt werden (Bsp.: Smileys, Mail-/Homepage-/ICQ-Symbol, ...).

Hier noch einmal der Quelltext aller Dateien, die wir im Laufe des Tutorials erstellt haben.

1. mysql_connectinfo.php:

Code:
<?php

   $mysqlhost="localhost";
   $mysqluser="username";
   $mysqlpasswd="passwort";
   $mysqldbname="datenbankname";

   $link = @mysql_pconnect($mysqlhost, $mysqluser, $mysqlpasswd);
   if ($link == FALSE) {
     echo "<p><b>Leider kann keine Verbindung zur Datenbank hergestellt werden.";
     echo "Bitte versuchen Sie es später noch einmal.</b></p>n";
     exit();
   }
   mysql_select_db($mysqldbname);

?>


2. seitenaufteilung.php:

Code:
<?php

   $gesamt =  $uebergabe;
   $eintraege_pro_seite = $entrys;

   $num_sites = ceil($gesamt/$eintraege_pro_seite);

   if(empty($_GET['site'])) {
     $site = 1;
   }

   elseif($_GET['site'] <= 0 || $_GET['site'] > $num_sites) {
     $site = 1;
   }

   else {
     $site = $_GET['site'];
   }

   $links = array();

   if($site != 1) {
     $prev = $site-1;
     $links[] = "<a href"".$_SERVER['PHP_SELF']."?site=".$prev."">« vorige Seite</a>";
   }

   for($i=1;$i<=$num_sites;$i++) {
     if($i == $site) {
       $links[] = $i;
     }
     else {
       $links[] = "<a href="".$_SERVER['PHP_SELF']."?site=".$i."">".$i."</a>";
     }
   }

   if($site != $num_sites) {
     $next = $site+1;
     $links[] = "<a href="".$_SERVER['PHP_SELF']."?site=".$next."">nächste Seite »</a>";
   }

   $link_string = implode(" | ", $links);
   $start = ($site-1)*$eintraege_pro_seite;
   $start2 = $start+1;
   $ende = $start+$eintraege_pro_seite;

?>


3. umlaute.php:

Code:
<?php

  function umlaute($text){

    $text = str_replace(""","&quot;",$text); #Ersetzt "
    $text = str_replace(""","&quot;",$text); #Ersetzt "
    $text = str_replace("#","&#35;",$text); #Ersetzt #
    $text = str_replace("$","&#36;",$text); #Ersetzt $
    $text = str_replace("%","&#37;",$text); #Ersetzt %
    $text = str_replace("'","&#39;",$text); #Ersetzt '
    $text = str_replace("/","&#47;",$text); #Ersetzt /
    $text = str_replace("","&#92;",$text); #Ersetzt
    $text = str_replace("ä","&auml;",$text); #Ersetzt ä
    $text = str_replace("Ä","&Auml;",$text); #Ersetzt Ä
    $text = str_replace("ü","&uuml;",$text); #Ersetzt ü
    $text = str_replace("Ü","&Uuml;",$text); #Ersetzt Ü
    $text = str_replace("ö","&ouml;",$text); #Ersetzt ö
    $text = str_replace("Ö","&Ouml;",$text); #Ersetzt Ö
    $text = str_replace("<","&lt;",$text); #Ersetzt <
    $text = str_replace(">",">",$text); #Ersetzt >
    $text = str_replace("ß","ß",$text); #Ersetzt ß
    $text = ereg_replace("n","<br />",$text); #Ersetzt Zeilenumbruch

    return $text;
  }


  function umlauteDecode($text){

    $text = str_replace(""",""",$text); #Ersetzt "
    $text = str_replace(""",""",$text); #Ersetzt "
    $text = str_replace("#","#",$text); #Ersetzt #
    $text = str_replace("$","$",$text); #Ersetzt $
    $text = str_replace("%","%",$text); #Ersetzt %
    $text = str_replace("'","'",$text); #Ersetzt '
    $text = str_replace("/","/",$text); #Ersetzt /
    $text = str_replace("","",$text); #Ersetzt
    $text = str_replace("ä","ä",$text); #Ersetzt ä
    $text = str_replace("Ä","Ä",$text); #Ersetzt Ä
    $text = str_replace("ü","ü",$text); #Ersetzt ü
    $text = str_replace("Ü","Ü",$text); #Ersetzt Ü
    $text = str_replace("ö","ö",$text); #Ersetzt ö
    $text = str_replace("Ö","Ö",$text); #Ersetzt Ö
    $text = str_replace("<","<",$text); #Ersetzt <
    $text = str_replace(">",">",$text); #Ersetzt >
    $text = str_replace("ß","ß",$text); #Ersetzt ß
    $text = ereg_replace("<br />","n",$text); #Ersetzt Zeilenumbruch

    return $text;
  }

?>


4. smileys.php:

Code:
<?php

  function smileys($message){

  $message = str_replace(":)","<img src="guestbook/smile.gif">",$message);
  // beliebig erweiterbar

   return $message;
  }


  function smileysDecode($message){

  $message = str_replace("<img src="guestbook/smile.gif">",":)",$message);
  // beliebig erweiterbar

   return $message;
  }

?>


5. guestbook.php:

Code:
<?php

   include "mysql_connectinfo.php";


#########################
##  Seitenaufteilung   ##
#########################


   $uebergabe =  mysql_query("SELECT * FROM tabellenname ORDER BY id DESC");
   $entrys = 5;  // Anzahl der dargestellten Beiträge pro Seite

   include "seitenaufteilung.php"; // hier wird das Script für die Seitenaufteilung inkludiert



###################################
##  Das Script für das PopUp,    ##
##  das geöffnet wird, wenn auf  ##
##  'Details' geklickt wird      ##
###################################

    ?>
    <script type="text/javascript" language="JavaScript">
    <!--
      function popUp(URL) {
        day = new Date();
        id = day.getTime();
        eval("page" + id + " = window.open(URL, '" + id + "', 'toolbar=0,scrollbars=0,location=0,statusbar=1,menubar=0,resizable=1,width=350,height=250');");
      }
    -
    </script>
    <?php


################################
##  Das Script, um Smileys    ##
##  per Klick  auf die neben- ##
##  stehende Grafik ins       ##
##  Textfeld zu setzen        ##
################################

    ?>
    <script type="text/javascript" language="JavaScript">
    <!--
      function AddText(text) {
        var box = document.forms[[0]].formmessage;
        if (!box) {
          alert("Formularelement nicht gefunden");
          return;
        }
        if (box.createTextRange && box.caretPos) {
          var caretPos = box.caretPos;
          caretPos.text = caretPos.text.charAt(caretPos.text.length - 1) == ' ' ? text + ' ' : text;
        } else box.value += text;
      }
    -
    </script>
    <?php


####################################################
##  Hier wird die Funktion für Umlaute inkludiert ##
##  Wird benötigt nach dem Einlesen des           ##
##  Eingetragenen, um eventuelle Sonderzeichen    ##
##  und Zeilenumbrüche richtig zu erkennen        ##
####################################################


   include "umlaute.php";


##############################################
##  Nachfolgend wird die Funktion für die   ##
##  Smileys inkludiert. Sie wird benötigt,  ##
##  um nach dem Absenden des Formulars      ##
##  eventuell verwendete Smileys zu         ##
##  erkennen und gegebenenfalls mit der     ##
##  angegebenen Grafik zu ersetzen.         ##
##############################################


   include "smileys.php";


#################################################
##  wenn der Eintragen-Button geklickt wurde,  ##
##  trägt er die neuen Informationen in die    ##
##  Datenbank ein oder meldet einen Fehler     ##
#################################################

   $eintragen = $_POST['eintragen']; // Übergabeparameter, ob der Eintragen-Button gedrückt wurde

   if ($eintragen == '2') {

###########################
##  Parameterübergaben   ##
###########################

//Übergaben aus dem Gästebuchformular
   $name = $_POST['formname']; // Name
   $mail = $_POST['formmail']; // Mail
   $homepage = $_POST['formhomepage']; // Homepage
   $icq = $_POST['formicq']; // ICQ
   $message = $_POST['formmessage']; // Nachricht


## falls kein Name eingetragen wurde

     if (empty($name)) {
       $output = $output."<tr><td>Du hast keinen Namen eingegeben</td></tr>";
     }

## falls keine Nachricht eingetragen wurde

     if (empty($message)) {
       $output = $output."<tr><td>Du hast keine Nachricht eingegeben</td></tr>";
     }


     if (!empty($message) && !empty($name)) {
## trage in die Datenbank ein

       $message = umlaute($message);
       $message = smileys($message);
       if ($homepage == 'http://') {
         $homepage = '';
       }

       $insert = mysql_query("INSERT INTO tabellenname (name, email, homepage, icq, message, time, ip) VALUES ('$name', '$mail', '$homepage', '$icq', '$message', now(), '".$_SERVER['REMOTE_ADDR']."')") or die('Technischer Defekt: '.mysql_error());

## falls kein Eintrag in die Datenbank erstellt wurde

       if (!$insert) {
         $output = $output."<tr><td>Eintragen fehlgeschlagen</td></tr>";
       }

## wenn der Eintrag in die Datenbank eingetragen wurde

       else {
         $output = $output."<tr><td>Eintragen wurde erfolgreich in die Datenbank eingetragen!</td></tr>";
       }
     }
## Fehlerausgabe
     if (!empty($output)) {
       ?>
         <table border="0" style="border-top:1px solid #000000;border-bottom:1px solid #000000;border-left:1px solid #000000;border-right:1px solid #000000;margin-left:20%;width:50%;color:#000000;background-color:#FFFFEE;text-align:center;margin:5px;padding:5px;">
          <?php echo $output; ?>
         </table>
       <?php
     }
   }


#############################
##  Das Gästebuchformular, ##
##  indem ein neuer        ##
##  Gästebucheintrag ge-   ##
##  speichert werden kann. ##
#############################
?>

<form name="gb" method="post" action="guestbook.php">
  <table border="0">
    <tr>
      <td>
        <table width="250" border="0" cellpadding="0" cellspacing="0">
          <tr>
            <td colspan="2"> </td>
          </tr>
          <tr>
            <td>Name*:</td>
            <td><input name="formname" type="text" id="formname" maxlength="30" /></td>
          </tr>
          <tr>
            <td>E-Mail:</td>
            <td><input name="formmail" type="text" id="formmail" maxlength="30" /></td>
          </tr>
          <tr>
            <td>Homepage:</td>
            <td><input name="formhomepage" type="text" id="formhomepage" value="http://" maxlength="30" /></td>
          </tr>
          <tr>
            <td>ICQ:</td>
            <td><input name="formicq" type="text" id="formicq" maxlength="30" /></td>
          </tr>
          <tr>
            <td colspan="2"> </td>
          </tr>
        </table>
      </td>
      <td>Nachricht*:</td>
      <td><textarea name="formmessage" rows="10" id="formmessage"></textarea></td>
      <td>
        <table border="0">
          <tr>
            <td><a href="javascript:AddText(':)');"><img src='guestbook/smile.gif' border="0" alt="" /></a></td>
          </tr>
        </table>
      </td>
    </tr>
    <tr>
      <td colspan="2"> </td>
      <td><input type="submit" name="Submit" value="Eintragen"><input type="reset" name="Submit2" value="Leeren"><input name="eintragen" type="hidden" value="2"></td>
    </tr>
  </table>
</form>

   <p style="text-align:right;font-size:9px;">
     mit * markierte Felder müssen ausgefüllt werden
   </p>
   <hr align="right" noshade="noshade" />

<?php

#########################
##  Seitenauswahl und  ##
##  Darstellung der    ##
##  Seitenanzahl       ##
#########################
?>
   <p>
     Einträge gesamt:
<?php

   $output_now = mysql_query("SELECT * FROM tabellenname ORDER BY id DESC LIMIT $start, $eintraege_pro_seite");
   $output_ges = mysql_query("SELECT * FROM tabellenname");
   $num = mysql_num_rows($output_ges);

   echo $num;
?>
     <br />
     dargestellte Beiträge: <?php echo "".$start2." - ".$ende.""; ?>
   </p>
   <p>
     Seitenauswahl:
     <?php echo "".$link_string.""; ?>
   </p>

<?php
##########################
##  Ausgabe der         ##
##  bisherigen Einträge ##
##########################

   while ($row = mysql_fetch_array($output_now)) {
     $id_ = $row['id'];
     $name_ = $row['name'];
     $email_ = $row['email'];
     $homepage_ = $row['homepage'];
     $icq_ = $row['icq'];
     $message_ = $row['message'];
     $time_ = date("d.m.Y, H:i", strtotime($row['time']));

     ?>
     <div align="center">
       <table border="0" style="border:1px solid #000000;width:450px;background-color:#EEEEEE;">
         <tr style="background-color:#A0C2DE;margin:0px;padding:0px;">
           <td colspan="2" style="text-align:left;width:200px;"><?php echo $name_; ?></td><td style="text-align:right;width:200px;"><?php echo $time_; ?> Uhr</td>
         </tr>
         <tr>
           <td colspan="3"> </td>
         </tr>
         <tr>
           <td colspan="3"><?php echo $message_; ?></td>
         </tr>
         <tr>
           <td colspan="3"> </td>
         </tr>
         <tr style="background-color:#EEEEEE;">
           <td><?php if(!empty($email_) || !empty($homepage_) || !empty($icq_)) {?><a href="gb-details.php?nameurl=<?php echo $name_; ?>&homepageurl=<?php echo $homepage_; ?>&mailurl=<?php echo $email_; ?>&icqurl=<?php echo $icq_; ?>" target="_blank" onclick="popUp(this.href); return false">Details</a><?php } ?></td>
         </tr>
       </table>
     </div>
     <br />
<?php
   }
?>

<p>
   Seitenauswahl:
   <?php echo "".$link_string.""; ?>
</p>


6. gb-details.php:

Code:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/Transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de">
  <head>
    <title>Gästebuch - Details</title>
  </head>
  <body>
    <?php

   $name = $_GET['nameurl']; // Name
   $mail = $_GET['mailurl']; // Mail
   $homepage = $_GET['homepageurl']; // Homepage
   $icq = $_GET['icqurl']; // ICQ

?>
      <strong style="font-size: 30px;">
        <?php echo $name; ?>
      </strong>
      <br />
      <br />
      <table border="0">
        <?php if(!empty($mail)) { ?>
          <tr>
            <td><img src="images/mail.gif" border="0" alt="Mail:" /></td>
            <td><a href="mailto:<?php echo $mail; ?>"><?php echo $mail; ?></a></td>
          </tr>
        <?php } ?>
        <?php if(!empty($homepage)) { ?>
          <tr>
            <td><img src="images/homepage.gif" border="0" alt="Homepage:" /></td>
            <td><a href="<?php echo $homepage; ?>" target="_blank"><?php echo $homepage; ?></a></td>
          </tr>
        <?php } ?>
        <?php if(!empty($icq)) { ?>
          <tr>
            <td><img src="images/icq.gif" border="0" alt="ICQ:" /></td>
            <td><?php echo $icq; ?></td>
          </tr>
        <?php } ?>
      </table>
    <p style="text-align:center">
      <a href="javascript:window.close()">Fenster schließen</a>
    </p>

  </body>
</html>


Im zweiten Teil des Tutorials, welcher noch folgen wird, basteln wir uns auch etwas für uns, das der User nicht zu Gesicht bekommt.
Die ganze Sache mag bis jetzt vielleicht recht komfortabel und angenehm für den Endverbraucher sein, doch wir armen Administratoren haben jede Mühe,
eventuelle Posting-Änderungen oder -Löschungen durchzuführen. Deshalb basteln wir uns einen Administrationsbereich. Ich werde dabei auch ein anderes
Tutorial von mir (Login-System mit MySQL und PHP) zurückgreifen.

Ich hoffe, der erste Teil hat euch Spaß gemacht und ihr freut euch schon auf den den zweiten Teil :D

MfG SilentStormer

>> Allgemeine Fragen oder Probleme mit dem Tutorial? Hier gehts zum Forum!

Impressum / Datenschutzerklärung          © der-Webdesigner.net 2002 - 2008           top ▲