Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]zabronione znaki
jacusek
post 25.11.2010, 11:49:33
Post #1





Grupa: Zarejestrowani
Postów: 262
Pomógł: 3
Dołączył: 18.10.2009
Skąd: Łódź

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


Witam. Chciałem w jednym z pól zabronić części znaków. Znalazłem informację o funkcji strpos()
Napisałem kod i nie bardzo rozumiem, dlaczego nie działa.
  1. function checkstrNo($z, $form_name){
  2. $zabronione = '!@#$%^&*';
  3. $pos=strpos($z,$zabrionione);
  4. echo $pos;
  5. if ($pos === false){
  6. $tekst="Użyto niedozwolonych znaków w polu " .$form_name;
  7. popup_alert($tekst);
  8. }else
  9. {
  10. echo 'OK';
  11. }
  12. }

jakikolwiek znak nie podstawię pod zmienną $z zawsze spełnia jeden lub drugi warunek w zależności od podanego operatora przypisania.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 4)
blade-mrn
post 25.11.2010, 12:06:04
Post #2





Grupa: Zarejestrowani
Postów: 113
Pomógł: 11
Dołączył: 20.10.2009

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


Nie wiem jak operator ale w instrukcji warunkowej chyba powinieneś mieć True a nie False. Funkcja strpos zwraca False gdy nie znajdzie szukanego ciągu znaków. Czyli w twoim przypadku sprawdzasz czy są niedozwolone znaki i gdy ich faktycznie nie ma wyświetlasz "Użyto niedozwolonych znaków w polu ...".


--------------------
"Wszyscy wiedzą, że czegoś nie da się zrobić, i przychodzi taki jeden, który nie wie, że się nie da, i on to właśnie robi."
Albert Einstein
Go to the top of the page
+Quote Post
jacusek
post 25.11.2010, 12:12:10
Post #3





Grupa: Zarejestrowani
Postów: 262
Pomógł: 3
Dołączył: 18.10.2009
Skąd: Łódź

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


No właśnie zrobiłem var_dump i cokolwiek nie wrzucę ona zawsze zwraca mi boolean false sciana.gif
nie wiem właściwie dlaczego
Go to the top of the page
+Quote Post
konrados
post 25.11.2010, 12:19:17
Post #4





Grupa: Zarejestrowani
Postów: 623
Pomógł: 79
Dołączył: 16.01.2008

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


Bo nie szukasz JAKIEGOKOLWIEK znaku z ciągu "!@#$%^&*" ale całego właśnie tego ciągu.

Zainteresuj się preg_match albo wstaw swoje znaczki do arraya, a następnie w pętli sprawdzaj każdy znak po kolei (czy występuje).

Edit: w manualu dot. strpos masz przykład szukania jakiegokolwiek znaku z arraya:
  1. <?php
  2. function strposa($haystack ,$needles=array(),$offset=0){
  3. $chr = array();
  4. foreach($needles as $needle){
  5. $chr[] = strpos($haystack,$needle,$offset);
  6. }
  7. if(empty($chr)) return false;
  8. return min($chr);
  9. }
  10.  
  11. $string = "This is my string, very simple.";
  12.  
  13. echo strposa($string,array(".",","," ")); // 2
  14. echo strposa($string,array("T")); // 0
  15. echo strposa($string,array("Q","W")); // false
  16. ?>


Ten post edytował konrados 25.11.2010, 12:25:01
Go to the top of the page
+Quote Post
jacusek
post 27.11.2010, 21:58:00
Post #5





Grupa: Zarejestrowani
Postów: 262
Pomógł: 3
Dołączył: 18.10.2009
Skąd: Łódź

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


Próbuję troszkę przepisać funkcję, ale też mi coś nie idzie
  1. function szukajznaku($z,$zabr=array(),$offset=0){
  2. $tabela=array();
  3. foreach($zabr as $tab){
  4. $tabela[]=strpos($z,$tab,$offset);
  5. }
  6. if(empty($tabela))return false;
  7. return min($tabela);
  8. }
  9. $z="cos";
  10. $pos= szukajznaku($z,array("o","s"));
  11. echo $pos;

i tutaj wszystko gra pokazuje 1
ale kiedy robię w ten sposób
  1. $z="101 !1065"
  2. $pos=szukajznaku($z,array("o","!"));
  3. echo var_dump($pos);

wóczas dostaję boolean false i nie bardzo rozumiem dlaczego.


Ten post edytował jacusek 28.11.2010, 08:37:02
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.07.2025 - 06:19