Dicton du 22 Novembre:
Pour Sainte-Cécile, chaque haricot en fait mille.

Télécharger
Noter:

Ajouté le 28/05/2019
Visionné 523 fois
2.8/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

Code source (PHP)

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

?><!DOCTYPE HTML>
<html>
<head>
<title>C2script.com - Script espace membre</title>
</head>
<body>
<h1>Récupération du mot de passe</h1>
<a href="./">Retour à l'accueil</a>
<br>
<?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_error(), pour cela décommentez la ligne suivante:

//echo "<br>Erreur retournée: ".mysqli_error($mysqli);

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


La table MySQL pour recevoir un nouveau mot de passe:

Code source (SQL)

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

Pas encore de commentaire ajouté, soyez le premier!

Ajouter un commentaire

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


ATTENTION! Ce formulaire est exclusivement réservé aux commentaires
Pour toutes demandes d'aide, veuillez ajouter votre demande sur le forum svp

Captcha * sept × 2 =

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

Retour à la liste des scripts

Flag Counter