[Pb] Affichet résultats de sondages
Résolu
Brendeldas
-
Brendeldas Messages postés 29 Date d'inscription Statut Membre Dernière intervention -
Brendeldas Messages postés 29 Date d'inscription Statut Membre Dernière intervention -
Bonjour à 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 :
<div style="background-color: white">
<?php
mysql_connect("localhost", "root");
mysql_select_db("test");
if(!isset($_GET['action']) )
{
$result = mysql_query('SELECT * FROM sondage_vote WHERE id_sondage="'.$_GET['id_sondage'].'" ');
$donnees = mysql_fetch_array($result);
echo '<ul><li><h4>Sondage</h4></li></ul>';
if ($donnees['pseudo'] != $_SESSION['login'])
{
mysql_query ('UPDATE sondage_reponses SET nb_reponses = nb_reponses + 1 WHERE id_sondage="'.$_POST['question'].'" AND id="'.$_POST['choix'].'" ');
mysql_query("INSERT INTO sondage_vote VALUES ('', '" .$_POST['question']. "', '" .$_POST['choix']. "', '" . $_SESSION['login'] . "') ");
echo '<center>Merci d\'avoir voté !<br><a href="vote.php?action=voir">Voir les résultats</a></center>';
}
else
{
echo '<center>Gomen ! Vous avez déjà donné votre avis !<br><a href="vote.php?action=voir">Voir les résultats</a></center>';
}
}
if ($_GET['action'] == 'voir')
{
$reponse = mysql_query('SELECT * FROM sondage ORDER BY id DESC');
$donnees = mysql_fetch_array($result);
$nb_sondages = count($donnees['id']);
$tableau_reponses = array();
$tableau_nb_reponses = array();
while ($data = mysql_fetch_array($reponse))
{
echo '<ul><li><h4>' .stripslashes(htmlentities(trim($data['question']))). '</h4></li></ul>';
echo ''.stripslashes(htmlentities(trim($data['id']))).'';
$result = mysql_query('SELECT * FROM sondage_reponses WHERE id_sondage="'.stripslashes(htmlentities(trim($data['id']))).'" ');
while ($datas = mysql_fetch_array($result))
{
$tableau_reponses[] = stripslashes(htmlentities(trim($datas['reponse'])));
$tableau_nb_reponses[] = stripslashes(htmlentities(trim($datas['nb_reponses'])));
}
$nb_reponses_du_sondage = count ($tableau_reponses);
$nb_total_reponse = array_sum ($tableau_nb_reponses);
if ($nb_total_reponse == 0)
{
echo '<center>Il n\'y a aucun vote pour ce sondage.</center>';
}
else
{
echo '<ul style="margin-left: -25px">';
for ($i = 0; $i < $nb_reponses_du_sondage; $i++)
{
echo '<li>'.$tableau_reponses[$i].'</li>';
$pourcentage = ($tableau_nb_reponses[$i] * 100) / $nb_total_reponse;
$pourcentage = round ($pourcentage, 1);
echo '<img src="screen/bar.gif" height="10" width='.round($pourcentage, 1).'> <i>'.$pourcentage.' % (' .$tableau_nb_reponses[$i]. ')</i><br />';
}
echo '</ul><center><br />Nombre de votes : '. $nb_total_reponse . '</center><br>';
}
} // Fin du premier while
}
mysql_close ();
?>
</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 [i]while[/i], 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 [i]sondage_vote[/i], 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 :)
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 :
<div style="background-color: white">
<?php
mysql_connect("localhost", "root");
mysql_select_db("test");
if(!isset($_GET['action']) )
{
$result = mysql_query('SELECT * FROM sondage_vote WHERE id_sondage="'.$_GET['id_sondage'].'" ');
$donnees = mysql_fetch_array($result);
echo '<ul><li><h4>Sondage</h4></li></ul>';
if ($donnees['pseudo'] != $_SESSION['login'])
{
mysql_query ('UPDATE sondage_reponses SET nb_reponses = nb_reponses + 1 WHERE id_sondage="'.$_POST['question'].'" AND id="'.$_POST['choix'].'" ');
mysql_query("INSERT INTO sondage_vote VALUES ('', '" .$_POST['question']. "', '" .$_POST['choix']. "', '" . $_SESSION['login'] . "') ");
echo '<center>Merci d\'avoir voté !<br><a href="vote.php?action=voir">Voir les résultats</a></center>';
}
else
{
echo '<center>Gomen ! Vous avez déjà donné votre avis !<br><a href="vote.php?action=voir">Voir les résultats</a></center>';
}
}
if ($_GET['action'] == 'voir')
{
$reponse = mysql_query('SELECT * FROM sondage ORDER BY id DESC');
$donnees = mysql_fetch_array($result);
$nb_sondages = count($donnees['id']);
$tableau_reponses = array();
$tableau_nb_reponses = array();
while ($data = mysql_fetch_array($reponse))
{
echo '<ul><li><h4>' .stripslashes(htmlentities(trim($data['question']))). '</h4></li></ul>';
echo ''.stripslashes(htmlentities(trim($data['id']))).'';
$result = mysql_query('SELECT * FROM sondage_reponses WHERE id_sondage="'.stripslashes(htmlentities(trim($data['id']))).'" ');
while ($datas = mysql_fetch_array($result))
{
$tableau_reponses[] = stripslashes(htmlentities(trim($datas['reponse'])));
$tableau_nb_reponses[] = stripslashes(htmlentities(trim($datas['nb_reponses'])));
}
$nb_reponses_du_sondage = count ($tableau_reponses);
$nb_total_reponse = array_sum ($tableau_nb_reponses);
if ($nb_total_reponse == 0)
{
echo '<center>Il n\'y a aucun vote pour ce sondage.</center>';
}
else
{
echo '<ul style="margin-left: -25px">';
for ($i = 0; $i < $nb_reponses_du_sondage; $i++)
{
echo '<li>'.$tableau_reponses[$i].'</li>';
$pourcentage = ($tableau_nb_reponses[$i] * 100) / $nb_total_reponse;
$pourcentage = round ($pourcentage, 1);
echo '<img src="screen/bar.gif" height="10" width='.round($pourcentage, 1).'> <i>'.$pourcentage.' % (' .$tableau_nb_reponses[$i]. ')</i><br />';
}
echo '</ul><center><br />Nombre de votes : '. $nb_total_reponse . '</center><br>';
}
} // Fin du premier while
}
mysql_close ();
?>
</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 [i]while[/i], 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 [i]sondage_vote[/i], 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 :)
A voir également:
- [Pb] Affichet résultats de sondages
- Resultats foot - Télécharger - Vie quotidienne
- Lexer resultats - Télécharger - Sport
- Archives résultats bac 1999 - Forum Réseaux sociaux
- Nettoyage résultats moteurs de recherche - Accueil - Services en ligne
- Résultats loto 5/90 d'aujourd'hui rdc ✓ - Forum Excel
2 réponses
salut,
quand tu débogues, surtout quand il y a des requêtes, fais du pas à pas et affiches les variables clés.
par exemple :
tu devrais y trouver la piste de ton erreur.
fais pareil pour la requête des résultats et dis nous ce qui est imprimé.
quand tu débogues, surtout quand il y a des requêtes, fais du pas à pas et affiches les variables clés.
par exemple :
if ($donnees['pseudo'] != $_SESSION['login']) { //mysql_query ('UPDATE sondage_reponses SET nb_reponses = nb_reponses + 1 WHERE id_sondage="'.$_POST['question'].'" AND id="'.$_POST['choix'].'" '); //mysql_query("INSERT INTO sondage_vote VALUES ('', '" .$_POST['question']. "', '" .$_POST['choix']. "', '" . $_SESSION['login'] . "') "); //echo '<center>Merci d\'avoir voté !<br><a href="vote.php?action=voir">Voir les résultats</a></center>'; echo '<p>$donnees['pseudo'] = '.$donnees['pseudo'].'</p>'; echo '<p>$_SESSION['login'] = '.$_SESSION['login'].'</p>'; echo '<p>requete SQL = '.'UPDATE sondage_reponses SET nb_reponses = nb_reponses + 1 WHERE id_sondage="'.$_POST['question'].'" AND id="'.$_POST['choix'].'" '.'</p>'; }
tu devrais y trouver la piste de ton erreur.
fais pareil pour la requête des résultats et dis nous ce qui est imprimé.
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...
Ce qui donne :
if ($_GET['action'] == 'voir')
{
$reponse = mysql_query('SELECT * FROM sondage ORDER BY id DESC');
$donnees = mysql_fetch_array($result);
$nb_sondages = count($donnees['id']);
while ($data = mysql_fetch_array($reponse))
{
echo '<ul><li><h4>' .stripslashes(htmlentities(trim($data['question']))). '</h4></li></ul>';
$tableau_reponses = array();
$tableau_nb_reponses = array();
$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 ton aide, Dalida :)
Ce qui donne :
if ($_GET['action'] == 'voir')
{
$reponse = mysql_query('SELECT * FROM sondage ORDER BY id DESC');
$donnees = mysql_fetch_array($result);
$nb_sondages = count($donnees['id']);
while ($data = mysql_fetch_array($reponse))
{
echo '<ul><li><h4>' .stripslashes(htmlentities(trim($data['question']))). '</h4></li></ul>';
$tableau_reponses = array();
$tableau_nb_reponses = array();
$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 ton aide, Dalida :)