System de vote ajax.

Soyez le premier à donner votre avis sur cette source.

Vue 7 915 fois - Téléchargée 1 223 fois

Description

Un petit system de vote avec étoile.
-Nombre d'étoile modifiable ésement.
-Functionne avec une base de donner
-Un peut de javascript pour le design
-Ajax pour resultat instanner
-Cookie pour évité le post en boucle
-Il n'y a qu'a utiliser un include

Note:
- Marche avec id donc utiliser une id adapter au system de vote.
A vous de trouver comment définir cette idee si vous utiliser plusieur fois "la meme".
- Il n'y a pas encore d'administration.

Merci de commenter, j'ai fait cette source pour apprendre ajax. sont utilation demontre bien le functionnement.

Source / Exemple :


<?php
include("conf.php");
$ID_vote = $_GET['ID_vote'];
$Mod = $_GET['Mod'];
$note = $_GET['note'];

$Total_etoile = 5;

if($note!=''){setcookie('Vote'.$ID_vote,"OK",time()+365*24*5); }
?>
<script type="text/javascript">
function httpRequest(file){
var xhr_object = null; 
if(window.XMLHttpRequest) // Firefox 
   xhr_object = new XMLHttpRequest(); 
else if(window.ActiveXObject) // Internet Explorer 
   xhr_object = new ActiveXObject("Microsoft.XMLHTTP"); 
else { // XMLHttpRequest non supporté par le navigateur 
   alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest..."); 
   return; 
} 

var div = div;
var file = file;

xhr_object.open("GET", file, true); 

xhr_object.onreadystatechange = function() { 
   if(xhr_object.readyState == 4){
//   alert(xhr_object.responseText);
document.getElementById('etoile').innerHTML = xhr_object.responseText;
//document.getElementById('etoile').innerHTML = xhr.responseText;
   }
}  
xhr_object.send(null);
}

function etoile_mouseOver(etoile) 
{document.getElementById("etoile"+etoile).src="etoile_select.png";} 

function etoile_mouseOut(etoile,etat) 
{ 
if(etat == 0){document.getElementById("etoile"+etoile).src="etoile.png";}
else if(etat == 1){document.getElementById("etoile"+etoile).src="etoile_demi.png";}
else if(etat == 2){document.getElementById("etoile"+etoile).src="etoile_fonce.png";}

} 

</script>
<?php

///////////////connection a la db
$connect=mysql_connect($sql_serveur,$sql_user,$sql_pass);
mysql_select_db($sql_db, $connect);
/////////////Fourchette de conditon///////////
if($note!='' and $_COOKIE['Vote'.$ID_vote]!='OK'){
/////////recuperation du prochaine id//////////////
$req1="select max(ID) from vote_index";
$res1=mysql_query($req1);
$idmax1=mysql_result($res1,0,"max(ID)")+1; 

$requete = "INSERT INTO vote_donner (ID, ID_vote, Note) VALUES ('".$idmax1."', '".$ID_vote."','".$note."')";
mysql_query ($requete,$connect);
}

$result=mysql_query("SELECT * FROM vote_donner WHERE ID_vote='".$ID_vote."'");
while($row=mysql_fetch_array($result)){
$Nb_etoile=$Nb_etoile.';'.$row['Note'];
}
$Nb_etoile=split(';',$Nb_etoile);
for ($cpt=0; $cpt<(count($Nb_etoile)); $cpt++){
$temps_etoile = $temps_etoile + $Nb_etoile[$cpt];
}
if($cpt-1!=0){$temps_etoile = $temps_etoile / ($cpt-1);}

////////////affiche image etoile
echo '<div id=etoile>';
///etoile complete pale
$Nb_etoile=str_split($temps_etoile, 1);  
for ($cpt=0; $cpt<($Nb_etoile[0]); $cpt++){
$temps_etoile = $cpt+1;

//////texte alt
if($_COOKIE['Vote'.$ID_vote]!='OK'){
$texte_alt='Voter un '.$temps_etoile;}
else{$texte_alt="Vous avez deja voter.";}

echo '<img id="etoile'.$temps_etoile.'" src="etoile.png" Alt="'.$texte_alt.'" onClick="httpRequest(\'vote.php?ID_vote='.$ID_vote.'&Mod=Mod&note='.$temps_etoile.'\');" onmouseover="etoile_mouseOver('.$temps_etoile.')" onmouseOut="etoile_mouseOut('.$temps_etoile.',0)"/>';
}
If($Nb_etoile[2]!=''){
$temps_etoile = $temps_etoile+1;

//////texte alt
if($_COOKIE['Vote'.$ID_vote]!='OK'){
$texte_alt='Voter un '.$temps_etoile;}
else{$texte_alt="Vous avez deja voter.";}

echo '<img id="etoile'.$temps_etoile.'" src="etoile_demi.png" Alt="'.$texte_alt.'" onClick="httpRequest(\'vote.php?ID_vote='.$ID_vote.'&Mod=Mod&note='.$temps_etoile.'\');" onmouseover="etoile_mouseOver('.$temps_etoile.')" onmouseOut="etoile_mouseOut('.$temps_etoile.',1)"/>';
}
///etoile complete fonce
$Nb_etoile[0] = $Total_etoile-$Nb_etoile[0];
if($Nb_etoile[2]!=''){$Nb_etoile[0] = $Nb_etoile[0]-1;}
for ($cpt=0; $cpt<($Nb_etoile[0]); $cpt++){
$temps_etoile = $temps_etoile+1;

//////texte alt
if($_COOKIE['Vote'.$ID_vote]!='OK'){
$texte_alt='Voter un '.$temps_etoile;}
else{$texte_alt="Vous avez deja voter.";}

echo '<img id="etoile'.$temps_etoile.'" src="etoile_fonce.png" Alt="'.$texte_alt.'" onClick="httpRequest(\'vote.php?ID_vote='.$ID_vote.'&Mod=Mod&note='.$temps_etoile.'\');" onmouseover="etoile_mouseOver('.$temps_etoile.')" onmouseOut="etoile_mouseOut('.$temps_etoile.',2)"/>';
}
echo '</div>';

?>

+ sql

Conclusion :


Y'a qu'a importer la base de donner.
Adapter le fichier conf.php
Ouvrir le fichier ak ?ID_vote=???

Et tester.

Ps: image et sql dans le zip.

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

Messages postés
194
Date d'inscription
dimanche 25 janvier 2004
Statut
Membre
Dernière intervention
11 décembre 2015

Hola tu fais tu déterrage? xD les variables servent à configurer le script.
nb-étoiles sert a dire sur cmb d'étoiles on peut voter.
Id_vote sert a attribuer yb id au vote lui méme.
Mod ne servais plus rien. ( déja 2 ans oula )
note est la note attribuer par les visiteur.

Bon si jme rappelle bien, le but étais tous simplement de re-charger un bout de la page avec de nouveaux paramètres pour php qui servaient à enregistrer les votes dans une base de donner, en faire la moyenne et l'afficher sous forme d'étoiles.

En faite tu peut mettre autant d'étoiles que tu veut. Il faut seulment que tu te rapelle que chaque étoiles vas ajouter un paramètre ID_vote=XX¬e=xx
ex: ID_vote=0¬e=5.

Si on n'a déja 5 entrer dans la base donner ex:
ID_vote=0¬e=5
ID_vote=0¬e=2
ID_vote=0¬e=3
ID_vote=0¬e=1
5+2+3+1/4=2.75
Donc 2 étoiles et une moitier.

Si ID_vote=1 sa veut dire que l'on parle d'un autre sondage.

Point important a retenir. ID_vote sera l'id du "vote lui même" donc tu utilise le script pour plusieur chose fais sure de lui attribuer un numéro bien a lui.

Example noter une photo et un video qui on tous les 2 l'id 0 dans la base de donner. mais ce n'est pas le même vote.

Espérent t'avoir aider un peu, hésite as a me recontacter pour d'autre info.
PS: se code la est pas parfait xd.
Messages postés
3
Date d'inscription
dimanche 20 mai 2012
Statut
Membre
Dernière intervention
21 mai 2012

bonjour,
je demmande une explication détaillée des variable de ce dode source, cest quoi Nb_etoile et ou ce trouve dans une table aider moi S.V.P
J'ai un message d'erreur ici:
}
$Nb_etoile=split(';',$Nb_etoile);
for ($cpt=0; $cpt<(count($Nb_etoile)); $cpt++){
$temps_etoile = $temps_etoile + $Nb_etoile[$cpt];
}
merci
Messages postés
3
Date d'inscription
dimanche 20 mai 2012
Statut
Membre
Dernière intervention
21 mai 2012

bonjour,
j'ai pas arriver a noter ce code source, comment faire ca ?
merci
Messages postés
3
Date d'inscription
dimanche 20 mai 2012
Statut
Membre
Dernière intervention
21 mai 2012

bonjour,
j'ai copier le code source mais j'ai des erreurs la ligne 3,4,5 c'est quoi ID_vote,Mod,note
Merci.
Messages postés
60
Date d'inscription
lundi 1 décembre 2008
Statut
Membre
Dernière intervention
3 janvier 2011

un gros +1 sur les commentaires précédents.

commentaires additionnels:
- code fouilli: séparer js, php, html
- utiliser js non intrusif (function Onload(init)), mais il te faut tout recoder,
- il fait quoi le gentil visiteur si js n'est pas activé dans son navigateur (utiliser balises <noscript>) ?
- utiliser le DOM plutot que innerHTML qui risque de te mener à qq surprises,
- toujours pour la portabilité, utilises le "DOM event" plutot que de jeter des "onclick" partout,- virer les trucs du genre # var div div; # var file file;
- sécuriser tes "$_GET" ! tel que c'est, n'importe qui entre n'importe quoi,
- éviter les cookies pour ce genre de code, utilises eventuellement les sessions si tu en as vraiment besoin,
- injection mysql à prévoir: soit utilises les requetes préparées, soit sécurises le code, soit les 2.

bref, maintenant que tu as défriché le terrain et que tu commences à comprendre ajax, peut-être serait il judicieux de recoder proprement (DOM, mvc, separation de codes, failles securitaires..) avant de passer à une partie "admin". Car tel quel, le code présente trop de failles sécuritaires et n'est absolument pas portable.

Bon courage
Afficher les 15 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.