Livre d'or
Résolu
reverb94
Messages postés
106
Date d'inscription
Statut
Membre
Dernière intervention
-
reverb94 Messages postés 106 Date d'inscription Statut Membre Dernière intervention -
reverb94 Messages postés 106 Date d'inscription Statut Membre Dernière intervention -
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 :
et voici ma seconde page permettant l'insertion des données signaturelivreor.php :
Merci pour votre attention et votre aide.
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 pour votre attention et votre aide.
A voir également:
- Livre d'or
- Or - Guide
- Télécharger livre de lecture ce2 gratuit pdf - Télécharger - Éducatifs
- Livre coran en français pdf - Télécharger - Histoire & Religion
- Request header or cookie too large - Forum Webmastering
- Malheureusement, votre colissimo ne peut pas être livré. - Forum Consommation & Internet
3 réponses
salut,
dans un premier temps affiche les données en post
afin de vérifier ce que tu récupère. ensuite, je n'ai pas tout regardé en détail donc je te laisse vérifier, mais dans le cas où l'utilisateur met des caractères spéciaux dans son commentaire. pour les gérer tu as la fonction mysql_real_escape_string
exemple :
dis moi ce qu'il en est.
naga
dans un premier temps affiche les données en post
<pre> print_r($_POST); </pre>
afin de vérifier ce que tu récupère. ensuite, je n'ai pas tout regardé en détail donc je te laisse vérifier, mais dans le cas où l'utilisateur met des caractères spéciaux dans son commentaire. pour les gérer tu as la fonction mysql_real_escape_string
exemple :
$note = mysql_real_escape_string($_POST['note']);<br/>
dis moi ce qu'il en est.
naga
Salut,
Tu t'es un peu emmêlé les pinceaux sur ta requête préparée.
Ca devrait être
$reponse = $bdd->prepare('INSERT INTO commentaire (membre_pseudo,messagelo,note,dateedit) VALUES (:membre_pseudo,:messagelo,:note,CURDATE())');
puisque c'est ce que tu a utilisé lors de ton 'binding' au lieu de
$reponse = $bdd->prepare('INSERT INTO commentaire (membre_pseudo,messagelo,note,dateedit) VALUES (:membre_pseudo,:messagelo,:dateedit,CURDATE())');
cause pour laquelle le moteur PHP ne trouve pas les bons paramètres. Pour la suite c'est nickel ;)
Tu t'es un peu emmêlé les pinceaux sur ta requête préparée.
Ca devrait être
$reponse = $bdd->prepare('INSERT INTO commentaire (membre_pseudo,messagelo,note,dateedit) VALUES (:membre_pseudo,:messagelo,:note,CURDATE())');
puisque c'est ce que tu a utilisé lors de ton 'binding' au lieu de
$reponse = $bdd->prepare('INSERT INTO commentaire (membre_pseudo,messagelo,note,dateedit) VALUES (:membre_pseudo,:messagelo,:dateedit,CURDATE())');
cause pour laquelle le moteur PHP ne trouve pas les bons paramètres. Pour la suite c'est nickel ;)
Oui je sais que tu prends la date automatiquement avec CURDATE (tu peux même essayer avec NOW() pour avoir et la date et l'heure, mais il faut que le champ dans ta table soit de type datetime), mais c'est dans le nom de tes marqueurs ou tu t'es trompé, t'as ajouté un marqueur :dateedit que tu ne 'bind' pas mais c'est plutôt :note que t'as 'bindé' par la suite donc c'est ce que tu devrais utiliser dans ta requête.
Bonjour à tous,
N'ayant pas définie la variable note, je l'ai supprimé provisoirement pour m'évité quelques soucis, la requêtes fonctionne parfaitement de la manière suivante :)
Voilà ^^ merci encore pour votre aide.
N'ayant pas définie la variable note, je l'ai supprimé provisoirement pour m'évité quelques soucis, la requêtes fonctionne parfaitement de la manière suivante :)
$reponse = $bdd->prepare('INSERT INTO commentaire (membre_pseudo,messagelo,dateedit) VALUES (:membre_pseudo,:messagelo,Now())'); // ou CURDATE pour avoir juste la date jour mois année
Voilà ^^ merci encore pour votre aide.