Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP] FILTER_CALLBACK
Kao
post
Post #1





Grupa: Zarejestrowani
Postów: 26
Pomógł: 0
Dołączył: 19.10.2004
Skąd: Zgorzelec

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


Witam

Próbuję zrobić bardziej złożoną funkcję walidującą i zastanawiam się czy nie przesadziłem z funkcją check_user:
  1. <?php
  2. Function check_user($var) {
  3.    $var = trim(filter_var($var,FILTER_SANITIZE_STRING,FILTER_FLAG_ENCODE_HIGH|FILTER_FLAG_ENCODE_LOW,'ucwords')),
  4.    return (strlen($var) < 51 && strlen($var) > 2) ? $var : FALSE;
  5. }
  6.  
  7. $defs = array(
  8.    'name'      => array( 'filter'  =>  FILTER_CALLBACK,
  9.                          'options' => 'check_user') );
  10.  
  11. $input = filter_input_array(INPUT_POST, $defs);
  12.  
  13. // testujemy
  14. if ($input['name'] === FALSE) {
  15.    echo 'Za dużo znaków!';
  16. } else { echo 'Ok'; }
  17. ?>


Proszę o opinię!
Z góry dziękuję
Pozdr.
KaO

Ten post edytował Kao 27.05.2009, 23:23:14
Go to the top of the page
+Quote Post
erix
post
Post #2





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Przesadziłeś z kilkukrotnym wywołaniem strlen" title="Zobacz w manualu PHP" target="_manual.

Poza tym, dlaczego do sprawdzania długości robisz takiego tasiemca...? Wystarczyłby mb_strlen" title="Zobacz w manualu PHP" target="_manual.

PS. Tag tematu.
Go to the top of the page
+Quote Post
Kao
post
Post #3





Grupa: Zarejestrowani
Postów: 26
Pomógł: 0
Dołączył: 19.10.2004
Skąd: Zgorzelec

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


A strlen" title="Zobacz w manualu PHP" target="_manual raptem 2 razy bo zakres od 3 do 50 znaków chyba wymaga użycia dwukrotnego?

A czy mb_strlen" title="Zobacz w manualu PHP" target="_manual działa szybciej, poza tym, że ma dodatkowo $encoding?

Ps.
W sumie chodzi mi o walidację danych wejściowych POST (pól ze stringami typu: imię, nazwisko, opis, temat itp.) gdzie liczy się aby nie przedostały się "niechciane znaki" i aby długość tych chcianych mieściła się w określonym zakresie.
"Grzebałem" z CALLBACK aby do standardowych filtrów - czysto filtrujących dodać jakieś uniwersalne sprawdzanie długości, ale nie potrafiłem przekazać 2 parametrów min i max długości ciągu znaków.

Proszę jeśli można o korektę mojego kawałka kodu.

Z góry dziękuję.
Pozdr.
KaO
Go to the top of the page
+Quote Post
erix
post
Post #4





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Cytat
A strlen raptem 2 razy bo zakres od 3 do 50 znaków chyba wymaga użycia dwukrotnego?

strlen" title="Zobacz w manualu PHP" target="_manual, to jedna z najwolniejszych funkcji. Jeśli chcesz sprawdzać długość, to najefektywniej robisz tak:
  1. <?php
  2. if(isset($string{51})){
  3.  // $string dłuższe niż 50 znaków
  4. }
  5.  
  6. if(!isset($string{3})){
  7.  // $string krótsze niż 3 znaki
  8. }
  9. ?>


Cytat
A czy mb_strlen działa szybciej, poza tym, że ma dodatkowo $encoding?

Nie. Jeśli korzystasz z wielobajtowego kodowania znaków, np. utf-8/unicode, to ani strlen" title="Zobacz w manualu PHP" target="_manual, ani powyższy sposób nie zwrócą Ci dokładnego wyniku, jeśli pojawiłyby się w ciągu znaki narodowe.
Go to the top of the page
+Quote Post
Pilsener
post
Post #5





Grupa: Zarejestrowani
Postów: 1 590
Pomógł: 185
Dołączył: 19.04.2006
Skąd: Gdańsk

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


A czemu po prostu nie dasz wyrażenia regularnego?

  1. <?php
  2. if(!preg_match('/^[A-ZŁ&brvbar;Ż]{1}[a-zćęłńóż&plusmn;&para;Ľ]{2,14}$/',$imie)){$error = 'niepoprawne imię';}
  3. ?>


Imię od 2 do 14 znaków i pisownia zgodna z regułami ortografii (pierwsza litera duża, reszta małe), z imionami dwuczłonowymi radzę sobie tak, że rozbijam je explodem i waliduję każdy człon oddzielnie (pewnie można od razu pregiem, ale nie jestem w tym za dobry). Oczywiście ideałem jest wykorzystać bazę imion, ale chodzi tylko przykład - podobnie można sprawdzać login i moim zdaniem jest to prostsze niż kombinowanie ze strlen.
Go to the top of the page
+Quote Post
Kao
post
Post #6





Grupa: Zarejestrowani
Postów: 26
Pomógł: 0
Dołączył: 19.10.2004
Skąd: Zgorzelec

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


Cytat(Pilsener @ 28.05.2009, 10:26:03 ) *
A czemu po prostu nie dasz wyrażenia regularnego?

  1. <?php
  2. if(!preg_match('/^[A-ZŁŚŻ]{1}[a-zćęłńóżąśĽ]{2,14}$/',$imie)){$error = 'niepoprawne imię';}
  3. ?>


Imię od 2 do 14 znaków i pisownia zgodna z regułami ortografii (pierwsza litera duża, reszta małe), z imionami dwuczłonowymi radzę sobie tak, że rozbijam je explodem i waliduję każdy człon oddzielnie (pewnie można od razu pregiem, ale nie jestem w tym za dobry). Oczywiście ideałem jest wykorzystać bazę imion, ale chodzi tylko przykład - podobnie można sprawdzać login i moim zdaniem jest to prostsze niż kombinowanie ze strlen.


Wszystko ładnie, pięknie a co z u i o "umlaut", imiona nie tylko polskie, głownie chodzi mi o ludzi z PL, DE, ale jak przyjdzie ktoś inny to też bym chciał aby był wpis (bo to teraz chodzi o walidację imion w formularzu do wysyłania maila ze strony, to samo będzie się tyczyło TEAMAT'u oraz samego WPISU)

Pozdr.
Kao
Go to the top of the page
+Quote Post
wookieb
post
Post #7





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




http://forum.php.pl/index.php?showtopic=12...&hl=mb_ereg
Go to the top of the page
+Quote Post
Kao
post
Post #8





Grupa: Zarejestrowani
Postów: 26
Pomógł: 0
Dołączył: 19.10.2004
Skąd: Zgorzelec

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


Cytat(wookieb @ 1.06.2009, 22:09:00 ) *


Mała rzecz, a cieszy (IMG:http://forum.php.pl/style_emoticons/default/snitch.gif)
Dzięki,
pozdr.
KaO
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 5.10.2025 - 11:57