Bonjour à tous,
Je créer actuellement un livre d'or pour un site, en PHP ( fonction PDO ) et je suis confronté à quelques petits soucis.
Ayant déjà créé précédemment un système d'inscription, j'ai essayé de reprendre le même principe pour créer un livre d'or.
Dans un premier temps, j'aimerais faire en sorte que le message de l'internaute soit posté correctement sur le site avec son pseudo, sont message et la date d'édition du message ( également ajouter une note entre 1 et 10 mais à voir plus tard ^^ ).
Une erreur apparaît lors de l'envoie de donnée :
Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[HY093]: Invalid parameter number: parameter was not defined' in /home/croba/public_html/signaturelivreor.php:12 Stack trace: #0 /home/croba/public_html/signaturelivreor.php(12): PDOStatement->execute(Array) #1 {main} thrown in /home/croba/public_html/signaturelivreor.php on line 12
voici ma page livreor.php :
<?php session_start(); ?>
<!DOCTYPE HTML>
<html>
<head>
<link href="mafavicon.png" rel="shortcut icon" title="montitre" type="image/png" />
<link href="css1.css" rel="stylesheet" type="text/css">
<title>Livre d'or / Laissez votre avis par rapport au site, aux artistes, et divers sujets.</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="description" content="Livre d'or, donner votre avis, sur les artistes, le site ou d'autres thèmes." />
<meta name="keywords" content="livre d'or, avis, commentaires, messages, site, notation, sujet" />
</head>
<body>
<div id="container">
<?php include("header.inc.php"); ?>
<?php include("menus.inc.php"); ?>
<div id="corpslivreor">
<div id="retourselect">
<a href="livreor.php" title="recharger la page"><h1 class="titre1">Livre d'or</h1></a>
</div>
<div id="textelivreor">
<p class="texte2">Ici, vous pourrez donner votre avis par rapport au site, aux artistes ou autres sujets...</p>
</div>
<?php require_once("connexionlivreor.inc.php"); ?>
<?php
$reponse = $bdd->prepare('SELECT membre_pseudo,messagelo,note,dateedit FROM commentaire ORDER BY dateedit DESC');
$reponse->execute();
$nb_signature = $reponse->fetch();
if ($nb_signature==0)
{
echo '<p class="textewarning">'."aucune signature.".'<p>';
}
else {
?>
<?php
while ($data = $reponse->fetch())
echo htmlspecialchars($data'membre_pseudo']);
echo htmlspecialchars($data'messagelo']);
echo htmlspecialchars($data'note']);
echo htmlspecialchars($data'dateedit']);
} $reponse->closeCursor(); ?>
<form action="signaturelivreor.php" method="post">
<fieldset>
<p class="classinscr"><label>Votre pseudo :
<input type="text" name="membre_pseudo" />
</label>
</p>
<p class="classinscr">
<label>Votre message :
<input type="text" name="messagelo" />
</label>
</p>
<p class="classinscr">
<label>donnez une note :
<input type="text" name="note" />
</label>
</p>
<p class="classinscr">
<label>
<input type="submit" name="submit" value="envoyer" />
</label>
</p>
</fieldset>
</form>
<?php include("signaturelivreor.php"); ?>
</div>
<?php include("footer.inc.php"); ?>
</div>
</body>
</html>
et voici ma seconde page permettant l'insertion des données signaturelivreor.php :
<?php session_start(); ?>
<?php
if ((isset($_POST'membre_pseudo'])) && (isset($_POST'messagelo']))) {
// si les 3 variables ne sont pas vides, et si l'adresse E-mail est valide, alors, et seulement dans ce cas, on fera notre insertion dans la base
if ((!empty($_POST'membre_pseudo'])) && (!empty($_POST'messagelo']))) {
require_once("connexionlivreor.inc.php");
// on prepare notre requête d'insertion des données
$reponse = $bdd->prepare('INSERT INTO commentaire (membre_pseudo,messagelo,note,dateedit) VALUES (:membre_pseudo,:messagelo,:dateedit,CURDATE())');
$reponse->execute(array('membre_pseudo'=>$_POST'membre_pseudo'], 'messagelo'=>$_POST'messagelo'], 'note'=>$_POST'note']));
// on ferme la connexion à la base de données
// on redirige le visiteur vers l'accueil du livre d'or
header('Location: livreor.php');
}
else {
echo "Au moins un des champs est vide.";
}
}
?>
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>laissez votre signature, vos commentaires et votre note</title>
</head>
<body>
</body>
</html>
Merci beaucoup pour votre attention et votre aide.
Bonjour merci pour vos réponse :),
J'ai trouvé la solution :
J'ai retiré le système de notation pour le moment
signaturelo.php :
<?php session_start();
header('Location: livreor.php');
if(isset($_POST'SendSignature'])){
if(!empty($_POST'membre_pseudo']) && !empty($_POST'messagelo'])){
require_once("connexionlivreor.inc.php");
$reponse = $bdd->prepare('INSERT INTO commentaire (membre_pseudo,messagelo,dateedit) VALUES (:membre_pseudo,:messagelo,Now())'); $reponse->execute(array('membre_pseudo'=>$_POST'membre_pseudo'],'messagelo'=>$_POST'messagelo']));
} else {
echo "Au moins un des champs est vide.";
}
}
?>
Merci encore pour votre aide =).
$reponse = $bdd->prepare('INSERT INTO commentaire (membre_pseudo,messagelo,note,dateedit) VALUES (:membre_pseudo,:messagelo,:dateedit,CURDATE())');
$reponse->execute(array('membre_pseudo'=>$_POST'membre_pseudo'], 'messagelo'=>$_POST'messagelo'], 'note'=>$_POST'note']));
ta requête est bizzare dans un premier temps tu lui demande de mettre le pseudo puis le message puis la note puis la date dans les values il te manque la note.
essaye dans la première ligne de virer la note
]$reponse = $bdd->prepare('INSERT INTO commentaire (membre_pseudo,messagelo,note,dateedit) VALUES (:membre_pseudo,:messagelo,:dateedit,CURDATE())');
et dans la seconde ligne de mettre la date à la place de la note
$reponse->execute(array('membre_pseudo'=>$_POST'membre_pseudo'], 'messagelo'=>$_POST'messagelo'], 'note'=>$_POST'note']));
Re
J'ai corriger ce que tu ma fait remarquer, mais l'erreur cible toujours : $reponse->execute(array('membre_pseudo'=>$_POST'membre_pseudo'], 'messagelo'=>$_POST'messagelo'], 'note'=>$_POST'note']));
:/
Merci pour ton aide,
Sincèrement.
Bonjour,
comme l'a expliqué Djins,il y a 2 problèmes dans tes requêtes :
-
commentaire(membre_pseudo,messagelo,note,dateedit) VALUES(:membre_pseudo,:messagelo,:dateedit,CURDATE())
ici les paramètres ne correspondent pas (tu inserts :dateedit dans note et CURDATE() dans dateedit)
-
execute(array('membre_pseudo'=>$_POST'membre_pseudo'], 'messagelo'=>$_POST'messagelo'], 'note'=>$_POST'note']));
ici tu mets dans le tableau 'note' => $_POST'note'] mais la note en question n'existe pas dans ta requête d'insert.
Essaye le code suivant et ça devrait fonctionner :
$reponse = $bdd->prepare('INSERT INTO commentaire (membre_pseudo,messagelo,note,dateedit) VALUES (:membre_pseudo,:messagelo,:note,CURDATE())');
$reponse->execute(array('membre_pseudo'=>$_POST'membre_pseudo'], 'messagelo'=>$_POST'messagelo'], 'note'=>$_POST'note']));
Re, merci pour vos réponses,
sa ne fonctionne toujours pas :/ j'ai retiré 'note' mais même sans, toujours le même problème je ne comprend pas..., j'essaye de régler une erreur qui apparaît également dans la page livreor.php
Parse error: syntax error, unexpected $end in /home/croba286/public_html/livreor.php on line 79
je suis totalement perdu...
ma page livreor.php
<?php session_start(); ?>
<?php require_once("connexionlivreor.inc.php"); ?>
<?php
$reponse = $bdd->prepare('SELECT membre_pseudo,messagelo,note,dateedit FROM commentaire ORDER BY dateedit DESC');
$reponse->execute();
$nb_signature = $reponse->fetch();
if ($nb_signature==0)
{
?>
<!DOCTYPE HTML>
<html>
<head>
<link href="mafavicon.png" rel="shortcut icon" title="crobara2bal" type="image/png" />
<link href="css1.css" rel="stylesheet" type="text/css">
<title>Livre d'or / Laissez votre avis par rapport au site, aux artistes, et divers sujets.</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="description" content="Livre d'or, donner votre avis, sur les artistes, le site ou d'autres thèmes." />
<meta name="keywords" content="livre d'or, avis, commentaires, messages, site, notation, sujet" />
</head>
<body>
<div id="container">
<?php include("header.inc.php"); ?>
<?php include("menus.inc.php"); ?>
<div id="corpslivreor">
<div id="retourselect">
<a href="livreor.php" title="recharger la page"><h1 class="titre1">Livre d'or</h1></a>
</div>
<div id="textelivreor">
<p class="texte2">Ici, vous pourrez donner votre avis par rapport au site, aux artistes ou autres sujets...</p>
</div>
<?php
echo '<p class="textewarning">'."aucune signature.".'<p>';
}
else {
?>
<?php
while ($data = $reponse->fetch()) ?>
<?php echo htmlspecialchars($data'membre_pseudo']);
echo htmlspecialchars($data'messagelo']);
echo htmlspecialchars($data'note']);
echo htmlspecialchars($data'dateedit']); ?>
<?php $reponse->closeCursor(); ?>
<form action="signaturelivreor.php" method="post">
<fieldset>
<p class="classinscr"><label>Votre pseudo :
<input type="text" name="membre_pseudo" />
</label>
</p>
<p class="classinscr">
<label>Votre message :
<input type="text" name="messagelo" />
</label>
</p>
<p class="classinscr">
<label>donnez une note :
<input type="text" name="note" />
</label>
</p>
<p class="classinscr">
<label>
<input type="submit" name="submit" value="envoyer" />
</label>
</p>
</fieldset>
</form>
</div>
<?php include("footer.inc.php"); ?>
</div>
</body>
</html>
Merci pour votre attention et votre aide.
Je vois qu'il y a encore le champ note que tu fais en select et dans ton echo ligne 47.
Si tu n'a pas de note encore tu devrais y enlever aussi et y aller petit a petit pour y voir plus clair !