Télécharger
Noter:

Ajouté le 28/05/2019
Visionné 1644 fois
3.7/5

Récupération du mot de passe

Description

Un script "mot de passe oublié" codé avec PHP, simplifié mais qui fonctionne parfaitement que vous pouvez amélioré facilement avec votre propre code source, par exemple, la fonction du mot de passe peut être sécurisé avec password_hash et l'envoi du mail peut être amélioré en utilisant le charset UTF-8.

Ce code est un add-on du script espace membre

<?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>


CREATE TABLE `recup_mdp` (
`id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
`code` char(32) COLLATE utf8_unicode_ci NOT NULL,
`mail` varchar(50) COLLATE utf8_unicode_ci NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

Commentaires

keou le 14 Juin 2020 à 13:19

Bonjour
je voudrais intégrer le script mot-de-passe-oublié dans les scripts espace membre qui fonctionne parfaitement.
Mais je ne sais comment m'y prendre.
pouvez-vous m'aider? Merci

admin le 15 Juin 2020 à 15:20

Bonjour, il vous suffit de créer une nouvelle page "mot-de-passe-oublie.php" et dy coller le code pour que les membres puissent demander un nouveau mdp.

Coco le 24 Juin 2020 à 16:17

Bonjour, sommes nous obligés d'installer sendMail pour envoyer le mail de récupération, car sous wamp, j'ai une erreur.

Merci.

admin le 24 Juin 2020 à 16:54

Voir ce tutot pour la configuration de wamp pour envoyer des mails:

https://www.c2script.com/scripts/envoyer-un-mail-avec-wampserver-sans-sendmail-exe-s43.html

Vous avez quelle version WAMP ? et quelle version PHP utilisez-vous ?

coco le 24 Juin 2020 à 17:13

J'ai Wamp 3.2 et PHP 7.3.12.

J'ai réussi à configurer l'envoi du mail. Merci.

Je me confronte actuellement à un autre soucis, c'est le lien dans le mail qui n'est pas cliquable, et qui renvoi une erreur si je le copie/colle dans l'URL.

Merci.

admin le 24 Juin 2020 à 21:07

Si vous souhaitez qu'il soit cliquable, entourez le ($Lien) avec la base <a>

Quelle erreur avez vous ? peut mettre l'URL de votre site directement plutôt que $_SERVER['HTTP_HOST']

Coco le 25 Juin 2020 à 11:06

Merci beaucoup, pour votre aide.

Je vous remercie.

Ajouter un commentaire

Pseudo/Nom *
Email *
Message *
La balise [code]Votre code...[/code] peut être utilisée

Captcha * memo1memo2

Les champs marqués d'un * sont obligatoires.

Retour à la liste des scripts

Flag Counter