Bonjour a tous.
Je dois faire un sondage avec un seule question et un affichage graphique pour les résultats.
Mon probleme est que je dois cliquer 2 fois sur le bouton "voter" pour faire afficher les resultats. Est ce que quelqu'un voit l'erreur qui produit ce probleme. Je cherche depuis quelques jours mais je ne trouve pas donc je m'adresse a vous.
Voici mon code :
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<body>
<link rel="stylesheet" href="questionnaire.css" type="text/css">
<div align="center">
<table border="1" width="30%">
<tr>
<td>
<?php
include ("config.php");
$ip = $_SERVER['REMOTE_ADDR']; // récupere l'ip de visiteur.
$unix = time(); // temps actuel.
$temps = time()-3600; // le temps y'as maintenant une heure.
$sql="SELECT * FROM `sondages` WHERE `categorie`='question' AND `online`='1'";
$result=mysql_query($sql) or die (mysql_error());
while ($donnees=mysql_fetch_assoc($result)){
$id=$donnees['id'];
$libel=$donnees['libelle'];
}
$sql1 = 'SELECT count(*) FROM `sondages` WHERE `categorie`="reponse" AND `id`='.$id.'';
$result1=mysql_query($sql1);
while ($donnees=mysql_fetch_assoc($result1)){
$preado=$donnees['count (*)'];
}
$verifier = "SELECT `ip` FROM `vote` WHERE ip='$ip'";
$voter = mysql_query($verifier);
if(@mysql_num_rows($voter)!='0'){//Si oui, ca veut dire que notre visiteur a déja voté, on lui affiche alors un message de remerciments, et les résultats.
echo $libel;
$sql2 = "SELECT `reponse` FROM `vote` WHERE question='".$id."'"; //on récupere le résultat des anciens votes.
$result2 = mysql_query($sql2);
$reponse=array();
while($resultat = mysql_fetch_array($result2)) {
$cadre[] = $resultat['reponse']; //on récupere le résultat de notre requête, et on le stocke dans un tableau.
}
//on stocke le total du vote dans une variable "$totalvote" via la méthode "count" qui parcourt tout notre tableau.
$totalvote= count($cadre);
//on stocke le nombre de chaque choix dans un tableau avec la méthode "array_count_values" .. qui retourne par exmple.
//$array = array(1, "tyty", 1, "slt", "tyty"); array_count_values($array); retourne array(1=>2, "tyty"=>2, "slt"=>1)
$totalreponse = array_count_values($cadre);
//pour l'affichage on utilise une petite fonction :
function VerifText($text,$valeur,$reponse,$totaldesreponse){
$resultat = $reponse*2;
if ($text < '1'){ // on teste si le total des votes est moins qu'un, alors, on affiche l'image de la barre avec comme valeur de Width, et on met "0" comme valeur du vote
$text1 = '<div><strong> '.$valeur.' : </strong>'.$reponse.'%</div><p class="progressBar"><span><em style="left:'.$resultat.'px">'.$reponse.'%</em></span></p>';
}
if ($text == '1'){ // on teste si le total des votes est égal a 1, alors, on affiche l'image de la barre avec comme valeur de Width, "la variable du pourcentage", et on met la "valeur du vote".
$text1 = '<div><strong> '.$valeur.' : </strong>'.$reponse.'%</div><p class="progressBar"><span><em style="left:'.$resultat.'px">'.$reponse.'%</em></span></p>';
}
if ($text > '1'){ // on teste si le total des votes est plus grand que 1, alors, on affiche l'image de la barre avec comme valeur de Width, "la variable du pourcentage", et on met la "valeur du vote" avec une "s" a la fin cette fois. c tt
$text1 = '<div><strong> '.$valeur.' : </strong>'.$reponse.'%</div><p class="progressBar"><span><em style="left:'.$resultat.'px">'.$reponse.'%</em></span></p>';
}
return $text1;
}
//Maintenant on calcule le pourcentage de nos votes selon la régle universel pour ca ^^ "p = chifre x 100 / total".
//pour ca on utilise "bcdiv" qui divise et renvoie le résultat sous forme de chaîne de caractères.(en plus qu'on peut la fixé comme içi à 1 chiffres après la virgule). sinon on aura parfois des pourcentage genre 65.2323232323% et c'est pas beau >_<
//la on affiche notre function avec ces nouveaux paramètres.
//VerifText($_variable_du_total_du_vote , 'Valeur a affiché dans notre page' , $_variable_de_notre_pourcentage , $_variable_du_total_du_vote);
$sql1 = 'SELECT `libelle` FROM `sondages` WHERE `categorie`="reponse" AND `id`='.$id.'';
$result1=mysql_query($sql1);
$k=1;
while ($donnees=mysql_fetch_assoc($result1)){
$val=$donnees['libelle'];
$reponse[$k] = bcdiv($totalreponse[$k]*100, $totalvote, 1);
echo VerifText($totalreponse[$k],$val,$reponse[$k],$totalreponse[$k]);
$k++;
}
echo '<strong> Total votes : </strong>'.$totalvote.'<br /><br /><br />';
//on répète notre function n fois nos choix avec une "." Pour la concaténation , et une autre echo pour le total des votes.
}else{ //Si non, ça veut dire que notre visiteur n'as pas encore voté, on lui affiche le formulaire avec les choix.
$sql="SELECT * FROM `sondages` WHERE `categorie`='question' AND `online`='1'";
$result=mysql_query($sql) or die (mysql_error());
while ($donnees=mysql_fetch_assoc($result)){
echo $donnees['libelle']."<br /><br />";
$id=$donnees['id'];
$question=$donnees['libelle'];
}
echo '<form method="POST" >';
$sql1="SELECT * FROM `sondages` WHERE `categorie`='reponse' AND `id`='".$id."'";
$result1=mysql_query($sql1);
$i=1;
while ($donnees1=mysql_fetch_assoc($result1)){
echo '<input class="zonetext" type="radio" value="'.$i.'" name="choix" />';
echo $donnees1['libelle']."<br />";
$i++;
}
echo '<input class="zonetext" type="submit" value=" Voter" /></div></form>';
}
// Enregistrement du vote dans la table si le vote est diffèrent de "0" , ce qui veux dire que le gars a validé le formulaire sans prendre un choix.
if ($_POST[choix]!=0){
$enregistrer = "INSERT vote SET question='$id', id='', reponse='$_POST[choix]', ip='$ip', unix='$unix'";
mysql_query ($enregistrer);
}
?>
</td>
</tr>
</table>
</div>
</body>
</html>
Merci d'avance.
yohan