Mot de passe oublier

Ce topic a été résolu
cricriazer

cricriazer Le 1 juin 2016 à 22:36 (Édité le 25 janvier 2019 à 17:51)

bonjour j'ai utiliser le script php pour mot de passe oublier mais quand je recois le code par mail cela reste sur entre votre adresse mail sa ne demande pas le code de recuperation
merci de me repondre 
<?php
session_start();
$bdd = new PDO('mysql:host=localhost;dbname=extazym', 'extazym', '*********');
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,pseudo FROM membres WHERE mail = ?');
         $mailexist->execute(array($recup_mail));
         $mailexist_count = $mailexist->rowCount();
         if($mailexist_count == 1) {
            $pseudo = $mailexist->fetch();
            $pseudo = $pseudo['pseudo'];
            
            $_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 mail = ?');
            $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 mail = ?');
               $recup_insert->execute(array($recup_code,$recup_mail));
            } else {
               $recup_insert = $bdd->prepare('INSERT INTO recuperation(mail,code) VALUES (?, ?)');
               $recup_insert->execute(array($recup_mail,$recup_code));
            }
            $header="MIME-Version: 1.0\r\n";
         $header.='From:"PrimFX.com"<expediteur@example.com>'."\n";
         $header.='Content-Type:text/html; charset="utf-8"'."\n";
         $header.='Content-Transfer-Encoding: 8bit';
         $message = '
         <html>
         <head>
           <title>Récupération de mot de passe - PrimFX.com</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="http://primfx.com/">PrimFX.com</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 - PrimFX.com", $message, $header);
            header("Location:http://extazy.pw/recuperation.php?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 mail = ? 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 mail = ?');
         $up_req->execute(array($_SESSION['recup_mail']));
         header('Location:http://extazy.pw/recuperation.php?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 mail = ?');
      $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 = sha1($mdp);
               $ins_mdp = $bdd->prepare('UPDATE membres SET motdepasse = ? WHERE mail = ?');
               $ins_mdp->execute(array($mdp,$_SESSION['recup_mail']));
              $del_req = $bdd->prepare('DELETE FROM recuperation WHERE mail = ?');
              $del_req->execute(array($_SESSION['recup_mail']));
               header('Location:http://extazy.pw/connexion.php');
            } 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";
   }
}
?>
<html>
<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/>
<form method="post">
   <input type="text" placeholder="Code de vérification" name="verif_code"/><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/>
   <input type="password" placeholder="Confirmation du mot de passe" name="change_mdpc"/><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/>
   <input type="submit" value="Valider" name="recup_submit"/>
</form>
<?php } ?>
<?php if(isset($error)) { echo '<span style="color:red">'.$error.'</span>'; } else { echo ""; } ?>
</html>
BeKidding

BeKidding Le 2 juin 2016 à 16:14

Tu test en local ?
Rombutucraft

Rombutucraft Le 4 juin 2016 à 16:07

Pareil bizarre ?
joris1904

joris1904 Le 4 juin 2016 à 16:13

test avec sa  (ce code est fonctionnelle) 

recuperation.php
<?php
session_start();

require_once('php/config.php'); /* Mes fonctions met tes info de connexion dans ce fichier */
require_once('views/recuperation.view.php'); /* Mes cotez html du fichier */

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,pseudo FROM membres WHERE mail = ?');
            $mailexist->execute(array($recup_mail));
            $mailexist_count = $mailexist->rowCount();
            if($mailexist_count == 1) {
                $pseudo = $mailexist->fetch();
                $pseudo = $pseudo['pseudo'];
                $_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 mail = ?');
                $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 mail = ?');
                    $recup_insert->execute(array($recup_code,$recup_mail));
                } else {
                    $recup_insert = $bdd->prepare('INSERT INTO recuperation(mail,code) VALUES (?, ?)');
                    $recup_insert->execute(array($recup_mail,$recup_code));
                }
                $header="MIME-Version: 1.0\r\n";
                $header.='From:"Jorisvideo.fr"<support@jorisvideo.fr>'."\n";
                $header.='Content-Type:text/html; charset="utf-8"'."\n";
                $header.='Content-Transfer-Encoding: 8bit';
                $message = '
         <html>
         <head>
           <title>Récupération de mot de passe - JorisVideo.fr</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="http://jorisvideo.fr/">JorisVideo.fr</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 - JorisVideo.fr", $message, $header);
                header("Location: recuperation.php?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 mail = ? 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 mail = ?');
            $up_req->execute(array($_SESSION['recup_mail']));
            header('Location: recuperation.php?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 mail = ?');
        $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 = sha1($mdp);
                    $ins_mdp = $bdd->prepare('UPDATE membres SET motdepasse = ? WHERE mail = ?');
                    $ins_mdp->execute(array($mdp,$_SESSION['recup_mail']));
                    $del_req = $bdd->prepare('DELETE FROM recuperation WHERE mail = ?');
                    $del_req->execute(array($_SESSION['recup_mail']));
                    header('Location:http://forum.jorisvideo.fr/connexion.php');
                } 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";
    }
}
?>

recuperation.view.php

<h4 class="title-element">Récupération de mot de passe</h4>
<?php if(isset($_GET['section']) && $_GET['section'] == 'code') { ; ?>
    Un code de vérification vous a été envoyé par mail: <?= $_SESSION['recup_mail'] ?>
    <br/>
    <form method="post">
        <input type="text" placeholder="Code de vérification" name="verif_code"/><br/>
        <input type="submit" value="Valider" name="verif_submit"/>
    </form>
<?php } elseif(isset($_GET['section']) && $_GET['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/>
        <input type="password" placeholder="Confirmation du mot de passe" name="change_mdpc"/><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/>
        <input type="submit" value="Valider" name="recup_submit"/>
    </form>
<?php } ?>
<?php if(isset($error)) { echo '<span style="color:red">'.$error.'</span>'; } else { echo ""; } ?>

Voila normalement sa devrait fonctionné demande si sa ne fonctionne pas 😀
Rombutucraft

Rombutucraft Le 4 juin 2016 à 16:31

OK pour moi ;D
joris1904

joris1904 Le 4 juin 2016 à 17:21

flexi2202

flexi2202 Le 18 février 2021 à 15:34

merci pour la reponse

mais cela ne fonctionne pas

flexi2202

flexi2202 Le 18 février 2021 à 20:23 (Édité le 18 février 2021 à 23:12)

je vien de tout recommencer mais cette erreur Warning: Cannot modify header information - headers already sent by

et je recois bien le code par mail a present je ne suis pas sur de ce que je doisa voir dans ma table juste mail et code

Vous devez être connecté pour poster une réponse. Se connecter ou Créer un compte