for-Schleife in Kombination mit Array funktioniert nicht
wucher wichtel
- php
Hallo!
Ich habe ein Problem mit folgendem Code:
<?php
$words = array('<a>', '[url]', '[link]');// In diesem Array werden verbotene Wörter gespeichert
$wordsLength = count($words); // Die Anzahl der Elemente des Arrays
echo "Anzahl der Werte im Array words: ".$wordsLength."<br>"; // Testausgabe um die Anzahl der Elemente zu kontrollieren
function checkString($data){
for($i = 0; $i <= $wordsLength; $i++){
echo "Überprüfung der Varible i: ".$i."<br>"; // Überprüfung des Inhalts der Variablen
echo "Arrayausgabe: ".$words[1]."<br>"; // Überprüfung der Ausgabe des Arrays mit statischer Zahl
echo "Test: ".$words[$i]."<br>"; // Überprüfung der Ausgabe des Arrays mit dynamischer Zahl
if( eregi($words[$i], $data) ){
$punkte = $punkte + 1;
}
}
echo "Punkte: ".$punkte."<br>"; // Ausgabe des Wertes von $punke - eigentlich sollte der Wert jetzt 1 sein
}
$text = "test test test <a> test test test";
checkString($text);
?>
Ich möchte einen String durchsuchen. Und zwar sollen die Suchbegriffe in einem Array stehen. Könntet ihr mir bitte sagen, wo das Problem liegt?
Die Ausgabe sieht übrigens so aus:
##################################
Anzahl der Werte im Array words: 3
Überprüfung der Varible i: 0
Arrayausgabe:
Test:
Warning: eregi() [function.eregi]: REG_EMPTY in D:\xampp\xampp\htdocs\scripts\blog\class.php on line 12
Punkte:
##################################
Vielen Dank für eure Hilfe!
ciao, ww
Hallo!
Ich habe ein Problem mit folgendem Code:
<?php
$words = array('<a>', '[url]', '[link]');// In diesem Array werden verbotene Wörter gespeichert
$wordsLength = count($words); // Die Anzahl der Elemente des Arrays
echo "Anzahl der Werte im Array words: ".$wordsLength."<br>"; // Testausgabe um die Anzahl der Elemente zu kontrollierenfunction checkString($data){
for($i = 0; $i <= $wordsLength; $i++){
echo "Überprüfung der Varible i: ".$i."<br>"; // Überprüfung des Inhalts der Variablen
echo "Arrayausgabe: ".$words[1]."<br>"; // Überprüfung der Ausgabe des Arrays mit statischer Zahl
echo "Test: ".$words[$i]."<br>"; // Überprüfung der Ausgabe des Arrays mit dynamischer Zahl
if( eregi($words[$i], $data) ){
$punkte = $punkte + 1;
}
}
echo "Punkte: ".$punkte."<br>"; // Ausgabe des Wertes von $punke - eigentlich sollte der Wert jetzt 1 sein
}$text = "test test test <a> test test test";
checkString($text);
?>
> Ich möchte einen String durchsuchen. Und zwar sollen die Suchbegriffe in einem Array stehen. Könntet ihr mir bitte sagen, wo das Problem liegt?
>
> Die Ausgabe sieht übrigens so aus:
> ##################################
> Anzahl der Werte im Array words: 3
> Überprüfung der Varible i: 0
> Arrayausgabe:
> Test:
>
> Warning: eregi() [function.eregi]: REG\_EMPTY in D:\xampp\xampp\htdocs\scripts\blog\class.php on line 12
> Punkte:
> ##################################
>
> Vielen Dank für eure Hilfe!
>
> ciao, ww
<?php
$words = array('<a>', '[url]', '[link]');// In diesem Array werden verbotene Wörter gespeichert
$wordsLength = count($words); // Die Anzahl der Elemente des Arrays
echo "Anzahl der Werte im Array words: ".$wordsLength."<br>"; // Testausgabe um die Anzahl der Elemente zu kontrollieren
function checkString($data){
global $words, $wordsLength;
for($i = 0; $i < $wordsLength; $i++){
echo "Überprüfung der Varible i: ".$i."<br>"; // Überprüfung des Inhalts der Variablen
echo "Arrayausgabe: ".$words[1]."<br>"; // Überprüfung der Ausgabe des Arrays mit statischer Zahl
echo "Test: ".$words[$i]."<br>"; // Überprüfung der Ausgabe des Arrays mit dynamischer Zahl
if( eregi($words[$i], $data) ){
$punkte = $punkte + 1;
}
}
echo "Punkte: ".$punkte."<br>"; // Ausgabe des Wertes von $punke - eigentlich sollte der Wert jetzt 1 sein
}
$text = "test test test <a> test test test";
checkString($text);
?>
Du musst die globalen Variablen in der function zuerst bekannt machen.
Anzahl der Werte im Array words: 3
Überprüfung der Varible i: 0
Arrayausgabe: [url]
Test: <a>
Überprüfung der Varible i: 1
Arrayausgabe: [url]
Test: [url]
Überprüfung der Varible i: 2
Arrayausgabe: [url]
Test: [link]
Punkte: 1
Hallo!
Du musst die globalen Variablen in der function zuerst bekannt machen.
Ah, ok. Danke schön. Jetzt klappt's :) Danke.
ciao, ww
Moin,
Ah, ok. Danke schön. Jetzt klappt's :)
nein, noch nicht ganz. :-)
Denn mit dieser Zeile
for($i = 0; $i <= $wordsLength; $i++)
prüfst du immer ein Element mehr, als dein Array überhaupt hat. Die Obergrenze in einer for-Schleife mit <= abzuprüfen, ist selten richtig.
Übrigens - Leerzeichen zur Auflockerung des Quelltexts sind gut, keine Frage. Aber man sollte es nicht übertreiben. Du reißt mit den Leerzeichen optisch auseinander, was eigentlich zusammengehört. Findest du nicht, dass es anders gruppiert übersichtlicher aussieht:
for ($i=0; $i<$wordsLength; $i++)
Aber das nur nebenbei; ist natürlich Geschmackssache.
So long,
Martin
Hallo!
Ah, ok. Danke schön. Jetzt klappt's :)
nein, noch nicht ganz. :-)
*grmpf* - Danke für den Hinweis.
Übrigens - Leerzeichen zur Auflockerung des Quelltexts sind gut, keine Frage. Aber man sollte es nicht übertreiben. Du reißt mit den Leerzeichen optisch auseinander, was eigentlich zusammengehört.
Also ich persönlich finde es viel übersichtlicher, wie ich es geschrieben habe. Aber das liegt vorallem an der eingestellten Schriftgröße in meinem Notepad++. Bei größeren Schriftgrößen finde ich deine Version auch besser. Aber da ich bis jetzt "nur" für mich privat programmiere, ist die Hauptsache, dass es für mich passt. Wenn ich das ganze in einem Team mache, dann ist das ganze warscheinlich geregelt. Dann werde ich halt meine Schriftgröße heraufschrauben ;-)
ciao, ww
Hallo!
Also, ich stelle jetzt noch eine Frage. Sie passt einigermaßen zu dem Thema, deswegen mache ich keinen neuen Thread auf, in der Hoffnung, dass ihn irgendjemand noch sieht :-)
Es gibt Probleme, wenn in dem Array ein Wert steht, der so aussieht: [url]
Also hat PHP Probleme, mit einem Array, der eckige Klammern beinhaltet. Ist ja auch irgendwie logisch. Aber wie kann ich das Problem beheben? Ich füge noch den Quelltext und die jeweilige Ausgabe an:
$words = array('<a', '[link]', '[url]'); #, 'enlarge', 'penis', 'viagra', 'sex'
$wordsLength = count($words);
function checkString($data){
global $words, $wordsLength;
for($i = 0; $i < $wordsLength; $i++){
if( eregi($words[$i], $data) ){
$punkte = $punkte + 1;
}
}
return "Ihr Eintrag enthält ".$punkte." von den $wordsLength verbotenen Wörtern! Bitte löschen Sie diese.";
}
Ausgabe:
########
Ihr Eintrag enthält 2 von den 3 verbotenen Wörtern! Bitte löschen Sie diese.
########
Wenn der Array folgenden Inhalt hat...
######################################
$words = array('<a', '[link', '[url');
######################################
Dann kommt folgende Meldung:
############################
Warning: eregi() [function.eregi]: REG_EBRACK in D:\xampp\xampp\htdocs\scripts\blog\class.php on line 63
Warning: eregi() [function.eregi]: REG_EBRACK in D:\xampp\xampp\htdocs\scripts\blog\class.php on line 63
Ihr Eintrag enthält von den 3 verbotenen Wörtern! Bitte löschen Sie diese.
############################
Also: Wie kann ich eckige Klammern in einen Array schreiben, ohne dass es Fehler gibt?
ciao, ww
Hallo,
Es gibt Probleme, wenn in dem Array ein Wert steht, der so aussieht: [url]
Also hat PHP Probleme, mit einem Array, der eckige Klammern beinhaltet.
Die Feststellung ist richtig, die Schlussfolgerung falsch.
Dein Problem liegt da:
if( eregi($words[$i], $data) )
In Regulären Ausdrücken hat die eckige Klammer nun einmal eine Sonderbedeutung, sie klammert nämlich Zeichen_menge_, von denen jedes einzelne als Suchtreffer passen soll.
Also: Wie kann ich eckige Klammern in einen Array schreiben, ohne dass es Fehler gibt?
Nochmal: Mit dem Array hat das nichts zu tun. Nur da du den Wert als RegExp verwendest, musst du die Klammern mit einem vorangestellten '' maskieren.
Ciao,
Martin
Hallo!
Nochmal: Mit dem Array hat das nichts zu tun. Nur da du den Wert als RegExp verwendest, musst du die Klammern mit einem vorangestellten '' maskieren.
Da wurde mir mein nicht vorhandenes Wissen über RegExp zum Verhängnis :) Vielen Dank!
ciao, ww