kini: Spezielles Gaestebuch

Hallo,

ich soll fuer meine Schule ein Gaestebuch programmieren, das vor dem Anzeigen der Beitraege so eine Art Filter drueberlaufen laesst. Dieser Filter soll Schimpfwoerter und verbotenene Woerte so wie sinnlose Buchstabenaneinanderreihungen aus den Beitraegen loeschen und diese dann erst anzeigen. Das Problem ist, dass ich es hier in HTML schon einmal versucht habe, JavaScript nicht verwenden darf (wegen blinder Mitschueler, deren Braillezeile das nicht lesen kann) und so keine Moeglichkeiten habe. Ich waere um ein paar Tipps sehr dankbar.

KiNi

  1. Hi,

    Das Problem ist, dass ich es hier in HTML schon einmal versucht habe, JavaScript nicht verwenden darf und so keine Moeglichkeiten habe.

    wie siehts mit php aus?

    MfG

    1. wie siehts mit php aus?

      Genau, Schau dir mal meinen anderen Beitrag an: Da steht alles was du wissen willst/musst

      :-)

  2. hallo,

    ich soll fuer meine Schule ein Gaestebuch programmieren, das vor dem Anzeigen der Beitraege so eine Art Filter drueberlaufen laesst. Dieser Filter soll Schimpfwoerter und verbotenene Woerte so wie sinnlose Buchstabenaneinanderreihungen aus den Beitraegen loeschen und diese dann erst anzeigen.

    Es gibt verschiedene Möglichkeiten, Gästebücher zusammenzustellen, die diversen Scriptsammlungen (z.B http://www.php-resource.de/scripte/browsesub/PHP/Gaestebuch/1) sind voll davon.

    Das Problem ist, dass ich es hier in HTML schon einmal versucht habe, JavaScript nicht verwenden darf

    HTML hilft dir an dieser Stelle nicht weiter,solche Aufgaben muß ein Script erledigen. Und Javascript ist für den vorgesehenen Zweck ohnehin nicht einsetzbar.

    Grüße aus Berlin

    Christoph S.

  3. Tachchen!

    ich soll fuer meine Schule ein Gaestebuch programmieren, das vor dem Anzeigen der Beitraege so eine Art Filter drueberlaufen laesst. Dieser Filter soll Schimpfwoerter und verbotenene Woerte so wie sinnlose Buchstabenaneinanderreihungen aus den Beitraegen loeschen

    Grundsätzlich ginge eine solche Überprüfung natürlich auch serverseitig.

    In der Praxis würde ich aber schon von der Idee deutlich Abstand nehmen.
    Dieser Wortfilter wird nämlich, wenn er auch nur halbwegs greifen soll,
    reichlich Rechenleistung und Zeit schlucken und dabei genau nichts bringen.

    Denn sobald der Filter zum ersten Mal greift, wird es tagelang der Schulsport
    sein, zu überprüfen, was geht und was nicht. Und im Ergebnis wird deine
    Blacklist immer länger, das Gästebuch immer langsamer und helfen wird es
    trotzdem nichts, weil dann alle F*cker, PHicker oder Fikker schreiben werden. ;-)

    Gruß

    Die schwarze Piste

    --
    ie:{ fl:( br:^ va:) ls:# fo:) rl:( n4:& ss:{ de:] js:| ch:? mo:) zu:$
    Smartbytes Webdesign in Oberhausen
    1. Hey Piste,

      weil dann alle F*cker, PHicker oder Fikker schreiben werden. ;-)

      was'n DAS für'n Shice???

      Liebe Grüße aus Ellwangen,

      Felix Riesterer.

      1. Hallo.

        weil dann alle F*cker, PHicker oder Fikker schreiben werden. ;-)
        was'n DAS für'n Shice???

        Das ist nur die neue Bezeichnung für "Grafiker" nach Abschaffung des Adels.
        MfG, at

    2. Hi,

      In der Praxis würde ich aber schon von der Idee deutlich Abstand nehmen.
      Dieser Wortfilter wird nämlich, wenn er auch nur halbwegs greifen soll,
      reichlich Rechenleistung und Zeit schlucken und dabei genau nichts bringen.

      nur mal eine Idee:
      Wie wäre es denn mit einer Art BogoFilter, d.h. ein Spamfilter, den man trainiert?

      Gruß
      Reiner

      1. Hallo Reiner,

        nur mal eine Idee:
        Wie wäre es denn mit einer Art BogoFilter, d.h. ein Spamfilter, den man trainiert?

        Funktioniert ganz gut, gibts auch als Opensource (z.b. im Thunderbird)
        ist aber sehr langsam.

        Gruß
        Alexander Brock

        --
        Ceterum censeo Carthaginem esse delendam
    3. Hi,

      Denn sobald der Filter zum ersten Mal greift, wird es tagelang der Schulsport
      sein, zu überprüfen, was geht und was nicht. Und im Ergebnis wird deine
      Blacklist immer länger, das Gästebuch immer langsamer und helfen wird es
      trotzdem nichts, weil dann alle F*cker, PHicker oder Fikker schreiben werden. ;-)

      Das bringt mich gerade auf eine Idee, die zwar leider viel zu aufwendig ist, aber für diesen speziellen Fall fast genial wäre: keine Blacklist, sondern eine Whitelist. Wörter, die der Duden nicht kennt, werden moniert. Dann wäre der Schulsport, die richtigen Wörter zu finden, sogar lehrreich. :-)
      Nunja, ein paar Haken gibt's freilich wie z.B. die Eintragung von Eigennamen.

      freundliche Grüße
      Ingo

      1. Lieber Ingo,

        Das bringt mich gerade auf eine Idee, die zwar leider viel zu aufwendig ist, aber für diesen speziellen Fall fast genial wäre: keine Blacklist, sondern eine Whitelist. Wörter, die der Duden nicht kennt, werden moniert. Dann wäre der Schulsport, die richtigen Wörter zu finden, sogar lehrreich. :-)

        Das finde ich ist DIE Idee! Es gibt doch genügend Wörterbücher für die unterschiedlichsten Anwendungen (OpenOffice und so weiter). Die könnte man ja versuchen einzubinden. Damit wäre das Gröbste schon gemacht!

        Nunja, ein paar Haken gibt's freilich wie z.B. die Eintragung von Eigennamen.

        Als ob es ein Problem wäre, Namenslisten zu finden!?

        Liebe Grüße aus Ellwangen,

        Felix Riesterer.

        1. Hi Felix,

          Nunja, ein paar Haken gibt's freilich wie z.B. die Eintragung von Eigennamen.

          Als ob es ein Problem wäre, Namenslisten zu finden!?

          Ein Problem sicherlich nicht, aber es gibt massig Namen, die nicht Meier oder Müller sind. Ich glaube z.B. nicht, dass du meinen Nachnamen in so einer Liste finden würdest ;-) Abgesehen davon gibt es ja auch noch Nicknames - und da gibt es teilweise wirklich die komischsten Sachen *g*

          MfG, Dennis.

          --
          Mein SelfCode: ie:{ fl:( br:> va:) ls:[ fo:) rl:( n4:# ss:) de:] js:| ch:{ sh:| mo:} zu:|
          Irre gehören ins Showgeschäft, sost müsste ich da nicht sein. (Dieter Bohlen)
  4. Liebe(r) KiNi,

    ich soll fuer meine Schule ein Gaestebuch programmieren,

    dazu wirst Du um eine serverseitige Scriptsprache nicht herumkommen, denn die Einträge müssen ja vom Server gespeichert werden...

    das vor dem Anzeigen der Beitraege so eine Art Filter drueberlaufen laesst. Dieser Filter soll Schimpfwoerter und verbotenene Woerte so wie sinnlose Buchstabenaneinanderreihungen aus den Beitraegen loeschen und diese dann erst anzeigen.

    Mit einer serverseitigen Scriptsprache kann man sowas lösen. Ob das jetzt so furchtbar wirkungsvoll ist, hat bereits die schwarze Piste mit Recht angezweifelt. Aber auch ich habe solch einen Filter für unser Schul-Gästebuch eingerichtet, von dem ich mir aber nicht so unbedingt viel erhoffe. Wenn's Dich interessiert, dann kannst Du den PHP-Quellcode gerne haben.

    Das Problem ist, dass ich es hier in HTML schon einmal versucht habe,

    Mit HTML alleine? Wie hast Du da die Einträge auf dem Server speichern können?

    JavaScript nicht verwenden darf (wegen blinder Mitschueler, deren Braillezeile das nicht lesen kann) und so keine Moeglichkeiten habe. Ich waere um ein paar Tipps sehr dankbar.

    Wie genau ist das mit dem Javascript zu verstehen?

    Liebe Grüße aus Ellwangen,

    Felix Riesterer.

  5. Hi,
    wie wäre es die einträge vor dem speichern zu überprüfen? und die
    schimpfwörter etc mit einem #ZENSIERT# ersetzten?

    MfG

  6. 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.