Bonjour,
Je suis en ce moment en train de programmer un site web en utilisant le moteur de rendu Twig et le design Bootstrap de Twitter.
Alors je vais essayé d'être rapide et précis, je gère mes membres avec deux classes : une classe membre destinée à représenter le membre et une deuxième classe membresManager qui gère les membres au niveau SQL (save, update etc...) . D'ailleurs voilà, dans cette fameuse classe (MembresManager) j'ai une fonction "update" visant comme son nom l'indique à "updater" le membre... La voici :
Cette fonction est alimenté par un array qui lui est donné par un getAll() de la part de ma classe membre :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 public function update($array) { $req=$this->db->prepare('UPDATE membres SET session=:session, passe=:passe, email=:mail WHERE id=:id'); $req->bindValue('session', $array['Session']); $req->bindValue('passe', $array['Passe']); $req->bindValue('mail', $array['Email']); $req->bindValue('id', $array['Id']); $req->execute(); return true; }
Voilà la partie explication. Ce système fonctionnait très bien. Par exemple je l'utilisais pour la modification dont voici un exemple :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 public function getAll() { return array( 'Id'=>$this->Id, 'Pseudo' => $this->Pseudo, 'Passe'=> $this->Passe, 'Email' => $this->Email, 'Session' => $this->Session ); }]
Mais tout à basculé quand j'ai commencé à m'attaquer à la dernière partie de mon site : la récupération de mot de passe (oui je sais je fais les choses à l'envers).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 $pass=md5($pass); $membre->setPasse($pass); $membresM->update($membre->getAll());
Pour la récupération de mot de passe, je génère un code aléatoire qui sera enregistré dans une colonne session de la table membres et qui correspondra au membre en question. Je récupère l'email et je lui envois un mail avec le code :
La fonction random est celle qui génère le code, la voici :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 if($verif==false) { echo $twig->render('lost_pass.twig.html', array('error'=>'badMail')); } elseif($verif==true) { $membre= new membre($membresM->getMembreByEmail($mail)); //on récupère le membre grâce à son email. $membre->setsession($manager->random(20)); //on màj sa session en mettant un nouveau code grâce à la fonction random que je donnerais juste après ci-dessous var_dump($membre->getAll()); //ça... C'est rien c'était pour moi quand j'ai cherché d'où venait le problème $membresM->update($membre->getAll()); //PUIS on update enfin... $contenu= $twig->render('lost_pass_email.txt.twig', array('membre'=>$membre->getAll(), 'code'=>$membre->getSession())); //on récupère ce qu'il faut et on enregistre le rendu de Twig dans une variable pour... mail($membre->getEmail(), '[OST] - Récupération du mot de passe', $contenu); //l'envoyer par mail... echo $twig->render('lost_pass.twig.html', array('success'=>'emailSend'));//là on affiche juste une vue pour dire "youpi ça marche" }
Donc le mail reçu il nous envoit sur une page qui se nomme "reset_pass.php" et sur laquelle on vérifie les données et puis on donne l'occasion au membre d'update son pass... Et une fois fais, on vérifie et on update. Voici le code (je zappe les vérifs qui ne servent pas dans mon prob) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 public function random($car) { $string = ""; $chaine = "abcdefghijklmnpqrstuvwxy"; srand((double)microtime()*1000000); for($i=0; $i<$car; $i++) { $string .= $chaine[rand()%strlen($chaine)]; } return $string; }
Alors l'envoit de mail se passe bien, je reçois le mail. Je test pour la première fois mon code :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 $pass=md5($pass); //crypt $membre->setpasse($pass); //on màj le membre $membre->setsession($manager->random(35));//on redonne une autre clé cette fois-ci plus longue (l'autre était une clé de récupération) $membresM->update($membre->getAll()); //HAHA on update echo $twig->render('reset_pass.twig.html', array('success'=>'passUpdate'));//no comment c'est mon template pour dire "youhou t'a changé ton mdp"
- je m'envois un email grâce au script : OK
- je vérifie dans la base de donnée si session à été changé : OK
- je me rend sur la page reset_pass.php?code=(le code généré) : OK j'ai accès au formulaire...
- j'update et je reçois la confirmation : OK
- je regarde dans la BDD si j'ai bien la session qui a changé et le reste : BAD
Rien à changé, l'UPDATE à zappé. Alors j'ai cherché d'abord partout avant de trouver que c'était l'UPDATE (var_dump de partout, vérif et tout...) mais tout était correct.. Alors je me suis renvoyé des mails encore et encore, je recevais à chaque fois un nouveau code mais dans la base de donnée plus rien ne change... Absolument plus rien. Alors j'ai essayé de changé mon profil : idem ça ne marche plus non plus. Alors je ne comprend pas pourquoi avant ça fonctionnait super bien (enfin bien quoi) et là plus rien. Nada. Niette enfin vous voyez le topo...
J'ai essayé de la réécrire sous toutes ces formes... J'ai enlevé un point virgules (pour voir si elle allait me répondre) et bah oui j'ai eu une erreur. Mais sinon aucunes erreurs mais pas de modification non plus...
Si quelqu'un à une idée de ce que je pourrais faire à présent? D'où vient l'erreur?
Si vous avez des questions concernant mon code je vous en prie, j'y répondrais. Merci d'avance pour vos réponses.
Partager