Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP][OOP]Walidacja, Klasa walidujaca,
MateuszS
post
Post #1





Grupa: Zarejestrowani
Postów: 1 429
Pomógł: 195
Dołączył: 6.10.2008
Skąd: Kraków/Tomaszów Lubelski

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


Witam, zaczynam z OOP i napisałem prostą klasę walidującą dla małych formularzy, napiszcie co można poprawić, miałem ją zaopatrzyć w MVC i prezentować błędy widokiem ale to już na kiedy indziej.

  1. //wlasciwa klasa w moim nastepnym poscie w tym temacie ;P


Ten post edytował MateuszS 21.04.2010, 17:23:14
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
MateuszS
post
Post #2





Grupa: Zarejestrowani
Postów: 1 429
Pomógł: 195
Dołączył: 6.10.2008
Skąd: Kraków/Tomaszów Lubelski

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


To tak:
1. Miałem tragiczny błąd w metodzie, nie pozamieniałem z powrotem $this->zmienna na $zmienna, już to poprawiłem.
2. Dodałem metodę za pomocą której możesz bez przerabiania klasy dodawać nowe typy pól, np. ów nip.
3. Mógłbyś wytłumaczyć o co chodzi z

Cytat
walidatory powinny być osobnymi obiektami implementującymi jakiś interfejs


  1. <?
  2.  
  3. class Walidacja
  4. {
  5.  
  6. /* Dozwolone opcje:
  7.   * min_znakow - minimalna ilosc znakow
  8. * max_znakow - maksymalna ilosc znakow
  9. * wzor - wzor wg ktorego ma byc walidowana zmienna
  10.  
  11. Wywolanie obiektu
  12. $ob = new Walidacja;
  13. $ob->waliduj(zmienna, kryterium);
  14.  
  15. Mozna swobodnie dodawac nowe pola/typy pol do ustawien, np
  16. kod pocztowy i zaopatrzyc go w atrybut wzor w ktorym bylby
  17. wzor w postaci wyrazen regularnych, ktory mialby za zadanie
  18. sprawdzac zmienna czy ma poprawny format.
  19. */
  20.  
  21. public $ustawienia = array(
  22. "login" => array(
  23. "min_znakow" => 3,
  24. "max_znakow" => 25
  25. ),
  26. "haslo" => array(
  27. "min_znakow" => 5,
  28. "max_znakow" => 15
  29. ),
  30. "email" => array(
  31. "wzor" => "^[_.0-9a-z-]+@([0-9a-z][0-9a-z-]+.)+[a-z]{2,4}$",
  32. ),
  33. "zabronione" => array()
  34.  
  35. );
  36.  
  37. private $bledy = array();
  38.  
  39. public function dodaj($typ, $min = null, $max = null, $wzor = null)
  40. {
  41. if(!isset($min) and !isset($max) and !isset($wzor)) {
  42. throw new Exception("Musisz podac dodatkowy atrybut(maksymalna ilosc znakow, minimalna lub wzor");
  43. } else {
  44. $typ = (string)$typ;
  45. if(isset($min)) $this->ustawienia[$typ]["min_znakow"] = (int)$min;
  46. if(isset($max)) $this->ustawienia[$typ]["max_znakow"] = (int)$max;
  47. if(isset($wzor)) $this->ustawienia[$typ]["wzor"] = $wzor;
  48. }
  49.  
  50. }
  51.  
  52. public function zabron($zabronione)
  53. {
  54. if(!is_array($zabronione)) {
  55. array_push($this->ustawienia["zabronione"], $zabronione);
  56. } else {
  57. foreach($zabronione as $wartosc)
  58. array_push($this->ustawienia["zabronione"], $wartosc);
  59. }
  60. }
  61.  
  62. public function waliduj($zmienna, $typ = null)
  63. {
  64.  
  65. if(is_array($zmienna)) {
  66. throw new Exception("Weryfikowana zmienna nie moze byc tablica. Bo tak.");
  67. }
  68.  
  69. $zmienna = trim(strip_tags($zmienna));
  70.  
  71. foreach($this->ustawienia["zabronione"] as $zabronione) {
  72. if(preg_match("#".$zabronione."#", $zmienna)) {
  73. $this->bledy[] = "Formularz zawiera niedozwolone znaki/slowa: ".$zabronione.".";
  74. break;
  75. }
  76. }
  77.  
  78. if(isset($typ)) {
  79. if(isset($this->ustawienia[$typ])) {
  80. $ustawienia = $this->ustawienia;
  81.  
  82. foreach($this->ustawienia[$typ] as $klucz => $wartosc) {
  83. if($klucz == "min_znakow") {
  84. if(strlen($zmienna) < $this->ustawienia[$typ]["min_znakow"])
  85. $this->bledy[] = ucfirst($typ)." musi miec conajmniej ".$this->ustawienia[$typ]["min_znakow"]." znakow.";
  86. }
  87. if($klucz == "max_znakow"){
  88. if(strlen($zmienna) > $this->ustawienia[$typ]["max_znakow"])
  89. $this->bledy[] = ucfirst($typ)." moze miec conajwyzej ".$this->ustawienia[$typ]["max_znakow"]." znakow.";
  90. }
  91. if($klucz == "wzor"){
  92. if(!preg_match("#".$this->ustawienia[$typ]["wzor"]."#", $zmienna))
  93. $this->bledy[] = ucfirst($typ)." ma niepoprawny format.";
  94. }
  95.  
  96. }
  97. }
  98. }
  99.  
  100.  
  101. return $zmienna;
  102. }
  103.  
  104. public function pokazbledy()
  105. {
  106. return $this->bledy;
  107. }
  108. }
  109.  
  110. try {
  111.  
  112.  
  113. $obWaliduj = new Walidacja();
  114. $obWaliduj->dodaj("tresc", 1, 10);
  115. $obWaliduj->waliduj("hesdsadsaddads", "tresc");
  116. $obWaliduj->dodaj("tresc", 4, 7);
  117. $obWaliduj->waliduj("aa", "tresc");
  118. $bledy = $obWaliduj->pokazbledy();
  119. foreach($bledy as $blad) {
  120. echo $blad."<br />";
  121. }
  122.  
  123. } catch(Exception $e) {
  124. echo "Blad: ".$e->getMessage();
  125. }


Ten post edytował MateuszS 21.04.2010, 18:36:42
Go to the top of the page
+Quote Post

Posty w temacie
- MateuszS   [PHP][OOP]Walidacja   21.04.2010, 15:58:09
- - Crozin   Dlaczego ten kod się do niczego nie nadaje? 1) P...   21.04.2010, 16:55:47
- - MateuszS   To tak: 1. Miałem tragiczny błąd w metodzie, nie p...   21.04.2010, 17:21:55
- - Spawnm   destruct masakryczny , echo w modelu ? Dodatkowo l...   21.04.2010, 17:29:51
- - Wicepsik   Walidacja NIPu nie polega tylko na policzeniu jego...   21.04.2010, 17:42:50
- - MateuszS   Spawnm, tak wiem, to nie jest problem zamienić na ...   21.04.2010, 18:24:03
- - Crozin   Cytat3. Mógłbyś wytłumaczyć o co chodzi z Cytatwa...   21.04.2010, 19:41:32
- - MateuszS   Niestety jest to dla mnie czarna magia co napisałe...   21.04.2010, 19:55:49
- - Crozin   CytatPoza tym wywala błędy z tym namespaceWidoczni...   21.04.2010, 20:17:58
- - MateuszS   CytatWidocznie masz PHP w wersji poniżej 5.3 - ale...   21.04.2010, 21:03:41
- - Crozin   CytatNo ja przecież napisałem skrypt który ma za z...   21.04.2010, 22:06:30
- - MateuszS   CytatRównież uważam, że branie się za FW w momenci...   22.04.2010, 11:51:06
- - Crozin   CytatNo nie przesadzajmy, podstawy pewne mamTego n...   22.04.2010, 13:30:24
- - zzeus   @Crozin mógłbyś rzucić kilka linków do artykułów k...   22.04.2010, 13:34:31
- - marcio   Cytat@Crozin mógłbyś rzucić kilka linków do artyku...   22.04.2010, 13:50:12
- - MateuszS   Crozin, to że nie użyłem w mojej klasie np. dziedz...   22.04.2010, 13:57:49
- - Crozin   CytatCrozin, to że nie użyłem w mojej klasie np. d...   22.04.2010, 16:50:25
- - MateuszS   No a jak wy się OOP uczyliście? Też mieliście taki...   22.04.2010, 19:31:53
- - marcio   Cytat(MateuszS @ 22.04.2010, 20:31:53...   22.04.2010, 20:50:39
- - MateuszS   He czyli głupie pytania kluczem do sukcesu To kol...   22.04.2010, 20:58:21
- - marcio   Taka ze dziedziczysz po klasie ktora rozszerza kla...   22.04.2010, 21:27:49
- - MateuszS   IMHO nie rozszyfrowałem skrótu acl. Mądrze piszesz...   22.04.2010, 21:52:07
- - Crozin   CytatJakis praktyczny przyklad masz komponent News...   23.04.2010, 01:02:49
- - marcio   Jak pisalem przyklady wymyslilem w momencie. Cytat...   23.04.2010, 09:29:00
- - MateuszS   Czyli jednak moja intuicja jeszcze ma się całkiem ...   23.04.2010, 13:12:58
- - Crozin   CytatKiedyś też tak myślałem ale doszedłem wtedy d...   23.04.2010, 13:57:22
- - MateuszS   Crozin, dało by się jakoś uprościć twoje klasy? Ta...   23.04.2010, 14:24:57
- - Crozin   Nie chcę już zaśmiecać wątku kolejnym długim listi...   23.04.2010, 16:42:30
- - marcio   CytatCóż... proszę rozwiń dlaczego uznałeś, że był...   23.04.2010, 17:09:22
- - MateuszS   Wielkie dzięki Crozin! To teraz pytania: 1. ...   23.04.2010, 17:31:27
- - smentek   Tablice mają to do siebie, że przechowują dane róż...   23.04.2010, 22:12:42
- - Crozin   CytatTwój walidator zwraca błędy (do tego poprzez ...   24.04.2010, 15:08:03
|- - smentek   Cytat(Crozin @ 24.04.2010, 16:08:03 )...   28.04.2010, 19:00:58
- - marcio   CytatTablice w swojej znanej z "normalnych...   24.04.2010, 17:57:00
|- - smentek   CytatTablice w swojej znanej z "normalnych...   28.04.2010, 18:43:24
- - MateuszS   Hmm... to ja może od nowa spróbuję napisać klasę, ...   24.04.2010, 22:54:01
- - Crozin   Skoro "filozofii", któregoś kawałka nie ...   25.04.2010, 00:34:00
- - MateuszS   Ok to tak, nie bardzo rozumiem jeszcze czemu używa...   25.04.2010, 08:03:55
- - Crozin   To zacznijmy od najłatwiejszego - przestrzeni nazw...   25.04.2010, 10:40:21
- - MateuszS   Albo jestem za głupi albo... właściwie to tylko to...   25.04.2010, 15:01:29
- - Crozin   JAk już napisałem... w PHP interfejsy nie grają is...   25.04.2010, 16:01:50
- - MateuszS   Ok, czyli nie wolno pojedynczemu obiektowi w tym p...   26.04.2010, 12:36:27
- - Crozin   Nie ma chyba jednoznacznej granicy. Po prostu... o...   26.04.2010, 14:34:22
- - MateuszS   Dzięki Crozin za cierpliwość (wiem że jej zasób ju...   27.04.2010, 19:11:54
- - Crozin   Cóż... możesz zawsze wrzucić kod - jeżeli już niko...   27.04.2010, 22:41:47
- - marcio   Ogolnie w jezykach takich jak Ruby/Python standart...   28.04.2010, 01:53:08
- - MateuszS   Jak najlepiej rozwiązać problem dodawania nowych o...   28.04.2010, 18:58:46
- - MateuszS   No dobra smentek, ale może wypowiedz się na temat,...   28.04.2010, 19:23:36
- - Crozin   CytatTablice w większości języków programowania mo...   28.04.2010, 20:12:27
- - MateuszS   No ok, ale Ty w swojej klasie zamieściłeś coś w st...   28.04.2010, 21:17:33
- - Crozin   To co ja zamieszczałem jako parametry to były właś...   28.04.2010, 21:20:40
- - smentek   Cytat(MateuszS @ 28.04.2010, 20:23:36...   4.05.2010, 15:19:32
- - Cysiaczek   Myślę, że iloczyn logiczny stanu walidatorów pozwa...   7.05.2010, 06:44:32


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: 8.10.2025 - 14:34