Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]zabronione znaki
Forum PHP.pl > Forum > Przedszkole
jacusek
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.
blade-mrn
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 ...".
jacusek
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
konrados
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. ?>
jacusek
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.
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.