Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Bonjour,
Je débute avec le Zend Framework sur un projet en stage et je bloque sur un formulaire de création de compte utilisateur où je dois entrer dans la base de donnée le password.
Je voudrai le mettre en md5.
Je récupère les champs du formulaire et je les ajoute dans la BD MySQL comme ceci :
$newRow = $utilisateur->createRow($form->getValues()); $newRow->save();
Création de l'élément passwd du formulaire :
$password = new Zend_Form_Element_Password('passwd'); $password->addFilters(array('StringTrim')) ->addValidators(array( 'Alnum', array('StringLength', false, array(6, 20)) )) ->setRequired(true) ->setLabel('Password : '); // Je l'ajoute ensuite au formulaire
Le prolbème est que je ne sais pas quand appliquer la fonction md5() sur le passwd :s
Merci d'avance si vous pouvez m'aider :-)
Hors ligne
Perso jme suis fait un petit filtre qui se contente de crypter ce qu'on lui passe
Il n'existe pas(à ma connaissance) d'outil prédéfini pour crypter une chaine
Dernière modification par stf (11-06-2008 16:50:45)
Hors ligne
Pourquoi n'utilises-tu pas simplement la fonction md5 avant d'enregistrer le mot de passe dans la base de données.
http://www.manuelphp.com/php/function.md5.php
Si je ne me trompe pas, ça donne quelque chose comme :
$newRow = $utilisateur->createRow(md5($form->getValues())); $newRow->save();
Hors ligne
Slaughter :
Je comprend pas très bien ce que la fonction md5 va faire sur ce que rend la fonction "getValues()"
Tout les champs vont être cryptés ? moi je veux appliquer md5 que sur le champ passwd.
stf :
un filtre, c'est pas fait pour tester la valeur plutôt ?
c'est un peu fourbe de le faire comme ça :-p
Hors ligne
Les validateurs sont fait pour tester la nature des données (ex. validateurs alnum, host,...) alors qu'un filtre s'est fait pour transformer les données envoyées. (Ex. le filtre StringTrim va renvoyer la même valeur en utilisant la fonction trim).
***
Tu as raison par rapport à ce qu'a noté Slaugter
$newRow = $utilisateur->createRow(md5($form->getValues())); $newRow->save();
ça va appliquer la fonction md5 sur tout les champs.
Essaye plutôt comme ça
$newRow = $utilisateur->createRow(); $newRow->login = $form->getValue('login'); $newRow->password = md5($form->getValue('password')); $newRow->save();
ou en surchargeant la valeur de password (je n'ai pas tester)
$newRow = $utilisateur->createRow($form->getValues()); $newRow->password = md5($form->getValue('password')); $newRow->save();
Dernière modification par Roulio (12-06-2008 08:48:09)
Hors ligne
Ah ok ... merci beaucoup.
Je vais essayer comme ça :-)
PS : ça marche mais du coup maintenant je peut plus mettre de validateur sur la taille du mdp.
La taille est prise sur la taille du md5 (environ 32 caractères) :s
Dernière modification par Jocio (12-06-2008 09:25:32)
Hors ligne
Jocio a écrit:
Slaughter :
Je comprend pas très bien ce que la fonction md5 va faire sur ce que rend la fonction "getValues()"
Tout les champs vont être cryptés ? moi je veux appliquer md5 que sur le champ passwd.
stf :
un filtre, c'est pas fait pour tester la valeur plutôt ?
c'est un peu fourbe de le faire comme ça :-p
Heu.... oui, c'est pas faux, toutes mes excuses pour cette erreur. La correction de roulio est ce que j'aurai du dire.
Hors ligne
L'avantage d'avoir fait un filtre, c'est que le jour où je veux changer de cryptage, j'ai qu'un endroit a modifier (en fait c'est comme faire une fonction ^^ )
Apres l'utilité de le mettre dans un filtre, pour moi ca sert a traiter des données d'entrée pour en renvoyer en sortie, donc c'est exactement ca
Hors ligne
@ Jocio : Tu ne devrais pas rencontrer de difficulté à ce niveau car lorsque tu utilise md5 s'est uniquement une fois que tu as passé la validation et que tu enregistre tes données.
Tu devrais avoir :
// Envoie de POST if ($this->_request->isPost()) { // Préparation des filtres $filters = array ( '*' => 'StringTrim', ... // la suite des filtres ); // Préparation des validateurs $validators = array ( 'login' => array ( 'NotEmpty', 'presence' => 'required', 'messages' => "Informations sur le client : Le login n'est pas renseigné" ), 'password' => array ( // validateur qui vérifie la longueur ),... // la suite des validateurs ); $post = $this->_request->getPost(); Zend_Loader::loadClass('Zend_Filter_Input'); $input = new Zend_Filter_Input($filters,$validators,$post); if ($input->isValid()) { // Si on réussi la validation on continu // appliquer ce qu'on a vu avant : on enregistre les valeurs dans la DB } }
Attention le code n'est pas complet mais la logique est là.
On a bien comme process :
après l'envoie d'un formulaire
1) création des filtres
2) création des validateurs (ici tu utilise Zend_validate StringLength pour tester la longueur des chaînes)
cf : http://framework.zend.com/manual/en/zen … ing_length
3) application de tout les paramètres aux données envoyées
4) Si tout est ok : enregistrement dans la DB (ici tu utilise md5 pour password)
Bon courage
a++
Dernière modification par Roulio (12-06-2008 10:11:38)
Hors ligne
Finalement, j'ai utilisé ta technique Roulio :
// Récupération valeur du formulaire $newRow = $utilisateur->createRow($form->getValues()); // cryptage du mdp $newRow->passwd = md5($form->getValue('passwd')); // Sauvegarde dans la base de donnée $newRow->save();
Et j'ai donc pu remettre en place le validator de 20 caractères sur le mot de passe
merci beaucoup pour votre aide très précieuse :-)
Hors ligne