Klasa walidująca formularz

2011-07-10 11:26:32 Post #1 user76

 
define('CONTENTS_LENGTH', 5);
define('SUBJECT_LENGTH', 5);

class Validate {

public $dataPost = array();
var $errors = array();

public function __construct(){
$this->dataPost = ($_POST);
print $this->dataPost['subject'];
}	

public function AddValidator($type,$data){

switch ($type)
{
case 'subject': {
if(empty($data) || strlen($data) < SUBJECT_LENGTH){
$this->errors[] = "Temat nie może być krótszy, niż ". SUBJECT_LENGTH . " znaków<br />"; 
}
}
break;

case 'contents': {
if(empty($data) || strlen($data) < CONTENTS_LENGTH){
$this->errors[] = "Opis musi mieć więcej znaków<br />"; 
}
}
break;

case 'email': {
if (empty($data) || !preg_match('/^[A-Z0-9._%+-]+@[A-Z0-9.-]+.[A-Z]{2,4}$/i', $data)) { 
$this->errors[] = "Niepoprawny e-mail<br />"; 
} 
}
break;

case 'numeric': {
if (!is_numeric($data)) { 
$this->errors[] = "Pole musi zawierać cyfry<br />"; 
} 
}
break;

}
}
 
public function Errors(){
print "<br />";
if (count($this->errors) > 0) {
foreach($this->errors as $value){
print $value;
}
}
}
 
};

$validate = new Validate;
$validate->AddValidator('subject',$validate->dataPost['subject']);
$validate->AddValidator('contents',$validate->dataPost['contents']);
$validate->AddValidator('email',$validate->dataPost['email']);
$validate->AddValidator('numeric',$validate->dataPoste['phone']);
$validate->Errors();

?>

2011-07-11 10:35:06 Post #2 nospor

 
Ta klasa nie nadaje się do ogólnego użytku. Zgóry zdefiniowane typy jak SUBJECT czy CONTENTS, które sprawdzają długość pola. Nie każdy ma takie typy. Powinien być typ: MAXLENGTH i on by załatwił wszystko.
Zamiast tekstowych komunikatów powinny być kody błędów.
Niby używasz php5 a stosujesz archaizmy jak VAR.

2011-07-12 20:44:31 Post #3 user76

 
czyli
public function addValidator($data,$case){
//...
}

$validate->addValidator('title','notEmpty');


Rozumiem, że zamiast contents, emaIl numeric powinny być sposoby na sprawdzenie?

Jak powinno wyglądać przeprowadzenie walidacji po dodaniu walidatora ?
mam tylko to
$validate->doValidate(...)


Na co zamienić var?

Czy formularz i walidacji mogą być interfejsem ?

Co do kodów znalazłem tylko na przesyłanie pliku. Stworzyć własne ?
W zendzie to wygląda tak:
'kluczBłędu' => 'Wiadomosć błędu'

2011-07-13 10:33:35 Post #4 nospor

 
Tak na dobrą sprawę to walidatory powinieneś przypisywać do pól. No ale ty nie masz tu klasy formularza tylko klasę walidator.
Walidator length:
<?php
$validate->AddValidator('length',$validate->dataPost['subject'],array('min'=>3, 'max'=>8));
?>

Trzeci parametr to tablica opcji. W przypadku walidatora length jest to opcja min i max. W ten sposób masz uniwersalny walidator na długość.

addValidator powinno dodawać walidator a nie od razu walidować. Walidować powinno się dopiero po wykonaniu metody np. doValidate();

Kody możesz zwracać jak napisałeś.

na co var? No to doczytaj o podstawach obiektówki...
public, private, protected - do wybory do koloru.

2011-08-07 00:33:00 Post #5 user76

 
Jak przypisać moją walidację do pól w formularzu, jeżeli wywołuje pola:

print $form->formularz_start('index.php','post','');
print $form->dodaj_element('text','Time','Time to kill (Hour:minute GST!!) : ','','','','','','','',''); 
print $form->dodaj_element('hidden','sessionId','',$calculator->genId(),'','','','','','',''); 
print $form->dodaj_element('submit','send','Save','','','','','','','',''); 
print $form->formularz_koniec();

2011-08-08 07:56:11 Post #6 nospor

 
np. do metody dodaj_element, dodać koleny parametr, który będzie walidatorem

2011-08-29 19:01:56 Post #7 Michał

 
Idea fajna, z wykonaniem gorzej ale na +, ze sam piszesz takie rzeczy.

U siebie zaimplementowałem możliwość dodania callbacka jako walidatora i zwraca on true/false.
W sferze funkcji anonimowych - bajka

2011-08-30 00:34:21 Post #8 user76

 
Pisze właśnie framework i jestem przy użytkownikach, jeszcze naprawię szablony php i mogę budować strukturę.

W ACL wykorzystałem bazę z 3 tabelami do kontroli uprawnień użytkowników na poziomie różnych modułów.

2011-09-01 14:22:26 Post #9 user76

 
jak wyglądała ta klasa ?

2011-09-04 12:55:27 Post #10 nospor

 
Kurcze, skasowałeś linka i już za bardzo nie pamiętam
Ale z tego co pamiętam, to znowu zdefiniowałeś na stałe walidatory i nie można było dodać nic własnego?

2011-09-04 15:04:42 Post #11 user76

 
Można dodać własne walidatory, wystarczy wytypować w klasie konfiguracji:

$ob = new FormCfg;
$ob->getFormVal('contact');


Tam jest na sztywno ustawione tablice walidatorów dla różnych modułów, chyba to lepsze rozwiązanie. Jeśli chcę zmienić walidatory, wczytuję inną konfigurację.

Może w kodzie na sztywno, ale dla mnie nie jest to nieporęczne. Jeśli chcę zmienić ze string na numeric po prostu zmieniam to w kodzie w konfiguracji. Nie potrzebuję inaczej.

Answer

Recently commented

  1. Mysql - FAQ Paweł
  2. Pager 2.5.1 oraz EPa... Na szybko2
  3. Pager 2.5.1 oraz EPa... Sławek
  4. Mysql - FAQ Piotr
  5. Liczba dni roboczych Na szybko2
  6. Liczba dni roboczych Naszybko
  7. Klasa widoku nospor

Categories

  1. wszystkie wszystkie komentarze all (1)