Witam, mam problem z klasą walidacyjną. Mianowicie klasa wyłapuje pola po kolei. To znaczy, jeżli pierwsze pole zostanie zwalidowane i nie będzie błędów, to metoda dopiero przechodzi do następnego.
Tak ją wywołuje:
if(isset($_POST[‘submit’])) {
$validator = new Validator();
$validator->validate($_POST, array(
‘username’ => array(
‘required’ => true,
‘min’ => 2,
‘max’ => 15
),
‘email’ => array(
‘required’ => true,
‘email’ => true
),
‘password’ => array(
‘required’ => true,
‘min’ => 5,
‘max’ => 20
),
‘repeat_password’ => array(
‘required’ => true,
‘matches’ => ‘password’
)
)
);}
a tu metoda validate():
function validate($method, $rules = array()) {
foreach($rules as $field => $values) {
foreach ($values as $rule => $rule_value) {$field = $field; // only name of an input
$_field = $method[$field]; // $_POST[‘username’]switch ($rule) {
case ‘required’:
if(empty($_field)) {
return $this->addError(“Pole $field musi zostać wypełnione.”);
}
break;
case ‘min’:
if(mb_strlen($_field) < $rule_value) {
return $this->addError(“Pole $field musi zawierać co najmniej {$rule_value} znaków.”);
}
break;
case ‘max’:
if(mb_strlen($_field) > $rule_value) {
return $this->addError(“Pole $field może zawierać maksymalnie {$rule_value} znaków.”);
}
break;
case ‘matches’:
if($_field !== $method[$rule_value]) {
return $this->addError(“Pole $field musi być równe polu $rule_value”);
}
break;
case ‘email’:
if(!filter_var($_field, FILTER_VALIDATE_EMAIL)) {
return $this->addError(“Pole $_field musi zawierać poprawny adres email”);
}
break;
}
}
}
}
Chciałbym np aby gdy ktoś wypełni tylko pole username, to wypisywało także błędy z innych pól formularza. Formularz dostępny tutaj --> http://goo.gl/7FxYHl