Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1397 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  [Pb] Afficher les résultats de sondages

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Pb] Afficher les résultats de sondages

n°1629425
Brendeldas
Posté le 23-10-2007 à 15:57:44  profilanswer
 

Salut à tous,
 
Après avoir pas mal cherché les problèmes dans mon code, je me suis finalement rendu compte qu'en plus d'être bourré de fautes, il ne marchait même pas. Et je dois avouer que je vois pas d'autre solution que de vous demander humblement votre très profitable aide :)
 
Bon, trêve de palabres, il s'agit d'une page de mon site où je souhaite afficher les résultats du sondage en cours, ainsi que de tous les sondages créés auparavant. Le système de membres est fonctionnel, pas de soucis sur ce point-là. V'là le code :
 

Code :
  1. <div style="background-color: white">
  2. <?php
  3. mysql_connect("localhost", "root" );
  4. mysql_select_db("test" );
  5. if(!isset($_GET['action']) )
  6. {
  7. $result = mysql_query('SELECT * FROM sondage_vote WHERE id_sondage="'.$_GET['id_sondage'].'" ');
  8. $donnees = mysql_fetch_array($result);
  9. echo '<ul><li><h4>Sondage</h4></li></ul>';
  10. if ($donnees['pseudo'] != $_SESSION['login'])
  11. {
  12. mysql_query ('UPDATE sondage_reponses SET nb_reponses = nb_reponses + 1 WHERE id_sondage="'.$_POST['question'].'" AND id="'.$_POST['choix'].'" ');
  13. mysql_query("INSERT INTO sondage_vote VALUES ('', '" .$_POST['question']. "', '" .$_POST['choix']. "', '" . $_SESSION['login'] . "') " );
  14. echo '<center>Merci d\'avoir voté !<br><a href="vote.php?action=voir">Voir les résultats</a></center>';
  15. }
  16. else
  17. {
  18. echo '<center>Gomen ! Vous avez déjà donné votre avis !<br><a href="vote.php?action=voir">Voir les résultats</a></center>';
  19. }
  20. }
  21. if ($_GET['action'] == 'voir')
  22. {
  23. $reponse = mysql_query('SELECT * FROM sondage ORDER BY id DESC'); 
  24. $donnees = mysql_fetch_array($result);
  25. $nb_sondages = count($donnees['id']);
  26. $tableau_reponses = array();
  27. $tableau_nb_reponses = array();
  28. while ($data = mysql_fetch_array($reponse))
  29. {
  30. echo '<ul><li><h4>' .stripslashes(htmlentities(trim($data['question']))). '</h4></li></ul>';
  31. echo ''.stripslashes(htmlentities(trim($data['id']))).'';
  32. $result = mysql_query('SELECT * FROM sondage_reponses WHERE id_sondage="'.stripslashes(htmlentities(trim($data['id']))).'" ');
  33. while ($datas = mysql_fetch_array($result))
  34. {
  35. $tableau_reponses[] = stripslashes(htmlentities(trim($datas['reponse'])));
  36. $tableau_nb_reponses[] = stripslashes(htmlentities(trim($datas['nb_reponses'])));
  37. }
  38. $nb_reponses_du_sondage = count ($tableau_reponses);
  39. $nb_total_reponse = array_sum ($tableau_nb_reponses);
  40. if ($nb_total_reponse == 0)
  41. {
  42. echo '<center>Il n\'y a aucun vote pour ce sondage.</center>';
  43. }
  44. else
  45. {
  46. echo '<ul style="margin-left: -25px">';
  47. for ($i = 0; $i < $nb_reponses_du_sondage; $i++)
  48. {
  49. echo '<li>'.$tableau_reponses[$i].'</li>';
  50. $pourcentage = ($tableau_nb_reponses[$i] * 100) / $nb_total_reponse;
  51. $pourcentage = round ($pourcentage, 1);
  52. echo '<img src="screen/bar.gif" height="10" width='.round($pourcentage, 1).'>&nbsp;<i>'.$pourcentage.' % (' .$tableau_nb_reponses[$i]. ')</i><br />';
  53. }
  54. echo '</ul><center><br />Nombre de votes : '. $nb_total_reponse . '</center><br>';
  55. }
  56. } // Fin du premier while
  57. }
  58. mysql_close ();
  59. ?>
  60. </div>


 
Y'a 2 gros soucis dedans :
 

  • Le premier, de loin le plus chiant, est que l'affichage foire dans la séparation des différentes réponses des différents sondages. Je m'explique.


J'ai créé 3 sondages bidons, comportant 3 réponses chacun. Dans l'affichage, j'aurai le 1er sondage (le plus récent, celui en cours), ses 3 réponses ainsi que le compte des votes, tout bien tout propre.
Le soucis est que lors de l'affichage du 2e sondage, j'aurai les 3 réponses de ce sondage ainsi que celles du 1er sondage. Et bien sûr, lors du calcul des pourcentages et du nombre total de vote, il prend en compte les résultats du 1er sondage.
Et re-belote avec le 3e sondage, qui comptabilise aussi les 2 premiers sondages et affiche leurs réponses avant d'afficher les réponses propres à ce sondage.
 
J'espère avoir été assez clair... Je me doute qu'il s'agit d'un problème dans le placement des while, mais je ne vois vraiment pas comment y remédier...
 

  • Le second est sans doute très con, mais je bloque : il refuse de prendre en compte la condition de la ligne 17. En clair, peu importe que le pseudo soit inscrit dans la table sondage_vote, si je rafraichis la page indéfiniment avec le même pseudo, le sondage prend en compte le vote. Mouais...


Ici c'est pareil, je bloque. C'est sans doute tout con, mais...
 
Je m'en remets corps et âme à votre science, en espérant que vous saurez m'aider... merci d'avance  :jap:


Message édité par Brendeldas le 23-10-2007 à 15:58:49
mood
Publicité
Posté le 23-10-2007 à 15:57:44  profilanswer
 

n°1629524
micfont999
Simplement Moi
Posté le 23-10-2007 à 17:08:43  profilanswer
 

tu pourrai créer une petit fonction qui liste les résultats d'un sondage en fonction de l'id de ce dernier passé en paramètre, et lors du chargement de ta page, tu fait juste un select * de tous les sondages, et tu appel ta fonction avec l'id du sondage en question dans le while mysql_fetch_array :)  
 
je verrais ça, comme ça réutilisable un peu partout, et un code propre si tu te débrouille pas trop mal :)  
 
C'est juste une sugestion en attendant de regarder ton code plus attentivement.

n°1629695
Brendeldas
Posté le 23-10-2007 à 21:53:25  profilanswer
 

J'ai réglé mon second problème avec l'ajout de deux petites lignes de code avant la validation du vote :
 

Code :
  1. $reponse = mysql_query('SELECT * FROM sondage_vote ORDER BY ID DESC LIMIT 0,1');
  2. $last_post = mysql_fetch_array($reponse);
  3. echo '<ul><li><h4>Sondage</h4></li></ul>';
  4. if ($donnees['pseudo'] != $_SESSION['login'] AND $last_post['pseudo'] != $_SESSION['login'])


 
Par contre, j'ai pas bien compris ce que tu suggères, micfont999. Il me semble que les résultats du sondage sont déjà listés par id, et le problème est qu'il ne prend justement pas en compte cette restriction, et prend les résultats de toute id supérieure ou égale à celle indiquée.

n°1631211
Brendeldas
Posté le 25-10-2007 à 19:41:16  profilanswer
 

Problème résolu : en fait, il suffisait de mettre les 2 lignes créant les array des 2 tableaux dans le premier while, et non pas en-dehors, au début du code...  
 
En code, ça donne ça :
 

Code :
  1. if ($_GET['action'] == 'voir')
  2. {
  3. $reponse = mysql_query('SELECT * FROM sondage ORDER BY id DESC'); 
  4. $donnees = mysql_fetch_array($result);
  5. $nb_sondages = count($donnees['id']);
  6. while ($data = mysql_fetch_array($reponse))
  7. {
  8. echo '<ul><li><h4>' .stripslashes(htmlentities(trim($data['question']))). '</h4></li></ul>';
  9. $tableau_reponses = array();
  10. $tableau_nb_reponses = array();
  11. $result = mysql_query('SELECT * FROM sondage_reponses WHERE id_sondage =\'' . stripslashes(htmlentities(trim($data['id']))) . '\' ');


 
 
Et là, tout marche nickel... 'Tain, j'ai presque honte d'avoir bloqué sur un truc aussi con...
 
Merci pour votre aide :)

n°1631319
NewsletTux
&lt;Insérez ici votre vie /&gt;
Posté le 26-10-2007 à 08:49:25  profilanswer
 

moi je dirais presque qu'il y a 2 soucis en plus ...
- code non commenté, on joue aux devinettes pour savoir ce que tu fais
(par exemple, # $result = mysql_query('SELECT * FROM sondage_vote WHERE id_sondage="'.$_GET['id_sondage'].'" ');
# $donnees = mysql_fetch_array($result); si on ne lit pas la requête SQL et on ne s'imagine pas ce qu'elle rapporte, on ne sait pas à quoi correspond $result ... OK, à un résultat, mais de quoi ? En vue de quoi ?
 
- code non indenté : toutes les accolades sont alignées verticalement, ce qui rend difficile, en cas de parse error, la découverte de l'accolade non fermée p.ex. C'est p-ê du au code du forum, auquel cas ne tiens pas compte de cette remarque.


---------------
NewsletTux - outil de mailing list en PHP MySQL
n°1631322
micfont999
Simplement Moi
Posté le 26-10-2007 à 08:53:29  profilanswer
 

NewsletTux a écrit :


- code non indenté : toutes les accolades sont alignées verticalement, ce qui rend difficile, en cas de parse error, la découverte de l'accolade non fermée p.ex. C'est p-ê du au code du forum, auquel cas ne tiens pas compte de cette remarque.


 
Oui c'est la merde à faire des indentations, la touche tab ne marche pas il faut utiliser la barre d'espace c'est assez désagréable il faut admettre..
Pour les accolades non fermées je pense qu'il n'a pas mis tout le code, sinon son code renverrais forcement une erreur .. :)  
 :whistle:  
En tout cas chez moi quand je ferme pas un if ou un while l'est pas content mon petit wamp ...  
 [:magnasuprema]
 
Edit : par contre j'ai pour habitude à la fin de mes if, while et autre de mettre après l'accolade } un petit commentaire } // fin du while machinchose
ça aide toujours quand on ce retrouve avec un code de 10 000 lignes et qu'on à une erreur d'accolade, mais qu'on en à dix qui ce ferment en même temps  :whistle:


Message édité par micfont999 le 26-10-2007 à 08:55:34
n°1631422
NewsletTux
&lt;Insérez ici votre vie /&gt;
Posté le 26-10-2007 à 11:22:47  profilanswer
 

oui, moi de même pour les fins d'accolades. Je ne dis pas que son code soit sans "parse error", je ne l'ai pas testé :) c'est simplement "au cas où", il serait plus facile à relire avec une indentation correcte.


---------------
NewsletTux - outil de mailing list en PHP MySQL
n°1631435
micfont999
Simplement Moi
Posté le 26-10-2007 à 11:26:07  profilanswer
 

NewsletTux a écrit :

oui, moi de même pour les fins d'accolades. Je ne dis pas que son code soit sans "parse error", je ne l'ai pas testé :) c'est simplement "au cas où", il serait plus facile à relire avec une indentation correcte.


 
Oui tu à tout à fait raison :)  


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  [Pb] Afficher les résultats de sondages

 

Sujets relatifs
Résultats avec des liaisons de table.afficher du texte avec SDL_ttf [resolu]
Afficher ou non une div.[Résolu] Creer et afficher des thumbnail dynamiquement
[Oracle] 2 requetes faisant la meme chose, deux résultats differentsAlbum photos et commentaires
afficher valeur checkbox dans champ de saisieAfficher/masquer plusieurs div à un seul endroit
modifié une images avant de l'afficherentrer du texte au clavier sans l'afficher, sous bash.
Plus de sujets relatifs à : [Pb] Afficher les résultats de sondages


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR