Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
Bonjour à tous,
une petite question de débutant :
Dans mon modèle, pour mettre à jour j'ai ce genre de code :
public function modifierPers( $id, $mtle, $nom, $prenom, $password, $id_profil, $id_service ) { $data = array( 'mtle' => $mtle, 'nom' => $nom, 'prenom' => $prenom, 'password' => $password, 'id_profil' => $id_profil, 'id_service' => $id_service, ); $this->update( $data, 'id = ' . (int)$id ); }
et dans mon controller j'ai ca :
public function modifierAction() { if ( $this->getRequest()->isGet() ) { // On récupère l'id_profil pour l'afficher par defaut dans la liste déroulante $id_profil = $this->getRequest()->getParam( 'id_profil' ); $id_service = $this->getRequest()->getParam( 'id_service' ); } $form = new Application_Form_Pers(); $form->profil->setValue( $id_profil ); // affiche un selected="selected" $form->service->setValue( $id_service ); // affiche un selected="selected" $form->envoyer->setLabel( 'Sauvegarder' ); $this->view->form = $form; if ( $this->getRequest()->isPost() ) { $formData = $this->getRequest()->getPost(); if ( $form->isValid( $formData ) ) { $id = $form->getValue( 'id' ); $mtle = $form->getValue( 'mtle' ); $nom = $form->getValue( 'nom' ); $prenom = $form->getValue( 'prenom' ); $password = $form->getValue( 'password' ); $id_profil = $form->getValue( 'profil' ); $id_service = $form->getValue( 'service' ); $pers = new Application_Model_DbTable_Pers(); $pers->modifierPers( $id, $mtle, $nom, $prenom, sha1( $password ), $id_profil, $id_service ); $this->_helper->redirector( 'index' ); } else { $form->populate( $formData ); } } else { $id = $this->_getParam( 'id', 0 ); if ( $id > 0 ) { $pers = new Application_Model_DbTable_Pers(); $form->populate( $pers->obtenirPers( $id ) ); } } }
La mise à jour fonctionne niquel MAIS je suis obligé de rentrer le mot de passe à chaque fois meme si je veux changer uniquement le service ...
Que puis je faire pour mettre à jour uniquement ce que je change ?
Comme seul le mot de passe pose un probleme je pensais faire un truc du genre :
if(!empty($password)){ // si on rentre un mdp, c'est que l'on veut le modifier $pers->modifierPers( $id, $mtle, $nom, $prenom, sha1( $password ), $id_profil, $id_service ); else { // quel code utiliser pour faire un update en omettant le password ? }
Qu'en pensez vous ?
Dernière modification par manuzed78 (04-01-2012 13:59:51)
Hors ligne
Salut,
Il faut que tu enlèves la ligne password de ton tableau $data avant de l'envoyer à la méthode d'update.
En gros, toutes les lignes de ton tableau $data seront mises à jour. Il suffit de les enlever du tableau pour ne pas les prendre en compte dans la mise à jour.
La méthode la plus simple pour toi est peut-être de n'ajouter le mot de passe à ton tableau que s'il n'est pas vide ou null.
Dernière modification par r.monceau (03-01-2012 17:23:48)
Hors ligne
J'ai essayé ca dans mon modèle :
if(!empty($password)){ $data = array( 'mtle' => $mtle, 'nom' => $nom, 'prenom' => $prenom, 'password' => $password, 'id_profil' => $id_profil, 'id_service' => $id_service, ); } else{ $data = array( 'mtle' => $mtle, 'nom' => $nom, 'prenom' => $prenom, 'id_profil' => $id_profil, 'id_service' => $id_service, ); }
Mais y'a rien à faire il doit toujours répondre oui à la condition if(!empty($password)) car il met toujours le password dans mon update ( j'ai vérifié sur mes logs SQL) :
password` = 'da39a3ee5e6b4b0d3255bfef95601890afd80709' en sha1 ...
et ce meme si dans mon formulaire je laisse le champs mot de passe vide :-(
Dernière modification par manuzed78 (03-01-2012 17:45:45)
Hors ligne
Ptêtre mieux comme ça nan ?
$data = array( 'mtle' => $mtle, 'nom' => $nom, 'prenom' => $prenom, 'id_profil' => $id_profil, 'id_service' => $id_service ); if(!empty($password)){ $data['password'] = $password; }
Dernière modification par r.monceau (03-01-2012 17:44:17)
Hors ligne
r.monceau a écrit:
Ptêtre mieux comme ça nan ?
Code:
$data = array( 'mtle' => $mtle, 'nom' => $nom, 'prenom' => $prenom, 'id_profil' => $id_profil, 'id_service' => $id_service ); if(!empty($password)){ $data['password'] = $password; }
Malheureusement non, ca ne marche pas non plus : il modifie mon mdp ...
Le probleme reste dans if(!empty($password)) je pense !
je ne comprends pas pourquoi il le prend en variable remplie alors que je ne mets rien dans mon formulaire ...
Dans ma requete il met systématiquement un password` = 'da39a3ee5e6b4b0d3255bfef95601890afd80709' ce qui doit etre le sha1 de rien du tout ?
Dernière modification par manuzed78 (03-01-2012 18:22:32)
Hors ligne
Salut,
Le mieux est de debuggé là, fait un var_dump() de $password (var_dump($password) ) pour savoir si il est vraiment null ou pas ta variable
Hors ligne
alien7 a écrit:
Salut,
Le mieux est de debuggé là, fait un var_dump() de $password (var_dump($password) ) pour savoir si il est vraiment null ou pas ta variable
Houla, mais n'oublie pas que tu t'adresses à un newbi en mvc la ...
Je le place ou mon var_dump($password); ? pour que je puisse en voir le résultat ?
pas dans mon modèle, peut etre dans mon controller, dans ma vue (mais j'ai une redirection avec $this->_helper->redirector( 'index' ); )
Dernière modification par manuzed78 (03-01-2012 18:31:37)
Hors ligne
Hello,
dans mon controller j'ai enlevé le sha1 pour faire des tests plus pratiques ...
et cela fonctionne NIQUEL !
mais des que je remets mon sha1 dans mon controller :
$fonct->modifierFonct( $id, $mtle, $nom, $prenom, sha1( $password ), $id_profil, $id_service );
ca merde ...
je me demande s'il ne fait pas un sha1 du mdp déja enregistré en sha1 ???
Hors ligne
Effectivement si tu mets ça
$fonct->modifierFonct( $id, $mtle, $nom, $prenom, sha1( $password ), $id_profil, $id_service );
ta variable $password ne sera jamais null car
$p = sha1(null); echo $p;
$p a une valeur donc ne sera jamais vide, ton problème vient de là
Dernière modification par alien7 (03-01-2012 20:52:18)
Hors ligne
alien7 a écrit:
Effectivement si tu mets ça
Code:
$fonct->modifierFonct( $id, $mtle, $nom, $prenom, sha1( $password ), $id_profil, $id_service );ta variable $password ne sera jamais null car
Oui je comprends bien le probleme maintenant ...
Y a t il une autre solution pour que mes mots de passe soient cryptés ET que je ne fasse pas la m a j du mot de passe selon vous ?
Hors ligne
Youpi,
merci à tous pour votre aide.
La solution était de faire mon sha1 ailleurs... :
if(!empty($password)){ // Si le mot de passe n'est pas vide on l'ajoute pour la modification $data['password'] = sha1($password);} // on crypte ici sinon sha1(NULL) n'est pas null et on rentre jamais dans cette condition
et bien sur d'enlever mon sha1 dans mon controller ....
A+
Dernière modification par manuzed78 (04-01-2012 10:53:43)
Hors ligne
Je te propose ceci :
$data = array( 'mtle' => $mtle, 'nom' => $nom, 'prenom' => $prenom, 'password' => $password, 'id_profil' => $id_profil, 'id_service' => $id_service, ); if(!empty($password)){ $data['password'] = sha1($password); } $pers->modifierPers($id, $data ); // dans ton modèle public function modifierPers( $id, $data ) { $this->update( $data, 'id = ' . (int)$id ); }
Ca debrait marcher normalement.
Edit : bon tu as résolu le problème
Dernière modification par alien7 (04-01-2012 13:13:24)
Hors ligne
Pages: 1