Prob mit Badword Filter

visionsign

Mitglied
Hallo, ich hoffe mir kann einer helfen.
Ich habe folgendes Problem:
Ich habe einen Table mit 2 Feldern
WORD und REPLACE

in WORD stehen die Badwords, die durch REPLACE ersetzt werden sollen.

jetzt folgt der Code, den ich versucht habe zu erstellen

PHP:
 <?
   //DB Connect
 	@mysql_connect("localhost","root","") or die("Der Datenbankbenutzer, das Passwort oder der Host sind nicht korrekt bzw. nicht definiert!");
   @mysql_select_db("test_bernhard") or die("Der Datenbankname ist nicht korrekt oder nicht definiert!");
   //DB Connect ende
   
   //DB Auslesen
   $badword_query = mysql_query("select * from BADWORDS");
   $badword_ausgabe = mysql_fetch_array($badword_query);
  
   //DB Badword Fitler
   function badword($ersetzen){ 
 	$badwords = $badword_ausgabe["WORD"]; 
 	$ersetzen = str_replace($badwords,$badword_ausgabe["REPLACE"]); 
 							 }
 	
 	 
 ?>
 <html>
 <head>
 <title>Badword Filter</title>
 </head>
 
 <body>
 <? echo badword(DASBÖSEWORT); ?>
 </body>
 
 </html>

DASBÖSEWORT ist bereits in der DB eingefügt
 
1. $badword_ausgabe = mysql_fetch_array($badword_query); liefert dir nur den 1. Datensatz der Abfrage. Um alle Datensätze abzufragen, benötigst du eine Schleife.

2. http://www.php.net/str_replace
Du solltest dir mal die Funktionsreferenz anschauen, speziell, welche Parameter die Funktion verlangt.

3. Die Funktion badword() hat keinen Rückgabewert. Wenn du den ersetzten String weiterverarbeiten möchtest, musst du ihn auch zurückgeben.

4. Innerhalb von Funktionen kannst du nicht auf Variablen zugreifen, die außerhalb von Funktionen deklariert worden sind, außer du gibst das explizit mit dem Keywort global an.
 
Hm also ich würde sagen das kann ned weil in

PHP:
$badword_ausgabe = mysql_fetch_array($badword_query);

nur der 1. Datensatz drinnen steht d.h. das 1. Badword in deiner Tabelle müsste eigentlich funktionieren.
Aber wen du die komplette Tabelle haben möchtest müsstest du es vlt. so umstellen (nur ein Bsp. bin auch kein spezialist ^^)

PHP:
function badword($ersetzen){ 
$badword_ausgabe = mysql_query("SELECT * FROM BADWORDS WHERE Word = '".$ersetzen."'");
$badword_ausgabe = mysql_fetch_array($badword_query);
$badwords = $badword_ausgabe["WORD"]; 
$ersetzen = str_replace($badwords,$badword_ausgabe["REPLACE"],$badwords);
return $ersetzen;
}

Naja wie gesagt bin nur Anfänger sind bestimmt noch einige Fehler drinne aber so ungefähr ist das die Richtung glaube ich ^^
 
Zuletzt bearbeitet:
Also, ich habe es jetzt folgendermaßen gelöst:

PHP:
 <?
   //DB Connect
 	@mysql_connect("localhost","root","") or die("Der Datenbankbenutzer, das Passwort oder der Host sind nicht korrekt bzw. nicht definiert!");
   @mysql_select_db("test_bernhard") or die("Der Datenbankname ist nicht korrekt oder nicht definiert!");
   //DB Connect ende
   
  $beispiel = "Dies ist einer kleiner Test, Hurensohn.";
  
  
   //DB Badword Fitler
  function badword($ersetzen){
 $badword_query = mysql_query("SELECT * FROM BADWORDS");
 while($badword_ausgabe = mysql_fetch_array($badword_query))
 {
   if($ersetzen = str_replace($badword_ausgabe["WORD"], "***", $ersetzen));
 }
 return $ersetzen;
 
 }
 
 	 
 ?>
 <html>
 <head>
 <title>Badword Filter</title>
 </head>
 <body>
 <? echo badword($beispiel); ?>
 </body>
 
 </html>

selbiges funktoiniert auch, NUR wenn mein Beispielwort nicht = dem in der DB ist (von der Groß und Kleinschreibug her), es nicht, ich finde hier auch keine passende function. (darf kein PHP5 sein).
 
Also ich sag mal so so wie du das alles da stehen hast ist das mit der while Schleife Performance raubend weil du übergibst doch eh nur 1 Wort und von daher kann auch nur 1 Ergebnis gefunden werden wozu dann die while Schleife und wozu die ganze Tabelle auslesen ich mein bei kleinen Tabellen ist es egal fällt wahrscheinlich ned auf wollte es nur mal erwähnt haben ^^.
 
Zurück