Faie un systéme de vote par étoile

Résolu/Fermé
will.smith Messages postés 256 Date d'inscription jeudi 18 septembre 2008 Statut Membre Dernière intervention 27 mars 2010 - 31 oct. 2008 à 11:42
 fernande - 5 avril 2016 à 12:08
Bonjour,

j'ai fais un petit systéme de vote par étoile

donc j'aimerais que les gens met 1 à 10 tout dépendra de sa note

et en fonction de ca ça mettras progréssivement les étoiles rouges

et aussi j'aimerais que chaque membre vote une fois par jour donc il faudras récupére le ip pour évété que les gens vote 2 où 3 fois dans une journée

voilà la page :

http://forum.exemple.free.fr/windows_live_messenger.php

et le code :

	  <li><div class="texte_blanc">Votre Note :
	  <img src="images/notes/rouge.gif" id='_1' onclick="valider()" onmouseover="rate(1)" />
	  <img src="images/notes/rouge.gif" id='_2' onclick="valider()" onmouseover="rate(2)" />
	  <img src="images/notes/rouge.gif" id='_3' onclick="valider()" onmouseover="rate(3)" />
	  <img src="images/notes/rouge.gif" id='_4' onclick="valider()" onmouseover="rate(4)" />
	  <img src="images/notes/rouge.gif" id='_5' onclick="valider()"  onmouseover="rate(5)" />
<select id=\"note\" name=\"note\">
<option value="10">10</option>
<option value="9">9</option>
<option value="8">8</option>
<option value="7">7</option>
<option value="6">6</option>
<option value=\"5">5</option>
 <option value=\"4">4</option>
  <option value=\"3">3</option>
  <option value=\"2">2</option>
      <option value=\"1">1</option>
	   <option value=\"0">0</option>
</select>  
	  </div></li></ul>

mais je ne sais pas comment on fait pour que les gens clique sur 7 par éxemple et progréssivement ça mettras les étoiles rouges

peux etre il faudras rajouté à ma table sql les voté en étoiles vous me direz

voilà la table que j'ai pensé :

CREATE TABLE IF NOT EXISTS `logiciels` (
  `id_logiciels` bigint(20) NOT NULL auto_increment,
  `fichier` varchar(255) collate latin1_general_ci NOT NULL,
  `telechargements` int(10) NOT NULL default '0',
  `1_etoile` int(10) NOT NULL,
  `2_etoile` int(10) NOT NULL,
  `3_etoile` int(10) NOT NULL,
  `4_etoile` int(10) NOT NULL,
  `5_etoile` int(10) NOT NULL,
  `6_etoile` int(10) NOT NULL,
  `7_etoile` int(10) NOT NULL,
  `8_etoile` int(10) NOT NULL,
  `9_etoile` int(10) NOT NULL,
  `10_etoile` int(10) NOT NULL,
  PRIMARY KEY  (`id_logiciels`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci AUTO_INCREMENT=41 ;



merci de votre aide

12 réponses

the versus Messages postés 5 Date d'inscription samedi 1 novembre 2008 Statut Membre Dernière intervention 1 novembre 2008 5
1 nov. 2008 à 19:27
bonjours will.smith !

j'ai réfléchi pour ton compteur, et je peut te proposé un moyen beaucoup plus simple, reste à toi de programmer ce que je V t'expliqué... ( çà te servirai à rien si tu copiai collait un programme ;) )

tu n'a pas besoin d'autant de colonne pour sauvegarder ton vote alors que 3 suffisent. Je m'explique...

je pensai plutôt a çà comme structure de table :

CREATE TABLE `vote` (
`id` int(20) NOT NULL auto_increment,
`article` varchar(255) collate latin1_general_ci NOT NULL,
`value` int(10) NOT NULL
PRIMARY KEY (`idduvote`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci AUTO_INCREMENT=41 ;

par exemple, tu veut que les visiteur vote pour l'article "nouveau magnétoscope : un scandale en 2008" =) il vote, de 1 à 10 suivant ton cahier des charges et tu faite une requette :

INSERT INTO `vote` ( `id `, `article`, `value` )
VALUES ( NULL, 'nouveau magnétoscope : un scandale en 2008', '".$valeur_du_vote_efectuer_par_le_visiteur."');

ensuite, pour retrouver la valeur du vote correspondant à cet article en question, tu fait :
SELECT * FROM vote WHERE `article ` = 'nouveau magnétoscope : un scandale en 2008';

tu additionne tout les valeurs de la colonne 'value' et tu soustrait par le nombre de ligne obtenu, et VOILA, tu à ta note sur 10 !

reste plus qu'a découpé ta note par un "." et tu obtion le nombre d'étoile à imprimé.

Avec ma solution, 1 seule table suffit pour l'infini d'article... pour ce qui est de l'adresse IP pour évité 2 vote, il suffit que tu rajoute 1 colonne avec l'adresse $IPduclient.$date_du_jour, et avant d'entré sont vote, tu vérifies qu'il n'existe aucune ligne correspondant à l'article voté et à $IPduclient.$date_du_jour dans ta 4 ème colonne...

je t'ai pondu cette solution sans même avoir programmer le raisonnement, mais il me parait impeccable ;)

J'espère avoir été compris, et j'espère que tu y arrivera, et excusez moi pour les fautes de français éventuels.
4
Facile, sans base de donénes à installer et surtout gratuit : http://ww1.votxo.com est un systeme de votes avec etoiles pour webmaster.
4
the versus Messages postés 5 Date d'inscription samedi 1 novembre 2008 Statut Membre Dernière intervention 1 novembre 2008 5
1 nov. 2008 à 21:30
donc, voici le code dejà pour une 1ère étape, sn s le serquette my SQL

<?php
$vote = $_POST['vote'];

if ( $vote !="" ) {
echo "coucou ".$vote ;
exit;
}
?>
<html>
<head>
<LINK rel="stylesheet" type="text/css" href="styles.css"/>
<style type="text/css">
img#star{
border: none;
}
</style>
<script>

var n = 10;
function init(){
var html = '';
for (i=0; i<n; i++){
id = i+1;
html += '<a href="#"><img src="starOut.png" ';
html += 'id="star" value="off" ';
html += 'onMouseOver="over('+id+');" ';
html += 'onMouseOut="out('+id+');" ';
html += 'onClick="on('+id+')"/></a>'
}
document.getElementById("classement").innerHTML = html;
}

function over(nb){
elemClassement = document.getElementById("classement");
tabImg = elemClassement.getElementsByTagName("img");

if (nb > 0)
for (i=0; i<nb; i++)
tabImg[i].src="starOver.png";
for (i=nb; i<n; i++)
tabImg[i].src="starOut.png";
}

function out(nb){
elemClassement = document.getElementById("classement");
tabImg = elemClassement.getElementsByTagName("img");

for (i=0; i<nb; i++)
tabImg[i].src="starOut.png";
for (i=0; i<n; i++){
if (tabImg[i].value == "on")
tabImg[i].src="starOn.png";
}
}

function on(nb)
{
elemClassement = document.getElementById("classement");
tabImg = elemClassement.getElementsByTagName("img");

for (i=0; i<nb; i++){
tabImg[i].src="starOn.png";
tabImg[i].value="on";
}
for (i=nb; i<n; i++){
tabImg[i].src="starOut.png";
tabImg[i].value="off";
}
/*
elemComment = document.getElementById("commentaire");
text = nb+" étoiles";
elemComment.innerHTML = text;
*/

http = createRequestObject();
http.open('post', 'index.php', true);
document.getElementById("commentaire").innerHTML = "chargement" ;

http.onreadystatechange = function () {
if ( http.readyState == 4 ) {
if( http.status == 200 ) {
document.getElementById("commentaire").innerHTML = http.responseText ;
}
}
};

http.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
http.send("vote="+nb);
}

//new

var http;

function createRequestObject()
{
var http;

// Mozilla, Safari, ...
if(window.XMLHttpRequest) {
http = new XMLHttpRequest();
}

// Internet Explorer
else if(window.ActiveXObject) {
http = new ActiveXObject("Microsoft.XMLHTTP");
}

return http;
}

</script>
</head>

<body>
<div id="classement" name="cls">
<script>init();</script>
</div><br>
<div id="commentaire"></div>
</body>
</html>
1
Utilisateur anonyme
20 déc. 2008 à 09:32
bonjour,
Merci pour ce script,
mais mon problèm c'est:
Comment appliqué ce script pour chaque article, sans le répéter pour chacune et merci d'avance pour votre aide .
0
manelsousse Messages postés 59 Date d'inscription lundi 10 mars 2008 Statut Membre Dernière intervention 18 août 2009
15 août 2009 à 12:32
bonjour,
jai copier votre code ca ma bp aidé dans la gestion des vote je te remercie bp j'ai intégré le php et la base de donnée dans ce code et vraiment c'est utile et ca marche
0
Bonjour,
comment insérer la valeur du vote dans la base et faire les updates par rapport à chaque internaute
0
Peux tu m'envoyer ton script, pour mon propre site stp :D
1
salut gluzy j'ai adapté un script dans le genre si tu veux je peux te donner la source tu peux voir le script adapté sur http://www.paris-rez.net ensuite tu clique sur un hotel
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
will.smith Messages postés 256 Date d'inscription jeudi 18 septembre 2008 Statut Membre Dernière intervention 27 mars 2010 10
1 nov. 2008 à 17:55
re

on m'a oublié lol mrci de m'aidé
0
will.smith Messages postés 256 Date d'inscription jeudi 18 septembre 2008 Statut Membre Dernière intervention 27 mars 2010 10
1 nov. 2008 à 19:45
merci mais j'ai fais ça donc il marche bien

http://forum.exemple.free.fr/windows_live_messenger.php

donc si tu clique sur le 4 éme étoiles il mais bien validé et ce systéme là que je veux bien

donc voilà le code :

	  <li><div class="texte_blanc">Votre Note: 
<img src="star1.gif" id='_1' onclick="valider()" onmouseover="rate(1)" /><img src="star1.gif" id='_2' onclick="valider()"  onmouseover="rate(2)" /><img src="star1.gif" id='_3' onclick="valider()"  onmouseover="rate(3)" /><img src="star1.gif" id='_4' onclick="valider()"  onmouseover="rate(4)"  /><img src="star1.gif" id='_5' onclick="valider()"  onmouseover="rate(5)"  />
<div id="vote">(0 étoile(s)) </div>


et notes.js

var done=false
var pic = new Array();
pic[0]=new Image();
pic[0].src="../images/notes/gris.gif";
pic[1]=new Image();
pic[1].src="../images/notes/rouge.gif";
var bareme = new Array("peu ","passablement ","moyennement","presque","") 
 
 function rate(level){
 if (done){return false;}
  for(i=1;i<6;i++){ document.getElementById('_'+i).src=(level<i)?pic[0].src:pic[1].src;
  document.getElementById('vote').innerHTML="Votre vote : "+level+" étoile(s)   "+bareme[level-1]+" satisfaisant" 
  }
  }
  
 function zero(){
	 for(i=1;i<6;i++){ document.getElementById('_'+i).src=pic[0].src;
	 done=false;
	 document.getElementById('vote').innerHTML="Votre vote : 0 étoile(s)" 
 
	 }
	 }
 function valider(){
 done=true;
 document.getElementById('vote').innerHTML+='   VALID&Eacute;'
 }


mais j'ai mis ta tables :

avec une érreurs

CREATE TABLE `vote` (

`id` int( 20 ) NOT NULL AUTO_INCREMENT ,
`article` varchar( 255 ) COLLATE latin1_general_ci NOT NULL ,
`value` int( 10 ) NOT NULL PRIMARY KEY ( `idduvote` ) 
) ENGINE = MYISAM DEFAULT CHARSET = latin1 COLLATE = latin1_general_ci AUTO_INCREMENT =41 

MySQL a répondu: 

#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 '(`idduvote`) 
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci ' at line 5 


aprés on verras pour le ip par jour

on fait pas à pas

car là je n'ai pas tout compris ta réponses

merci de m'aidé
0
the versus Messages postés 5 Date d'inscription samedi 1 novembre 2008 Statut Membre Dernière intervention 1 novembre 2008 5
1 nov. 2008 à 20:11
oui...

donc, je V impeu plus détailler, car j'avais fait la requête de création de table à partir de la tienne en espérant qu'elle soit bonne d'origine... Et on va faire pas à pas, mais avec la gestion des IP tout de suite, pour que se soit plus simple pour toi au final ;)

la création de ta table pour sauvegarder tes votes ( elle à été vérifier par mes soins ) :

CREATE TABLE `vote` (
`id` INT( 8 ) NULL AUTO_INCREMENT PRIMARY KEY ,
`article` VARCHAR( 256 ) NOT NULL ,
`value` INT( 2 ) NOT NULL ,
`verifyClient` VARCHAR( 128 ) NOT NULL
) ENGINE = MYISAM CHARACTER SET utf8 COLLATE utf8_unicode_ci COMMENT = 'Table pour enregistrer les vote des articles';

Pour la suite, j'aurai besoin de savoir si tu souhaite faire çà avec AJAX, ou recharger la page ?...
0
will.smith Messages postés 256 Date d'inscription jeudi 18 septembre 2008 Statut Membre Dernière intervention 27 mars 2010 10
20 déc. 2008 à 12:12
lol c'est mon, souci que j'attend toujour lol
0
guigui86 Messages postés 11 Date d'inscription mardi 8 juillet 2008 Statut Membre Dernière intervention 29 mai 2009 12
29 mai 2009 à 17:01
Bonjour,

J'aimerais implémenter ce système de notation sur mon site, je me suis donc inspiré du code que donne "the versus", ça fonctionne plutot bien sauf pour un petit truc qui est important pour moi :
Dans ma page, j'ai un div container qui contient tous les autres bloc div donc ceux pour la notation, mon probléme c'est que dés que je configure un overflow dans mon css pour ce container, la notation ne fonctionne plus ! Enfin plus exactement la partie php (je n'ai pas l'affichage de la note, seulement celui de "chargement")

Voila, j'ai rien trouvé sur le net entre une incompatibilité entre overflow et XMLHttpRequest, j'espère que vous pourrez m'aider
0
guigui86 Messages postés 11 Date d'inscription mardi 8 juillet 2008 Statut Membre Dernière intervention 29 mai 2009 12
29 mai 2009 à 17:26
En fait j'ai trouvé la solution, je me suis un peu mélange les pinceaux dans l'ouverture de la page ;)

Merci quand même :)
0
Utilisateur anonyme
26 janv. 2013 à 21:26
comment fait on pour que le script se connecte a notre base car:
var done=false
var pic = new Array();
pic[0]=new Image();
pic[0].src="../images/notes/gris.gif";
pic[1]=new Image();
pic[1].src="../images/notes/rouge.gif";
var bareme = new Array("peu ","passablement ","moyennement","presque","")

function rate(level){
if (done){return false;}
for(i=1;i<6;i++){ document.getElementById('_'+i).src=(level<i)?pic[0].src:pic[1].src;
document.getElementById('vote').innerHTML="Votre vote : "+level+" étoile(s) "+bareme[level-1]+" satisfaisant"
}
}

function zero(){
for(i=1;i<6;i++){ document.getElementById('_'+i).src=pic[0].src;
done=false;
document.getElementById('vote').innerHTML="Votre vote : 0 étoile(s)"

}
}
function valider(){
done=true;
document.getElementById('vote').innerHTML+=' VALIDÉ'
}

dedans il ny a pas le code pour que sa ce connecte a la base?
0
j'ai lue le sujet cela m'intérèse pour mon forum mais je vais vous l'avoué j'ai 82 ans et j'ai rien compris je voudrais bien qu'une âme charment viennent me le faire
merci
http://fernande-pub.forumgratuit.eu
0