Witam. Napisałem ostatnio klasę do walidacji formularza.
I prosiłbym o opinię oraz porady np: co trzeba/można zmienić.
<?
class FormValidator {
private $error = array();
public function validate
($name, $error = '', $filter = array()) { $this->error = $error;
foreach($filter as $key => $value) {
$this->filter($name, $key, $value);
}
}
private function filter($name, $filter, $par = FALSE) {
switch($filter) {
case 'req' :
if(!isset($name) || empty($name) || $par == TRUE) { $this->set_error('Pole jest wymagane i nie może pozostać puste.');
}
break;
case 'email' :
if(!filter_var($name, FILTER_VALIDATE_EMAIL) || $par == TRUE) {
$this->set_error('Podany adres e-mail jest niepoprawny');
}
break;
case 'url' :
if(!filter_var($name, FILTER_VALIDATE_URL) || $par == TRUE) {
$this->set_error('Podany adres URL jest niepoprawny');
}
break;
case 'num' :
if(!preg_match('/^[0-9 ]+$/', $name) || $par == TRUE) { $this->set_error('Ple musi zawierać wyłącznie znaki numeryczne');
}
break;
case 'alfa' :
if(!preg_match('/^[a-zA-Z ]+$/', $name) || $par == TRUE) { $this->set_error('Ple musi zawierać wyłącznie litery');
}
break;
case 'alnum' :
if(!preg_match('/^[a-zA-Z0-9 ]+$/', $name) || $par == TRUE) { $this->set_error('Ple musi zawierać wyłącznie znaki alfanumeryczne');
}
break;
case 'max' :
$this->set_error('Pole musi mieć maxymalną długość '.$par.'.');
}
break;
case 'min' :
$this->set_error('Pole musi mieć minimalną długość '.$par.'.');
}
break;
case 'length' :
$this->set_error('Pole musi mieć mieć długość '.$par.'.');
}
break;
/* ORAZ INNE FILTRY */
}
}
private function set_error($str) {
$this->errors[] = (empty($this->error) ?
$str : '<b>'.$this->error.'</b> : '.$str); }
public function get_error($str) {
return $this->errors[$str];
}
public function get_errors() {
foreach($this->errors as $err) {
}
}
public function is_valid() {
return (count($this->errors) > 0
) ?
FALSE : TRUE; }
}
?>
Przykład użycia:
include_once('class.form_validator.php');
$val = new FormValidator;
$val->validate($_POST['email'], 'Email', array('req' => TRUE, 'min' => 10, 'email' => TRUE));
if($val->is_valid()) {
}else {
$val->get_errors();
}
Ten post edytował moto0095 26.12.2010, 23:13:51