Donc je tiens à préciser que je suis débutant en php mais que j'arrive en temps normal a envoyer des informations dans la base de données avec un formulaire.
Sauf que dans ce cas présent je ne vois pas comment faire car je doute qu'il soit possible de transformer ça en formulaire et sans input ou button je ne vois pas comment faire. :/
Oui le paramètre d'url peut être une bonne idée mais le problème c'est que j'utilise déjà cette méthode pour afficher mes news : http://monsite/home/?module=actualite&id=1
Donc je ne sais pas si ça peut vraiment se faire par dessus ça ?
Ouai, tu as pas mis l'id dans les liens. Il faut que tu récupère l'id du je sais pas quoi que tu veux noter et que tu l'ajoute dans chaque lien, un truc du genre
Ah ouai et ta requête est fausse aussi. Je connais pas ta table, mais tu devrais suivre le modèle INSERT INTO matable(champ1,champ2,etc) VALUES(?,?,?,...) .
- Edité par Etoile Filante 16 novembre 2014 à 14:49:18
"Working on my five-year plan. Just need to choose a font"- Chuck Bartowski
Seul problème ça me renvoie une erreur au clique d'une étoile :
Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '?stars=5' at line 1' in /public_html/home/modules/module-actualite.php:83 Stack trace: #0 /public_html/home/modules/module-actualite.php(83): PDO->query('SELECT id, titr...') #1 /public_html/home/html_base/page_html.php(78): require('/public_html/ho...') #2 /public_html/home/index.php(37): require('/public_html/ac...') #3 {main} thrown in /public_html/home/modules/module-actualite.php on line 83
Voici la ligne 83 de mon module actualité en question :
<?php
$getNewsQuery = $bdd->query("SELECT id, titre, posteur, contenu, DATE_FORMAT(date, '%d/%m/%Y') AS date, ' FROM `actualite` WHERE id=".$_GET['id']);
$getNews = $getNewsQuery->fetch();
?>
Yep, sois avec des cookies (pas très sur) soit dans la bdd. Dans la bdd, tu peut créer une table votes avec l'id des personnes qui ont voté et pour lequel, et avant d'inserer dans la bdd un vote tu vérifie qu'il n'y a pas déjà une entrée.
- Edité par Etoile Filante 16 novembre 2014 à 15:19:02
"Working on my five-year plan. Just need to choose a font"- Chuck Bartowski
<?php
$posteur = $bdd->quote($_SESSION['id']);
$id_actualite= $bdd->quote($_GET['id']);
$getNewsQuery = $bdd->query("SELECT * FROM `notation` WHERE posteur=$posteur AND id_actualite=$id_actualite");
if( $getNewsQuery->fetch() !== false )
{
// Le visiteur a déjà voté car on a trouvé un enregistrement
}
else
{
echo '<div class="rating rating2"><!--
--><a href="?mod=actualite&id='.$_GET['id'].'&stars=5" title="Give 5 stars">★</a><!--
--><a href="?mod=actualite&id='.$_GET['id'].'&stars=4" title="Give 4 stars">★</a><!--
--><a href="?mod=actualite&id='.$_GET['id'].'&stars=3" title="Give 3 stars">★</a><!--
--><a href="?mod=actualite&id='.$_GET['id'].'&stars=2" title="Give 2 stars">★</a><!--
--><a href="?mod=actualite&id='.$_GET['id'].'&stars=1" title="Give 1 star">★</a>
</div>';
}
?>
D'accord merci, j'ai testé ça et ça vérifie si le membre a déjà voté. S'il a déjà voté alors ça n'affiche rien sauf que je voudrais que s'il a déjà voté, que ça affiche son vote en étoile mais je ne vois pas du tout comment faire.
Oula, je vois pas du tout comment sécuriser l'url par contre et c'est embêtant car n'importe qui peut voter plusieurs fois du coup en rentrant simplement l'url. :/
J'ai pas du être clair, il ne s'agit pas de sécuriser l'url, car on ne peut pas empêcher un utilisateur d'écrire une url.
Ce que je voulais dire c'est que quand tu es sur l'url et que tu as recu les paramètres, avant de les insérer, tu fais une requête pour vérifier que l'utilisateur n'a pas déjà mis une note.
En gros, tu fais un SELECT * FROM table WHERE id_utilisateur=? , blablbabla, puis si rowCount>0 alors tu lui dis qu'il à déjà voté, sinon tu insert.
"Working on my five-year plan. Just need to choose a font"- Chuck Bartowski
Mais comme dis précédemment, ta requête est fausse, car quand tu mets posteur=$posteur, la requête ne sait pas que tu parle de la variable posteur, il faudrait faire posteur='.$posteur.' pour échapper à la requête. Sauf que là tu as changé le mot query vers prepare, donc il faut ajouter une execution de cette requête.
- Edité par Etoile Filante 16 novembre 2014 à 16:16:26
"Working on my five-year plan. Just need to choose a font"- Chuck Bartowski
<?php
// Si le membre a déjà voté, affichage du nombre d'étoiles
// Etoiles jaunes
$i = 0;
while ($i != $vote) {
echo $etoilejaune;
$i++;}
// Etoiles grises
$i = 0;
while ($i != (10 - $vote)) {
echo $etoilegrise;
$i++;}
?>
Evidemment c'est très simplifié comme code. Tu peux très bien utilisé for au lieu de while. Dans mon script, $vote est le nombre que tu obtiens de la base de données, $etoilejaune est le code html de ton étoile jaune et idem pour $etoilegrise
Donc en fait, c'est un peu ce que j'ai fais à la 4ème ligne de mon code, non ?
$getNewsQuery = $bdd->query("SELECT * FROM `note` WHERE posteur=$posteur AND id_actualite=$id_actualite");
Il faut juste que je remplace le $vote par $getNewsQuery ?
Notation étoile et envoie dans la base de données
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
il faudrait