Bonjour, je remercie d'avance ceux qui prendrons le temps de lire mon problème.
Alors voilà. J'ai une table 'users' qui contient le login et le mdp de chaque utilisateurs. Dans une seconde table 'hotels' j'ai les informations de l'hotel. Et dans une troisième table 'clients' les informations des clients.
Voici ma vue edit:
<div class="row">
<h1>Editez votre profil</h1><p> </p>
<div class="span4">
<?php echo $this->Form->create('User'); ?>
<?php echo $this->Form->input('username',array('label'=>"Nom de votre hôtel")); ?>
<?php echo $this->Form->input('mail',array('label'=>"E-mail")); ?>
</div>
<div class="span4">
<b>Changer de mot de passe</b>
<?php echo $this->Form->input('pass1',array('label'=>"Mot de passe", 'type'=>'password')); ?>
<?php echo $this->Form->input('pass2',array('label'=>"Confirmez", 'type'=>'password')); ?>
<?php echo $this->Form->input('test',array('value'=>"mdp",'type'=>"hidden")); ?>
<?php echo $this->Form->end('Enregister'); ?>
</div>
<div class="span4">
<?php echo $this->Form->create('Hotel'); ?>
<?php echo $this->Form->input('location',array('label'=>"Votre adresse")); ?>
<?php echo $this->Form->input('codepostal',array('label'=>"Code postal")); ?>
<?php echo $this->Form->input('ville',array('label'=>"Ville")); ?>
<?php echo $this->Form->input('test',array('value'=>"adresse",'type'=>"hidden")); ?>
<?php echo $this->Form->input('user_id'); ?>
<?php echo $this->Form->end('Sauvegarder'); ?>
</div>
</div>
<?php echo $this->element('sql_dump'); ?>
Comme vous pouvez le voir, il y a deux formulaires, l'un destiné à la table users et l'autre à la table hotel. Ils contiennent un champs hidden test pour savoir quel formulaire est envoyé.
Voici ma fonction edit:
function edit(){
$user_id = $this->Auth->user('id');
if(!$user_id){
$this->redirect('/');
die();
}
$this->User->id = $user_id;
$passError = false;
if($this->request->is('put') || $this->request->is('post')){
$d = $this->request->data;
$d'Hotel']'user_id'] = $d'User']'id'] = $user_id;
//Si on change les données liées à l'adresse
if(isset($d'Hotel']'test']) && $d'Hotel']'test'] =="adresse" ){
if($this->Hotel->save($d'Hotel'])){
$this->Session->setFlash("Votre profil a bien été édité","notif");
}
}
// Si on change le mot de passe ou les infos users
if(isset($d'User']'test']) && $d'User']'test'] == "mdp"){
if(!empty($d'User']'pass1'])){
if($d'User']'pass1'] == $d'User']'pass2']){
$d'User']'password'] = $d'User']'pass1'];
}else{
$passError = true;
}
}
if($this->User->save($d'User'])){
$this->Session->setFlash("Votre profil a bien été édité","notif");
}else{
$this->Session->setFlash("Impossible de sauvegarder les données","notif",array('type'=>'error'));
}
if($passError) $this->User->validationErrors'pass2'] = array('Les mots de passe ne sont pas identiques');
}
}else{
$this->request->data = $this->User->read();
}
$this->request->data'User']'pass1'] = $this->request->data'User']'pass2'] = '';
}
}
Mon model hotel :
<?php
class Hotel extends AppModel{
public $belongsTo = array('User');
}
Ma table hotel contient un champs user_id.
Et sur ma page d’édition, j'ai bien mes deux formulaire mais mon champs user_id est un select vide. Ne devrait-il pas être automatiquement caché et avoir pour valeur l'id de l'utilisateur connecté ?
En plus de cela, si dans la fonction edit je rajoute $this->request->data = $this->Hotel->read(); il ne lit pas mes informations, les champs sont vide. Alors que les infos username et mail sont bien affichées.
Pour finir la sauvegarde se passe à peu près bien à ceci près que la liaison n'est apparement pas faite parce que si je rentre par exemple une ville et que je change il va sauvegardé une nouvelle ligne et non modifier celle existante.
J'ai essayé d'adapter les tutos et tout mais là je bloque et votre aide serait... d'une grande aide :)
Merci à vous les amis...