Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Validator, klasa, php5
Strzałek
post
Post #1





Grupa: Przyjaciele php.pl
Postów: 384
Pomógł: 6
Dołączył: 11.09.2004
Skąd: Grodzisk Mazowiecki

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


Prosta klasa do walidowania danych pochodzących od użytkownika.

  1. <?php
  2. /**
  3.  * Validator
  4.  * 
  5.  * @author Strzałek
  6.  * @package Tellur
  7.  * @subpackage Model
  8.  * @version 1.0.0
  9. */
  10.  
  11.  class Validator {
  12.  
  13.  /**
  14. * Bledy ktore wystpaia podczas
  15. * walidacji danych
  16. *
  17. * @var array
  18. */
  19.  private $errors = array();
  20.  
  21.  /**
  22. * Stan walidacji
  23. *
  24. * @var bool
  25. */
  26.  private $valid = true;
  27.  
  28.  /**
  29. * Metoda sprawdzajaca dlugosc
  30. *
  31. * @param string $string
  32. * @param int $min
  33. * @param int $max
  34. * @param string $error
  35. * @return bool
  36. */
  37.  public function lenght($string, $min, $max, $error){
  38.  
  39.  $lenght = strlen($string);
  40.  
  41.  if($lenght > $min){  
  42.  
  43.  if($lenght < $max){
  44. return true;
  45.  }else{
  46. return $this -> setError($error);
  47.  }
  48.  
  49.  }else{
  50. return $this -> setError($error);
  51.  }
  52.  
  53.  }
  54.  
  55.  /**
  56. * Metoda sprawdzajaca identycznosc
  57. * dwoch stringow
  58. *
  59. * @param string $string1
  60. * @param string $string2
  61. * @param string $error
  62. * @return bool
  63. */
  64.  public function same($string1, $string2, $error){
  65.  
  66.  if($string1 == $string2){
  67. return true;
  68.  }else{
  69. return $this -> setError($error);
  70.  }
  71.  
  72.  }  
  73.  
  74.  /**
  75. * Sprawdzanie stringa wyrazeniem
  76. * regularnym
  77. *
  78. * @param string $string
  79. * @param string $regex
  80. * @param string $error
  81. * @return bool
  82. */
  83.  public function pattern($string, $regex, $error){
  84.  
  85.  if(preg_match($regex, $string)){
  86. return true;
  87.  }else{
  88. return $this -> setError($error);
  89.  }
  90.  
  91.  }  
  92.  
  93.  /**
  94. * Sprawdzanie czy zwalidowano
  95. *
  96. * @return bool
  97. */
  98.  public function isValid(){
  99.  return $this -> valid;
  100.  }
  101.  
  102.  /**
  103. * Ustawienie bledy walidacji
  104. *
  105. * @param string $message
  106. * @return bool
  107. */
  108.  private function setError($message){
  109.  $this -> errors[] = $message;
  110.  return $this -> valid = false;
  111.  }
  112.  
  113.  /**
  114. * Zwrocenie tablicy z bledami
  115. *
  116. * @return array
  117. */
  118.  public function getErrors(){
  119.  return $this -> errors;
  120.  }
  121.  
  122.  }
  123.  
  124.  /* Przykład użycia */
  125.  
  126.  $v = new Validator();
  127.  $v -> lenght('L', 2, 32, 'Login musi mieć od 2 do 32 liter');
  128.  $v -> same('moje1tajne2hasl', 'moje1tajne2haslo', 'Hasla nie sa identyczne');
  129.  $v -> pattern('heniek@ze-wsi.com', '#^[A-Za-z0-9._-]+@[[A-Za-z0-9.-]+$#', 'To nie jest poprawny adres email');
  130.  
  131.  if($v -> isValid()){
  132.  //reestrujemy Heńka
  133.  echo 'rejestracja';
  134.  }else{
  135.  var_dump($v -> getErrors()); //wyswietlamy błedy ;)
  136.  }
  137.  
  138.  
  139. ?>


--------------------
Go to the top of the page
+Quote Post
pawkow
post
Post #2





Grupa: Zarejestrowani
Postów: 76
Pomógł: 7
Dołączył: 30.09.2006

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


  1. <?php
  2. function lenght($string, $min, $max, $error)
  3. {
  4.  
  5. $lenght = strlen($string);
  6.  
  7. if($lenght > $min && $lenght < $max)
  8. {
  9. return true;
  10. }
  11. else
  12. {
  13. return $this -> setError($error);
  14. }
  15. }
  16. ?>


Tak będzie chyba lepiej winksmiley.jpg
Go to the top of the page
+Quote Post
NuLL
post
Post #3





Grupa: Zarejestrowani
Postów: 2 262
Pomógł: 21
Dołączył: 3.05.2004
Skąd: Sopot, Krakow, W-wa

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


Sugerujesz ze przy kazdej walidacji mialo by sie pisac komunitkaty ? No way biggrin.gif - pomysl o jakies automatyzacji ( + w.jezykowe party.gif ) albo zycia Ci zbraknie tongue.gif


--------------------
Javascript, Coffeescript, Node.js, Mongo, CouchDb, chmury, workery & inne bajery - zycie jest zbyt krotkie aby miec nudna prace :)
Go to the top of the page
+Quote Post
arecki
post
Post #4





Grupa: Zarejestrowani
Postów: 222
Pomógł: 35
Dołączył: 6.02.2005

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


Może będzie lekki offtopic ale zastanawia mnie zawsze czemu wielu ludzi nie używa zrzucania wyjątków ? Programując obiektowo aż się prosi o to aby z tego mechanizmu skorzystać.


--------------------
Go to the top of the page
+Quote Post
pawkow
post
Post #5





Grupa: Zarejestrowani
Postów: 76
Pomógł: 7
Dołączył: 30.09.2006

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


Np. podczas rejestracji lub wyszukiwania warto wyświetlić komunikat, nie winksmiley.jpg ?
Go to the top of the page
+Quote Post
arecki
post
Post #6





Grupa: Zarejestrowani
Postów: 222
Pomógł: 35
Dołączył: 6.02.2005

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


No tak ale można obsłużyć to przez try {} catch {} smile.gif


--------------------
Go to the top of the page
+Quote Post
starach
post
Post #7





Grupa: Zarejestrowani
Postów: 999
Pomógł: 30
Dołączył: 14.01.2007
Skąd: wiesz ?

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


To nie łatwiej przez:
set_error_handler
trigger_error

Strzałek to nie lepiej pomyśleć nad zrobieniem klasy która ułatwiała by porównywanie ciągów za pomocą wyrażeń regularnych ? No offence, ale ja tutaj specjalnie dużej funkcjonalności i przydatności nie widzę.
Go to the top of the page
+Quote Post
NuLL
post
Post #8





Grupa: Zarejestrowani
Postów: 2 262
Pomógł: 21
Dołączył: 3.05.2004
Skąd: Sopot, Krakow, W-wa

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


Cytat(arecki @ 18.03.2007, 14:32:53 ) *
Może będzie lekki offtopic ale zastanawia mnie zawsze czemu wielu ludzi nie używa zrzucania wyjątków ? Programując obiektowo aż się prosi o to aby z tego mechanizmu skorzystać.

To ja tez offtopne, choc nie mowie ze masz zle intencje - stosowanie wyjatkow na sile jest be tongue.gif


--------------------
Javascript, Coffeescript, Node.js, Mongo, CouchDb, chmury, workery & inne bajery - zycie jest zbyt krotkie aby miec nudna prace :)
Go to the top of the page
+Quote Post
Zyx
post
Post #9





Grupa: Zarejestrowani
Postów: 952
Pomógł: 154
Dołączył: 20.01.2007
Skąd: /dev/oracle

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


Wyjątki tutaj tylko by przeszkadzały. Przecież jak mamy formularz, to najlepiej od razu jest wyświetlić wszystkie błędne pola, a nie przerywać sprawdzanie już po napotkaniu pierwszego. Ja bym się lekko wkurzył, gdyby mi się wyświetliła informacja o błędnej wartości, poprawiłbym, już zaczynam się cieszyć, a tu lipa - kolejne zgłasza błąd i tak w kółko.


--------------------
Specjalista ds. głupich i beznadziejnych, Zyx
Nowości wydawnicze: Open Power Collector 3.0.1.0 | Open Power Autoloader 3.0.3.0
Go to the top of the page
+Quote Post
arecki
post
Post #10





Grupa: Zarejestrowani
Postów: 222
Pomógł: 35
Dołączył: 6.02.2005

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


Dlatego pisałem że lekki offtopic będzie. Nie chodziło mi konkretnie o ten przykład ale w wielu skryptach jakie mi się "przewinęły" przez oczy aż się prosiło żeby użyć takiego mechanizmu. Z resztą nikt nie każe używać try{}catch. A jakbym się uparł to i przy walidacji formularzy by to użyć można. Z tym że faktycznie, jak napisał Zyx, można by się zatłuc czymś tępym jeżeli w kółko by mi się formularz z niepoprawnymi danymi pokazywał smile.gif ( w sumie to w metodzie np. validateAll() można zawrzeć private zmienną która by mówiła o błędzie przetwarzania warunków a z klasie dziedziczącej po exception można by jakoś zaimplementować obsługę wszystkich błędów formularza smile.gif)


--------------------
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 Aktualny czas: 21.08.2025 - 05:36