Bonsoir :)
Alors voilà j'ai mon site qui est en train de se monter avec CakePHP mais j'aimerai y rajouter une validation des champs jme rend sur le doc je fait tout ce qu'il (enfin presque vu que ca marche pas ^^ ) et je trouve pas le probleme il dit que mon form et valide alors que je post "a" dans tout les champs :
M'Voyez !
//Model user.php
<?php
class User extends AppModel{
var $name = 'User';
var $validate = array(
'email' => array( 'rule' => array('minLength', 3) ),
'pass' => array( 'rule' => array('minLength', 3) ),
'nom' => array( 'rule' => array('minLength', 3) ),
'prenom' => array( 'rule' => array('minLength', 3) ),
'telephone' => array( 'rule' => array('minLength', 3) ),
'dep' => array( 'rule' => array('minLength', 3) ),
);
}
?>
//Controller users_controller.php
<?php
function ajouter(){
if(isset($this->data)){
if ($this->User->validates()) {
debug($this->data);
}
}
}
?>
Et ma vue :
//ajouter.ctp
<h1 class="title">S'inscrire</h1>
<?php
echo $html->script('focusfield');
echo $form->create('User',array('enctype'=>'multipart/form-data','url'=>array('action'=>'ajouter')));
echo $form->input("email", array("class"=>"newannonceinput autoEmpty","value"=>"Votre Email...","label"=>"Email :"));
echo '<div class="clear"></div><br />';
echo $form->input("pass", array("class"=>"newannonceinput autoEmpty","value"=>"Votre Mot de Passe...","label"=>"Mot de Passe :"));
echo '<div class="clear"></div><br /><hr style="margin:0 30px;"><br />';
echo $form->input("nom", array("class"=>"newannonceinput autoEmpty","value"=>"Votre Nom...","label"=>"Nom :"));
echo '<div class="clear"></div><br />';
echo $form->input("prenom", array("class"=>"newannonceinput autoEmpty","value"=>"Votre Prénom...","label"=>"Prénom :"));
echo '<div class="clear"></div><br />';
echo $form->input("telephone", array("class"=>"newannonceinput autoEmpty","value"=>"Votre Numéro de Téléphone...","label"=>"Téléphone :"));
echo '<div class="clear"></div><br />';
echo $form->input("dep", array("class"=>"newannonceinput autoEmpty","value"=>"Département (ex:75000) ...","label"=>"Département :"));
echo '<div class="clear"></div><br /><div id="submitnewannonce" >';
echo $form->end("S'inscrire");
echo "</div>";
?>
et ca me donne bien le debug :
Voila le code que j'utilise (moins la partie ajout à la base).
User_controller :
function register()
{
if(!empty($this->data))
{
$this->User->set( $this->data );
debug($this->User->data);
if( $this->User->validates() )
{
//CODE
$this->User->save($this->data);
}else
{
$this->validateErrors($this->User);
}
}
}
User model contient :
var $validate = array(
'pass' => array(
'rule' => array('minLength', 8),
'required' => true,
'allowEmpty' => false,
'message' => 'Votre password dois comporter au min 8 caractère.'
),
'email' => array(
'rule' => array('email', true),
'required' => true,
'allowEmpty' => false,
'message' => 'Veillez entrez un email correct !'
)
);
Ps: petit bug dans ajout de cote c'est "if(!empty($this->data))" Pas "if(!emptyempty($this->data)) "
Je te conseillerais de passer en revue règle par règle en commentant une partie du code. Tes règles sont peut être en partie ou en totalité toujours vraie. J'ai eu le problème inverse avec une règle qui était tjrs fausse.
Si je ne dit pas de connerie les règle de validation ne sont interpréter que a partir du moment ou tu fait appel a la méthode save() hors la avec un debug tu n'envoie rien dans la BDD donc tu ne fait pas appel au model.
Son controller est bien nommer les controllers et les dossier de vues tu les met au pluriel et les models au singulier.
Tu fais
if ($this->User->validates()) {
Mais avant tu n'envois pas au model les données
$this->User->set($this->data);
donc jdoit les envoyer avant de valider ?
comme ceci ?
//users_controller.php
function ajouter(){
if(isset($this->data)){
$this->User->set($this->data);
if ($this->User->validates()) {
debug($this->data);
}
}}
Marche pas :S
users_controlelr.php
function ajouter(){
if(isset($this->data)){
$this->User->set($this->data);
if ($this->User->validates($this->data)) {
$this->User->save($this->data);
}
}}
Non plus :S
Test comme ca
function ajouter(){
if (!empty($this->data)){
$this->User->set($this->data);
if ($this->User->validates($this->data)){
$this->Session->setFlash('OK');
$this->User->save($this->data);
}
else {
$this->Session->setFlash('Pas ok');
$this->validateErrors($this->User);
}
}
Edit: Le empty en rouge ce rajoute tout seul il a rien a faire la :s
Ça t'upload les données dans ta bdd sans tenir compte de la validation ou ca te met un message d'erreur?
1. users_controlelr.php
2.
3. function ajouter(){
4. if(isset($this->data)){
5. $this->User->set($this->data);
debug($this->User>data);
6. if ($this->User->validates($this->data)) {
7. $this->User->save($this->data);
8. }
9. }}
En debug du User->data tu à quoi ? les données sont bien passer ? les noms de variables correspondent bien au validate ?