Salut la compagnie, Je bug complet depuis 2 jours sur un des tutos CakePHP: [url=http://www.grafikart.fr/tutoriels/cakephp/dev-site-jour4-194]Tutoriel CakePHP : Développer un site avec CakePHP, Jour 4[/url] Vers la minute 33, on doit faire ceci pour l'édition des utilisateurs: [code] function admin_edit($id = null){ if($this->request->is('post') || $this->request->is('put')){ $d = $this->request->data['User']; if($d['password'] != $d['passwordconfirm']){ $this->Session->setFlash("Les mots de passe ne correspondent pas","notif",array('type'=>'error')); }else{ $this->User->save($this->request->data); } }elseif($id){ $this->User->id = $id; $this->request->data = $this->User->read(); $this->request->data['User']['password'] = null; } $d = array(); $d['roles'] = array( 'admin' => 'admin', 'user' => 'membre' ); $this->set($d); } [/code] C'est au niveau du "elseif" qu'il semble y avoir un soucis. Soit on indique la dernière ligne, pour indique que l'on ne doit pas prendre le password: [code]$this->request->data['User']['password'] = null;[/code] Soit on précise, au niveau du read, les éléments à prendre en compte en faisant ceci: [code]$this->request->data = $this->User->read('username','role');[/code] ** Le soucis, c'est que lorsque je tente de faire avec la seconde solution (préconisée par Grafikart puisque par la suite, on devra aussi indiquer que l'ID est à prendre également), et que j'édite un user existant, mes champs sont vides alors qu'il devrait garder en mémoire l'username et le role, comme indiqué... Je n'ai aucun message d'erreur, mais ça ne fonctionne pas. Si quelqu'un peut m'aider à trouver quel est le soucis, ça serait super. Je termine mon portfolio avec ces tutos, et c'est donc très important pour moi de réussir tout cela. D'avance merci pour l'aide que vous pourrez m'apporter. Bien à vous!

2 réponses


Je vois 2 problème.

Dans le elseif, pas besoin de mettre le password à null
et puis dans le else de la sauvegarde, si le password est null on le supprime avec unset()

Voici mon bout de code

if($this->request->is('post') || $this->request->is('put')){
            $d = $this->request->data'User'];
            if($d'password'] != $d'passwordconfirm']){
                $this->Session->setFlash("Les mots de passes ne correspondent pas", 'notif', array('type' => 'error'));
                $this->redirect($this->referer());
            }
            else{
                if(empty($d'passowrd'])){
                    unset($d'password']);
                }
                if($this->User->save($d)){
                    $this->Session->setFlash("L'utilisateur à bien été enregistré", 'notif', array('type' => 'success'));
                }
            }
        }
        elseif($id){
            $this->User->id = $id;
            $this->request->data = $this->User->read('username, role, id');
        }

J'espère que ca peut t'aider

caema
Auteur

Bonjour, et désolée pour ma réponse tardive...
Je vais tester le code que vous me proposez, histoire de voir si cela fonctionne.

Merci pour votre aide ;-)