je développe un petit blog en local et j'ai besoin de créer un script de mot de passe perdu.
Enfaite celui-ci fonctionne avec une vérification du code de sécurité reçut a l'inscription si la combinaison est valide, le script vérifie l'email correspondant au code.
Mais la je galère ... au début a cause d'un "=" de trop dans ma requete sql .. ahah mais la les données ne sont pas en mémoire et je ne trouve pas ..
codev = code de vérification unique créer a l'inscription que l'utilisateur rentre dans le formulaire html.
Le codev s'affiche quand je clic sur le bouton mais pas l'émail.
$bdd = new PDO("mysql:host=" . HOST . ";dbname=" . DATABASE . ";charset=utf8", USER, PASSWORD);
if (isset($_POST['codev']))
{
$msg_function_lost_pass= 'test';
$codev = $_POST['codev'];
$reponse = $bdd->query('SELECT mail FROM membres WHERE confirmkey="'.$codev.'"');
while ($donnees = $reponse->fetch())
{
}
//$donnees['mail'] = $msg_function_lost_pass ;
//$reponse->closeCursor(); // Termine le traitement de la requête
//$msg_function_lost_pass ="";
//
$msg_function_lost_pass = " Votre code d'authentification est :". $codev ." via l'email : ". $donnees['mail'] ." ";
//
}
else
{
$msg_function_lost_pass= 'Le code est disponible dans votre émail';
}
active les erreurs PDO/SQL au lieu de les chercher
prépare ta requête, tu as une injection SQL
Tu n'as pas besoin d'un while, juste un if, d'autant que $donnees va falloir FALSE après et en dehors du while.
Il faut faire :
$reponse = $bdd->prepare('SELECT mail FROM membres WHERE confirmkey = :codev');
$reponse->execute(['codev' => $_POST['codev']]);
if ($donnees = $reponse->fetch()) {
// il y a une ligne qui correspond, utiliser $donnees['mail']
} else {
// rien ne correspond
}
Je te remercie de ta réponse je vais regardé a cela avant la lecture de celle-ci j'ai fais quelques tests ahah
$bdd = new PDO("mysql:host=" . HOST . ";dbname=" . DATABASE . ";charset=utf8", USER, PASSWORD);
if (isset($_POST['codev']))
{
$msg_function_lost_pass= 'test';
$codev = $_POST['codev'];
$reponse = $bdd->prepare('SELECT * FROM membres WHERE confirmkey="'.$codev.'"');
while ($donnees = $reponse->fetch())
{
$test = "";
$test = $reponse. '|'.$donnees['mail'];
}
la requête
//$msg_function_lost_pass ="";
$msg_function_lost_pass = " Votre code d'authentification est :". $codev ." via l'email : ". $donnees['mail'] ." ".$test;
}
else
{
$msg_function_lost_pass= 'Le code est disponible dans votre émail';
}
Mais le retour du print_r ne me retourne aucune valeur dans le tableau.
j'avais modif aussi le query en prepare de ma requete sql.
Enfin je test ton petit bout de code ! et je reviens vers toi .
EDITE :
Il semble que j'ai un souci avec la ligne suivante :
Après une petite verification de ton code j'ai modif avec ceci et cela fonctionne il manquais le array je pense ?
$bdd = new PDO("mysql:host=" . HOST . ";dbname=" . DATABASE . ";charset=utf8", USER, PASSWORD);
//lost password
$reponse = $bdd->prepare('SELECT mail FROM membres WHERE confirmkey = :codev');
@$reponse->execute(array('codev' => $_POST['codev']));
if ($donnees = $reponse->fetch()) {
// il y a une ligne qui correspond, utiliser $donnees['mail']
$msg_function_lost_pass = "code valide, email : ".$donnees['mail'];
} else {
// rien ne correspond
$msg_function_lost_pass = "le code de verification est non valide.";
}
La version de php était bien en 5.3 elle est a présent en 7.1
Cordialement, LinkoLabs
Recuperation de donnée avec php
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Cordialement, LinkoLabs
julp.fr ~ PHP < 8.0.0 : activer les erreurs PDO/SQL ~ PHP < 8.1.0 : activer les erreurs mysqli
Cordialement, LinkoLabs
julp.fr ~ PHP < 8.0.0 : activer les erreurs PDO/SQL ~ PHP < 8.1.0 : activer les erreurs mysqli
Cordialement, LinkoLabs