Warning: PDOStatement::execute(): SQLSTATE[HY093]:
yves_2021
Messages postés
6
Date d'inscription
Statut
Membre
Dernière intervention
-
jordane45 Messages postés 40050 Statut Modérateur -
jordane45 Messages postés 40050 Statut Modérateur -
J'essaye de contruire un code mot de passe oublié, j'ai des erreurs
1)Warning: PDOStatement::execute(): SQLSTATE[HY093]: Invalid parameter number: parameter was not defined in C:\wamp\www\ndameyong\Classes\Db.php on line 68
2) Fatal error: Uncaught Error: Call to a member function rowCount() on int in C:\wamp\www\ndameyong\forgot.php on line 31
( ! ) Error: Call to a member function rowCount() on int in C:\wamp\www\ndameyong\forgot.php on line 31
voilà mon code
forgot.php
Db.php
Merci d'avance
1)Warning: PDOStatement::execute(): SQLSTATE[HY093]: Invalid parameter number: parameter was not defined in C:\wamp\www\ndameyong\Classes\Db.php on line 68
2) Fatal error: Uncaught Error: Call to a member function rowCount() on int in C:\wamp\www\ndameyong\forgot.php on line 31
( ! ) Error: Call to a member function rowCount() on int in C:\wamp\www\ndameyong\forgot.php on line 31
voilà mon code
forgot.php
<?php require 'includes/includes.php'; if(!empty($_SESSION['user'])){ header('location:profil.php'); } ?> <?php $titrepage="Mot de passe oublié || Ndameyong - L'Ecole des Langues Camerounaises" ; require 'includes/header.php'; ?> <?php $title = 'Mot de passe oublié'; if(!empty($_POST)) { $post = filter_input_array(INPUT_POST, FILTER_SANITIZE_STRING); extract($post); $errors = []; if(empty($email) || !filter_var($email, FILTER_VALIDATE_EMAIL)){ array_push($errors, 'Cette email est invalide.'); } else{ $sql = "SELECT * FROM users WHERE email=:email"; $data = [':email']; $req = $DB->exec($sql , $data) ; if(!$req->rowCount()){ array_push($errors, 'Cet email ne correspond à aucun membre du site.'); } else{ $user = $req->fetch(); } if(empty($errors)) { $token = uniqid(); $req = $db->prepare('INSERT INTO password_resets (email, token, created_at) VALUES (:email, :token, NOW())'); $sql = 'DELETE FROM users WHERE id=:id'; $data = [':id'=>$user['id']]; $del = $DB->exec($sql , $data) ; $req->bindValue(':email', $email, PDO::PARAM_STR); $req->bindValue(':token', $token, PDO::PARAM_STR); $req->execute(); $link = 'Bonjour, veuillez cliquer sur <a href="https://membres.test/reset.php?token='.$token.'">ce lien</a> pour réinitialiser votre mote de passe.'; // Create the Transport $transport = (new Swift_SmtpTransport('smtp.mailtrap.io', 465)) ->setUsername('fae489573327ac') ->setPassword('eed3d4ab64b373') ; // Create the Mailer using your created Transport $mailer = new Swift_Mailer($transport); // Create a message $message = (new Swift_Message('Mot de passe oublié')) ->setFrom(['lcorrefabien@gmail.com' => 'John Doe']) ->setTo([$email => $user->name]) ->addPart($link, 'text/html'); ; // Send the message $result = $mailer->send($message); if($result){ $success = 'Un email vous a été envoyé avec des instructions.'; unset($email); } } } } ?> <h2>Récupérez votre mot de passe</h2> <?php include('messages.php');?> <form action="forgot.php" method="post"> <div class="form-group"> <label for="email">Email</label> <input type="email" name="email" class="form-control" placeholder="Email" value="<?= $email ?? '';?>"> </div> <button type="submit" class="btn btn-primary">Envoyer</button> </form> <br> <p><a href="login.php">Je m'en souviens en fait.</a></p> <?php require 'includes/footer2.php'; ?>
Db.php
<?php /** * Gestion de la base de données */ class Db{ private $host=HOST; private $name=DBNAME; private $user=USER; private $pass=PWD; private $connexion; function __construct($host=null,$name=null,$user=null,$pass=null){ if($host != null){ $this->host = $host; $this->name = $name; $this->user = $user; $this->pass = $pass; } try{ $this->connexion = new PDO('mysql:host='.$this->host.';dbname='.$this->name, $this->user,$this->pass,array( 1002 =>'SET NAMES UTF8', PDO::ATTR_ERRMODE => PDO::ERRMODE_WARNING )); $this->connexion->exec('SET NAMES utf8'); //PDO::MYSQL_ATTR_INIT_COMMAND }catch (PDOException $e){ //echo 'Erreur : Impossible de se connecter à la BD !';die(); echo $e->getMessage(); } } /* requete */ public function query($sql , $data=array()){ $req = $this->connexion->prepare($sql); $req->execute($data); return $req->fetchAll(PDO::FETCH_OBJ); } public function tquery($sql , $data=array()){ $req = $this->connexion->prepare($sql); $req->execute($data); return $req->fetchAll(PDO::FETCH_ASSOC); } public function insert($sql , $data=array()){ $req = $this->connexion->prepare($sql); $nb=$req->execute($data); return $nb; } public function exec($sql , $data=array()){ try{ $req = $this->connexion->prepare($sql); $req->execute($data); return $req->rowCount(); // Retourne le nombre de lignes impactées par la reuqête }catch(Exception $e){ echo 'Erreur : ' . $e->getMessage(); // en cas d'erreur dans la requête ! } } public function deleteuser($id){ $sql = 'DELETE FROM users WHERE id=:id'; $data = [':id'=>$id]; return $DB->exec($sql , $data) ; } public function uniqueEmail($email){ $req = $this->connexion->prepare('SELECT count(*) as nbre from users WHERE email=:email limit 1'); $req->execute(array('email'=>$email)); $reponse = $req->fetchAll(PDO::FETCH_ASSOC); return $reponse[0]['nbre']; } }
Merci d'avance
A voir également:
- Warning: PDOStatement::execute(): SQLSTATE[HY093]:
- Warning zone telechargement - Accueil - Outils
- Téléchargement et streaming illégal : voici les adresses des sites pirates que les FAI vont bloquer - Accueil - Services en ligne
- Cpu fan fail warning control - Forum Matériel & Système
- Symbole warning word ✓ - Forum Word
- Comment faire le symbole attention ✓ - Forum Loisirs / Divertissements
6 réponses
bonjour,
inutile de créer une nouvelle discussion, il suffit de continuer la discussion précédente.
peux-tu fermer une des deux discussions?
inutile de créer une nouvelle discussion, il suffit de continuer la discussion précédente.
peux-tu fermer une des deux discussions?
Déjà... BONJOUR .. ( si si .. ici on commence par ça !! )
Ensuite,
Tu utilises la fonction exec de ta class DB ... fonction qui retourne le nombre de lignes impactées par ta requête...
Donc...
Est à remplacer par :
Pour ton autre message d'erreur.. il faudrait savoir quelle requête est concernée.....
Je t'invite à mettre systématiquement CHAQUE requête dans un bloc TRY/CATCH afin d'affiner l'affichage des messages d'erreur.
Prends exemple ici :
https://forums.commentcamarche.net/forum/affich-37584941-php-pdo-gerer-les-erreurs
Ensuite,
$req = $DB->exec($sql , $data) ;
Tu utilises la fonction exec de ta class DB ... fonction qui retourne le nombre de lignes impactées par ta requête...
public function exec($sql , $data=array()){ try{ $req = $this->connexion->prepare($sql); $req->execute($data); return $req->rowCount(); // Retourne le nombre de lignes impactées par la reuqête }catch(Exception $e){ echo 'Erreur : ' . $e->getMessage(); // en cas d'erreur dans la requête ! } }
Donc...
if(!$req->rowCount()){
Est à remplacer par :
if(!$req){
Pour ton autre message d'erreur.. il faudrait savoir quelle requête est concernée.....
Je t'invite à mettre systématiquement CHAQUE requête dans un bloc TRY/CATCH afin d'affiner l'affichage des messages d'erreur.
Prends exemple ici :
https://forums.commentcamarche.net/forum/affich-37584941-php-pdo-gerer-les-erreurs
Bonjour,
Mercie de votre réponse
je me rends compte que je suis trompé de code du coup les erreurs que ne sont pas celles que j'avais envoyé dernièrement, je vous renvoi le code ainsi que les trois erreurs qui apparaissent
NB: permettre à un utilisateur de retrouver son mot de passe
1) Notice: Undefined variable: Db in C:\wamp\www\ndameyong\forgot.php on line 23
2) Fatal error: Uncaught Error: Call to a member function prepare() on null in C:\wamp\www\ndameyong\forgot.php on line 23
3) Error: Call to a member function prepare() on null in C:\wamp\www\ndameyong\forgot.php on line 23
Voilà la code forgot.php
Db.php
auth.php
Merci d'avance
Mercie de votre réponse
je me rends compte que je suis trompé de code du coup les erreurs que ne sont pas celles que j'avais envoyé dernièrement, je vous renvoi le code ainsi que les trois erreurs qui apparaissent
NB: permettre à un utilisateur de retrouver son mot de passe
1) Notice: Undefined variable: Db in C:\wamp\www\ndameyong\forgot.php on line 23
2) Fatal error: Uncaught Error: Call to a member function prepare() on null in C:\wamp\www\ndameyong\forgot.php on line 23
3) Error: Call to a member function prepare() on null in C:\wamp\www\ndameyong\forgot.php on line 23
Voilà la code forgot.php
<?php require 'includes/includes.php'; if(!empty($_SESSION['user'])){ header('Location:profil.php'); } ?> <?php if(!empty($_POST)) { $post = filter_input_array(INPUT_POST, FILTER_SANITIZE_STRING); extract($post); $errors = []; if(empty($email) || !filter_var($email, FILTER_VALIDATE_EMAIL)){ array_push($errors, 'Cette email est invalide.'); } else{ $req = $Db->prepare('SELECT * FROM users WHERE email=:email'); $req->bindValue(':email', $email, PDO::PARAM_STR); $req->execute(); if(!$req){ array_push($errors, 'Cet email ne correspond à aucun membre du site.'); } else{ $user = $req->fetch(); } if(empty($errors)) { $token = uniqid(); $req = $db->prepare('INSERT INTO password_resets (email, token, created_at) VALUES (:email, :token, NOW())'); $req->bindValue(':email', $email, PDO::PARAM_STR); $req->bindValue(':token', $token, PDO::PARAM_STR); $req->execute(); $link = 'Bonjour, veuillez cliquer sur <a href="https://membres.test/reset.php?token='.$token.'">ce lien</a> pour réinitialiser votre mote de passe.'; // Create the Transport $transport = (new Swift_SmtpTransport('smtp.mailtrap.io', 465)) ->setUsername('fae489573327ac') ->setPassword('eed3d4ab64b373') ; // Create the Mailer using your created Transport $mailer = new Swift_Mailer($transport); // Create a message $message = (new Swift_Message('Mot de passe oublié')) ->setFrom(['lcorrefabien@gmail.com' => 'John Doe']) ->setTo([$email => $user->name]) ->addPart($link, 'text/html'); ; // Send the message $result = $mailer->send($message); if($result){ $success = 'Un email vous a été envoyé avec des instructions.'; unset($email); } } } } ?> <?php $titrepage="Mot de passe oublié || Ndameyong - L'Ecole des Langues Camerounaises" ; require 'includes/header.php'; ?> <?php include('messages.php');?> <form action="forgot.php" method="post"> <div class="form-group"> <label for="email">Email</label> <input type="email" name="email" class="form-control" placeholder="Email" value="<?= $email ?? '';?>"> </div> <button type="submit" class="btn btn-primary">Envoyer</button> </form> <br> <p><a href="login.php">Je m'en souviens en fait.</a></p> <?php require 'includes/footer2.php'; ?>
Db.php
<?php /** * Gestion de la base de données */ class Db{ private $host=HOST; private $name=DBNAME; private $user=USER; private $pass=PWD; private $connexion; function __construct($host=null,$name=null,$user=null,$pass=null){ if($host != null){ $this->host = $host; $this->name = $name; $this->user = $user; $this->pass = $pass; } try{ $this->connexion = new PDO('mysql:host='.$this->host.';dbname='.$this->name, $this->user,$this->pass,array( 1002 =>'SET NAMES UTF8', PDO::ATTR_ERRMODE => PDO::ERRMODE_WARNING )); $this->connexion->exec('SET NAMES utf8'); //PDO::MYSQL_ATTR_INIT_COMMAND }catch (PDOException $e){ //echo 'Erreur : Impossible de se connecter à la BD !';die(); echo $e->getMessage(); } } /* requete */ public function query($sql , $data=array()){ $req = $this->connexion->prepare($sql); $req->execute($data); return $req->fetchAll(PDO::FETCH_OBJ); } public function tquery($sql , $data=array()){ $req = $this->connexion->prepare($sql); $req->execute($data); return $req->fetchAll(PDO::FETCH_ASSOC); } public function insert($sql , $data=array()){ $req = $this->connexion->prepare($sql); $nb=$req->execute($data); return $nb; } public function exec($sql , $data=array()){ try{ $req = $this->connexion->prepare($sql); $req->execute($data); return $req->rowCount(); // Retourne le nombre de lignes impactées par la reuqête }catch(Exception $e){ echo 'Erreur : ' . $e->getMessage(); // en cas d'erreur dans la requête ! } } public function deleteuser($id){ $sql = 'DELETE FROM users WHERE id=:id'; $data = [':id'=>$id]; return $DB->exec($sql , $data) ; } public function uniqueEmail($email){ $req = $this->connexion->prepare('SELECT count(*) as nbre from users WHERE email=:email limit 1'); $req->execute(array('email'=>$email)); $reponse = $req->fetchAll(PDO::FETCH_ASSOC); return $reponse[0]['nbre']; } }
auth.php
<?php /** * Auth */ class Auth{ public static function islog($db){ if(isset($_SESSION['user']) && isset($_SESSION['user']['email']) && isset($_SESSION['user']['password'])){ $data =array( 'email'=>$_SESSION['user']['email'], 'password'=>$_SESSION['user']['password'] ); $sql = 'SELECT * FROM users WHERE email=:email AND password=:password limit 1'; $req = $db->tquery($sql,$data); if(!empty($req)){ return true; } } return false; } public static function hashPassword($pass){ return sha1(SALT.md5($pass.SALT).sha1(SALT)); } public static function isadmin($db){ if(isset($_SESSION['user']['role']) && (Auth::hashPassword('admin') == $_SESSION['user']['role'])){ return true; } return false; } public function deleteuser($id){ $sql = 'DELETE FROM users WHERE id=:id'; $data = [':id'=>$id]; return $DB->exec($sql , $data) ; } }
Merci d'avance
Bsr cher monsieur,
j'ai utiliser la class Db (dans le fichier Db.php).
Le fichier de connexion à la bdd se trouve dans un fichier include.php
j'ai utiliser la class Db (dans le fichier Db.php).
Le fichier de connexion à la bdd se trouve dans un fichier include.php
<?php require 'config.php'; require_once 'Classes/Db.php'; require_once 'Classes/auth.php'; $DB = new Db(); // cacher les erreurs pour la production ini_set('error_reporting',E_ALL); // afficher les érreurs lors du developpement //ini_set('error_reporting', E_ALL); ?>
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
bonjour cher monsieur,
merci pour votre aide, j'ai rectifier l'ecriture de ma variable $Db par $DB ce qui a fait disparaitre
l'erreur de variable inconnu. Cependant pourquoi j'ai toujours ces erreurs ?
1)) Fatal error: Uncaught Error: Call to undefined method Db::prepare() in C:\wamp\www\ndameyong\forgot.php on line 23
2) ) Error: Call to undefined method Db::prepare() in C:\wamp\www\ndameyong\forgot.php on line 23
voilà forgot.php (modifiié)
Db.php
Merci!
merci pour votre aide, j'ai rectifier l'ecriture de ma variable $Db par $DB ce qui a fait disparaitre
l'erreur de variable inconnu. Cependant pourquoi j'ai toujours ces erreurs ?
1)) Fatal error: Uncaught Error: Call to undefined method Db::prepare() in C:\wamp\www\ndameyong\forgot.php on line 23
2) ) Error: Call to undefined method Db::prepare() in C:\wamp\www\ndameyong\forgot.php on line 23
voilà forgot.php (modifiié)
<?php require 'includes/includes.php'; if(!empty($_SESSION['user'])){ header('Location:profil.php'); } ?> <?php if(!empty($_POST)) { $post = filter_input_array(INPUT_POST, FILTER_SANITIZE_STRING); extract($post); $errors = []; if(empty($email) || !filter_var($email, FILTER_VALIDATE_EMAIL)){ array_push($errors, 'Cette email est invalide.'); } else{ $req = $DB->prepare('SELECT * FROM users WHERE email=:email'); $req->bindValue(':email', $email, PDO::PARAM_STR); $req->execute(); if(!$req){ array_push($errors, 'Cet email ne correspond à aucun membre du site.'); } else{ $user = $req->fetch(); } if(empty($errors)) { $token = uniqid(); $req = $DB->prepare('INSERT INTO password_resets (email, token, created_at) VALUES (:email, :token, NOW())'); $req->bindValue(':email', $email, PDO::PARAM_STR); $req->bindValue(':token', $token, PDO::PARAM_STR); $req->execute(); $link = 'Bonjour, veuillez cliquer sur <a href="https://membres.test/reset.php?token='.$token.'">ce lien</a> pour réinitialiser votre mote de passe.'; // Create the Transport $transport = (new Swift_SmtpTransport('smtp.mailtrap.io', 465)) ->setUsername('fae489573327ac') ->setPassword('eed3d4ab64b373') ; // Create the Mailer using your created Transport $mailer = new Swift_Mailer($transport); // Create a message $message = (new Swift_Message('Mot de passe oublié')) ->setFrom(['lcorrefabien@gmail.com' => 'John Doe']) ->setTo([$email => $user->name]) ->addPart($link, 'text/html'); ; // Send the message $result = $mailer->send($message); if($result){ $success = 'Un email vous a été envoyé avec des instructions.'; unset($email); } } } } ?> <?php $titrepage="Mot de passe oublié || Ndameyong - L'Ecole des Langues Camerounaises" ; require 'includes/header.php'; ?> <?php include('messages.php');?> <form action="forgot.php" method="post"> <div class="form-group"> <label for="email">Email</label> <input type="email" name="email" class="form-control" placeholder="Email" value="<?= $email ?? '';?>"> </div> <button type="submit" class="btn btn-primary">Envoyer</button> </form> <br> <p><a href="login.php">Je m'en souviens en fait.</a></p> <?php require 'includes/footer2.php'; ?>
Db.php
<?php /** * Gestion de la base de données */ class Db{ private $host=HOST; private $name=DBNAME; private $user=USER; private $pass=PWD; private $connexion; function __construct($host=null,$name=null,$user=null,$pass=null){ if($host != null){ $this->host = $host; $this->name = $name; $this->user = $user; $this->pass = $pass; } try{ $this->connexion = new PDO('mysql:host='.$this->host.';dbname='.$this->name, $this->user,$this->pass,array( 1002 =>'SET NAMES UTF8', PDO::ATTR_ERRMODE => PDO::ERRMODE_WARNING )); $this->connexion->exec('SET NAMES utf8'); //PDO::MYSQL_ATTR_INIT_COMMAND }catch (PDOException $e){ //echo 'Erreur : Impossible de se connecter à la BD !';die(); echo $e->getMessage(); } } /* requete */ public function query($sql , $data=array()){ $req = $this->connexion->prepare($sql); $req->execute($data); return $req->fetchAll(PDO::FETCH_OBJ); } public function tquery($sql , $data=array()){ $req = $this->connexion->prepare($sql); $req->execute($data); return $req->fetchAll(PDO::FETCH_ASSOC); } public function insert($sql , $data=array()){ $req = $this->connexion->prepare($sql); $nb=$req->execute($data); return $nb; } public function exec($sql , $data=array()){ try{ $req = $this->connexion->prepare($sql); $req->execute($data); return $req->rowCount(); // Retourne le nombre de lignes impactées par la reuqête }catch(Exception $e){ echo 'Erreur : ' . $e->getMessage(); // en cas d'erreur dans la requête ! } } public function deleteuser($id){ $sql = 'DELETE FROM users WHERE id=:id'; $data = [':id'=>$id]; return $DB->exec($sql , $data) ; } public function uniqueEmail($email){ $req = $this->connexion->prepare('SELECT count(*) as nbre from users WHERE email=:email limit 1'); $req->execute(array('email'=>$email)); $reponse = $req->fetchAll(PDO::FETCH_ASSOC); return $reponse[0]['nbre']; } }
Merci!
salut,
ligne 42 de forgot.php j'avais écris ($req->execute();) mais ça n'a rien donné voilà pourquoi j'ai essayé celle-ci ($req = $DB->exec($sql , $data) ;). Je suis nouveau dans php j'ai travaillé dans un fichier avec la methode utilisant bindValue() ce code fonctionne bien labas. je voudrais maitraiser la methode utilisant les classes voilà pourquoi je m'en mêle les pédales
ligne 42 de forgot.php j'avais écris ($req->execute();) mais ça n'a rien donné voilà pourquoi j'ai essayé celle-ci ($req = $DB->exec($sql , $data) ;). Je suis nouveau dans php j'ai travaillé dans un fichier avec la methode utilisant bindValue() ce code fonctionne bien labas. je voudrais maitraiser la methode utilisant les classes voilà pourquoi je m'en mêle les pédales