SELFPHP: Version 5.8.2 Befehlsreferenz - Tutorial – Kochbuch – Forum für PHP Einsteiger und professionelle Entwickler

SELFPHP


Professional CronJob-Service

Suche



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



:: Buchempfehlung ::

Das Zend Framework

Das Zend Framework zur Buchempfehlung
 

:: Anbieterverzeichnis ::

Globale Branchen

Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP  

 

:: Newsletter ::

Abonnieren Sie hier den kostenlosen SELFPHP Newsletter!

Vorname: 
Name:
E-Mail:
 
 

Zurück   PHP Forum > SELFPHP > PHP Grundlagen
Hilfe Community Kalender Heutige Beiträge Suchen

PHP Grundlagen Hier kann über grundlegende Probleme oder Anfängerschwierigkeiten diskutiert werden

Antwort
 
Themen-Optionen Ansicht
  #1  
Alt 09.02.2005, 02:28:11
Grega Grega ist offline
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"] == || empty($_GET["pagenum"])) ? $_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 $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);
    }
                
    
$textstripslashes($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) ? 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 && $a <= $page){
                  if(
$a==$_GET["pagenum"]):                
                echo 
"&nbsp;$a</font>";
                else:
            echo 
"&nbsp;<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!>
Mit Zitat antworten
  #2  
Alt 09.02.2005, 09:51:03
Benutzerbild von xabbuh
xabbuh xabbuh ist offline
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)
Mit Zitat antworten
  #3  
Alt 09.02.2005, 11:18:27
Grega Grega ist offline
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!>
Mit Zitat antworten
  #4  
Alt 09.02.2005, 11:34:25
Benutzerbild von xabbuh
xabbuh xabbuh ist offline
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.
Mit Zitat antworten
  #5  
Alt 09.02.2005, 11:53:29
Grega Grega ist offline
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!>
Mit Zitat antworten
  #6  
Alt 09.02.2005, 12:00:46
Benutzerbild von xabbuh
xabbuh xabbuh ist offline
SELFPHP Guru
 
Registriert seit: May 2003
Beiträge: 7.187
AW: Badword-Liste - Ersetzen will er nicht

$suchelement hat aber schon den richtigen Wert?
Mit Zitat antworten
  #7  
Alt 09.02.2005, 15:29:27
Grega Grega ist offline
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!>
Mit Zitat antworten
  #8  
Alt 09.02.2005, 16:12:39
Benutzerbild von xabbuh
xabbuh xabbuh ist offline
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>';
    } 
?>
Mit Zitat antworten
  #9  
Alt 09.02.2005, 18:18:27
Grega Grega ist offline
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!>
Mit Zitat antworten
  #10  
Alt 09.02.2005, 18:24:02
Benutzerbild von xabbuh
xabbuh xabbuh ist offline
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.
Mit Zitat antworten
Antwort


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.

BB-Code ist an.
Smileys sind aus.
[IMG] Code ist aus.
HTML-Code ist aus.

Gehe zu


Alle Zeitangaben in WEZ +2. Es ist jetzt 16:52:34 Uhr.


Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.


© 2001-2024 E-Mail SELFPHP OHG, info@selfphp.deImpressumKontakt