Warning: PDOStatement::execute():

Résolu/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:15
yg_be Messages postés 22708 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 20 avril 2024 - 29 juin 2021 à 16:16
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

<?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

1 réponse

yg_be Messages postés 22708 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 20 avril 2024 1 474
29 juin 2021 à 16:16
bonjour,
merci d'appliquer ceci quand tu partages du code:
https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
0