Récupération du mot de passe
Résolu
Utilisateur anonyme
-
Utilisateur anonyme -
Utilisateur anonyme -
Voila je met mon code ci-dessous pour essayé de trouver l'erreur ensemble, de mon coté je pense que ça coince au niveau de 9 à 14 j'ai encore du mal avec les requetes, j'ai l'erreur " 2 " qui apparaît quand j'écrit n'importe quoi dans mon formulaire.
session_start();
include('../php/config.php');
if(isset($_POST['verif_submit'],$_POST['verif_code']))
{
if(!empty($_POST['verif_code']))
{
$verif_code = htmlspecialchars($_POST['verif_code']);
$verif_req = $bdd->prepare('SELECT id FROM membres WHERE mail = ? AND code = ?');
$verif_req->execute(array($_POST['mail_valid'],$verif_code));
$verif_req = $verif_req->rowCount();
if($verif_req == 1)
{
$sql = "SELECT * FROM membres WHERE mail = ?";
$datas = array($mail_valid, $pass_valid, $pass2_valid);
try{
$prep= $bdd->prepare($sql);
$prep->execute($datas);
$a_result = $prep->fetchAll();
$nbResult = !empty($a_result) ? count($a_result) : 0;
}catch(Exception $e){
echo " Erreur : " . $e->getMessage();
}
$userexist = $nbResult;
if($userexist == 1)
{
$userinfo = $a_result[0];
$id = $userinfo['id'];
$mail = $userinfo['mail'];
$code = $userinfo['recup'];
if($code == $_POST['verif_code'])
{
if($mail == 1)
{
$pass = hash("sha512",($_POST['pass']));
$pass2 = hash("sha512",($_POST['pass2']));
if($pass == $pass2)
{
$insert_db = $bdd->prepare("INSERT INTO membres(pass) VALUES(?)");
$insert_db->execute(array($pass));
$up_req = $bdd->prepare('UPDATE membres SET confirme = 1 WHERE mail = ?');
$up_req->execute(array($mail));
}
else
{
$erreur = "Mots de passes incorrect ou non identique !";
}
}
else
{
$erreur = "Email incorrect !";
}
}
else
{
$erreur = "Code de vérification incorrect";
}
}
else
{
$erreur = "1";
}
}
else
{
$erreur = "2";
}
}
else
{
$erreur = "Veuillez entrer votre code de confirmation";
}
}
4 réponses
-
yg_be Messages postés 23437 Date d'inscription Statut Contributeur Dernière intervention Ambassadeur 1 588
bonsoir, peux-tu ajouter des commentaires pour indiquer à quel "if" correspond chaque "else", ou expliquer à quoi correspond ton erreur "2"? -
L'erreur correspond au if de la ligne 13 ci-dessus, l'erreur intérieur ce sont les lignes juste au dessus je pense.
-
Bonjour,
Pourquoi ne pas avoir tenu compte de toutes mes remarques de ta question précédente ???
Plusieurs choses ne vont pas dans ton code (encore...) :
- il faut activer les erreurs php
- Il faut mettre TOUTES tes requêtes dans des blocs try/catch
- htmlspecialchars ne s'utilise que pour l'affichage ... pas pour la comparaison ou l'insertion en bdd
- Il ne faut pas utiliser, pour une requete de type select, le RowCount
- etc...<?php session_start(); //activation de l'affichage des erreurs PHP error_reporting(E_ALL); ini_set('display-errors','on'); include('../php/config.php'); //------------------------------------------------------------// //récupération PROPRE des variables AVANT de les utiliser //------------------------------------------------------------// $verif_code = !empty($_POST['verif_code']) ? $_POST['verif_code']: NULL; $mail_valid = !empty($_POST['mail_valid']) ? $_POST['mail_valid']: NULL; if(isset($_POST['verif_submit'])){ if($verif_code ) { $sql = "SELECT id FROM membres WHERE mail = ? AND code = ?"; $datas = array($mail_valid,$verif_code); try{ $prep= $bdd->prepare($sql); $prep->execute($datas); $a_result_mail = $prep->fetchAll(); $verif_req = !empty($a_result_mail) ? count($a_result_mail) : 0; }catch(Exception $e){ echo " Erreur : " . $e->getMessage(); } if($verif_req == 1) { $sql = "SELECT * FROM membres WHERE mail = ?"; $datas = array($mail_valid, $pass_valid, $pass2_valid); try{ $prep= $bdd->prepare($sql); $prep->execute($datas); $a_result = $prep->fetchAll(); $nbResult = !empty($a_result) ? count($a_result) : 0; }catch(Exception $e){ echo " Erreur : " . $e->getMessage(); } if($nbResult == 1) { $userinfo = $a_result[0]; $id = $userinfo['id']; $mail = $userinfo['mail']; $code = $userinfo['recup']; if($code == $verif_code) { if($mail == 1) { $pass = hash("sha512",($_POST['pass'])); $pass2 = hash("sha512",($_POST['pass2'])); if($pass == $pass2) { $insert_db = $bdd->prepare("INSERT INTO membres(pass) VALUES(?)"); $insert_db->execute(array($pass)); $up_req = $bdd->prepare('UPDATE membres SET confirme = 1 WHERE mail = ?'); $up_req->execute(array($mail)); } else { $erreur = "Mots de passes incorrect ou non identique !"; } } else { $erreur = "Email incorrect !"; } } else { $erreur = "Code de vérification incorrect"; } } else { $erreur = "1"; } } else { $erreur = "2"; print_r($a_result_mail); } } else { $erreur = "Veuillez entrer votre code de confirmation"; } }
-
Au passage ..... dans le code actuel ... les variables $mail_valid, $pass_valid, $pass2_valid .. ne sont pas définies ....
et tu vas avoir un souci avec ces deux lignes$sql = "SELECT * FROM membres WHERE mail = ?"; $datas = array($mail_valid, $pass_valid, $pass2_valid);
-> Tu ne mets qu'un seul "?" dans ta requête... mais tu envoies 3 variables dans les datas........ -
-
ce qui veut dire que ta requête n'a retourné aucun résultat ....
Peux tu
1 - Faire un print du premier $dataif($verif_code ) { $sql = "SELECT id FROM membres WHERE mail = ? AND code = ?"; $datas = array($mail_valid,$verif_code); print_r($datas);
nous dire ce que ça donne
2 - tester ta requête DIRECTEMENT dans ta BDD (via phpmyadmin par exemple) -
-
-
-
J'ai fais comme ça je n'ai plus l'erreur au même endroit cette fois ci elle est revenu à " 2 " donc au niveau de la ligne : if($verif_req == 1)
$verif_code = !empty($_POST['verif_code']) ? $_POST['verif_code']: NULL; $mail_valid = !empty($_POST['mail_valid']) ? $_POST['mail_valid']: NULL; if(isset($_POST['verif_submit'])) { $sql = "SELECT * FROM membres WHERE mail = ? AND recup = ?"; $datas = array($mail_valid,$verif_code); try{ $prep= $bdd->prepare($sql); $prep->execute($datas); $a_result = $prep->fetchAll(); $nbResult = !empty($a_result) ? count($a_result) : 0; }catch(Exception $e){ echo " Erreur : " . $e->getMessage(); } $userexist = $nbResult; if($userexist == 1) { $userinfo = $a_result[0]; $code = $userinfo['recup']; if($verif_code == $code) { $sql = "SELECT id FROM membres WHERE mail = ? AND code = ?"; $datas = array($mail_valid,$verif_code); try{ $prep= $bdd->prepare($sql); $prep->execute($datas); $a_result_mail = $prep->fetchAll(); $verif_req = !empty($a_result_mail) ? count($a_result_mail) : 0; }catch(Exception $e) { echo " Erreur : " . $e->getMessage(); } if($verif_req == 1) {-
Je réitère ma question précédente : https://forums.commentcamarche.net/forum/affich-34595112-recuperation-du-mot-de-passe#6
* -
-
-
-
-