Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]strpos
djtomaszq
post 26.04.2016, 20:05:50
Post #1





Grupa: Zarejestrowani
Postów: 188
Pomógł: 0
Dołączył: 5.07.2015

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


  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ć ?

Ten post edytował djtomaszq 26.04.2016, 20:07:03
Go to the top of the page
+Quote Post
trueblue
post 26.04.2016, 20:08:21
Post #2





Grupa: Zarejestrowani
Postów: 6 761
Pomógł: 1822
Dołączył: 11.03.2014

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


Na 100% nie zwraca FALSE.
Sprawdź co zwraca.


--------------------
Go to the top of the page
+Quote Post
djtomaszq
post 26.04.2016, 20:11:28
Post #3





Grupa: Zarejestrowani
Postów: 188
Pomógł: 0
Dołączył: 5.07.2015

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


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 (?)
Go to the top of the page
+Quote Post
trueblue
post 26.04.2016, 20:12:17
Post #4





Grupa: Zarejestrowani
Postów: 6 761
Pomógł: 1822
Dołączył: 11.03.2014

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


Sprawdź co zwraca strpos dla tej sytuacji.


--------------------
Go to the top of the page
+Quote Post
djtomaszq
post 26.04.2016, 20:17:23
Post #5





Grupa: Zarejestrowani
Postów: 188
Pomógł: 0
Dołączył: 5.07.2015

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


Powinien zwracać TRUE
Go to the top of the page
+Quote Post
KsaR
post 26.04.2016, 20:32:38
Post #6





Grupa: Zarejestrowani
Postów: 520
Pomógł: 102
Dołączył: 15.07.2014
Skąd: NULL

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


Ź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.


Ten post edytował KsaR 26.04.2016, 20:41:06


--------------------
Go to the top of the page
+Quote Post
com
post 26.04.2016, 20:46:38
Post #7





Grupa: Zarejestrowani
Postów: 3 032
Pomógł: 366
Dołączył: 24.05.2012

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


ah ta Yoda tongue.gif
Go to the top of the page
+Quote Post
KsaR
post 26.04.2016, 20:53:02
Post #8





Grupa: Zarejestrowani
Postów: 520
Pomógł: 102
Dołączył: 15.07.2014
Skąd: NULL

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


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


--------------------
Go to the top of the page
+Quote Post
djtomaszq
post 26.04.2016, 20:53:04
Post #9





Grupa: Zarejestrowani
Postów: 188
Pomógł: 0
Dołączył: 5.07.2015

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


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.
Go to the top of the page
+Quote Post
KsaR
post 26.04.2016, 20:56:11
Post #10





Grupa: Zarejestrowani
Postów: 520
Pomógł: 102
Dołączył: 15.07.2014
Skąd: NULL

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


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.


--------------------
Go to the top of the page
+Quote Post
com
post 26.04.2016, 20:59:34
Post #11





Grupa: Zarejestrowani
Postów: 3 032
Pomógł: 366
Dołączył: 24.05.2012

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


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

Ten post edytował com 26.04.2016, 21:00:06
Go to the top of the page
+Quote Post
Pyton_000
post 26.04.2016, 21:15:06
Post #12





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


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.

Go to the top of the page
+Quote Post
djtomaszq
post 26.04.2016, 22:07:17
Post #13





Grupa: Zarejestrowani
Postów: 188
Pomógł: 0
Dołączył: 5.07.2015

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


.. 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.

Ten post edytował djtomaszq 26.04.2016, 22:08:39
Go to the top of the page
+Quote Post
com
post 27.04.2016, 01:44:27
Post #14





Grupa: Zarejestrowani
Postów: 3 032
Pomógł: 366
Dołączył: 24.05.2012

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


owszem jest ok, a false pisz małymi literami wink.gif
Go to the top of the page
+Quote Post
djtomaszq
post 27.04.2016, 09:34:21
Post #15





Grupa: Zarejestrowani
Postów: 188
Pomógł: 0
Dołączył: 5.07.2015

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


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ć?

Ten post edytował djtomaszq 27.04.2016, 09:37:00
Go to the top of the page
+Quote Post
kapslokk
post 27.04.2016, 09:53:59
Post #16





Grupa: Zarejestrowani
Postów: 965
Pomógł: 285
Dołączył: 19.06.2015
Skąd: Warszawa

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


Małymi bo PSR: https://github.com/php-fig/fig-standards/bl...-style-guide.md

A co do tablicy to tylko w pętli.
Go to the top of the page
+Quote Post
Pyton_000
post 27.04.2016, 09:57:12
Post #17





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


Zawsze można kulawo ale...:
  1. $badWords = array(
  2. 'bad' => '***',
  3. 'badly' => '***');
  4.  
  5. strtr("This is a bad sentence", $badWords);
Go to the top of the page
+Quote Post
kapslokk
post 27.04.2016, 10:40:13
Post #18





Grupa: Zarejestrowani
Postów: 965
Pomógł: 285
Dołączył: 19.06.2015
Skąd: Warszawa

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


Można też zrobić joina na tablicy i to sprawdzać tongue.gif Ale bezpośrednio strpos się nie da smile.gif
Go to the top of the page
+Quote Post
djtomaszq
post 27.04.2016, 10:49:23
Post #19





Grupa: Zarejestrowani
Postów: 188
Pomógł: 0
Dołączył: 5.07.2015

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


ok, dzięki za pomoc, to chyba w pętli będzie lepiej smile.gif
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 Wersja Lo-Fi Aktualny czas: 19.04.2024 - 05:36