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
4 591 vues
Afficher la liste des articles
Mise en pagePour commencer nous allons créer la page maître de notre blog. C'est cette page qui contiendra tous les articles qui constituerons notre blog.Tout d'abord nous allons créer...
Créer son site
323 vues
Opérateurs arithmétiques (+, -, *, /, %)
Les opérateurs arithmétiques sont utilisés en PHP pour effectuer des opérations mathématiques sur des variables et des valeurs. Voici les opérateurs arithmétiques de base en PHP :1. Addition...
PHP
2 135 vues
Demande d'amis en PHP (2/3)
Dans cette deuxième vidéos nous allons développer notre système de relation d’amitié afin de faire apparaître les bons boutons en fonction de l'état de la relation entre 2 membres.
Créer son site de rencontres
743 vues
Sélecteurs de classe : appliquer des styles à des groupes d'éléments spécifiques
Sélecteurs de Classe : Appliquer des styles à des groupes d'éléments spécifiquesLes sélecteurs de classe sont des outils puissants en CSS qui permettent d'appliquer des styles à des groupes...
CSS
4 298 vues
Ajout d'images avec <img> et attributs src, alt et width
Ajout d'images avec <img> et attributs src, alt et widthLa balise <img> est utilisée pour afficher des images dans une page HTML. Elle nécessite l'utilisation de certains attributs pour...
HTML
735 vues
Utilisation des clauses WHERE, ORDER BY, GROUP BY et LIMIT pour filtrer et trier les résultats
1. Utilisation de la Clause WHERE pour Filtrer les Résultats :La clause WHERE est utilisée pour filtrer les résultats en fonction de certaines conditions.SELECT colonne1, colonne2, ... FROM...
SQL
500 vues
Comprendre le rôle de JavaScript dans le développement web
Le rôle de JavaScript dans le développement webJavaScript est un langage de programmation qui joue un rôle crucial dans le développement web moderne. Il est largement utilisé pour rendre les...
JS
40 755 vues
Inscription en PHP
Pour débuter notre site nous allons créer un formulaire d'inscription afin d'enregistrer de nouveaux utilisateurs dans une base de données (BDD).Pour cela, il faut créer un formulaire...
Créer son site
Publicité
Cette pub permet au site de vivre ...