[Aide] Je cherche un Script de vote

A
Anonymous
Guest
Bonsoir, je viens récemment de m'inscrire sur le forum car j'aimerais avoir un petit peu d'aide.

Quelqu'un aurait un script de vote permettant de mettre +1 ou -1 (ou pouce vert/pouce rouge à la manière de youtube) à des images qui défilent ?

Si quelqu'un pouvait m'aider un petit peu à avancer, ça serait sympa !

Cordialement.
 
WRInaute discret
Bonjour,

suite à de nombreuses recherches j'ai décider d'utiliser ce système de vote :
http://www.technabled.com/2009/02/reddit-style-voting-with-php-mysql-and.html

mais une question me "turllupine" :D

avant de le mettre en service j'aimerais comprendre pourquoi le fichier jquery.pack.js est aussi gros (55ko), je n'y connais rien en jquery et j'aimerais avoir votre avis ?

sa taille est-elle normal ? ne peut-on pas le réduire ?

ajouter un fichier de 55ko à télécharger à chaque accès aux page m'embête un peu :oops:

je vous remercie d'avance pour votre aide précieuse,

amicalement,
Stone66
 
WRInaute discret
Merci pour votre réponse,

je suis chez OVH en mutualiser, j'imagine que l'option est activé par défaut !!!?

je ne préfère pas utiliser un fichier externe pour des questions de sécurité ( j'ai peut-être tord mais c'est psychologique !).
il est donc normal que mon fichier jquery soit aussi volumineux ?

amicalement,
stone66
 
WRInaute accro
Tu regardes les entêtes HTTP pour l'URL de ton fichier JS, et si tu vois: Content-Encoding: gzip c'est que c'est bien gzippé.
Il n'y a pas de danger à utiliser jQuery à partir des 2 CDN que j'ai cité. C'est avantageux car pleins de sites les utilisent et ces scripts ont bcp de chance d'être déjà en cache dans le navigateur du visiteur.
En tout cas c'est moins dangereux que d'avoir installé un script PHP dont tu maitrises pas le code et qui n'échappe pas les données lors du update :D
 
WRInaute accro
spout a dit:
En tout cas c'est moins dangereux que d'avoir installé un script PHP...
Code:
$q = "UPDATE entries SET votes_down = $votes_down WHERE id = $id";
:D c'est cool ont peut faire du vote de masse.

@stone66 : D'un autre point de vue passer par des bibliothèques JS pour faire des trucs aussi simple c'est pas un peut prendre un bulldozer pour déterrer un radis ? Parce ce que cliquez sur une image pour solliciter un script côté serveur qui va faire +1 ou -1 faut pas être ingénieur non plu ...
Idem composer des pages en fonction d'une BDD d'images c'est pas "super sport" non plu.
 
WRInaute discret
zeb a dit:
:D c'est cool ont peut faire du vote de masse.

@zeb : tu peux développer ?

Je ne peux pas faire le script moi-même car je ne connais ni javascript, ni ajax ni aucun language qui me permet de voter et d'afficher le résultat sans rafraichissement de la page et je ne crois pas que PHP sache le faire ?

Tous les systèmes de votes que j'ai parcouru sont où trop complexe pour ce que je veux faire ou bourrés de failles !

celui-ci je le trouvais pas mal pour une fois, j'y ai juste ajouter l'utilisation des cookies pour ne pouvoir voter qu'une fois par jour...
 
WRInaute accro
Code:
$q = "UPDATE entries SET votes_down = $votes_down WHERE id = $id";
ça c'est une ligne de code vue sur la page que tu indique, ou la variable $id est utilisée pour attaquer la base de données sans aucun controle si je ne me trompe donc rien ne m'empêche d'envoyer une requête où la variable id contiendra un truc du genre "1 or id!=1" ce qui aura pour effet d'affecter tous les records de la table (comme te le faisait remarquer Spout)
Et çà c'est un exemple "gentil".

afficher le résultat sans rafraichissement de la page et je ne crois pas que PHP sache le faire ?
Si c'est très possible et même assez simple mais bien sur faut un peut mettre le nez dans javascript (donc de facto ajax)

Dans le principe php te génère une page contenant tes photos et leur vote disons que ce vote avec les boutons (ou images) + et - sont situés dans une <div id="Vote123"></div>

le clic sur le bouton + ou - via 3/4 lignes d'ajax (en fait de javascript qui génère un objet "XMLHttpRequest") va appeler (sans rechargement de page) un script côté serveur en php.
Ce script appelé sera chargé de faire plus 1 ou moins 1 dans la base (c'est d'ailleur le même genre que celui que nous citons ici) et il produira via un "echo" php une sortie texte que tu pourra inclure dans ta div qui avait été chargée a l'origine dans la page.

donc en gros :

on affiche une page HTML avec les options a cliquer pour + et -
on clique sur + ou -
ça déclanche un javascript (onclick sur l'image par exemple)
le javascript appel le serveur sur une url précise
le script serveur fait son job (+ ou - en base)
le script renvoie un contenu html formaté avec la nouvelle valeur de + ou -
le javascript appelant reçoit la réponse du script php
le javascrit change le contenu de la page (la div "vote123" ci dessus) et affiche donc le nouveau vote.

en pratique si ta page contient un truc du genre :
PHP:
<span class="syntaxdefault"></span><span class="syntaxkeyword"><</span><span class="syntaxdefault">div id</span><span class="syntaxkeyword">=</span><span class="syntaxstring">"vote123"</span><span class="syntaxkeyword">><br /></span><span class="syntaxdefault">   5 plus </span><span class="syntaxkeyword"><</span><span class="syntaxdefault">img src</span><span class="syntaxkeyword">=</span><span class="syntaxstring">"voteplus.jpg"</span><span class="syntaxdefault"> onclick</span><span class="syntaxkeyword">=</span><span class="syntaxstring">"voteplus('123');"</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">/><</span><span class="syntaxdefault">br</span><span class="syntaxkeyword">/><br /></span><span class="syntaxdefault">   6 moins </span><span class="syntaxkeyword"><</span><span class="syntaxdefault">img src</span><span class="syntaxkeyword">=</span><span class="syntaxstring">"votemoins.jpg"</span><span class="syntaxdefault"> onclick</span><span class="syntaxkeyword">=</span><span class="syntaxstring">"votemoins('123');"</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">/><</span><span class="syntaxdefault">br</span><span class="syntaxkeyword">/><br /></</span><span class="syntaxdefault">div</span><span class="syntaxkeyword">></span><span class="syntaxdefault"> </span>
Plus le code javascript / ajax suivant (te met juste l'exemple du plus):
PHP:
<span class="syntaxdefault">function voteplus</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">x</span><span class="syntaxkeyword">){<br /></span><span class="syntaxdefault">   </span><span class="syntaxcomment">// créer l'objet ajax<br /></span><span class="syntaxdefault">   var xhr</span><span class="syntaxkeyword">=</span><span class="syntaxdefault">null</span><span class="syntaxkeyword">;<br /></span><span class="syntaxdefault">   if</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">window</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">XMLHttpRequest</span><span class="syntaxkeyword">){</span><span class="syntaxdefault">xhr</span><span class="syntaxkeyword">=</span><span class="syntaxdefault">new XMLHttpRequest</span><span class="syntaxkeyword">();}<br /></span><span class="syntaxdefault">   else if</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">window</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">ActiveXObject</span><span class="syntaxkeyword">){</span><span class="syntaxdefault">xhr</span><span class="syntaxkeyword">=</span><span class="syntaxdefault">new ActiveXObject</span><span class="syntaxkeyword">(</span><span class="syntaxstring">"Microsoft.XMLHTTP"</span><span class="syntaxkeyword">);}<br /><br /></span><span class="syntaxdefault">   </span><span class="syntaxcomment">// appeler le serveur<br /></span><span class="syntaxdefault">   xhr</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">open</span><span class="syntaxkeyword">(</span><span class="syntaxstring">"GET"</span><span class="syntaxkeyword">,</span><span class="syntaxstring">"http://www.example.com/ajax/vote-plus.php?id="</span><span class="syntaxkeyword">+</span><span class="syntaxdefault">x</span><span class="syntaxkeyword">,</span><span class="syntaxdefault">false</span><span class="syntaxkeyword">);<br /></span><span class="syntaxdefault">   xhr</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">send</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">null</span><span class="syntaxkeyword">);<br /><br /></span><span class="syntaxdefault">   </span><span class="syntaxcomment">// modifier le page sans recharger celle ci<br /></span><span class="syntaxdefault">   document</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">getElementById</span><span class="syntaxkeyword">(</span><span class="syntaxstring">'vote'</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">+</span><span class="syntaxdefault"> x</span><span class="syntaxkeyword">).</span><span class="syntaxdefault">innerHTML</span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> xhr</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">responseText</span><span class="syntaxkeyword">;<br />}</span><span class="syntaxdefault"> </span>
et que côté serveur tu as dans le dossier ajax (l'url : "http://www.example.com/ajax/vote-plus.php") un code du genre :
PHP:
<span class="syntaxdefault"><?php<br />    header</span><span class="syntaxkeyword">(</span><span class="syntaxstring">'Content-type: text/html; charset=iso-8859-1'</span><span class="syntaxkeyword">);<br /></span><span class="syntaxdefault">    $id </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> $_GET</span><span class="syntaxkeyword">[</span><span class="syntaxdefault">id</span><span class="syntaxkeyword">];</span><span class="syntaxdefault"> </span><span class="syntaxcomment">// c'est ça qu'il faut sécuriser<br /></span><span class="syntaxdefault">    $sql </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> </span><span class="syntaxstring">"UPDATE `tableVote` SET voteplus = voteplus+1 WHERE `id` = ${id}"</span><span class="syntaxkeyword">;<br /></span><span class="syntaxdefault">    mysql_query</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$sql</span><span class="syntaxkeyword">);<br /></span><span class="syntaxdefault">    <br />    $sql </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> </span><span class="syntaxstring">"SELECT voteplus,votemoins FROM `tableVote` where `id` = ${id}"</span><span class="syntaxkeyword">;<br /></span><span class="syntaxdefault">    mysql_query</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$sql</span><span class="syntaxkeyword">);<br /><br /></span><span class="syntaxdefault">    </span><span class="syntaxkeyword">(...)<br /><br /></span><span class="syntaxdefault">    echo </span><span class="syntaxstring">"<div id=\"vote${id}\">${valPlus} plus <img src=\"voteplus.jpg\" onclick=\"voteplus('${id}');\" /><br/>${valMoins} moins <img src=\"votemoins.jpg\" onclick=\"votemoins('${id}');\" /><br/><br /></div>"</span><span class="syntaxkeyword">;<br /></span><span class="syntaxdefault">?></span>

Le script php de vote est schématisé au plus simple j'ai pas tous mis dedans ça doit pas être trop difficile de trouver ce qui manque ou un truc équivalent... note bien le "// c'est ça qu'il faut sécuriser" car le souci évoqué est dans ce genre d'endroit, là ou une variable accessible de l'extérieur est utilisée dans du code.
 
WRInaute discret
olala quel post ! merci de ton temps je vais étudier tout ce que tu as écrit...il va me falloir un peu de temps.

dernière question : pour sécuriser $id = $_GET[id];

est-ce que cela suffit ? :

if(isset($_GET['id'])){ $id = mysql_real_escape_string($_GET['id']); }
else { $id = ' '; }
 
WRInaute accro
stone66 a dit:
dernière question : pour sécuriser $id = $_GET[id];

Si la variable est utilisé a destination d'un serveur SQL il faut veiller au moins a virer les simple quote "addslashes()" et ensuite vérifier que la variable reçu est du type désirée dans les limites possibles (int, caractère, ...), faire aussi attention au séparateurs de requête ";"

Si la variable risque de finir affichée, "htmlentities()" pour éviter les injections de html et / ou "strip_tags()" pour stériliser les balises.

Si la variable risque d'être exécutée, system(), exec() c'est chaud faut voir au cas par cas.

Il y a trop de cas pour avoir des solutions "standard" faut se placer a la place de l'attaquant et imaginer en regardant le script ce qui peut être fait.

Dans tous les cas faire des tests pour savoir si le contenu reçu est "dans les normes".

Éviter aussi les message d'erreurs qui renseignent sur les failles possibles (ou aident a les peaufiner) donc utiliser un opérateur de silence devant les commandes critiques "@"

Et surtout te renseigner plus un peu partout.
 
Discussions similaires
Haut