Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP] Funkcja filtrująca przekleństwa (problem), Funkcja filtrująca przekleństwa
-Fabian-
post
Post #1





Goście







Cześć wink.gif
mam taką prościutką funkcję:
  1. function check_bad_words($text){
  2. $open = file('data/bad-words.txt');
  3. foreach($open as $value){
  4. $find = strpos($text, $value);
  5. if($find === true){
  6. return true;
  7. }
  8. }
  9. return false;
  10. }

wywołuję ją tak:
  1. if(check_bad_words($question)){
  2. // coś tam coś
  3. }

Niby wszytsko ładnie prosto... Ale nie działa tongue.gif
Funkcja za każdym razem zwraca false, anwet wtedy kiedy podaję tekst z przekleństwem będącym w pliku bad-words.txt.
Ktoś ma pomysł, dlaczegoż to nie chce działać ;/ ?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 8)
vonski
post
Post #2





Grupa: Zarejestrowani
Postów: 292
Pomógł: 89
Dołączył: 27.12.2006
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Dlatego, że strpos zwraca pozycję danego substringu, lub FALSE. Dlatego $find === true nigdy nie będzie miało wartości logicznej true.
Możesz ten warunek przepisać tak:

  1. if($find === false) {
  2. return false;
  3. }


A po wyjściu z pętli zwracasz true.


--------------------
Zend Certified Engineer | Microsoft Certified Professional: Programming in HTML5 with JavaScript & CSS3 | Blog
Go to the top of the page
+Quote Post
jakub.drag
post
Post #3





Grupa: Zarejestrowani
Postów: 94
Pomógł: 9
Dołączył: 11.10.2010
Skąd: Kraków

Ostrzeżenie: (0%)
-----


Cytat(vonski @ 3.03.2014, 01:53:28 ) *
Dlatego, że strpos zwraca pozycję danego substringu, lub FALSE. Dlatego $find === true nigdy nie będzie miało wartości logicznej true.
Możesz ten warunek przepisać tak:

  1. if($find === false) {
  2. return false;
  3. }


A po wyjściu z pętli zwracasz true.

Cześć wink.gif
@vonski - zapomniałeś, że PHP rzutuje typy zmiennych. Skoro $find przybiera integer'a, a porównujemy go do boola, to jest on rzutowany na bool'a. A dokładniej na true smile.gif
Co do funkcji @Fabian - wydaje być poprawna... Przetestuję i zobaczę smile.gif


--------------------
Podchodź pozytywnie do swojego kodu :)
Go to the top of the page
+Quote Post
vonski
post
Post #4





Grupa: Zarejestrowani
Postów: 292
Pomógł: 89
Dołączył: 27.12.2006
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


PHP rzutuje typy przy porównaniu za pomocą tego operatora: ==
Operator identyczności (===) porównuje wartość i typ - bez rzutowania.


--------------------
Zend Certified Engineer | Microsoft Certified Professional: Programming in HTML5 with JavaScript & CSS3 | Blog
Go to the top of the page
+Quote Post
nospor
post
Post #5





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Tak czy siak kod powinien wygladac tak:
if($find !== false) {
return true;
}

wink.gif


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
-Fabian-
post
Post #6





Goście







Nie wiem ale to dalej nie działa. I z poprawkami nospora i jakuba. Ja już nie wiem co jest nie tak!!
Go to the top of the page
+Quote Post
jakub.drag
post
Post #7





Grupa: Zarejestrowani
Postów: 94
Pomógł: 9
Dołączył: 11.10.2010
Skąd: Kraków

Ostrzeżenie: (0%)
-----


No tak. To nie jest kwestia rzutowania czy warunków.
Funkcja file() zwraca wiersze w tablicy, ale ze znakiem nowej lini.
Użyj trim() i powinno działać.


--------------------
Podchodź pozytywnie do swojego kodu :)
Go to the top of the page
+Quote Post
-Fabian-
post
Post #8





Goście







Dobra z trimem zadziałało, dzieki
Go to the top of the page
+Quote Post
viking
post
Post #9





Grupa: Zarejestrowani
Postów: 6 380
Pomógł: 1116
Dołączył: 30.08.2006

Ostrzeżenie: (0%)
-----


file() ma coś takiego jak flagi. Dokumentacja się kłania.
FILE_IGNORE_NEW_LINES


--------------------
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 19.08.2025 - 13:15