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. ShoutBox nospor
  2. ShoutBox Rafał
  3. ShoutBox nospor
  4. ShoutBox Rafał
  5. ShoutBox nospor
  6. ShoutBox Artur
  7. PHP South Coast conf... nospor

Categories

  1. wszystkie wszystkie komentarze all (1)