Ein einfaches Gästebuch (Vorstufe eines Forums?)

Ein einfaches Gästebuch ist auch Vorstufe eines Forums? Prinzipiell kann man diese Frage mit ja beantworten, denn sie sind sich im gewissen Sinn ähnlich.

Beides verwendet überwiegend Datenbanken zur Speicherung von Daten. Im Gästebuch sind es nur ein paar freundliche Worte oder Danksagungen, daher benötigt ein Gästebuch auch nur eine Tabelle. In Foren sieht das ganze etwas anders aus - hier benötigt man mehrere Tabellen (Benutzer, Passwörter, Themen, ...) um das Forum zum Laufen zu bringen. Hinzu kommt bei Foren, dass man sich oftmals anmelden muss um sogar Fragen stellen zu können (bei Antworten allerdings logisch).

Was beide unterscheidet ist daher der Programmieraufwand weil Foren logische Verknüpfungen innerhalb der Tabellen (Datenbank) haben müssen.

Um einige logischen Dinge aufzuzeigen folgendes:
Ein User meldet sich an, gibt anschließend im Forum eine Frage oder Antwort ein und automatisch werden seine Daten mit auf der Webseite angezeigt, oder Du möchtest Dich anmelden im Forum zum Mitmachen, hast einen schönen Benutzernamen - doch der ist nach einer Prüfung schon vergeben.

Aber all dieses brauchen wir in der Vorstufe nicht, denn wir erstellen ja nur ein Gästebuch (was erweiterbar ist, wenn Du Dich traust).

Einige der Dinge die wir dazu benötigen kennen wir schon aus den vorigen Abhandlungen, so zum Beispiel die datenbank.php (mit den Zugangsdaten zur Datenbank).

Auch das Script für die Auswertung ob Gästebuch anzeigen oder Formular zum Eintragen für die gaeste.php wird Dir bekannt vorkommen.
Hier das Script für den Inhalt in der gaeste.php:
<?php
function inhalt_check($var_name)
  {
    if(!isset($_GET[$var_name]))
      {
        return ("");
      }
    else
      {
        return (trim(urldecode($_GET[$var_name])));
      }
  }
$inhalt = inhalt_check("eintrag");
// --- MYSQL-Tabelle für das Gästebuch festlegen ---
$tabelle_gaeste = "mein_gaestebuch";

if($inhalt == 'erstellen')
  {
    // --- Laden des Scriptes zum Eintrag erstellen ---
    $oeffne_eintrag_datei = "privates/gaeste/eintrag.php";
    if(file_exists($oeffne_eintrag_datei))
      {
        include_once "$oeffne_eintrag_datei";
      }
  }
else
  {
    // --- Auflistung der Gästebucheinträge ---
    $oeffne_gaeste_datei = "privates/gaeste/buch.php";
    if(file_exists($oeffne_gaeste_datei))
      {
       include_once "$oeffne_gaeste_datei";
      }
  }
?>

Damit ist schon erst einmal geklärt, was wann aufgerufen wird. Mit <a href="gaeste.php"> gelangst Du zum normalen Gästebuch mit den Einträgen und mit <a href="gaeste.php?eintrag=erstellen"> zum Formular um einen Eintrag zu erstellen.

Ein Formular zum Eintrag erstellen kannst Du Dir aus dem Formular zum E-Mail Versand erstellen (zum Beispiel einfach den Betreff weglassen).

Meine Empfehlung im Formular: Pflichtfelder mit Name und Nachricht, freiwillig E-Mail Adresse, Wohnort, Homepage, ...
Denke daran, dass Du die Pflichtfelder wieder prüfen musst, also mache nicht zu viele davon!
Und noch etwas - ich wollte es bisher auch nie glauben - mit aktiven Homepagelinks (des Gastes) bekommst Du mehr Einträge als ohne - aber nicht unbedingt nur Gute - auch viele mit Spam (Viagra und Co). Aber auch diese kann man heut zu Tage nahezu aussperren, wie, das erfährst Du ebenfalls hier auf diesen Seiten.

Kommen wir als nächstes zum Formular, der formular.php, welche im Ordner "gaeste" abgelegt ist:
<h1 align="center">Gästebucheintrag erstellen</h1>
<p align="center">Mit diesem Formular kannst Du einen Eintrag in mein Gästebuch erstellen.</p>
<p align="center">Mit (*) gekennzeichnete Felder sind Pflichtfelder!</p>
<p align="center">Das Datum Deines Eintrages wird vom Server erstellt.</p>
<p align="center">Programmiersprachen sind unerwünscht.</p>
<?php
for ($i = 0; $i <$fehler_anzahl; $i++)
  {
    echo "$fehler_angaben[$i]\n";
  }
?>
<br>
<form action="<?php $_SERVER['PHP_SELF'] ?>" method="post">
<table border="0" align="center" width="600">
<tr>
  <td width="35%" valign="top">Dein Name: (*)</td>
  <td width="65%" valign="top"><input type="text" name="name" value="<?php echo "$name"; ?>"></td>
</tr>
<tr>
  <td valign="top">Dein Wohnort:</td>
  <td valign="top"><input type="text" name="wohnort" value="<?php echo "$wohnort"; ?>"></td>
</tr>
<tr>
  <td valign="top">Deine E-Mail:</td>
  <td valign="top"><input type="text" name="email" value="<?php echo "$email"; ?>"></td>
</tr>
<tr>
  <td valign="top">Deine Homepage:</td>
  <td valign="top"><input type="text" name="homepage" value="<?php echo "$wohnort"; ?>"></td>
</tr>
<tr>
  <td valign="top"> Deine Nachricht: (*)</td>
  <td valign="top"><textarea rows="7" cols="45" name="nachricht"><?php echo "$nachricht"; ?></textarea></td>
</tr>

<?php
// --- Jetzt bauen wir einen Spamfilter - Rechenaufgabe ---
$end_add = "50"; // -> bestimmt größte Zahl für Addition
$end_mal = "20"; // -> bestimmt größte Zahl für Multiplikation
$array_add = array(); // -> hier werden die Zahlen für die Addition abgelegt
$array_mal = array(); // -> hier werden die Zahlen für die Multiplikation abgelegt
$array_aufgabe = array("0"=>"plus","1"=>"mal"); // -> Auswahlarray Addition/Multiplikation
// --- Zahlen in Array schreiben ---
// --- $i = 2 ($i = 0) bestimmt die niedrigste Zahl der Rechenaufgabe ---
for($i = 2; $i <= $end_add; $i++)
  {
   array_push($array_add,$i);
  }
for($i = 0; $i <= $end_mal; $i++)
  {
   array_push($array_mal,$i);
  }
// --- Rechenaufgabe bestimmen ---
// --- Mit srand einen internen Startwert für den Zufallsgenerator festlegen ---
srand ((float) microtime() * 10000000);
// --- mit array_rand einen zufälligen Wert festlegen -> hier Rechenart festlegen ---
$suche_aufgabe = array_rand($array_aufgabe, 1);
$aufgabe = $array_aufgabe[$suche_aufgabe];
// --- jetzt Zahlen in Abhängigkeit der Rechenart auswählen ---
if($aufgabe == 'plus')
  {
    // --- Addieren festgelegt ---
    srand ((float) microtime() * 10000000);
    $suche_zahl = array_rand($array_add, 2);
    $zahl1 = $array_add[$suche_zahl[0]];
    $zahl2 = $array_add[$suche_zahl[1]];
  }
else
  {
    // --- Multiplizieren festgelegt ---
    srand ((float) microtime() * 10000000);
    $suche_zahl = array_rand($array_mal, 2);
    $zahl1 = $array_mal[$suche_zahl[0]];
    $zahl2 = $array_mal[$suche_zahl[1]];
  }
?>
<tr>
  <td colspan="2">Spamfilter - Löse folgende Rechenaufgabe (*)</td>
</tr>
<tr>
  <td valign="top">Rechenaufgabe: <?php echo "$zahl1 $aufgabe $zahl2"; ?> = </td>
  <td valign="top"><input type="text" name="loesung"></td>
</tr>
<tr>
  <td></td>
  <td>
    <br>
    <input type="hidden" name="gesendet" value="ja">
    <input type="hidden" name="zahl1" value="<? echo "$zahl1"; ?>">
    <input type="hidden" name="zahl2" value="<? echo "$zahl2"; ?>">
    <input type="hidden" name="aufgabe" value="<? echo "$aufgabe"; ?>">
    <input type="submit" value=" - Eintrag erstellen - ">
  </td>
</tr>
</table>
</form>

Erläuterungen hierzu brauche ich nicht mehr zu machen - gabs schon im E-Mail Versand - nur noch einmal so viel, die Variablen werden in der eintrag.php bzw. in der eintrag-pruefen.php erstellt.

Übrigens - der Spamfilter (Rechenaufgabe) gibt im Formular folgendes aus:
Spamfilter - Löse folgende Rechenaufgabe (*)
Rechenaufgabe: 11 mal 15 =    

Auch die eintrag.php kennst Du bereits aus dem E-Mail Versand, trotzdem hier noch einmal in der geänderten Version für das Gästebuch. Die eintrag.php befindet sich im Ordner "gaeste", was wiederum ein Unterverzeichnis von "privates" ist.
Das Script der Datei:
<?php
//Veralteter Import der Daten - bitte nicht mehr verwenden da er eine ERROR-Meldung erzeugt!!!
//import_request_variables('p','frm_');
//$name = $frm_name;
//$wohnort = $frm_wohnort;
//$email = $frm_email;
//$homepage = $frm_homepage;
//$nachricht = $frm_nachricht;
//$gesendet = $frm_gesendet;
// --- Rechenaufgabe importieren ---
//$zahl1 = $frm_zahl1;
//$zahl2 = $frm_zahl2;
//$aufgabe = $frm_aufgabe;
//$loesung = $frm_loesung;

//Bitte diesen aktuellen Import nutzen!
if(!isset($_POST))
  {
    $name = $_POST['name'];
    $wohnort = $_POST['wohnort'];
    $email = $_POST['email'];
    $homepage = $_POST['homepage'];
    $nachricht = $_POST['nachricht'];
    $gesendet = $_POST['gesendet'];
    // --- Rechenaufgabe importieren ---
    $zahl1 = $_POST['zahl1'];
    $zahl2 = $_POST['zahl2'];
    $aufgabe = $_POST['aufgabe'];
    $loesung = $_POST['loesung'];
  }
else
  {
    $name = "";
    $wohnort = "";
    $email = "";
    $homepage = "";
    $nachricht = "";
    $gesendet = "";
  }
// --- Prüfen, ob gesendet wurde ---
if($gesendet == 'ja')
  {
    // --- Formular wurde gesendet - Inhalt prüfen! ---
    @include_once "privates/gaeste/eintrag-pruefen.php";
  }
else
  {
    // --- Das Formular wurde noch nicht gesendet, Formular anzeigen ---
    $fehler_angaben = "";
    $fehler_anzahl = "0";
    @include_once "privates/gaeste/formular.php";
  }
?>

Nun müssen wir noch die Eingaben im Formular nach dem Versand prüfen, was wir mit der eintrag-pruefen.php auf der nächsten Seite erledigen.