Bonjour à tous,
J'ai un gros problème que je n'arrive pas à résoudre malgré des heures de recherches et je ne sais pas comment remanier la fonction validate crée dans le tutoriel pour permettre de faire plusieurs règles en effet j'ai fait un formulaire d'inscription sans au problème, il me reste que deux étapes et j'ai terminé (transmettre les données des boutons radios et ce problème là).
Je veux que le champ Identifiant (login) ne soit pas vide donc j'utilise notEmpty qui est une des règles crée dans le tutoriel, de plus j'ai moi même fait une règle qui permet de vérifier si ce qui est entré dans le champ login n'existe pas déjà dans la base de données, si c'est le cas je retourne le message d'erreur.
Aucun problème si je ne mets qu'une règle mais si j'en mets deux j'ai toujours la même erreur qui s'affiche:
Undefined index 'rule'(3 fois) puisqu'il y a 3 règles dans la fonction validate et de temps en temps j'ai pareil pour 'message'.
Voici la fonction validates remanier:
[code] function validates($data){
$errors = array();
foreach($this->validate as $k=>$v){
if(!isset($data->$k)){
$errors[$k] = $v['message'];
}else{
if($v['rule'] == 'notEmpty'){
if(empty($data->$k)){
$errors[$k] = $v['message'];
}
}elseif($v['rule'] == 'isUnique'){
$d = $this->findFirst(array(
'conditions' => array('login' => $data->login)
));
if(!empty($d)){
$errors[$k] = $v['message'];
}
}elseif(!preg_match('/^'.$v['rule'].'$/',$data->$k)){
$errors[$k] = $v['message'];
}
}
}
$this->errors = $errors;
if(isset($this->Form)){
$this->Form->errors = $errors ;
}
if(empty($errors)){
return true;
}
return false;
}[/code]
Voici les règles de validation du formulaire:
[code]
<?php
class User extends Model{
var $validate = array(
'name' => array('rule' => 'notEmpty','message' => 'Vous devez préciser un Nom !'),
'firstname' => array('rule' => 'notEmpty','message' => 'Vous devez préciser un Prénom !'),
'birthday' => array('rule' => '([0-9\/-]+)','message' => 'Vous devez préciser une date de naissance au bon format !'),
'email' => array('rule' => '(^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$)','message' => "Votre adresse e-mail n'est pas valide !"),
'postal' => array('rule' => '([0-9]+)','message' => 'Code postal incorrect!'),
'adress' => array ('rule' => '([a-zA-Z0-9 -]+)','message' => 'Format de l\'adresse incorrecte !'),
'login' => array(
'regle1' => array(
'rule' => 'notEmpty',
'message' => 'Vous devez spécifier un identifiant !'
),
'regle2' => array(
'rule' => 'isUnique',
'message' => 'Identifiant déjà existant !'
)
),
'password' => array('rule' => 'notEmpty','message' => 'Vous devez spécifier un mot de passe !'),
'town' => array ('rule' => '([a-zA-Z -]+)','message' => 'Format de la ville incorrecte !')
);
}
?>[/code]
Je pense que c'est parce qu'il lit directement regle1 et regle2 donc pour lui il y a pas de 'rule' mais si je remplace regle 1 et regle 2 par rule j'ai droit à un array to string conversion et undefined index message pour les regex, et aucune des deux règles ne fonctionne sur le login. J'ai bidouillé maintes et maintes fois la class User mais tout ce que j'ai réussi à faire c'est en faire fonctionner l'une ou l'autre parfois avec des erreurs parfois non. J'ai trouvé une syntaxe qui ne retourne aucune erreur (php/mysql) mais qui ne prend en compte que la dernière règle.
Merci d'avance à ceux qui m'aideront à éclaircir ce sujet.