JeuWeb - Crée ton jeu par navigateur
fonction de vote - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : fonction de vote (/showthread.php?tid=2671)



fonction de vote - fenix - 09-06-2008

Bonjour à tous,

voila ça fait un moment que j'ai une partie de mon jeu qui est laisser à l'abandon et j'aimerai relancer le projet.

celui ci dispose d'un systeme de vote hors celui ci ne fonctionne pas Sad
voici les symptomes :

- si l'objet a deja un vote le code se declanche et la securite anti double vote le fait aussi mais une fois sur deux
- si l'objet n'a pas de vote le code ne se declanche meme pas il y a juste un rechargement de la page.


voici la fonction incriminer


Code PHP :
<?php 
function votes2($id){
global
$userrow;

$votequery = doquery("SELECT*FROM {{table}} WHERE id='$id' ", "creator");
$voterow = mysql_fetch_array($votequery);//recuperation des données de l'objet
$votantquery = doquery("SELECT*FROM {{table}} WHERE numero='$id' ", "votant");
$votantrow = mysql_fetch_array($votantquery);

$page.=" // la Presentation de l'objet ce fait ici (retirer pour gagner de la place)";
//formulaire de vote
$page.="<form action=\"index.php?do=votes2:$id\" method=\"post\">
<img src=./images/pic2.gif /> <input type=\"submit\" name=\"vote3\" value=\"pour\" /><br /><br />
<img src=./images/pic2.gif /> <input type=\"submit\" name=\"vote4\" value=\"contre\" /><br /><br />
</from>
<a href=\"index.php?do=votes\">retour à la liste des votes</a>"
;

$vote1 = $voterow["vote"]+1;// si vote positif voie +1
$vote2 = $voterow["vote"]-1;// si vote negatif voie - 1


if (isset($_POST["vote3"])) {// fonvtion des vote positifs
extract($_POST);
$errors = 0;
$errorlist = "";
if (
$errors == 0) {
while(
$votantrow2 = mysql_fetch_array($votantquery)){ //la partie qui deconne ^^
if($votantrow2["votant"] == $userrow["charname"]){// si le joueur a deja voter
$page.="<br>Vous avez deja voté";

}elseif(
$votantrow2["votant"] != $userrow["charname"]){// si il a jamais voter
$page.="<br>vote enregistré avec succes";
$updatequery = doquery("UPDATE {{table}} SET vote='$vote1' WHERE id='$id' limit 1", "creator");// ajout de la voie
$updatequery2 = doquery("INSERT INTO {{table}} SET votant='$votant2', numero='$id' ", "votant"); // compte le joueir comme ayant voter
}
}
}
}

if (isset(
$_POST["vote4"])) {
extract($_POST);
$errors = 0;
$errorlist = "";
if (
$errors == 0) {
while(
$votantrow2 = mysql_fetch_array($votantquery)){
if(
$votantrow2["votant"] == $userrow["charname"]){// si le joueur a deja voter
$page.="<br>Vous avez deja voté";

}elseif(
$votantrow2["votant"] != $userrow["charname"]){// si il a jamais voter
$page.="<br>vote enregistré avec succes";
$updatequery = doquery("UPDATE {{table}} SET vote='$vote2' WHERE id='$id' limit 1", "creator");
$updatequery2 = doquery("INSERT INTO {{table}} SET votant='$votant2', numero='$id' ", "votant");
}
}
}
}



display($page, "votes");
}

Votre aide ma sera précieuse je ne sais vraiment plus quoi faire de ce trucSad


RE: fonction de vote - Shivaan Keldon - 09-06-2008

sincèrement, ton code est illisible...
aucune indentation, aucun commentaire, on ne connait même pas le principe même du vote (on vote pour quoi au juste ?)
et de quel objet tu parles ?

j'aimerais vraiment t'aider, mais ton code me donne mal au crâne. pourrais-tu apporter plus de précisions stp ? que je puisse essayer de m'y retrouver un peu


RE: fonction de vote - fenix - 09-06-2008

Dsl comme d'hab j'ai tellement modifier se code au cours de dernières heures que c'est devenue un torchon Sad

bon en gros le principe est que les joueur vote pour des items creer par les joueurs si ils atteignent 15 voie pour ils sont ajouter à 15 vois contre c'est refuser. en theorie le code ajoute a chaque vote le nom du joueur et celui de l'items pour lequel il vote dans la BDD afin qu'il ne puisse pas revoter pour le meme.

j'edite mon premier post pour changer le code j'ai ete vite mais j'ai essayer d'aere et je peut aussi supprimer la premiere parti qui ne concerne que la mise en page si cela gene


RE: fonction de vote - Shivaan Keldon - 09-06-2008

ok, je comprends un peu mieux
de mon point de vue, tu prends le problème à l'envers. mon conseil : ne pas afficher l'option de vote si l'utilisateur a déjà voté, plutôt que de vérifier au moment de son vote.

je n'ai pas le temps de te faire un exemple de code, car je dois partir. mais si tu peux attendre 22-23h, je viendrai te proposer ce que je ferais Smile


RE: fonction de vote - fenix - 09-06-2008

je doit partir aussi ^^ je testerai ça demain voir se soir en hors ligne (vive outsite lol)
en tout cas merci je croit voir a peut pres comment faire et en effet ça peut regler des pb
en esperant que ce cout ci WHILE fonctionne comme il faut


RE: fonction de vote - Shivaan Keldon - 09-06-2008

bon, j'ai un peu eu le temps d'analyser ton code. voici comment je le ferai :

Code PHP :
<?php 
function votes2($id){
global
$userrow;
$user = $userrow["charname"];
$page.=" // la Presentation de l'objet ce fait ici (retirer pour gagner de la place)";

// on s'occupe en priorité des insert/update, afin qu'ils soient visible par la suite
// si tu affiches un truc en faisant un update juste derrière, ça n'apparaitra pas à l'écran ;)
$vote = "";
if (isset(
$_POST["vote3"])) $vote = "vote+1";
if (isset(
$_POST["vote4"])) $vote = "vote-1";
if (
$vote!="") {
// pourquoi y'avait un limit dans cette query ?
doquery("UPDATE {{table}} SET vote=$vote WHERE id=$id", "creator");
// il sortait d'ou ton $votant2 dans celle-ci ?
doquery("INSERT INTO {{table}} (votant, numero) VALUES ('$user',$id)", "votant");
$page.="<br>vote enregistré avec succes";

}

$resvote = doquery("SELECT numero FROM {{table}} WHERE numero=$id AND votant='$user' ", "votant");
// il n'a pas voté
if (mysql_num_rows($resvote)==0) {
$page .= "..."; // formulaire de vote
}
display($page, "votes");
}

voilà en gros. bon c'est pas super optimisé, et je pense ne pas avoir tout compris à ton code (comme le $votant2 qui est utilisé dans une requête mais initialisé nulle part). mais voici un résumé de l'algorithme que j'utiliserai dans ce cas.

j'espère que ça t'aidera Smile

ps : ha oui, j'ai supprimé aussi la query pour récup les infos de l'objet. faut la remettre si tu veux que ça marche ^^


RE: fonction de vote - Harparine - 10-06-2008

Citation :voici la fonction incriminée

C'est un participe passé^^


RE: fonction de vote - fenix - 10-06-2008

Merci beaucoup ton code est bien plus lisible que celui que j'avait fait hier soir ^^; et il marche impeccable.
Et puis maintenant j'essaierai comme ça plutot que de faires de codes de trois KM de long lol

Encore merci


RE: fonction de vote - Shivaan Keldon - 10-06-2008

c'est quoi l'intérêt de venir poster une réponse pour corriger une faute d'orthographe ?
surtout qu'avec "en pause jusqu la fin de mes études", t'es pas super bien placé pour ce genre de remarques...

enfin bref...


RE: fonction de vote - Shivaan Keldon - 10-06-2008

de rien fenix, c'était un plaisir Smile