Je reformule :D
J'aimerais que mon formulaire fonctionne d'abord sans allez dans l'ajax ( ce que tu as dit :)) car apres pour l'ajax avec l'ensemble des exemples que tu m'as donnée je pense réussir.
Avant d'allez dans l'ajax, j'essaye de débuger mon formulaire.
En gros, il y a 3 formulaires dans une pages et un seul visible à la fois (système de tab via js).
Les trois forumaires appel une action via :
<?php echo $this->Form->create('User', array('id'=>'Users-login',
'url' => array('controller' => 'users', 'action' => 'login'))); ?>
Au dessus de chaque formulaire j'ai un
<?php echo $this->Session->flash('login'); ?>
('login' ou 'signup' ou 'password')
Ainsi dans mon controller j'envoie mon message (par exemple):
$this->Session->setFlash('Corrigé vos erreurs',"aides/notif",array('taille'=>'small','type'=>'error'),'signup');
Si je met le $this->Session->flash dans le layout par default il n'apparaitra pas ou je le désire.
Au niveau des notifications il n'y a pas de probleme.
Quand je suis à la racine du site (controller => user / action => login ):
Formulaire : login :
Validation OK
Message d'erreur OK
Formulaire : signup / password :
Validation OK
Par contre si je me trompe dans un champ et que je valide je suis redirigé vers /users/signup ou /users/password mais sans message d'erreur et je dois donc re cliquer sur submit pour voir apparaitre le message.
Maintenant que je suis soit dans signup ou password :
Le formulaire concerné fonctionne bien (validation OK et erreur OK)
Le formulaire login ce comporte bien :
validation OK
erreur OK (redirection vers / avec message d'erreur) => comportement souhaité sur l'ensemble de mes formulaires
Le dernier (signup ou password selon ou je suis) validation ok et erreur no ok.
Voici mon UsersController allégé
<?php
class UsersController extends AppController
{
public function signup(){
$this->layout = 'login';
$this->render('/Users/login');
if($this->request->is('post') || $this->request->is('put')){
$d = $this->request->data;
$d'User']'id'] = null;
if (!empty($d'User']'password'])) {
$d'User']'password'] = Security::hash($d'User']'password'],null,true);
}
if($this->User->save($d,true,array('username','password','mail'))){
$link = array('controller'=>'users','action'=>'activate',$this->User->id.'-'.md5($d'User']'password']));
App::uses('CakeEmail','Network/Email');
$mail = new CakeEmail();
// blablabla pour le mail
$this->Session->setFlash("Votre Compte a bien été crée, vous allez recevoir un mail pour valider votre compte ","aides/notif",array('taille'=>'small','type'=>'success'),'login');
$this->redirect('/');
}
else
{
$this->Session->setFlash('Corrigé vos erreurs',"aides/notif",array('taille'=>'small','type'=>'error'),'signup');
}
}
}
public function login(){
$this->layout = 'login';
$this->set('title_for_layout', "Connexion");
if (AuthComponent::user('id')){
$this->redirect('/membre/pages');
}
else{
if($this->request->is('post')){
if ($this->Auth->login()) {
$this->User->id = $this->Auth->user('id');
$this->User->saveField('lastlogin',date('Y-m-d H:i:s'));
$this->Session->setFlash("Vous êtes maintenant connecté","aides/notif2",array('type'=>'success'));
$this->redirect('/membre/pages/index');
}else{
$this->Session->setFlash('Identifiants incorrects',"aides/notif",array('type'=>'error','taille'=>'small'),'login');
}
}
}
public function password(){
$this->layout = 'login';
$this->render('/Users/login');
if (!empty($this->request->params'named']'token'])) {
$token = $this->request->params'named']'token'];
$token = explode('-',$token);
$user = $this->User->find('first',array(
'conditions' => array(
'id' => $token[0],
'MD5(User.password)' => $token[1],
'active' => 1)
)
);
if ($user) {
$this->User->id = $user'User']'id'];
$password = substr(md5(uniqid(rand(),true)),0,8);
$this->User->saveField('password',Security::hash($password,null,true));
$this->Session->setFlash("Votre mot de passe a été réinitialiser : Voici votre nouveau mot de pass : $password ",'aides/notif',array('taille'=>'small','type'=>'warning'),'login');
$this->redirect(array('controller'=>'users','action'=>'login'));
}else {
$this->Session->setFlash("Le lien n'est pas valide",'aides/notif',array('taille'=>'small','type'=>'error'),'password');
}
}
if ($this->request->is('post') || $this->request->is('put')) {
$v = current($this->request->data);
$user = $this->User->find('first',array(
'conditions' => array(
'mail'=>$v'mail'],
'active' => 1)));
if (empty($user)) {
$this->Session->setFlash('Aucun utilisateur ne correspond a cet email','aides/notif',array('taille'=>'small','type'=>'error'),'password');
}else {
App::uses('CakeEmail','Network/Email');
$link = array('controller'=>'users','action'=>'password','token' => $user'User']'id'].'-'.md5($user'User']'password']));
$mail = new CakeEmail();
$mail->from('adrien@gmail.com')
->to($user'User']'mail'])
->subject('Test :: Mot de passe oublié')
->emailFormat('html')
->template('mdp')
->viewVars(array('username'=>$user'User']'username'],'link'=>$link))
->send();
$this->Session->setFlash('Un email viens de vous être envoyé','aides/notif',array('taille'=>'small','type'=>'success'),'login');
debug($link);
$this->redirect('/');
}
}
}
public function validation() {
$this->autoRender = false;
if($this->request->is('ajax')) {
$ajax_data = array($this->request->data'champ'] => $this->request->data'valeur']);
$champ = $this->request->data'champ'];
$d'user'] = $ajax_data;
$this->User->create($ajax_data);
$errors = $this->User->invalidFields();
if (array_key_exists($champ,$errors)){
echo ($errors$champ][0]);
}else{
echo ("1");
}
}
}
}
?>
et ma vue login.ctp
<?php $action = $this->request->params'action'];?>
<div class="grid_12">
<div class="box_top">
<h2 class="icon key">Login</h2>
<ul class="sorting">
<li><a href="#login" <?php echo $action=='login'?'class="active"':'' ;?>>Login</a></li>
<li><a href="#signup" <?php echo $action=='signup'?'class="active"':'' ;?>>S'enregistrer</a></li>
<li><a href="#forgot" <?php echo $action=='password'?'class="active"':'' ;?>>Mot de pass oublié</a></li>
</ul>
</div>
<div class="box_content padding">
<div class="tabs">
<div id="login">
<?php echo $this->Session->flash('login'); ?>
<?php echo $this->Form->create('User', array('id'=>'Users-login',
'url' => array('controller' => 'users', 'action' => 'login'))); ?>
<?php echo $this->Form->input('username',array(
'label'=>array('class'=>'left','text'=>'Login'),
'class'=> 'tip-stay right',
'title' => 'Entrer votre login',
'div' => 'field noline nopadding',)) ?>
<?php echo $this->Form->input('password',array(
'label'=>array('class'=>'left','text'=>'Password'),
'class'=> 'tip-stay right',
'title' => 'Entrer votre mot de passe',
'div' => 'field',)) ?>
<div class="field noline nopadding">
<?php echo $this->Form->button("Login",array('class' => 'right','div' => 'right','type' => 'submit'));?>
</div>
<?php echo $this->Form->end(); ?>
</div>
<div id="signup">
<?php echo $this->Session->flash('signup'); ?>
<?php echo $this->Form->create('User', array('id'=>'Users-signup',
'url' => array('controller' => 'users', 'action' => 'signup'))); ?>
<?php echo $this->Form->input('username',array('id'=>'username',
'label'=>array('class'=>'left','text'=>'Login'),
'class'=> 'validation tip-stay right',
'title' => 'Choisir un login',
'div' => 'field noline nopadding',)) ?>
<?php echo $this->Form->input('mail',array('id'=>'mail',
'label'=>array('class'=>'left','text'=>'Mail'),
'class'=> 'validation tip-stay right',
'title' => 'Entrer votre email',
'div' => 'field noline nopadding',)) ?>
<?php echo $this->Form->input('password',array('id'=>'password',
'label'=>array('class'=>'left','text'=>'Password'),
'class'=> 'validation tip-stay right',
'title' => 'choisissez votre mot de passe',
'div' => 'field',)) ?>
<?php echo $this->Form->button("S'enregister",array('div' => 'field noline right nopadding','type' => 'submit'));?>
<?php echo $this->Form->end(); ?>
</div>
<div id="forgot">
<?php echo $this->Session->flash('password'); ?>
<?php echo $this->Form->create('User', array('id'=>'Users-password',
'url' => array('controller' => 'users', 'action' => 'password'))); ?>
<?php echo $this->Form->input('mail',array('id'=>'mail',
'label'=>array('class'=>'left','text'=>'Mail'),
'class'=> 'validation tip-stay right',
'title' => 'Entrer votre email',
'div' => 'field',)) ?>
<?php echo $this->Form->button("Mot de passe oublié",array('div' => 'field noline right nopadding','type' => 'submit'));?>
<?php echo $this->Form->end(); ?>
</div>
</div>
</div>
En tout cas merci de prendre le temps de me lire, sinon pour le fait que le tableau est vide et qu'il n'y a pas de message, tu fais une boucle sur le champ et en fonction tu genere un message personnalisé. non ?
Moi je n'ai pas besoin du message, je renvoi un 1 si c'est ok et j'ai une alternance entre une croix rouge et un petit v vert en fonction du 1.