Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] FILTER_CALLBACK
Forum PHP.pl > Forum > Przedszkole
Kao
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
erix
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.
Kao
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
erix
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.
Pilsener
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.
Kao
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
Kao
Cytat(wookieb @ 1.06.2009, 22:09:00 ) *


Mała rzecz, a cieszy snitch.gif
Dzięki,
pozdr.
KaO
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.