begin process at 2012 05 28 12:47:36
  Trouver un code source :
 
dans
 
Accueil > Forum > 

PHP

 > 

Divers

 > 

Débutant(e)

 > 

Aide sur un sondage en PHP


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Aide sur un sondage en PHP

mardi 24 mars 2009 à 15:29:25 | Aide sur un sondage en PHP

yoh42

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
mardi 24 mars 2009 à 17:58:50 | Re : Aide sur un sondage en PHP

yoh42

On m'a dit que s'etait un probleme du a l'affichage. En effet, je devais envoyer la requete avant d'afficher sinon j'avais un coup de retart mais je ne vois pas ou mettre ma requete.
Merci
mardi 24 mars 2009 à 20:50:29 | Re : Aide sur un sondage en PHP

kohntark

Membre Club
Réponse acceptée !
Salut Yohan,

Il y a un paquet d'erreurs dans ton script
Effectivement ton INSERT est mal placé, il faut le mettre au début de script, mais pas écrit de la sorte.

Avant toute chose, pour le debug et le debug seulement je te conseille d'activer les erreurs (je doute fort qu'elles le soient)
Tu peux les activer en mettant ces lignes en tout début de script :
ini_set ('display_errors', 'on');
error_reporting(E_ALL);


Qq trucs en vrac :
- tu fais des boucles while qui ne servent à rien puisque tu ne récupères qu'un seul résultat
- tu ne contrôles pas les erreurs de certaines de tes requêtes
- tu fais des requêtes sur tout le contenu alors que tu n'en as pas besoin

ex :
$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'];      
}
=>
// en supposant que le online soit un identifiant de ligne (je me trompe peut être ?)
$sql = "SELECT id, libelle FROM `sondages` WHERE `categorie`='question' LIMIT 0,1";
$result = mysql_query($sql) or die (mysql_error());
$donnees = mysql_fetch_row($result);
$id = $donnees[0];
$libel = $donnees[1];      


$sql1 = 'SELECT count(*) FROM `sondages` WHERE `categorie`="reponse" AND `id`='.$id.'';
$result1=mysql_query($sql1);
while ($donnees=mysql_fetch_assoc($result1)){
    $preado=$donnees['count (*)'];
}

=> ne sert à rien (et en plus ça ne fonctionne pas)

<form method="POST" >
=>
<form action="" method="POST" >

... j'arrête là, mais il y a encore beaucoup d'erreurs

Pour en revenir au problème, tu devrais mettre ton insert en début de script en le modifiant ainsi :
if (isset($_POST[choix])) {
    $enregistrer = "INSERT vote SET question='$_POST[id_question]', id='', reponse='$_POST[choix]', ip='$ip', unix='$unix'";
    mysql_query ($enregistrer); // + traitement erreur
}
// bien sur $ip et $unix doivent être déclarées avant

Puis tu ajoutes un hidden contenant l'id de la question :
<input type="hidden" name="id_question" value="'.$id.'"/>
juste avant le while.

=> cela devrait fonctionner, mais ce n'est pas la meilleure façon de faire.
En fait la structure de ton script est à revoir et à épurer grandement.


Cordialement,

Kohntark -

mercredi 25 mars 2009 à 09:51:51 | Re : Aide sur un sondage en PHP

yoh42

Merci pour tous tes conseils car j'ai pris le script sur le Web et je débute dans ce domaine donc je te remercie vraiment.
En fait je veux juste faire un petit sondage avec une seule question et un affichage graphique des résultats donc si tu peux me proposer quelque chose pour commencer je le prendrai avec plaisir.
Sinon ben merci encore et je suis prêt a arranger mon script mais pourrais tu m'aider ?
Merci d'avance.
Yohan
jeudi 26 mars 2009 à 09:27:18 | Re : Aide sur un sondage en PHP

yoh42

Bonjour, donc cela fonctionne bien après les différentes remarques que kohntark m'a faite et je le remercie.
Maintenant; il m'a dit qu'il y avait d'autres erreurs mais je ne vois pas lesquelles donc si quelqu'un peut m'aider pour résoudre ces erreurs j'en serais ravis.
Merci d'avance a tous.
jeudi 26 mars 2009 à 09:29:29 | Re : Aide sur un sondage en PHP

yoh42

Oupss j'ai oublier de mettre le script avec les modifications ... le voila :

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">

<html>
<body>
<link rel="stylesheet" href="questionnaire.css" type="text/css">

<?php
$link = mysql_connect("localhost","root","");
    if (!mysql_select_db("questionnaire",$link)){ echo "Erreur de connexion SQL"; }

$ip = $_SERVER['REMOTE_ADDR']; // récupere l'ip de visiteur.
$unix = time(); // temps actuel.
$temps = time()-3600; // le temps y'as maintenant une heure.

//on demande a notre table de nous donné tous les ip qui ressemble a l'ip de notre visiteur actuel, et qui ne sont pas
//daté de plus d'une heure.


$sql = "SELECT id, libelle FROM `sondages` WHERE `categorie`='question' LIMIT 0,1";
$result = mysql_query($sql) or die (mysql_error());
$donnees = mysql_fetch_row($result);
$id = $donnees[0];
$libel = $donnees[1];

if (isset($_POST[choix])) {
    $enregistrer = "INSERT vote SET question='$_POST[id_question]', id='', reponse='$_POST[choix]', ip='$ip', unix='$unix'";
    mysql_query ($enregistrer); // + traitement erreur
}

$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;
  echo "<br />";
  $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);
  //ce qui donne quelque chose comme ça.
 
$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 action="" method="POST" >';
    echo '<input type="hidden" name="vote" value="ok" /><div>';
    $sql1="SELECT * FROM `sondages` WHERE `categorie`='reponse' AND `id`='".$id."'";
    $result1=mysql_query($sql1);
    $i=1;
    echo '<input type="hidden" name="id_question" value="'.$id.'"/>';
    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.
// Et si la variable "vote" récupéré par la méthode $_GET et égal a "ok", ce qui veut dire que c'est le formulaire qui as envoyé cette page, pas un simple lien.




?>
</body>
</html>


Cette discussion est classée dans : donnees, mysql, id, vote, reponse


Répondre à ce message

Sujets en rapport avec ce message

AIDE pour un SONDAGE en PHP et javascript !! [ par yoh42 ] Bonjour je vais me"jeter par la fenêtre" car cela fait deux trois jours que je cherche une solution à mon problème et même après diverses pistes je n' Remplir une ligne de BDD en fonction des éléments déjà dans la BDD [ par Dioul2 ] Bonjour,Je débute en PHP et aimerais faire le code suivant:J'ai dans ma BDD des timestamps. Je souhaiterai que mon script inscrive certains commentair enregistrer valeur tableau html dans table mysql [ par clem76630 ] Bonjour, Cela fait longtemps que je m'aide de ce forum lors du développement de mes petits sites ou applications personnel. Mais la je tombe sur os, erreur 403- envoi d'un formulaire via $_post [ par Midn ] Bonjour à tous, tout d'abord merci de prendre le temps de lire mon appel au secours, et peut être d'y répondre. Alors pour les infos: Hébergeur: live unexpected { [ par biloutte33 ] Bonjour tout le monde voici mon code : $reponse = mysql_query('SELECT * FROM `ibf_topics` Where Forum_id=49 OR Forum_id=50 ORDER BY start_date DES supprimer une ligne dans BDD [ par pleboys ] Bonjour, voila je me décide enfin à poster après 4 jours de recherches infructueuses sur le net. Etant un grand débutant dans le php/mysql, je n'arri email de confirmation [ par cladx ] bonjour je voudrai faire une page qui verifie les donner de l'url afin de verifier l'email de cofirmation mais  la page bug toujour  elle me repond to Un probleme de templates que je n'arrive pas a comprendre [ par RMOINAS ] SalutBon alors j'expose mon probleme je suis en train de créer un script avec des templates donc tout marche sauf une partie du code, la partie du cod de la couleur dans un echo ? [ par biloutte33 ] bonjour,j'aimerais savoir comment mettre un echo en gras, en italique ou souligné ou avec de la couleur?comment placer la balise?car j'aimerais que mo Le dernier probleme et c'est bon :) [ par lorgard ] plop enfin re ^^le code de base$db = mysql_connect('localhost','root','') or die ("erreur de connexion");//on selectionne votre basemysql_select_db('m


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,702 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales