TUTO PHP - MOT DE PASSE OUBLIÉ - FORMULAIRE

takeos

takeos Le 12 octobre 2018 à 09:52 (Édité le 25 janvier 2019 à 17:54)

Bonjour a tous !

J'ai suivie le tuto Mot de passe oublié mais, j'ai un soucis.
quand je tape mon email tout ce passe bien au niveau de l'envoie, donc je reçois bien email avec un code mais le formulaire rest bloqué a saisir mon email j'aimerai savoir si une personne a deja le problème et la régler svp ou @Primfx pourait tu m'expliqué doue vien ce problème s'il te plais.
Ps : J'utilise "https://fr.000webhost.com/" pour l'hébergement de mon site 

Voici le code de la page recuperation :
if(isset($_GET['section'])) {
$section = htmlspecialchars($_GET['section']);
} else {
$section = "";
}
if(isset($_POST['recup_submit'],$_POST['recup_mail'])) {
   if(!empty($_POST['recup_mail'])) {
      $recup_mail = htmlspecialchars($_POST['recup_mail']);
      if(filter_var($recup_mail,FILTER_VALIDATE_EMAIL)) {
         $mailexist = $bdd->prepare('SELECT id,login FROM membres WHERE email = ?');
         $mailexist->execute(array($recup_mail));
         $mailexist_count = $mailexist->rowCount();
         if($mailexist_count == 1) {
            $pseudo = $mailexist->fetch();
            $pseudo = $pseudo['login'];
            
            $_SESSION['recup_mail'] = $recup_mail;
            $recup_code = "";
            for($i=0; $i < 8; $i++) { 
               $recup_code .= mt_rand(0,9);
            }
            $mail_recup_exist = $bdd->prepare('SELECT id FROM recuperation WHERE email = ?');
            $mail_recup_exist->execute(array($recup_mail));
            $mail_recup_exist = $mail_recup_exist->rowCount();
            if($mail_recup_exist == 1) {
               $recup_insert = $bdd->prepare('UPDATE recuperation SET code = ? WHERE email = ?');
               $recup_insert->execute(array($recup_code,$recup_mail));
            } else {
               $recup_insert = $bdd->prepare('INSERT INTO recuperation(email,code,confirme) VALUES (?, ?, "0")');
               $recup_insert->execute(array($recup_mail,$recup_code));
            }
            $header="MIME-Version: 1.0\r\n";
         $header.='From:"Panzer@panpan.com"'."\n";
         $header.='Content-Type:text/html; charset="utf-8"'."\n";
         $header.='Content-Transfer-Encoding: 8bit';
         $message = '
         
         
          Récupération de mot de passe - Galaxys!
          <html>
         <head>
           <title>Récupération de mot de passe - PANZER!!</title>
           <meta charset="utf-8" />
         </head>
         <body>
           <font color="#303030";>
             <div align="center">
               <table width="600px">
                 <tr>
                   <td>
                     
                     <div align="center">Bonjour <b>'.$pseudo.'</b>,</div>
                     Voici votre code de récupération: <b>'.$recup_code.'</b>
                     A bientôt sur <a href="#">PANZER!!</a> !
                     
                   </td>
                 </tr>
                 <tr>
                   <td align="center">
                     <font size="2">
                       Ceci est un email automatique, merci de ne pas y répondre.
                     </font>
                   </td>
                 </tr>
               </table>
             </div>
           </font>
         </body>
         </html>
         ';
         mail($recup_mail, "Récupération de mot de passe - Serveur 1.12 - Galaxys", $message, $header);
            header('Location:../recuperation?section=code');
         } else {
            $error = "Cette adresse mail n'est pas enregistrée";
         }
      } else {
         $error = "Adresse mail invalide";
      }
   } else {
      $error = "Veuillez entrer votre adresse mail";
   }
}
if(isset($_POST['verif_submit'],$_POST['verif_code'])) {
   if(!empty($_POST['verif_code'])) {
      $verif_code = htmlspecialchars($_POST['verif_code']);
      $verif_req = $bdd->prepare('SELECT id FROM recuperation WHERE email = ? AND code = ?');
      $verif_req->execute(array($_SESSION['recup_mail'],$verif_code));
      $verif_req = $verif_req->rowCount();
      if($verif_req == 1) {
         $up_req = $bdd->prepare('UPDATE recuperation SET confirme = 1 WHERE email = ?');
         $up_req->execute(array($_SESSION['recup_mail']));
         header('Location:../recuperation?section=changemdp');
      } else {
         $error = "Code invalide";
      }
   } else {
      $error = "Veuillez entrer votre code de confirmation";
   }
}
if(isset($_POST['change_submit'])) {
   if(isset($_POST['change_mdp'],$_POST['change_mdpc'])) {
      $verif_confirme = $bdd->prepare('SELECT confirme FROM recuperation WHERE email = ?');
      $verif_confirme = $bdd->prepare('SELECT confirme FROM recuperation WHERE email = ?');
      $verif_confirme->execute(array($_SESSION['recup_mail']));
      $verif_confirme = $verif_confirme->fetch();
      $verif_confirme = $verif_confirme['confirme'];
      if($verif_confirme == 1) {
         $mdp = htmlspecialchars($_POST['change_mdp']);
         $mdpc = htmlspecialchars($_POST['change_mdpc']);
         if(!empty($mdp) AND !empty($mdpc)) {
            if($mdp == $mdpc) {
               $mdp = hash('sha256',$mdp);
               $ins_mdp = $bdd->prepare('UPDATE membres SET password = ? WHERE email = ?');
               $ins_mdp->execute(array($mdp,$_SESSION['recup_mail']));
              $del_req = $bdd->prepare('DELETE FROM recuperation WHERE email = ?');
              $del_req->execute(array($_SESSION['recup_mail']));
               header('Location:../login');
            } else {
               $error = "Vos mots de passes ne correspondent pas";
            }
         } else {
            $error = "Veuillez remplir tous les champs";
         }
      } else {
         $error = "Veuillez valider votre mail grâce au code de vérification qui vous a été envoyé par mail";
      }
   } else {
      $error = "Veuillez remplir tous les champs";
   }
}
?>


Dans cette même page voici le form :

<!doctype html>
<html lang="fr">
<head>
    
<meta charset="UTF-8">
    
<title>Récupération de votre mot de passe</title>
<link href="../css/formulaire.css" rel="stylesheet" type="text/css" />
</head>
<body>
<h4 class="title-element">Récupération de mot de passe</h4>
<?php if($section == 'code') { ?>
Un code de vérification vous a été envoyé par mail: <?= $_SESSION['recup_mail'] ?>
<br/><br/>
<form method="post">
   <input type="text" placeholder="Code de vérification" name="verif_code"/><br/><br/>
   <input type="submit" value="Valider" name="verif_submit"/>
</form>
<?php } elseif($section == "changemdp") { ?>
Nouveau mot de passe pour <?= $_SESSION['recup_mail'] ?>
<form method="post">
   <input type="password" placeholder="Nouveau mot de passe" name="change_mdp"/><br/><br/>
   <input type="password" placeholder="Confirmation du mot de passe" name="change_mdpc"/><br/><br/>
   <input type="submit" value="Valider" name="change_submit"/>
</form>
<?php } else { ?>
<form method="post">
   <input type="email" placeholder="Votre adresse mail" name="recup_mail"/><br/><br/>
   <input type="submit" value="Valider" name="recup_submit"/>
</form>
<?php } ?>
<?php if(isset($error)) { echo '<span style="color:red">'.$error.'</span>'; } else { echo ""; } ?>
</body>
</html>

Merci a l'avance de vos réponse.
Balatharas

Balatharas Le 14 octobre 2018 à 15:44

Salut,
tu devrais remplacer:
mail($recup_mail, "Récupération de mot de passe - Serveur 1.12 - Galaxys", $message, $header);
   header('Location:../recuperation?section=code');
} else {
    $error = "Cette adresse mail n'est pas enregistrée";
}
par
if(mail($recup_mail, "Récupération de mot de passe - Serveur 1.12 - Galaxys", $message, $header)) {
   header('Location:../recuperation?section=code');
} else {
   $error = "Cette adresse mail n'est pas enregistrée";
}
:)
takeos

takeos Le 14 octobre 2018 à 17:05

Bonjour,
je ne voit pas a quoi cela pourrait servir, je reçois correctement le mail.
le seul problème, je vous le montre :
Voici ce que je voit quand je clic sur récupérer mon mot de passe (clique ici)
L'url :
https://galaxy-s.000webhostapp.com/recuperation
et quand je confirme sa actualise la page et l'url change et devien :
https://galaxy-s.000webhostapp.com/recuperation?section=code
sauf que le formulaire, lui ne change pas
Balatharas

Balatharas Le 14 octobre 2018 à 18:39

Quand tu as des erreurs comme ça il faut vérifier tes variables par exemple
var_dump($section);
ca te donne quoi quand l'url est https://galaxy-s.000webhostapp.com/recuperation?section=code ?
takeos

takeos Le 14 octobre 2018 à 20:54

Et bien sa me donne toujours ce formulaire :
 

Comme si la page s'actualisait mais sans rien faire 
SkinDePewDiePie_

SkinDePewDiePie_ Le 4 novembre 2018 à 15:01

@takeos Je sais pas ce bug car... la variable est bien dans l'url mais remplace ton if(isset($_GET['section'])) par if(!empty($_GET['section'])) et supprime ton else { $section = ""; } car le else ne sert a rien...
Vous devez être connecté pour poster une réponse. Se connecter ou Créer un compte