Il arrivera souvent qu'un utilisateur oublie son mot de passe. Pour y remédiez nous allons modifier notre base de données avec un nouveau paramètre nous permettant de savoir si l'utilisateur à oui ou non fait une demande de nouveau mot de passe.


Ensuite, nous allons créer un nouveau formulaire ou l'utilisateur saisi son mail et une fois celui-ci validé et confirmé il recevra un nouveau mot de passe par mail avec une mise à jour de son ancien vers son nouveau mot de passe dans notre base de données.


Page motdepasse.php


CREATE TABLE utilisateur (
    id int(255) unsigned NOT NULL AUTO_INCREMENT,
    nom varchar(50) DEFAULT NULL,
    prenom varchar(50) DEFAULT NULL,
    mail varchar(191) DEFAULT NULL,
    mdp text,
    date_creation_compte datetime DEFAULT NULL,
    n_mdp int(1) DEFAULT 0; // Permet de savoir si on a fait une demande de mot de passe
    PRIMARY KEY (id),
    UNIQUE KEY mail (mail)
)


<?php
    session_start();
    include('bd/connexionDB.php');

    if (isset($_SESSION['id'])){
        header('Location: index.php');
        exit;
    }

    if(!empty($_POST)){
        extract($_POST);
        $valid = true;

        if (isset($_POST['oublie'])){
            $mail = htmlentities(strtolower(trim($mail))); // On récupère le mail afin d envoyer le mail pour la récupèration du mot de passe 

            // Si le mail est vide alors on ne traite pas
            if(empty($mail)){
                $valid = false;
                $er_mail = "Il faut mettre un mail";
            }

            if($valid){
                $verification_mail = $DB->query("SELECT nom, prenom, mail, n_mdp 
                    FROM utilisateur WHERE mail = ?",
                    array($mail));
                $verification_mail = $verification_mail->fetch();

                if(isset($verification_mail['mail'])){
                    if($verification_mail['n_mdp'] == 0){
                        // On génère un mot de passe à l'aide de la fonction RAND de PHP
                        $new_pass = rand();

                        // Le mieux serait de générer un nombre aléatoire entre 7 et 10 caractères (Lettres et chiffres)
                        $new_pass_crypt = crypt($new_pass, "$6$rounds=5000$macleapersonnaliseretagardersecret$");
                        // $new_pass_crypt = crypt($new_pass, "VOTRE CLÉ UNIQUE DE CRYPTAGE DU MOT DE PASSE");

                        $objet = 'Nouveau mot de passe';
                        $to = $verification_mail['mail'];

                        //===== Création du header du mail.
                        $header = "From: NOM_DE_LA_PERSONNE <no-reply@test.com> \n";
                        $header .= "Reply-To: ".$to."\n";
                        $header .= "MIME-version: 1.0\n";
                        $header .= "Content-type: text/html; charset=utf-8\n";
                        $header .= "Content-Transfer-Encoding: 8bit";

                        //===== Contenu de votre message
                        $contenu =  "<html>".
                            "<body>".
                            "<p style='text-align: center; font-size: 18px'><b>Bonjour Mr, Mme".$verification_mail['nom']."</b>,</p><br/>".
                            "<p style='text-align: justify'><i><b>Nouveau mot de passe : </b></i>".$new_pass."</p><br/>".
                            "</body>".
                            "</html>";
                        //===== Envoi du mail
                        mail($to, $objet, $contenu, $header);
                        $DB->insert("UPDATE utilisateur SET mdp = ?, n_mdp = 1 WHERE mail = ?", 
                            array($new_pass_crypt, $verification_mail['mail']));
                    }   
                }       
                header('Location: connexion.php');
                exit;
            }
        }
    }
?>


<!DOCTYPE html>
<html lang="fr">
    <head>
        <meta charset="utf-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <title>Mot de passe oublié</title>
    </head>
    <body>
        <div>Mot de passe oublié</div>
        <form method="post">
            <?php
                if (isset($er_mail)){
            ?>
                <div><?= $er_mail ?></div>
            <?php   
                }
            ?>
            <input type="email" placeholder="Adresse mail" name="mail" value="<?php if(isset($mail)){ echo $mail; }?>" required>
            <button type="submit" name="oublie">Envoyer</button>
        </form>
    </body>
</html>


Vu que l'on a rajouté un paramètre qui permet de savoir si oui ou non on a fait une demande de nouveau mot de passe lorsque l'utilisateur se connectera sur la page connexion.php il faudra remettre à 0 sa demande de nouveau mot de passe.


Page connexion.php


...

$req = $DB->query("SELECT * FROM utilisateur WHERE mail = ? AND mdp = ?",
                array($mail, crypt($mdp, "$6$rounds=5000$macleapersonnaliseretagardersecret$")));
                                // array($mail, crypt($mdp, "VOTRE CLÉ UNIQUE DE CRYPTAGE DU MOT DE PASSE")));
$req = $req->fetch();

// Si on a pas de résultat alors c'est qu'il n'y a pas d'utilisateur correspondant au couple mail / mot de passe
if (!isset($req['id'])){
        $valid = false;
        $er_mail = "Le mail ou le mot de passe est incorrecte";

}elseif($req['n_mdp'] == 1){ // On remet à zéro la demande de nouveau mot de passe s'il y a bien un couple mail / mot de passe
    $DB->insert("UPDATE utilisateur SET n_mdp = 0 WHERE id = ?", 
        array($req['id']));
}
...
+99999
Modifié le 04 mars 2019
Publicité Sitedudev
Cette pub permet au site de vivre ...
Vidéo associée
Publicité Sitedudev
Cette pub permet au site de vivre ...
Télécharger le code source
Publicité
Cette pub permet au site de vivre ...
Voir d'autres articles
2 110 vues
Demande d'amis en PHP (3/3)
Pour cette troisième vidéo nous allons revoir notre système afin de conserver le statut de la relation lorsqu'on bloque et débloque un utilisateur.
Créer son site de rencontres
5 746 vues
Structure de base d'une page HTML
Cours sur la Structure de Base d'une Page HTMLLa structure de base d'une page HTML est essentielle pour créer des sites Web. Comprendre cette structure vous permettra de démarrer efficacement dans...
HTML
7 322 vues
Barre de recherche : Formulaire
Avant d'entamer le développement de notre barre de recherche nous allons reprendre le fichier index.php des articles précédents.Dans notre fichier index.php nous allons y...
Créer son site
4 188 vues
Mise en évidence du texte avec <em>, <strong>, <u> et <s>
Mise en évidence du texte avec <em>, <strong>, <u> et <s>Les balises <em>, <strong>, <u> et <s> sont utilisées pour mettre en évidence le texte dans...
HTML
2 233 vues
Afficher les messages dans l'ordre
Dans cette vidéo on va personnaliser (un peu) l'interface des conversations avec du CSS.Nous allons également remettre les messages dans l'ordre et lors de la réception du message par le...
Créer son site de rencontres
1 726 vues
Sélecteurs d'ID : appliquer des styles à des éléments individuels
Sélecteurs d'ID : Appliquer des styles à des éléments individuelsLes sélecteurs d'ID sont des outils en CSS qui permettent d'appliquer des styles à des éléments HTML spécifiques....
CSS
1 378 vues
Lien externe de feuilles de style CSS avec l'élément <link>
Lien externe de feuilles de style CSS avec l'élément <link>L'élément <link> est utilisé dans une page HTML pour lier une feuille de style CSS externe. Cela permet de séparer le...
HTML
7 563 vues
Comment développe-t-on un site ?
Je suppose que si vous lisez ceci c'est que vous n'avez peut-être jamais développé auparavant et que vous souhaitez apprendre à développer votre premier site web.Si je vous parle...
Créer son site
Publicité
Cette pub permet au site de vivre ...