Script php récupération mot de passe oublié

Fermé
CharlesINMONTREAL Messages postés 2 Date d'inscription vendredi 16 septembre 2011 Statut Membre Dernière intervention 17 septembre 2011 - 17 sept. 2011 à 00:16
 morgan - 18 juin 2013 à 23:57
Bonjour,

Préambule : je fais mes premiers pas en matière de script PHP !
Problématique : Dans le cadre d'un script permettant aux abonnés de mon futur site de récupérer, via email, le mot de passe qu'ils auraient déclaré oublié, j'essaye sans succès d'adapter un canevas que j'ai récupéré d'ailleurs sur un forum.
Malheureusement, quel que soit les tests que je peux faire (avec une adresse email contenue dans la bdd ou avec une adresse bidon) j'ai toujours le même message :
''Adresse email inconnue. Merci de réesssayer.
Retour au formulaire "MOT DE PASSE OUBLIÉ"''

Ci-dessous les scripts en question.
Un GRAND MERCI pour votre aide !
Charles

1ère page : où l'on saisi l'adresse email vers laquelle le mot de passe sera envoyée si cette dernière existe dans la bdd

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
etc ............................
<div class="content">
<p>MOT DE PASSE OUBLIÉ</p>
<p>Pour récupérer votre mot de passe : veuillez saisir ci-dessous l'adresse email que vous utilisez pour vous connecter et validez !</p>
<p> </p>
<form name="form1" method="post" action="renvoi-mot-passe.php">
<label for="loginforpass"></label>
<input name="loginforpass" type="text" id="loginforpass" value="<?php echo $_POST['loginforpass']; ?>">
<input type="submit" name="loginforpass" id="loginforpass" value="VALIDER">
</form>
<p> </p>
</div>


2ème page : elle devrait intégrer l'adresse email saisie par l'abonné dans la page précédente et lui envoyer le mot de passe via email.

<?php require_once('../Connections/connexionTP.php'); ?>
<?php
$emailmember = $_POST['loginforpass'];
$pointemail = strpos($emailmember,".");
$arobaemail = strpos($emailmember,"@");
$error = "";
$emailadmin = "admin@site.ca";

if (empty($emailmember))
{
$error="Adresse email inconnue. Merci de réesssayer.";
}

elseif($pointemail=='')
{
$error="Adresse email inconnue. Merci de réesssayer.";
}

elseif($arobaemail=='')
{
$error="Adresse email inconnue. Merci de réesssayer.";
}

else
{

mysql_select_db($database_connexionTP, $connexionTP);

$requete = mysql_query('SELECT mail, mdp FROM tab_abonnes WHERE mail="'.$emailmember.'"') OR die(mysql_error());

if(mysql_num_rows($requete)== 1)
{
$result=mysql_fetch_array($requete);
$passmember = $result['mdp'];
$subjectmember = "Vos informations personnelles";
$textmember = "Hello,

Comme demandé, ci-dessous les informations quant à :
votre adresse email : $emailmember
votre mot de passe : $passmember

Cordialement,

L'équipe de site.ca";

@mail("$emailmember", $subjectmember, $textmember, "FROM: $emailadmin");
header("location:conclusion-renvoi-mot-passe.php");
}

else
{
$error="Adresse email incorrecte. Merci de réessayer.";
}

}

?>


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
etc...............................................
<div class="content">
<p align="center">
<b>
<span><?php echo "$error";?></span>
</b>
</p>
<p align="center"> </p>
<p align="center"><a href="mot-passe-oublie.php">Retour au formulaire "MOT DE PASSE OUBLIÉ"</a></p>
</div>

2 réponses

Yo, je ne saurait trop vous conseiller d'appeler vos variables différemment selon l'emploi que vous en faites.


Ceci me paraît bizarre puisque le formulaire auras toujours la valeur que l'on as envoyé en post alors qu'il devrait être vide.

<input name="loginforpass" type="text" id="loginforpass" value="<?php echo $_POST['loginforpass']; ?>">

Votre formulaire ne doit pas contenir de value puisque l'utilisateur va y mettre son email.

<input type="submit" name="loginforpass" id="loginforpass" value="VALIDER">

Encore une fois le même id et name(loginforpass) pour un submit qui va servir de bouton de validation du formulaire(donc il n'as besoin d'aucun des 2).

Avec 3 variables censées être différentes qui ont le même nom comment voulez vous que vous et surtout le programme s'y retrouve dans le code, donnez des noms de variables explicites (une seule variable c'est l'email en post) et ça vous aideras à y voir plus clair.

$pointemail = strpos($emailmember,".");    
$arobaemail = strpos($emailmember,"@");     

Pas terrible ça utilisez une expression régulière ou même rien du tout puisque ce n'est pas une insertion dans la table.


$emailmember = $_POST['loginforpass'];

Ici par contre vouspouvez sécuriser avec la fonction mysql_real_escape() qui empêcheras l'insertion sql en sous requête.

Vos condittions ne sont pas correctement imbriquées:

if (empty($emailmember))
// si $emailmember est vide(n'existe pas)
{
$error="Adresse email inconnue. Merci de réesssayer.";
}
// si $emailmember et que $pointemail est égal à une chaîne vide
elseif($pointemail=='')
{
$error="Adresse email inconnue. Merci de réesssayer.";
}
// ce else if correspond à ce que $emailmember soit empty() et ne le soit pas en //même temps...condittion impossible qui sera jamais vérifié
// faites votre vérif d'email indépendament éventuellement
elseif($arobaemail=='')
{
$error="Adresse email inconnue. Merci de réesssayer.";
}
else
// cette condittion intervient si $emailmenber existe et n'existe pas à la fois et //que les variables $pointemail et $arobaemail ne contiennent pas une chaîne //vide
{
// si c'est vrai on envoies la requête, c'est donc bien impossible

Plutôt que d'essayer de vous concentrer sur des bouts de code il vous faut acquérir le principe de fonctionnement de la condition logique(algorithme).

edit: pour faire un formulaire je vous conseille le site du zéro qui propose des cours de vulgarisation avec des exercices pratiques.
1
CharlesINMONTREAL Messages postés 2 Date d'inscription vendredi 16 septembre 2011 Statut Membre Dernière intervention 17 septembre 2011
17 sept. 2011 à 04:30
BRAVO KingMob : que dire de plus !
J'ai suivi vos conseils (en prenant de la graine au passage) et cela marche.
Un grand merci à vous !
Le script revu et corrigé sur base de vos suggestions est le suivant :

1ère page :

<div class="content">
<h1>Titre de la page</h1>
<p>MOT DE PASSE OUBLIÉ</p>
<p>Pour récupérer votre mot de passe : veuillez saisir ci-dessous l'adresse courriel que vous utilisez pour vous connecter et validez ! </p>
<p> </p>
<form name="form1" method="post" action="renvoi-mot-passe.php">
<label for="loginforpass"></label>
<input name="loginforpass" type="text" id="loginforpass">
<input type="submit" name="button" id="button" value="VALIDER">
</form>
<p> </p>
</div>

2ème page :

<?php require_once('../Connections/connexionTP.php'); ?>
<?php
$emailmember = $_POST['loginforpass'];
$error = "";
$emailadmin = "admin@site.ca";

if (empty($emailmember))
{
$error="Adresse courriel inconnue. Merci de réesssayer.";
}
else
{

mysql_select_db($database_connexionTP, $connexionTP);

$requete = mysql_query('SELECT mail, mdp FROM tab_abonnes WHERE mail="'.$emailmember.'"') OR die(mysql_error());

if(mysql_num_rows($requete)== 1)
{
$result=mysql_fetch_array($requete);
$passmember = $result['mdp'];
$subjectmember = "Your personal informations";
$textmember = "Hello,
Comme demandé, ci-dessous les informations quant à :
votre adresse courriel : $emailmember
votre mot de passe : $passmember
Cordialement,
L'équipe de site.ca";

@mail("$emailmember", $subjectmember, $textmember, "FROM: $emailadmin");
header("Location:conclusion-renvoi-mot-passe.php");
}

else
{
$error="Adresse e-mail incorrecte. Merci de réessayer.";
}

}

?>


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
etc............................................
<div class="content">
<p align="center">
<b>
<span><?php echo "$error";?></span>
</b>
</p>
<p align="center"> </p>
<p align="center"><a href="mot-passe-oublie.php">Retour au formulaire "MOT DE PASSE OUBLIÉ"</a></p>
</div>
0
Bonjour. Je viens de suivre toutes les étapes mais cela ne fonctionne pas.
Malgres que je place une adresse mail valide qui se trouve dans ma base de bonnée j'ai un message d'erreur (Adresse courriel inconnue. Merci de réesssayer)

Voici ma page 1:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Mot de passe oublié</title>
</head>


<body>
<div class="content">
<h1>Mot de passe oublié.</h1>
<p>MOT DE PASSE OUBLIÉ</p>
<p>Pour récupérer votre mot de passe : veuillez saisir ci-dessous l'adresse courriel que vous utilisez pour vous connecter et validez !
loginforpass</p>
<p> </p>
<form name="form1" method="post" action="renvoi-mot-passe.php">
<label for=""></label>
<input type="submit" name="" id="" value="VALIDER">



<input type="submit" name="button" id="button" value="VALIDER">
</form>
<p> </p>
</div>
</body>
</html>

-------------
Page 2 nommée: "renvoi-mot-passe.php"


<?php require_once('Connections/nomdemabase.php'); ?>

<?php
$emailmember = $_POST['ch_mail'];
$error = "";
$emailadmin = "mon e-mail à moi";

if (empty($emailmember))
{
$error="Adresse courriel inconnue. Merci de réesssayer.";
}
else
{

mysql_select_db($database_nomdemabase, $nomdemabase);

$requete = mysql_query('SELECT ch_mail, ch_mot_de_passe FROM nomdemabase WHERE ch_mail="'.$emailmember.'"') OR die(mysql_error());

if(mysql_num_rows($requete)== 1)
{
$result=mysql_fetch_array($requete);
$passmember = $result['ch_mot_de_passe'];
$subjectmember = "Votre mot de passe oublié";
$textmember = "Bonjour,
Comme demandé, ci-dessous les informations quant à :
votre adresse courriel : $emailmember
votre mot de passe : $passmember
Cordialement,
Coffre-secret.fr";

@mail("$emailmember", $subjectmember, $textmember, "FROM: $emailadmin");
header("Location:conclusion-renvoi-mot-passe.php");
}

else
{
$error="Adresse e-mail incorrecte. Merci de réessayer.";
}

}

?>

<?php require_once('Connections/connexion_coffre_secret.php')?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Document sans titre</title>
</head>

<body>

<div class="content">
<p align="center">
<b>
<span><?php echo "$error";?></span>
</b>
</p>
<p align="center"> </p>
<p align="center"><a href="mot-passe-oublie.php"> Retour au formulaire "MOT DE PASSE OUBLIÉ"</a></p>
</div>
</body>
</html>

Si vous pouvez m'aider ..... Merci
0