Bonjour,

J'ai besoin d'aide.

J'ai deux tables : profil et user.
Quand l'utilisateur s'inscrit, il fait une insertion de ses données dans la table "User".
Mais il peut aussi créer un profil une fois inscrit. il peut alors remplir un formulaire pour creer son profil.
les informations de son profil seront alors stocké dans la table "profil".

Mais le problème c'est lorqu'il souhaite modifier son profil : il re-rempli le formulaire, et au lieux de mettre à jour, il recréé une ligne dans la table profil. (Alors que je veux qui'il modifie la ligne de l'utilisateur).

Voici mon code dans "ProfilController.php"

function edit($id = null) {
$user_name = $this->Auth->user('username');
if($this->request->is('post') || $this->request->is('put') )
  {
    $user = $this->Profil->find('first',array('conditions' => array('username' => $user_name)));
    if(!empty($user))
      {
       // Ici, c'est quand l'utilisateur existe deja et que qu'il souhaite modifier des champs.
       $this->request->data = array('username' => $user_name);
       $this->Session->setFlash("Le CV a bien été modifié","notif");
     }else{
       $d = $this->request->data;
       $this->Profil->save($d,true,array('firstname','lastname'));
       $this->Profil->saveField('username',$user_name);
       $this->Session->setFlash("Le CV a été créé","notif");
     }
  }
elseif($id)
  {
    $this->Profil->id = $id; 
    $this->request->data = $this->Profil->read('firstname, lastname'); 
  }
}

Comment je pourrais faire? Sachant que les id sont différent, il y aura que le "username" qui sera identique entre la table "User" et "Profil".

Voici ce que j'aimerais faire en cakephp :

UPDATE profil SET age = 10 WHERE USERNAME_PROFIL = USERNAME_USER

Merci

1 réponse


Salut freeblitz Si tu pouvais ecrire tes parties code entre des balise de code pour une meilleur lisibilité sur le forum, il sera alors plus simple de te répondre.

Bon première chose je te conseil de créer un champ user_id dans ta table profil pour effectuer les liaisons entres les tables d’ailleurs je te conseil de faire cela a chaque liaison de table de ton application.

Je considéré maintenant que ta fonction edit est uniquement la fonction de l'update des données et non le premier enregistrement et aussi que ta fonction fait partie du controller Users

function edit($id = null, $profil=null,$typenseigns_id=0,$magasins=0,$test=1,$z=0){
        /**
        * selection du profile grace au composant auth et a l'id
        **/
        $user_id = $this->Auth->user('id');
        /**
        * test si user id non trouve
        **/
        if(!$user_id){
            /**
            * alors redirection page d'acceuil
            **/
            $this->redirect('/');
            die();
        }
        $this->User->id = $user_id;
        $d'users']= $this->User->find('first', array(
            'conditions' => array('User.id' => $user_id)));
        $this->set($d);
        $this->loadModel('Profil');
        $profil= $this->Profil->find('first', array(
            'conditions' => array('Profil.user_id' => $user_id)));
                $d'profils']= $profil;
        $this->set($d);
        /**
        * test si des données on était envoyé ici pas de post car seulemnt update
        **/
        if($this->request->is('put')){
            $this->User->id = $id;
            /**
            * stockage des info en d
            **/
            $d = $this->request->data;
            $d'User']'id']=$id;
            $d'Profil']'user_id']= $user_id;
                /**
                * test si donne valider (true) authorise modif de firstname lastname password et save
                **/
                    if($this->User->save($d,true,array())){

                    $this->Profil->save($d,true,array));
                    /**
                    * message confirmation
                    **/
                    $this->Session->setFlash("Le CV a bien été modifié","notif");
                    $this->redirect('/users/show');
                /**
                * si non message d'erreur impossible de sauvegarder
                **/
                }else{
                    $this->Session->setFlash("Le CV n'a pas été modifié","notif",array('type'=>'error'));
                }
                if($this->User->save($d,false)){
                    /**
                    * lecture et envoie des donné au form pour remplir automatiquement les champs
                    **/
                    $this->request->data = $this->User->read();
                    $this->set;
                }
            }elseif($id){
            $this->User->id = $id;
            $this->request->data = $this->User->read();
            $this->set;
        }
    }

voila déjà un truc qui marche a toi de modifié pour ton application maintenant