Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 03-01-2012 17:06:09

manuzed78
Membre
Date d'inscription: 13-12-2009
Messages: 86
Site web

[RESOLU] Un UPDATE mais pas de tous les champs.

Bonjour à tous,
une petite question de débutant :

Dans mon modèle, pour mettre à jour j'ai ce genre de code :

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 :

Code:

 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 :

Code:

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

 

#2 03-01-2012 17:22:26

r.monceau
Membre
Date d'inscription: 02-11-2009
Messages: 59

Re: [RESOLU] Un UPDATE mais pas de tous les champs.

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

 

#3 03-01-2012 17:28:04

manuzed78
Membre
Date d'inscription: 13-12-2009
Messages: 86
Site web

Re: [RESOLU] Un UPDATE mais pas de tous les champs.

J'ai essayé ca dans mon modèle :

Code:

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

 

#4 03-01-2012 17:44:04

r.monceau
Membre
Date d'inscription: 02-11-2009
Messages: 59

Re: [RESOLU] Un UPDATE mais pas de tous les champs.

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;
}

Dernière modification par r.monceau (03-01-2012 17:44:17)

Hors ligne

 

#5 03-01-2012 17:52:37

manuzed78
Membre
Date d'inscription: 13-12-2009
Messages: 86
Site web

Re: [RESOLU] Un UPDATE mais pas de tous les champs.

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 ? big_smile

Dernière modification par manuzed78 (03-01-2012 18:22:32)

Hors ligne

 

#6 03-01-2012 18:26:43

alien7
Membre
Date d'inscription: 29-04-2007
Messages: 447

Re: [RESOLU] Un UPDATE mais pas de tous les champs.

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


ZF 2.3 - Twitter Bootstrap 3.2
Local: Ubuntu  -> Apache2 2.4 - MariaDB 10 - PHP 5.6

Hors ligne

 

#7 03-01-2012 18:31:15

manuzed78
Membre
Date d'inscription: 13-12-2009
Messages: 86
Site web

Re: [RESOLU] Un UPDATE mais pas de tous les champs.

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 ... big_smile
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

 

#8 03-01-2012 18:38:46

manuzed78
Membre
Date d'inscription: 13-12-2009
Messages: 86
Site web

Re: [RESOLU] Un UPDATE mais pas de tous les champs.

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 :

Code:

$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

 

#9 03-01-2012 20:49:55

alien7
Membre
Date d'inscription: 29-04-2007
Messages: 447

Re: [RESOLU] Un UPDATE mais pas de tous les champs.

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

Code:

$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)


ZF 2.3 - Twitter Bootstrap 3.2
Local: Ubuntu  -> Apache2 2.4 - MariaDB 10 - PHP 5.6

Hors ligne

 

#10 04-01-2012 08:30:39

manuzed78
Membre
Date d'inscription: 13-12-2009
Messages: 86
Site web

Re: [RESOLU] Un UPDATE mais pas de tous les champs.

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

 

#11 04-01-2012 09:19:05

manuzed78
Membre
Date d'inscription: 13-12-2009
Messages: 86
Site web

Re: [RESOLU] Un UPDATE mais pas de tous les champs.

Youpi,
merci à tous pour votre aide.

La solution était de faire mon sha1 ailleurs...    :

Code:

        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

 

#12 04-01-2012 13:11:25

alien7
Membre
Date d'inscription: 29-04-2007
Messages: 447

Re: [RESOLU] Un UPDATE mais pas de tous les champs.

Je te propose ceci :

Code:

        $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 smile

Dernière modification par alien7 (04-01-2012 13:13:24)


ZF 2.3 - Twitter Bootstrap 3.2
Local: Ubuntu  -> Apache2 2.4 - MariaDB 10 - PHP 5.6

Hors ligne

 

#13 04-01-2012 21:23:22

manuzed78
Membre
Date d'inscription: 13-12-2009
Messages: 86
Site web

Re: [RESOLU] Un UPDATE mais pas de tous les champs.

alien7 a écrit:

Bon tu as résolu le problème smile

Encore merci pour l'aide et l'implication ;D

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages