CronJob-Service
bei SELFPHP mit ...
|
+ minütlichen Aufrufen
+ eigenem Crontab Eintrag
+ unbegrenzten CronJobs
+ Statistiken
+ Beispielaufrufen
+ Control-Bereich
Führen Sie mit den CronJobs von
SELFPHP zeitgesteuert Programme
auf Ihrem Server
aus. Weitere Infos
|
:: Anbieterverzeichnis ::
Globale Branchen
Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP
:: Newsletter ::
Abonnieren Sie hier den kostenlosen
SELFPHP Newsletter!
|
PHP Grundlagen Hier kann über grundlegende Probleme oder Anfängerschwierigkeiten diskutiert werden |
09.02.2005, 02:28:11
|
Anfänger
|
|
Registriert seit: Jan 2005
Beiträge: 33
|
|
Badword-Liste - Ersetzen will er nicht
Moin.
Die Situation: Zwei Tabellen. Eine namens 'gaestebuch', hier sind alle Gästebuch-Einträge drin. *ohwunder* :) Die andere heißt 'badword' und hat nur ein Feld namens 'words'. Hier sind die "bösen Wörter" drin. Man kann die Liste im Backend über eine Textarea "auffüllen". Dabei wird jedes Wort in eine Zeile geschrieben. Im Folgenden will ich aus meinem Gästebucheintrag alle bösen Wörter filtern. Dazu lade ich erst alle Bäbä-Wörter in ein Array. Das klappt auch. Wenn ich z.B. an beliebiger Stelle etwas wie echo $suchen[4]; (s.u.) schreibe, dann gibt er mir das entsprechende Element/ Wort aus. Aber wie es scheint kommt die foreach-Abfrage nicht zustande. :-o Wieso nicht? Jemand einen Rat parat? Und wenn das geklärt ist (erst dann!), können wir uns darüber unterhalten, dass eregi_replace nicht die beste Lösung ist... ;-) Die Textformatierung der Ausgabe ignorieren wir erst mal. Das ist alles noch zu Testzwecken.
Dann ist da noch etwas um die Seitenzahlen auszugeben. Dies bitte auch erst einmal ignorieren. Ich lasse es nur drin, für den Fall dass... Man kann ja nie wissen. ;-)
Hier der Code:
PHP-Code:
<?php
include ('mySQL.inc.php');
$conn = mysql_connect($db_server,$db_user,$db_passwort) or die (mysql_error());
$link = mysql_select_db($db_name, $conn) or die (mysql_error());
// fuer die blaetterfunktion - hier egal
$_GET["pagenum"] = (!isset($_GET["pagenum"]) || $_GET["pagenum"] == 0 || empty($_GET["pagenum"])) ? 1 : $_GET["pagenum"];
$perpage = 7;
$limitlower = ($_GET["pagenum"]-1)*$perpage+1;
$limitupper = $_GET["pagenum"] * $perpage;
//badwords werden eingelesen - zur Frage!
$sqlbad = mysql_query('select words from badword');
$badis = mysql_fetch_array($sqlbad);
$suchen = explode("n", $badis[0]);
// abfrage fuer gb-eintrage und seiten-krams - hier egal
$sql = "select * from gaestebuch order by id desc limit ".($limitlower-1).",".$perpage;
$sql_hits = "select count(*) as hits from gaestebuch";
$res_sql_hits = mysql_query($sql_hits,$conn);
$res_sql = mysql_query($sql,$conn);
if($res_sql){
$hits = mysql_fetch_row($res_sql_hits);
$hits = $hits[0];
$limitupper = ($limitupper > $hits) ? $hits : $limitupper;
$limitlower = ($limitlower > $hits) ? $hits - $perpage : $limitlower;
$limitlower = ($limitlower <= 0) ? $limitlower = 1 : $limitlower;
if($hits==0){
//FEHERROUTINE
}else{
// ab hier interessant!!!!!!!!! //
while($row = mysql_fetch_array($res_sql)){
$email = $row['mail'];
$wer = $row['name'];
$wer = htmlentities($wer);
if(!empty($email)){
$wer = "<a href="mailto:$email" title="eMail an $wer">$wer</a>";
}
$text = $row['eintrag'];
foreach($suchen[$i] as $suchelement){
$text = eregi_replace($suchelement, "***", $text);
}
$text= stripslashes($text);
$text = htmlentities($text);
$text = nl2br($text);
$wann = $row['datum'];
////////////////////
// ausgabe
echo "$wer schrieb am $wannn";
echo "<br>n";
echo "<br>n";
echo "$textn";
echo "<br>n";
echo "<br>n";
echo "<br>n";
echo "n";
///////////////////
}// while ende
// ab hier wieder egal.......
$page = ($hits<$perpage) ? 1 : ceil($hits/$perpage);
//blaetterfunktion - erst einmal egal
echo "<font face="arial" size="2">Seite: ";
for($a=$_GET["pagenum"]-3;$a<=$_GET["pagenum"]+3;$a++){
if($a > 0 && $a <= $page){
if($a==$_GET["pagenum"]):
echo " $a</font>";
else:
echo " <font face="arial" size="2"><a href='". $_SERVER['PHP_SELF'] . "?mode=read&rand=$itemRand&pagenum=".$a."' class="searchlink" title="Link zur Seite $a">".$a."</a></font>n"; endif;
}
}
}
}
mysql_close($conn);
?>
Findet jemand vielleicht den Fehler??
Übrigens komisch: Ich habe bis dato kein richtiges Tutorial gefunden, dass sich mit dem Erstellen eines Badword-Filters beschäftigt. Hat hier jemand sonst einen Link?
Schöne Grüße und dickes Danke im Voraus
G.
__________________
<Meine Ankunft war zeitlich schlecht gewählt!>
|
09.02.2005, 09:51:03
|
|
SELFPHP Guru
|
|
Registriert seit: May 2003
Beiträge: 7.187
|
|
AW: Badword-Liste - Ersetzen will er nicht
Mal ein Vorschlag: An die Funktion str_replace() kannst du ja auch für die Parameter Arrays übergeben. Warum löst du das nicht einfach darüber?
Und um zu deinem Fehler zu kommen: Lass das [$i] hinter $suchen in der foreach-Schleife weg. Dann sollte es gehen:
PHP-Code:
<?php
foreach($suchen as $suchenelement)
?>
Aber wie gesagt, halte ich die Methode mit str_replace für sinnvoller, da einfacher und schneller.
Geändert von xabbuh (09.02.2005 um 09:55:24 Uhr)
|
09.02.2005, 11:18:27
|
Anfänger
|
|
Registriert seit: Jan 2005
Beiträge: 33
|
|
AW: Badword-Liste - Ersetzen will er nicht
Uupps, sorry. Ich habe hier schon soviel durchprobiert... - Das [$i] war noch ein Überbleibsel eines anderen Versuches. Das, was Du da schreibst, das war mein erster Gedanke, sollte eigentlich funktionieren. Und ich hatte sogar das str_replace zuerst drin. Aber - die Tatsache, dass ich hier poste bedeutet, dass es so nicht klappen will! *jammer*
Ich habe das Gefühl, dass er irgendwie über das foreach hinwegrauscht, ohne es wirklich zu durchlaufen. Kann das angehen? Sollte man eine Kontrollstruktur einbauen? *hmm*
G
__________________
<Meine Ankunft war zeitlich schlecht gewählt!>
|
09.02.2005, 11:34:25
|
|
SELFPHP Guru
|
|
Registriert seit: May 2003
Beiträge: 7.187
|
|
AW: Badword-Liste - Ersetzen will er nicht
Bau dir doch Testausgaben an die entsprechenden Stellen. Spätestens dann solltest du sehen, ob die entsprechenden Zweige des Scripts überhaupt durchlaufen werden.
|
09.02.2005, 11:53:29
|
Anfänger
|
|
Registriert seit: Jan 2005
Beiträge: 33
|
|
AW: Badword-Liste - Ersetzen will er nicht
Okay, habe mal - ganz blöde - in die foreach-Anweisung ein echo gemacht:
PHP-Code:
foreach($suchen as $suchelement){
$text = str_replace($suchelement, "***", $text);
echo $text;
}
Und tatsächlich spuckt er mir ganz oft hintereinander den Text aus. Ich habe sie jetzt nicht durchgezählt, aber ich denke schon, dass es so oft ist, wie ich böse Wörter habe.. Also foreach wird durchlaufen - aber meine bösen Wörter sind alle noch da! :-( Sieht nicht nettt aus... ;-)
__________________
<Meine Ankunft war zeitlich schlecht gewählt!>
|
09.02.2005, 12:00:46
|
|
SELFPHP Guru
|
|
Registriert seit: May 2003
Beiträge: 7.187
|
|
AW: Badword-Liste - Ersetzen will er nicht
$suchelement hat aber schon den richtigen Wert?
|
09.02.2005, 15:29:27
|
Anfänger
|
|
Registriert seit: Jan 2005
Beiträge: 33
|
|
AW: Badword-Liste - Ersetzen will er nicht
Zitat:
$suchelement hat aber schon den richtigen Wert?
|
Ja. Ein echo $suchelement . "<br>"; in der foreach-Schleife und es werden alle Wörter aus der Liste ausgespuckt. *hmm* Soll heißen: Er nimmt Kontakt zur Tabelle badword aus, liest das Feld aus, schreibt die Inhalte in ein Array, stellt dieses zur Verfügung. Zudem nimmt er Kontakt zur GB-Tabelle auf und holt die Inhalte. Aber foreach will immer noch nicht klappen. :-(
__________________
<Meine Ankunft war zeitlich schlecht gewählt!>
|
09.02.2005, 16:12:39
|
|
SELFPHP Guru
|
|
Registriert seit: May 2003
Beiträge: 7.187
|
|
AW: Badword-Liste - Ersetzen will er nicht
Ändere doch bitte mal die Schleife so um, lade das Script dann hoch und poste den Link:
PHP-Code:
<?php
foreach($suchen as $suchelement){
$text = str_replace($suchelement, "***", $text);
echo $text . '<br>';
echo $suchelement . '<br><br>';
}
?>
|
09.02.2005, 18:18:27
|
Anfänger
|
|
Registriert seit: Jan 2005
Beiträge: 33
|
|
AW: Badword-Liste - Ersetzen will er nicht
Aha! Habe mir eben noch einmal alle Array-Elemente untereinander anzeigen lassen (s.o.). Dabei habe ich mal aus Verzweiflung mit der Maus ein böses Wort markiert und musste feststellen, dass da noch hinter jedem bösen Wort ein Leerzeichen war!!! Als nicht "blubber", sondern "blubber ". Ich habe jetzt mal den hier gemacht:
PHP-Code:
foreach($suchen as $suchelement){
$text = str_replace(trim($suchelement), "***", $text);
echo $text . '<br>';
echo $suchelement . '<br><br>';
}
Mit dem trim() greift das Replacement! *jubel* Aber mir fällt dazu jetzt ein: Warum hat es nicht vorher auch schon funktioniert? Wenn in einem Satz ein böses Wort steht und dieses nicht gleich gefolgt von einem Satzzeichen ist, sondern einem Leerzeichen, dann hätte das Replacement dennoch funktionieren müssen, oder?
G
__________________
<Meine Ankunft war zeitlich schlecht gewählt!>
|
09.02.2005, 18:24:02
|
|
SELFPHP Guru
|
|
Registriert seit: May 2003
Beiträge: 7.187
|
|
AW: Badword-Liste - Ersetzen will er nicht
Vermutlich war das kein Leerzeichen sondern ein Wagenrücklauf (r). Programmierst du unter Windows? Dort werden die Zeilen von rn und nicht von n getrennt.
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
Forumregeln
|
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
Alle Zeitangaben in WEZ +2. Es ist jetzt 16:52:34 Uhr.
|