Eingabe auf Wörterprüfen?

Hi zusammen,
Wie kann man mit PHP überprüfen ob ein Wort im Eintrag drin ist, was nicht hinein gehört und dann den ganzen Eintrag einfach sperrt?

Ich hab bisher nur geschaft das er Prüfen soll ob ein Name drin steht und eine
Email adresse.
Das sieht dann bisher so aus was ich habe[CODE]<?php

if (isset($_POST[„senden“])) {

function daten_reiniger($inhalt) {
if (!empty($inhalt)) {
$inhalt = strip_tags($inhalt);
$inhalt = htmlentities($inhalt);
$inhalt = trim($inhalt);
$inhalt = stripslashes($inhalt);
}
return $inhalt;
}

foreach ($POST as $key=>$element) {
${"g
".$key} = daten_reiniger($element);
}

if(strlen($g_fname)<3){
$error_msg=„Bitte geben Sie Ihren Namen an“;
}

if(strlen($g_finhalt)<3){
$error_msg.=„
Bitte geben Sie auch etwas in das Gästebuch ein.“;
}

if(ereg(„[1]+(.[_a-zA-Z0-9-]+)*@([a-zA-Z0-9-]+.)+([a-zA-Z]{2,4})$“,$g_femail)){
$format_femail=„<a href=mailto:“ . $g_femail . „>E-Mail“;
} else {
$error_msg.=„
Fehlerhafte E-mail!
“;
}
if($error_msg){
echo "

- FEHLER -

$error_msg

Zurück
Eintrag konnte nicht angelegt werden.
Versuchen Sie es bitte erneut!
";

}

}

else {
$Rubrik=$_POST[‚fstatus‘];
$Name=$_POST[‚fname‘];
$Email=$_POST[‚femail‘];
$Inhalt=$_POST[‚finhalt‘];
$Datum=date(„Y-m-d“);

@mysql_connect("localhost","","")or die(mysql_error());

mysql_select_db("rzsud") or die(mysql_error());
mysql_query("CREATE TABLE mail(
        ID INT,
        Name VARCHAR(30),
        Email VARCHAR(40),
        Rubrik VARCHAR(15),
        Inhalt TXT,
        Datum DATE NOT NULL DEFAULT '0000-00-00');");
mysql_query("INSERT INTO mail(
        Name, Email, Rubrik, Inhalt, Datum)
        value
        ('$Name', '$Email', '$Rubrik', '$Inhalt', '$Datum');");

mysql_close();
}
?>
[/CODE]:


  1. _a-zA-Z0-9- ↩︎

Da gäbe es 2 Methoden, die mir einfallen würden. Einma mit strchr() und einem Array, wo die bösen Wörter drin stehen (Müsstest du dann mit einer Schleife arbeiten), oder du benutzt stristr(), was ich aber eher schwachsinnig finden würde, weil das eher für den Vergleich von 2 Strings verwendet wird.

[php]$mein_text = $_POST[‚text‘];

$keine_boesen_woerter = array(„fotzzze“, „blöde“, „klene“); // Na merkt hier jemand was? xD

$text_zulassen = true;

foreach($keine_boesen_woerter as $check)
{
if(stristr($mein_text, $check) !== false)
{
$text_zulassen = false;
break;
}
}

if($text_zulassen)
{
echo „Is ok“;
}
else
{
echo „Spinnst du? sowas schreibt man nicht!!!“;
}[/php]

Zu Sn0opys Beitrag:
Du schlägst also strchr() vor und hälst stristr() für schwachsinnig?
php.net schreibt zu strchr(): „strchr — Alias von strstr()“
Und strstr() ist bekanntermaßen die case-sensitive Version von stristr() - ergo, du widersprichst dir :wink:

Ja, das war ein Fehler von mir, weil ich mit AutoIt durcheinander gekommen bin, wo es nur eine Variante gibt. Sorry ^^

hi das geht irgendwie nicht oder habe ich was vergessen?

[CODE]<?php

if (isset($_POST[„senden“])) {

function daten_reiniger($inhalt) {
if (!empty($inhalt)) {
$inhalt = strip_tags($inhalt);
$inhalt = htmlentities($inhalt);
$inhalt = trim($inhalt);
$inhalt = stripslashes($inhalt);
}
return $inhalt;
}

foreach ($POST as $key=>$element) {
${"g
".$key} = daten_reiniger($element);
}

if(strlen($g_fname)<3){
$error_msg=„Bitte geben Sie Ihren Namen an“;
}

if(strlen($g_finhalt)<3){
$error_msg.=„
Bitte geben Sie auch etwas in das Gästebuch ein.“;
}

if(ereg(„[1]+(.[_a-zA-Z0-9-]+)*@([a-zA-Z0-9-]+.)+([a-zA-Z]{2,4})$“,$g_femail)){
$format_femail=„<a href=mailto:“ . $g_femail . „>E-Mail“;
} else {
$error_msg.=„
Fehlerhafte E-mail!
“;
}
$schwarze_liste = array(„Hurensohn“, „hurensohn“, „Lespe“, „lespe“,
„asrchloch“,„Arschloch“,„FICK“,„ficksau“,„spasti“,„spacko“,„faule“,„sau“,„dumfick“,
„hundesohn“,„arsch“,„idiot“,„spako“,„assi“);

$verbot = true;

foreach($schwarze_liste as $check)
{
if(stristr($g_finhalt, $check) !==false)
{
$verbot= false;
break;
}
else
$error_msg = „Verbotenes Wort gefunden!!!
Oder kein Eintrag“;
}

if($error_msg){
echo "

- FEHLER -

$error_msg

Zurück
Eintrag konnte nicht angelegt werden.
Versuchen Sie es bitte erneut!
";

}

}

else {
$Rubrik=$_POST[‚fstatus‘];
$Name=$_POST[‚fname‘];
$Email=$_POST[‚femail‘];
$Inhalt=$_POST[‚finhalt‘];
$Datum=date(„Y-m-d“);

@mysql_connect("localhost","","")or die(mysql_error());

mysql_select_db("rzsud") or die(mysql_error());
mysql_query("CREATE TABLE mail(
        ID INT,
        Name VARCHAR(30),
        Email VARCHAR(40),
        Rubrik VARCHAR(15),
        Inhalt TXT,
        Datum DATE NOT NULL DEFAULT '0000-00-00');");
mysql_query("INSERT INTO mail(
        Name, Email, Rubrik, Inhalt, Datum)
        value
        ('$Name', '$Email', '$Rubrik', '$Inhalt', '$Datum');");

mysql_close();
}
?>
[/CODE]


  1. _a-zA-Z0-9- ↩︎

ich finde den fehler nicht, kann mir keiner helfen?

Das geht viel einfacher:
[php]

<?php ... $boehse_woerter = array("boeses wort", "noch eins", "usw."); if (in_array($_POST['zu_ueberpruefendes_wort'], $boese_woerter) { printf("Die Jugend heutzutage..."); } ... ?>

[/php]So müsste es gehen…

ich würde an sowas immer mit PHP: preg_match - Manual ran gehen, reguläre ausdrücke sind einfach dehnbarer… :wink:

also das mit dem in_array funktioniert nicht so wirklich -.-

$schwarze_liste = array ("böse", "dum"...); if (in_array($_POST['$g_finhalt'], $schwarze_liste)) { $error_msg .= "Beleidigungen sind Verboten!!!<br/>"; } und das andere bekomm ich auch nicht so wirklich hin, kommt andauern ein
Syntax fehler als meldung

$schwarze_liste = array ("böse", "dum"...);

if(preg_match($schwarze_liste, $g_finhalt, $treffer, PREG_OFFSET_CAPTURE))
{
$error_msg=$treffer="Beleidigungen sind hier verboten";
}

PHP: preg_replace - Manual ist vielleicht das sinnigste :stuck_out_tongue:

beachte du musst einen regulären ausdruck, keinen string übergeben…

z.b. /blöde kuh/i

[PHP]<?php $eingabe = "Hier gibt des dieses böse Wort: Wort4"; if(preg_match('#wort4#i',$eingabe)){ echo 'Du bist raus!'; } ?>
[/PHP]

+push+ ist wirklich besser :slight_smile:

@Freak131: Er hat mit Sicherheit reingeguckt. Schließlich hat er von da rüberkopiert. Habe den Eintrag trozdem mal etwas geändert, sodass er entweder gegen die Performance arbeitet oder sich wirklich mit dem Regexkram auseinandersetzt :wink:

PHP: preg_replace - Manual ist vielleicht das sinnigste :stuck_out_tongue:

beachte du musst einen regulären ausdruck, keinen string übergeben…

was meinst du mit einen regulären ausdruck?
es soll einfach nur der inhalt des Formulars mit der Variable $g_finhalt überpüft werden, ob dort eine beleidigung drin steckt

preg_replace() erwartet als Suchmuster einen regulären Ausdruck und keinen normalen String.

das bedeutet, dass ich meine Variablen $g_finhalt garnicht pürfen kann ob dort in der Variable als eintrag ein Böses wort mitten im text steht oder wie?

Würden wir es dir vorschlagen, wenn es nicht funktioniert?

Edit: Ein nettes Tutorial für den Anfang mit regulären Ausrücken ist dieses hier: #php/QuakeNet Tutorial - Reguläre Ausdrücke

glaub nicht, aber ich bekomme es nicht zum laufen

$schwarze_liste = array ("böse", "böseböse"...);
if (preg_match($schwarze_liste, $g_finhalt))
echo"Verboten!!!";

versuch mal array(‚/böHse/i‘,‚/noob/i‘);