Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Klasa walidacji formularza - porady
Forum PHP.pl > Forum > PHP
Blame
Ostatnio wgłębiam się w programowanie obiektowe i postanowiłem sobie napisać klasę sprawdzającą pola formularza. O ile z samym sprawdzaniem nie mam problemu, to po prostu filtry i wyrażenia regularne to już ze zwracaniem wartości tak. A konkretnie chodzi mi o poinformowanie użyszkodnika o źle wprowadzonych danych. Na razie po prostu albo zwracam ciąg albo FALSE, jednak to wiąże się z następnymi if'ami czyli większą ilością kodu. Przeczytałem gdzieś, że można użyć wyjątków. Czy to się sprawdzi? Przyznam, że moja wiedza związana z wyjątkami to ledwie skutek googlowania od dwóch dni. Proszę więc o odpowiedź na moje pytanie i ew. nakierowanie mnie w temacie.
Crozin
Tak, wyjątki mogą się tutaj sprawdzić bardzo dobrze m.in. dlatego, że mogą one zawierać sporo innych danych - nie tylko treść błędu.
Jeżeli zaś chodzi o wyświetlanie błędów, to tutaj dużo zależy od tego jak budujesz formularze na stronie... czy jest to ręcznie robione czy jakimś generatorem.

PS. W Symfony jest całkiem fajny "subframework" formularzy - i związane z tym walidatory.
thek
Jeśli jesteśmy przy frameworkach to fajny jest Formo w Kohanie. Kapitalnie upraszcza budowę i obsługę formularza. Zwracanie błędów walidacji przy jego użyciu to dosłownie bajka smile.gif
Pilsener
A jeśli chcesz robić własną, to coś w stylu:
  1. function waliduj_data($date,$czypusty=0){
  2. if(!empty($date)){
  3. $tdate = split('[^0-9]',$date);
  4. if(checkdate((int)$tdate[1],(int)$tdate[0],(int)$tdate[2])){
  5. $data = mktime(0,0,0,$tdate[1],$tdate[0],$tdate[2]);
  6. }else{
  7. $error = 'niepoprawna data';
  8. }
  9. }else{
  10. if($czypusty==1){$error = 'wpisz datę';}
  11. }
  12. $tablica[1] = $data;
  13. $tablica[2] = ' value="'.$date.'"';
  14. if(empty($error)){
  15. $tablica[0] = TRUE;
  16. }else{
  17. $tablica[0] = FALSE;
  18. $tablica[3] = $error;
  19. }
  20. return $tablica;
  21. }
- zwracana jest tablica, która zawiera 0 - TRUE/FALSE w zależności od poprawności walidacji, 1 - wpisaną datę jeśli jest błędna lub uniksowy znacznik czasu, gdy data jest poprawna, 2 - value do wykorzystania w inpucie, 3 - komunikat błędu. Można dodać także klasę CSS i oczywiście interfejs Twojej klasy nie musi ograniczać się do wartości domyślnych lub możesz w ogóle komunikaty błędów ustawiać gdzie indziej i w inny sposób, np. zapisywać to w szablonach formularzy.

Najlepiej bym to widział tak, że tworzysz formularz np. w XML, gdzie dla każdego inputa ustawiasz typ, opcje, komunikaty błędów etc. a resztę załatwia PHP.
thek
Gdy nie używałem formo i podobnych to wyglądało to tak, że tworzyłem pewien obiekt. Zawierał on tablicę z danymi formularza (domyślnymi lub pobranymi z bazy - jeśli to była edycja) i tablicę lustrzaną dla nich, które przechowywały ewentualne komunikaty błędów. Jeśli ta ostatnia była pusta po etapie walidacji to szedł update lub insert. Jeśli nie była pusta to zawartość pól (najczęściej już nieco poprawiona po walidacji) wracała z powrotem do formularza i wyświetlałem errory w zależności od upodobań albo nad formularzem, albo bezpośrednio przy polach ze znalezionymi błędami. CSS ładnie to "kolorował". Formo mi to jeszcze nieco ułatwiło, ale ogólna zasada jego działania jest identyczna.
Blame
Dzięki chłopaki, oczywiście się odwdzięczam. Na razie spróbuję tworzyć tablicę z błędami. Nie wiem czy rozwiązanie to się sprawdzi, ale myślę że warto to sprawdzić. Jeszcze jedno, czy macie jakieś pomysły na temat funkcjonalności owej klasy, które często są przydatne podczas pisania?
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.