Récupération du mot de passe
RésoluUtilisateur anonyme -
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
Problème central : une erreur « 2 » apparaît lorsque le formulaire de vérification est soumis, et les échanges de la discussion portent sur les requêtes SQL et le nombre de paramètres liés. Des conseils ont invité à afficher les valeurs ($_POST), vérifier le contenu des variables mail_valid et verif_code, et tester les requêtes directement dans la base. La piste principale identifiée est un décalage entre le nombre de paramètres passés et les tokens dans la requête, conduit à des messages comme Invalid parameter number, et nécessite de corriger les valeurs liées. D'autres échanges proposent également de tester la requête directement et de vérifier que les données correspondent aux paramètres attendus, afin d'éviter les erreurs liées au comptage des paramètres.
-
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
* -
-
-
-
-