limiter les votes?
salut a tous,
ca y'est j'ia reussi mon systeme de vote sur des photos.
mais le probleme, c'est que actuellement on peux voter 50 fois a la suite si on veux. Pour eviter la triche, je voudrais limiter le nombre de vote par jour.
Au debut j'ai donc pensé enregistré l'ip dans une table, masi si quelqu'un a une ip fixe, il y aura probleme le lendemain.
donc j'ai pensé au cookies, mais je ne sait pas du tout comment faire.
Merci de votre aide
a+
le 26/02/2005 à 11:59
Bzh
Et bien c' est tout simple !!!!
Soit tu utilise les sessions ou bien les cookies !!!
Soit le plus propre searait de rajouter un champ(votes) a ta table 'utilisateur' qui serait de type varchar ou bien texte(cela dépents du nombre des photos) ou tu renregistras l' id des photos pour lequelles il à déjà voté séparer par un espace ( par exemple)...
Il ne te sufira plus qu' à vérifier, lors d' un vote, que l' id de la photo ne se trouve pas déjà dans son champ vote !!!
Voilà, je te conseil vivement la deuxième solution... Sera fait, comme ça, dans les règles de l' art !!!
Ciao...
Soit le plus propre searait de rajouter un champ(votes) a ta table 'utilisateur' qui serait de type varchar ou bien texte(cela dépents du nombre des photos) ou tu renregistras l' id des photos pour lequelles il à déjà voté séparer par un espace ( par exemple)...
Pero, je n'opterais jamais pour une telle solution : stocker plusieures infos dans un seul champs.
Forcemment un jour ou l'autre, ca va poser des problèmes, tout simplement à cause de la complexité de mise à jour.
le 26/02/2005 à 13:44
Bzh
Et bien je sais pas...
Un truc du genre:
<?php
//après selection du champ:
$vote = mysql_fetch_array($resultat['votes']);
$id_photo //=>id de la photo a voter
//création d' un tableau qui contient les ids des photo qui ont déjà été voté
$liste_des_votes = explode(" ",trim($vote));
//on regarde si il a déja voté sur cette photo
if(!in_array($id_photo,$liste_des_votes)){
//il n' a pas déjà voté, donc on le laise voté
//ensuite on rajoute dans le tableau l' id de la photo dont il vient de voté
$liste_des_votes[] = $id_photo;
//recréer la chaine de caractère afin de remettre à jours la base
$vote = implode(" ",$liste_des_votes[]);
//reste plus qu' a mettre à jours la base de donné
}else{
//il a déjà voté et on lui indique par un message
echo "<p>Vous avez déjà voté...</p>\n";
}
?>
Et voilà, et je ne vois pas pkoi il y aura un souci...
Si on respecte bien certaine règle du style:
=>explode pour séparer
=>implode pour lier
=>et le trim() très important au cas ou un espace se baladérait
Pour ça, la Globule, j' aimerais bien que tu me dise se qui ne va pas dans mon code ou tout simplement dans la logique !!!!
A mon simple avi, se serait vraiment la meilleur des solutions...
Ciao...
C'est la logique qui ne va pas.
Faire comme ceci, cela impose des traitements lourds pour savoir si la personne peut ou non voter.
Tu fais une requete SQL plus des implode / explode alors que tout pourrait se faire en une seule requete SQL sans implode / explode.
Sans compter le fait qu'avec ta technique, tu es obligé de faire un UPDATE dès que la personne vote pour une photo, or l'UPDATE fait partie des requetes demandant le plus de ressources.
Le varchar n'est pas non plus adapté pour ce genre de chose.
/me vraiment pas fan du varchar :)
le 26/02/2005 à 13:58
Bzh
Donc, que nous conseillerais tu comme solution ????
A part le cookie ou la session ???
Tu fais une table jointure avec deux champs l'id de la photo et l'id du membre , si la ligne id de la photo + id ud membre existe , il a voté.
Adieu explode et implode.
zebdinou pour les intimes / Blog : http://www.zebden.fr
Tout depend du souhait de mitchum :
- est ce que les visiteurs classiques ET les membres peuvent voter ? (ou bien que les membres)
- est ce qu'il veut toujours limité le vote à un vote par photo par jour par visiteur ?
- est ce que les gens peuvent voter qu'une seule et une seule fois pour chaque photo ?
etc...
Parce que la, en fait, on s'emballe sur un espace membre, mais mitchum n'en a jamais fait mention.
Donc si les simples visiteurs peuvent voter, le cookie peut etre une bonne option.
ce que les visiteurs classiques ET les membres peuvent voter ? (ou bien que les membres)
seules les membres peuvent voter
- est ce qu'il veut toujours limité le vote à un vote par photo par jour par visiteur ?
oui un vote par jour
- est ce que les gens peuvent voter qu'une seule et une seule fois pour chaque photo ?
non, une photo par jour
Merci :)
Salut,
reprend l'exemple de zebden en changeant le champ id_photo par un champ date !
tu fait un select qui cherche s'il y a un tuple pour le membre !
a chaque vote tu delete les tuples dont la date est inférieur a la date actuel moins 24h !
Je te conseil un timestamp !
Il en faut peu pour être heureux !!!!!