Markus: Spezielles Gaestebuch

Beitrag lesen

Hallo KINI,

Schau dir mal folgenden Quellcode an. Der dürfte die Lösung für dein Problem sein. Ist auch relativ simpel gehalten.

<!--%%Datei:gbconfirm.php%%-->
<?
//============================================================================================================================
$name=$_POST['name'];                                 /* Variablenübernahme */
$vorname=$_POST['vorname'];
$text=$_POST['text'];
//============================================================================================================================
$text=strip_tags(stripslashes($text));                        /* Hier werden im Text alle HTML-Tags gelöscht und die Sonderzeichen ignoriert */
$text=str_replace("n", " ", $text);                           /* Hier werden alle Zeilenumbrüche durch ein Leerzeichen ersetzt, damit keine unübersichtlichen Beiträge entstehen */
$text=str_replace(array("t","r","v"), " ", $text);           /* Spezielle Zeichen ersetzen */
while (ereg("  ", $text)) {
$text = str_replace("  ", " ", $text);                          /* Leerzeichen werden entfernt */
}
//================================================================================================================================================
$vornameohneleer = eregi_replace(" ", "", $vorname);           /* Vorame wird auf Buchstaben überprüft */
$nameohneleer = eregi_replace(" ", "", $name);                 /* Name wird auf Buchstaben überprüft */
$textohneleer = str_replace(array(" ","|","-","_",",",".",";",":","+","?"), "", $text);    /* Text wird auf Buchstaben überprüft */

if ($nameohneleer=="" && $vornameohneleer=="") $fehl="Namen bzw. Vornamen";
if ($textohneleer=="") $fehl="Text";

$filter_founded=0;
$filter=file("filter.txt");
for ($n=0; $n<count($filter); $n++) { if (eregi(rtrim($filter[$n]), $textohneleer)) $filter_founded=1; }

if ($filter_founded==0 && !isset($fehl))
{
//================================================================================================================================================
                                              /* EINTRAG ABSPEICHERN */
//================================================================================================================================================ }
?>
<html>
<head>
<title>Gästebuch</title>
</head>

<body bgcolor="#000000">
<h1>G&auml;stebucheintrag</h1>
<br><br>
<center>
<? if (isset($fehl)) { /* Falls die Variable $fehl existiert, also wenn Name, Vorname oder Text fehlt...*/ ?>
  <table width="700">
  <tr align="center">
    <td height="69">
      <h4><font color="#FFFFFF">Sie haben keinen <? echo $fehl?> eingetragen!</font></h4>
    </td>
  </tr>
  <tr>
    <td height="23" align="center">
       <a href="javascript:history.back()" target="_self">zur&uuml;ck zum Formular</a>
    </td>
  </tr>
  </table>
<? } else { /* Falls alle Pflicht-Felder ausgefüllt sind... */ ?>
<? if ($filter_founded==0) { /* ...überprüfen, ob ein herauszufilterndes Wort/Wörter gefunden wurde(n). Wenn nicht,... */ ?>
<table width="700" height="100">
  <tr align="center">
    <td height="69"><font color="#999999">&nbsp;</font>
      <h4><font color="#FFFFFF">Ihr Eintrag wurde im G&auml;stebuch ver&ouml;ffentlicht</font></h4></td>
  </tr>
  <tr>
    <td height="23" align="center"><a href="./gaestebuch.php" target="_self">zur&uuml;ck
      zum G&auml;stebuch</a></td>
  </tr>
</table>
  <? } } else { ...wenn zensierte Wörter gefunden,... ?>
  <table width="700" height="100">
  <tr align="center">
    <td height="69"><font color="#999999">&nbsp;</font>
      <h4><font color="#FFFFFF">Ihr Eintrag enthält unzulässige Wörter!</font></h4>
   <font color="#999999">| <? for ($n=0; $n<count($filter); $n++) { if (eregi(rtrim($filter[$n]), $textohneleer)) echo rtrim($filter[$n])." | "; } ?></font></td>
  </tr>
  <tr>
    <td height="23" align="center"><a href="javascript:history.back()" target="_self">zur&uuml;ck
      zum Formular</a></td>
  </tr>
  </table>
<? } } ?>

</center>
</body>
</html>

<!--%%Datei:filter.txt%%-->
arsch
arschloch
bumse
drecksau
sonstige
Schimpfwörter
usw.
usw.

Erläuterung:
Ganz am Anfang werden die Variablen aus dem Gästebuch-Formular übergeben (Vorname, Name und Text). Danach werden im Text alle HTML-Zeichen (wie z.B. <table><tr><td>...) gelöscht, damit der Text nicht deformiert wird. Ebenso werden Zeilenumbrüche, Tabulatoren, usw. durch ein Leerzeichen ersetzt, um einer Deformierung des Textes zu entgehen. Deshalb wird im Folgenden in einer while-Schleife der Text so lange auf zwei aufeinanderfolgende Leerzeichen überprüft, die anschließend gelöscht werden, bis nur noch ein einziges Leerzeichen zwischen zwei Zeichen steht.
Anschließend werden Vorname, Name und Text auf Inhalt überprüft. Wenn keine Buchstaben oder Zahlen im jeweiligen String vorhanden sind und die Felder folglich leer sind, wird eine Variable $fehl angelegt und mit dem passenden Inhalt versehen.
Nun der Filter:
Zuerst setzen wir die Variable, dass ein zensiertes Wort gefunden wurde, auf NULL. Dann lesen wir die Datei filter.txt ein. Der Inhalt wird in einem Array ($filter) gespeichert. Jede neue Zeile in der Datei entspricht einem neuen Array-Segment. Deshalb müssen alle Wörter in dieser Datei in eine neue Zeile geschrieben werden.
Jetzt wird solange das Array in der Variable $filter durchsucht, wie es Wörter in der Datei gibt. Wurden ein oder mehrere Wörter gefunden, wird die Variable $filter_founded auf EINS gesetzt.

Jetzt wird mit einer IF-Schleife überprüft, ob die Variable $filter_founded gleich EINS ist oder die Variable $fehl existiert. Ist dies nicht der Fall, wird der Eintrag abgespeichert(Datenbank oder Datei), falls doch, wird der Speichervorgang nicht ausgeführt.

Die Ausgabe der Fehlermeldungen, die im HTML-Teil folgen, sind ja wohl klar.
Übrigens: Dass man die zensierten Wörter in eine Datei schreibt, hat den Vorteil, dass man die Datei in jeden Filter auf verschiedenen Seiten einbauen kann, ohne die Wörter neu festzusetzen. Außerdem kann die Datei jederzeit erweitert werden.