IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Script de récupération de mot de passe


Sujet :

PHP & Base de données

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    348
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2009
    Messages : 348
    Points : 54
    Points
    54
    Par défaut Script de récupération de mot de passe
    bonjour a tous

    après avoir cherche durant plusieurs heures je viens vers vous dans l espoir de solutionner mon problème
    je me suis servi de ce tuto pour ajouter a mon espace membre , la régénération du mot de passe perdu

    https://www.c2script.com/scripts/rec...passe-s35.html

    j ai donc fait tout ce qu il fallait

    je rentre l adresse mail prévue a cet effet lors de l ouverture du fichier mot de passe oublié
    il me dit que le code a bien été envoyé mais il n y a rien dans ma boite mail

    comment je pourrais solutionner cela
    voici le code

    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    <?php
        /*************************
        *  Page: mot-de-passe-oublie.php
        *  Page encodée en UTF-8
        **************************/
    //configuration pour la connexion SQL:
    $SQL['host']="localhost";//serveur
    $SQL['user']="root";//nom d'utilisateur
    $SQL['pass']="";//pass
    $SQL['base']="nom_de_la_base_de_donnees";//nom de la base de données
    ?><!DOCTYPE HTML>
    <html>
        <head>
            <title>Script espace membre</title>
        </head>
        <body>
            <h1>Récupération du mot de passe</h1>
            <a href="./">Retour à l'accueil</a>
     
            <?php
            if(isset($_GET['code'],$_GET['mail'])){
                //un lien est cliqué dans un mail, on recherche si le code et le mail correspondent à une ligne dans la table "recup_mdp"
                $Code=htmlentities($_GET['code'],ENT_QUOTES,"UTF-8");
                $Mail=htmlentities($_GET['mail'],ENT_QUOTES,"UTF-8");
                $mysqli=mysqli_connect($SQL['host'],$SQL['user'],$SQL['pass'],$SQL['base']);
                if(!$mysqli) {
                    echo "Erreur connexion BDD";
                    //Dans ce script, je pars du principe que les erreurs ne sont pas affichées sur le site, vous pouvez donc voir qu'elle erreur est survenue avec mysqli_connect_error(), pour cela décommentez la ligne suivante:
     
                    //echo "<br>Erreur retournée: ".mysqli_connect_error();
     
                } else {
                    $req=mysqli_query($mysqli,"SELECT * FROM recup_mdp WHERE code='$Code' AND mail='$Mail'");
                    if(mysqli_num_rows($req)==1){
                        //on génère un nouveau pass (de 5 caractères) et on lui envoi:
                        $NouveauPass=substr(str_shuffle("ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"),0,5);
                        //on modifie son mot de passe pour son compte
                        mysqli_query($mysqli,"UPDATE membres SET mdp='".md5($NouveauPass)."' WHERE mail='$Mail'");
                        //on ui envoi un mail avec son pass temporaire:
                        mail($Mail,"Votre nouveau mot de passe","Le nouveau mot de passe pour votre compte est: $NouveauPass (Il est vivement conseille de le modifier depuis votre espace membre)");
                        //on supprime la demande mot de passe qui est dans la table "recup_mdp":
                        mysqli_query($mysqli,"DELETE FROM recup_mdp WHERE code='$Code' AND mail='$Mail'");
                        echo "Votre nouveau pass temporaire vient d'être envoyé par mail.";
                    } else {
                        echo "Lien incorrect.";
                    }
                }
            } else {
                //si le formulaire est envoyé ("envoyé" signifie que le bouton submit est cliqué)
                if(isset($_POST['valider'])){
                    //vérifie si le champ mail est bien rempli:
                    if(empty($_POST['mail'])){
                        echo "Le champs mail n'est pas renseigné.";
                    } else {
                        //tous les champs sont précisés, on regarde si le membre est inscrit dans la bdd:
                        //d'abord il faut créer une connexion à la base de données dans laquelle on souhaite regarder:
                        $mysqli=mysqli_connect($SQL['host'],$SQL['user'],$SQL['pass'],$SQL['base']);
                        if(!$mysqli) {
                            echo "Erreur connexion BDD";
                            //Dans ce script, je pars du principe que les erreurs ne sont pas affichées sur le site, vous pouvez donc voir qu'elle erreur est survenue avec mysqli_error(), pour cela décommentez la ligne suivante:
     
                            //echo "<br>Erreur retournée: ".mysqli_error($mysqli);
     
                        } else {
                            //on défini nos variables:
                            $Mail=htmlentities($_POST['mail'],ENT_QUOTES,"UTF-8");//htmlentities avec ENT_QUOTES permet de sécuriser la requête pour éviter les injections SQL, UTF-8 pour dire de convertir en ce format
                            $req=mysqli_query($mysqli,"SELECT * FROM membres WHERE mail='$Mail'");
                            //on regarde si le membre est inscrit dans la bdd:
                            //même si le membre n'existe pas, on affiche qu'un mail à été envoyé, ceci permet d'empécher les robots de voir si un mail existe ou pas dans votre base de données et de vous le dérober
                            if(mysqli_num_rows($req)!=1){
                                //mail inconnu
                            } else {
                                //mail connu, on lance la procédure d'envoi du mail pour recevoir un nouveau mdp
                                $Code=md5(rand(1,99999999));
                                mysqli_query($mysqli,"INSERT INTO recup_mdp SET code='$Code', mail='$Mail'");
                                $Lien=$_SERVER['HTTP_HOST']."/mot-de-passe-oublie.php?code=$Code&mail=$Mail";
                                mail($Mail,"Recuperation du mot de passe","Pour recevoir un nouveau mot de passe cliquez sur le lien suivant: $Lien");
                            }
                            echo "<p>Si votre mail est inscrit, vous allez recevoir un mail contenant un lien à cliquer afin de recevoir un nouveau mot de passe.</p>";
                            $TraitementFini=true;//pour cacher le formulaire
                        }
                    }
                }
                if(!isset($TraitementFini)){//quand le membre sera connecté, on définira cette variable afin de cacher le formulaire
                    ?>
                    <br>
                    <p>Remplissez le formulaire ci-dessous pour recevoir un nouveau mot de passe:</p>
                    <form method="post" action="mot-de-passe-oublie.php">
                        <input type="text" name="mail" placeholder="Votre mail..." required><!-- required permet d'empêcher l'envoi du formulaire si le champ est vide -->
                        <input type="submit" name="valider" value="Recevoir un nouveau mot de passe">
                    </form>
                    <?php
                }
            }
            ?>
        </body>
    </html>

  2. #2
    Membre averti
    Profil pro
    Administrateur
    Inscrit en
    Mai 2008
    Messages
    237
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Administrateur
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2008
    Messages : 237
    Points : 433
    Points
    433
    Par défaut
    Votre scipt est bien long
    Vous pouvez tester des parties

    Votre message n'a pas d'entête.
    Il faut un expéditeur (email)

    Essayez de tester la fonction mail de manière isolée.
    Remplacez par des emails valides

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    <?php
         $to      = 'personne@example.com';
         $subject = 'le sujet';
         $message = 'Bonjour !';
         $headers = 'From: <a href="mailto:expediteur@example.com">expediteur@example.com</a>';
     
         mail($to, $subject, $message, $headers);
    ?>

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    348
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2009
    Messages : 348
    Points : 54
    Points
    54
    Par défaut
    bonsoir
    merci pour la réponse c est vraiment sympa

    ce morceau de code je le place en début de code ?

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    348
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2009
    Messages : 348
    Points : 54
    Points
    54
    Par défaut
    je reviens avec un nouveau code mais j ai une erreur

    j ai cette erreur
    Warning: Cannot modify header information - headers already sent by
    et je reçois bien le code par mail cette fois

    voici les deux fichiers

    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    <?php
     
     
    require_once('config.php'); /* Mes fonctions met tes info de connexion dans ce fichier */
    require_once('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 membres 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 membres SET code = ? WHERE mail = ?');
                        $recup_insert->execute(array($recup_code,$recup_mail));
                    } else {
                        $recup_insert = $bdd->prepare('INSERT INTO membres(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 membres 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 membres 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 membres 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 membres 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";
        }
    }
    ?>
    et le deuxième
    recuperation.view.php
    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
    17
    18
    19
    20
    21
    22
    <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 ""; } ?>

Discussions similaires

  1. Problème avec collate pour gérer la casse (mot de passe)
    Par bbr33 dans le forum Développement
    Réponses: 8
    Dernier message: 13/05/2015, 12h12
  2. [Mail] Problème avec mon script d'envoi de mail
    Par leroivert dans le forum Langage
    Réponses: 18
    Dernier message: 02/12/2005, 01h26
  3. [Configuration] Problème avec un script de login utilisant une session
    Par HNT dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 2
    Dernier message: 27/09/2005, 20h56
  4. Problème avec un script d'ouverture de pop-up
    Par HNT dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 19/08/2005, 17h37
  5. problème avec un script de generation de nom de login
    Par black_code dans le forum Langage
    Réponses: 2
    Dernier message: 04/08/2005, 14h51

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo