Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]strpos
Forum PHP.pl > Forum > Przedszkole
djtomaszq
  1. <?php
  2. if(strpos($_POST['text'], "kurde"))
  3. echo "Jest zakazane słowo!";
  4. else
  5. echo "Miły komć :)";
  6. ?>


Kiedy wysyłam w $_POST['text'] wyraz "kurde" pokazuje FALSE ale wysyłam w $_POST['text'] co kolwiek przed "kurde" np. "kkurde" lub "ikurde" lub ".kurde" wtedy zwraca TRUE.
Czy ktoś mógłby mi to wytłumaczyć ?
trueblue
Na 100% nie zwraca FALSE.
Sprawdź co zwraca.
djtomaszq
Jak wpisze w formularzu "kurde" zwraca "miły komć" a jak wpisze ".kurde" to "Jest zakazane słowo!". Tak jakby pierwsza litera sie nie liczyła (?)
trueblue
Sprawdź co zwraca strpos dla tej sytuacji.
djtomaszq
Powinien zwracać TRUE
KsaR
Źle to robisz.
Funkcja strpos zwraca na której pozycji jest słowo.
Jeśli na pierwszej to zwróci 0... Php przekonwetruje 0 do false.
A false da wynik z else.

I zwraca false jeśli nie istnieję.
Dlatego musisz sprawdzać czy funkcja nie zwróci false.

Dodatkowo lepiej zrób stripos zamiast strpos jeżeli chcesz uwzględnić także Kurde KURDE itd.

  1. if (false!==stripos($_POST['text'], 'kurde')) {
  2. echo 'Jest zakazane słowo!';
  3. } else {
  4. echo 'Miły komć :)';
  5. }


Nawet w manualu masz ostrzeżenie przed tym - lepiej tam sprawdzaj gdyby coś powinno działać a nie działa jak trzeba.
stripos();
Cytat
Returns the position of where the needle exists relative to the beginnning of the haystack string (independent of offset). Also note that string positions start at 0, and not 1.

Returns FALSE if the needle was not found.

Warning
This function may return Boolean FALSE, but may also return a non-Boolean value which evaluates to FALSE. Please read the section on Booleans for more information. Use the === operator for testing the return value of this function.
com
ah ta Yoda tongue.gif
KsaR
Cytat(com @ 26.04.2016, 21:46:38 ) *
ah ta Yoda tongue.gif

Niestety weszło mi w nawyk... Łatwiej mi się czyta..
Powoli też się do PSR przyzwyczajam biggrin.gif (a byłem przeciwnikiem klamer w jednej lini) tongue.gif
djtomaszq
Robię kurs PHP i jestem na dziale z strpos i tam piszą że sprawdza się tak podciag w ciągu, dlatego nie rozumiałem dlaczego to działa przy dodaniu jakiejkolwiek litery na początek szukanego podciagu.
KsaR
Cytat(djtomaszq @ 26.04.2016, 21:53:04 ) *
Robię kurs PHP i jestem na dziale z strpos i tam piszą że sprawdza się tak podciag w ciągu, dlatego nie rozumiałem dlaczego to działa przy dodaniu jakiejkolwiek litery na początek szukanego podciagu.

Bo ta litera bedzie na pierwszej pozycji czyli pozycja "0".
Kolejny znak to juz pozycja "1" php konwetruje 1 do true. I sie wykona.
Dlatego tak jak pisalem musisz patrzeć czy stripos($var, 'slowo')!==false.

Wszelkie kursy podchodz z dystansem małym, nie raz trafią się przeoczenia lub i literowki w kodzie.
com
chodzi o to, że php rzutuje 0 do false, wiec jak znajdzie podciąg w ciągu na 1 pozycji to zwróci 0 co zostanie rzutowane na false i warunek nie zostanie spełniony smile.gif

Ale psr nie promuje Yody tongue.gif a klamry w jednej lini sprawiają, że jest czytelniej ale nie w przypadku metod, klas, tak jak np w dziale ocen ostatnio był taki kod, nie da sie tego przeczytać potem biggrin.gif
Pyton_000
Bo tak strasznie ciężko jest zajrzeć do manuala...

Cytat
Returns the position of where the needle exists relative to the beginning of the haystack string (independent of offset). Also note that string positions start at 0, and not 1.

Returns FALSE if the needle was not found.

Warning
This function may return Boolean FALSE, but may also return a non-Boolean value which evaluates to FALSE. Please read the section on Booleans for more information. Use the === operator for testing the return value of this function.

djtomaszq
.. ale z tego forum można się więcej nauczyć i efektywniej smile.gif

To mam do tego jeszcze jedno pytanie czy tak będzie dobrze?

  1. $napis = strpos($_POST['text'], "kurde");
  2. if($napis === FALSE) echo "Jest ok :)";
  3. else echo "Brzydkie słowo!";


zamiast znaku równości znak identyczności, działa.
com
owszem jest ok, a false pisz małymi literami wink.gif
djtomaszq
Super, to jeszcze zapytam dla lepszej mojej wiedzy, dlaczego małymi pisać false?

P. S. .. i czy jest możliwość sprawdzania strpos w tablicy słów? np. słowo[1] = kurde, słowo[2] = gupek itp..

np tak
  1. $napis = strpos($_POST['text'], $slowo);


czy tylko w petli sprawdzać?
kapslokk
Małymi bo PSR: https://github.com/php-fig/fig-standards/bl...-style-guide.md

A co do tablicy to tylko w pętli.
Pyton_000
Zawsze można kulawo ale...:
  1. $badWords = array(
  2. 'bad' => '***',
  3. 'badly' => '***');
  4.  
  5. strtr("This is a bad sentence", $badWords);
kapslokk
Można też zrobić joina na tablicy i to sprawdzać tongue.gif Ale bezpośrednio strpos się nie da smile.gif
djtomaszq
ok, dzięki za pomoc, to chyba w pętli będzie lepiej smile.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.