Warning: PDOStatement::execute(): SQLSTATE[HY093]:
Fermé
yves_2021
Messages postés
6
Date d'inscription
mardi 29 juin 2021
Statut
Membre
Dernière intervention
2 juillet 2021
-
29 juin 2021 à 16:26
jordane45 Messages postés 38314 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 24 novembre 2024 - 2 juil. 2021 à 18:02
jordane45 Messages postés 38314 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 24 novembre 2024 - 2 juil. 2021 à 18:02
A voir également:
- Warning: PDOStatement::execute(): SQLSTATE[HY093]:
- Warning zone telechargement - Accueil - Services en ligne
- Quota warning free - Guide
- Pcl xl error warning illegal media type - Forum Imprimante
- Téléchargement direct : les bonnes adresses des sites pirates - Accueil - Outils
- Cpu fan fail warning control - Forum Windows
6 réponses
yg_be
Messages postés
23352
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
27 novembre 2024
Ambassadeur
1 554
29 juin 2021 à 16:28
29 juin 2021 à 16:28
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?
jordane45
Messages postés
38314
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
24 novembre 2024
4 705
29 juin 2021 à 17:44
29 juin 2021 à 17:44
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
yves_2021
Messages postés
6
Date d'inscription
mardi 29 juin 2021
Statut
Membre
Dernière intervention
2 juillet 2021
1 juil. 2021 à 13:00
1 juil. 2021 à 13:00
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
jordane45
Messages postés
38314
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
24 novembre 2024
4 705
1 juil. 2021 à 13:19
1 juil. 2021 à 13:19
Tu as instancie la classe ?
Je ne le vois pas dans le code que tu nous montres...
N'aurais-tu pas oublié d'inclure le fichier de connexion à la base ?
Je ne le vois pas dans le code que tu nous montres...
N'aurais-tu pas oublié d'inclure le fichier de connexion à la base ?
yves_2021
Messages postés
6
Date d'inscription
mardi 29 juin 2021
Statut
Membre
Dernière intervention
2 juillet 2021
2 juil. 2021 à 01:55
2 juil. 2021 à 01:55
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); ?>
jordane45
Messages postés
38314
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
24 novembre 2024
4 705
2 juil. 2021 à 07:06
2 juil. 2021 à 07:06
Alors.. ta variable se nomme $DB
et toi, ligne 23, tu as utilisé $Db
et toi, ligne 23, tu as utilisé $Db
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
yves_2021
Messages postés
6
Date d'inscription
mardi 29 juin 2021
Statut
Membre
Dernière intervention
2 juillet 2021
2 juil. 2021 à 14:30
2 juil. 2021 à 14:30
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!
yg_be
Messages postés
23352
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
27 novembre 2024
1 554
2 juil. 2021 à 14:58
2 juil. 2021 à 14:58
comprends-tu le message d'erreur:
je pense qu'il t'indique que tu prepare() n'existe pas dans la classe Db.
Call to undefined method Db::prepare()?
je pense qu'il t'indique que tu prepare() n'existe pas dans la classe Db.
jordane45
Messages postés
38314
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
24 novembre 2024
4 705
2 juil. 2021 à 18:02
2 juil. 2021 à 18:02
A la place de tes lignes 23 24, 25
Utilises la méthode tquery de ta class Db.
Utilises la méthode tquery de ta class Db.
yves_2021
Messages postés
6
Date d'inscription
mardi 29 juin 2021
Statut
Membre
Dernière intervention
2 juillet 2021
2 juil. 2021 à 14:55
2 juil. 2021 à 14:55
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