erreur invalid parameter number
- Accueil
- Forum
- Programmation
- PHP
- erreur invalid parameter number
Freidch Le 20 septembre 2021 à 12:46 (Édité le 1 janvier 1970 à 01:00)
Bonjour a tous, Je rencontre des problèmes lors de l'exécution de ma requête. J'essaye de faire le tuto qui porte sur envoyer des messages privés.
L'erreur suivante s'affiche due à la ligne 13 : Warning: PDOStatement::execute(): SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens
Voici mon code :
<?php
session_start();
$bdd = new PDO('mysql:host=localhost;dbname=test', 'root', '');
if(isset($_SESSION['id']) AND !empty($_SESSION['id']))
{
if(isset($_POST['envoi_message']))
{
if(isset($_POST['destinataire'],$_POST['message']) AND !empty($_POST['destinataire']) AND !empty($_POST['message']))
{
$destinataire = htmlspecialchars($_POST['destinataire']);
$message = htmlspecialchars($_POST['message']);
$id_destinataire = $bdd->prepare('SELECT id FROM membres WHERE nom = ? AND prenom = ?');
$id_destinataire->execute(array($destinataire));
$dest_exist = $id_destinataire->rowCount();
if($dest_exist == 1)
{
$id_destinataire = $id_destinataire->fetch();
$id_destinataire = $id_destinataire['id'];
$ins = $bdd->prepare('INSERT INTO messages(id_expediteur,id_destinataire,message) VALUES (?,?,?)');
$ins->execute(array($_SESSION['id'],$id_destinataire,$message));
$error = "Votre message a bien été envoyé !";
}
else
{
$error = "Cet utilisateur n'existe pas...";
}
}
else
{
$error = "Veuillez compléter tous les champs";
}
}
$destinataires = $bdd->query('SELECT nom, prenom FROM membres ORDER BY nom');
if(isset($_GET['r']) AND !empty($_GET['r']))
{
$r = htmlspecialchars($_GET['r']);
}
?>
<!DOCTYPE html>
<html>
<head>
<title>Envoi de message</title>
<meta charset="utf-8" />
</head>
<body>
<form method="POST">
<label>Destinataire : </label>
<select name="destinataire">
<?php if(isset($r)) { echo 'value="salut"'; } ?>
<?php while($d = $destinataires->fetch()) { ?>
<option><?= $d['nom']; echo ' '; echo $d['prenom']; ?></option>
<?php } ?>
</select>
<br /><br />
<textarea placeholder="Votre message" name="message"></textarea>
<br /><br />
<input type="submit" value="Envoyer" name="envoi_message" />
<br /><br />
<?php if(isset($error)) { echo '<span style="color:red">'.$error.'</span>'; } ?>
</form>
<br />
<a href="reception.php">Boîte de réception</a><br><br><br>
<a href="profil.php?id=<?= $_SESSION['id']?>">Page de profil</a><br><br><br>
</body>
</html>
<?php
}
?>
Merci d'avance pour votre aide
Nooaah Le 21 septembre 2021 à 16:05 (Édité le 21 septembre 2021 à 16:05)
Bonjour,
Ta requête prepare possède 2 paramètre, mais tu n'en bindes qu'une seule.
$id_destinataire = $bdd->prepare('SELECT id FROM membres WHERE nom = ? AND prenom = ?');
$id_destinataire->execute(array($destinataire));
Doit donc être remplacé par :
$id_destinataire = $bdd->prepare('SELECT id FROM membres WHERE nom = ? AND prenom = ?');
$id_destinataire->execute(array($nom, $prenom));
Ou alors, si tu ne possèdes pas ces 2 variables, dans ce cas remplacer par :
$id_destinataire = $bdd->prepare('SELECT id FROM membres WHERE destinataire = ?');
$id_destinataire->execute(array($destinataire));
Bonne journée
Freidch Le 1 octobre 2021 à 10:02 (Édité le 1 janvier 1970 à 01:00)
Salut Noah, Tout d'abord merci pour ta réponse. Lorsque je remplace mon array($destinataire) par array($nom, $prenom), ca me dit que $nom et $prenom sont inconnus. Lorsque j'essaye ta 2e proposition, il n'arrive pas a trouver les membres entrés dans la base de données. Aurais-tu une solution à me proposer ? Je te remercie pour ton aide :)