IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Problème script sondage


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Webdesigner
    Inscrit en
    Octobre 2010
    Messages
    68
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Webdesigner
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2010
    Messages : 68
    Par défaut Problème script sondage
    Bonjour à tous,
    Je suis confronté à un problème pour moi insolvable et même étrange...

    Je suis en train de créer un sondage sur mon site.
    J'ai donc créer une page index.php qui affiche la question et les réponses, et une page resultat.php qui affiche les résultats.
    J'ai également deux bases de donnée sql.

    Voici mon problème :
    1/ Si j'écris echo '<form action = "index.php" method = "post">'; ma base de donnée enregistre un nouveau vote, mais la page "resultat.php" n'apparait pas (avec les nouveaux pourcentages), et de plus, j'ai un probleme de connexion qui s'affiche.
    2/ Si j'écris echo '<form action = "resultat.php" method = "post">'; ma base de donnée n'enregistre pas un nouveau vote, mais la page "resultat.php" apparait sans prendre en compte le nouveau vote dans les %, mais affiche les précédents votes.

    Voici mes pages index.php et resultat.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    <?php
    // on teste si formulaire de vote a été validé
    if (isset($_POST['go']) && $_POST['go']=='Vote') {
                    if (!isset($_POST['choix']) || !isset($_POST['sondage_en_cours'])) {
                                   $erreur = 'Aucune réponse n\'a été choisie.';
                    }
                    // on teste si le visiteur a bien choisi une réponse avant d'avoir clické sur "Vote". On teste aussi si la variable $_POST['sondage_en_cours'] n'est pas vide
                    if (empty($_POST['choix']) || empty($_POST['sondage_en_cours'])) {
                                   $erreur = 'Au moins un des champs est vide.';
                    }
                    else {
                                   // là le visiteur à choisi une réponse
                                   // on se connecte à notre base
    $hostname_cnxsitephp = "localhost";
    $username_cnxsitephp = "root";
    $database_cnxsitephp = "forum";
    $password_cnxsitephp = "";
    $link = mysql_pconnect($hostname_cnxsitephp, $username_cnxsitephp, $password_cnxsitephp) or die("erreur de connexion au serveur");
    mysql_select_db($database_cnxsitephp) or die("erreur de connexion a la base de donnees");
     
                                   // on prépare notre requête : on ajoute un vote pour la réponse choisie par le votant
                                   $sql ='UPDATE sondage_reponses SET nb_reponses = nb_reponses + 1 WHERE id_sondage="'.$_POST['sondage_en_cours'].'" AND id="'.$_POST['choix'].'"';
     
                                   // on lance la requête
                                   mysql_query ($sql) or die ('Erreur SQL !'.$sql2.'<br />'.mysql_error());
     
                                   // on ferme la connexion à la base de donnée
                                   mysql_close ();
     
                                   $erreur = 'Merci d\'avoir voté :)';
                    }
    }
    ?>
     
    <html>
    <head>
    <title>Index de notre sondage :)</title>
    </head>
     
    <body>
    <?php     
    $hostname_cnxsitephp = "localhost";
    $username_cnxsitephp = "root";
    $database_cnxsitephp = "forum";
    $password_cnxsitephp = "";
    $link = mysql_pconnect($hostname_cnxsitephp, $username_cnxsitephp, $password_cnxsitephp) or die("erreur de connexion au serveur");
    mysql_select_db($database_cnxsitephp) or die("erreur de connexion a la base de donnees");
    // on prépare une requête pour sélectionner l'id et la question du dernier sondage (on sélectionne les questions, et on en prend qu'une (le LIMIT 0,1) et ce, dans un ordre décroissent (DESC), soit en fait, la dernière question posée).
    $sql = 'SELECT id, question FROM sondage_questions ORDER BY id DESC LIMIT 0,1';
     
    // on lance la requête
    $req = mysql_query ($sql) or die ('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
     
    // on récupère le résultat dans un tableau associatif
    $data = mysql_fetch_array ($req);
     
    $nb_sondage = mysql_num_rows($req);
     
    if ($nb_sondage == 0) {
                    echo 'Aucun sondage.';
    }
    else {
     
                    // on affiche la question
                    echo stripslashes(htmlentities(trim($data['question']))),'<br />';
     
                    // on prepare l'affichage de notre formulaire permettant de voter
                    echo '<form action = "index.php" method = "post">';
     
     
                    // on prépare une requête permettant de sélectionner les réponses possibles se rapportant à ce même sondage
     
                    $sql = 'SELECT id, reponse FROM sondage_reponses WHERE id_sondage="'.$data['id'].'"';
     
                    // on lance la requête
                    $req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
     
                    // on prépare notre boucle pour afficher les différents choix possibles de réponses
                    while ($donnees = mysql_fetch_array($req)) {
                                   // on affiche des boutons radio pour les différents choix de réponses possibles
                                   echo '<input type="radio" name="choix" value="' , $donnees['id'] , '"> ' , stripslashes(htmlentities(trim($donnees['reponse']))) , '<br />';
                    }
                    ?>
                    <input type = "hidden" name = "sondage_en_cours" value = "<?php echo $data['id']; ?>">
                    <input type = "submit" name="go" value = "Vote">
                    </form>
                    <?php
    }
     
    // on libère l'espace mémoire alloué à cette requête
    mysql_free_result ($req);
     
    ?>
    <a href="resultat.php">Voir les résultats</a>
    <?php
    // on affiche les erreurs éventuelles
    if (isset($erreur)) echo '<br /><br />',$erreur;
    ?>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    <html>
    <head>
    <title>Résultats des votes</title>
    </head>
     
    <body>
    <?php
    // Déclaration des paramètres de connexion
    $hostname_cnxsitephp = "localhost";
    $username_cnxsitephp = "root";
    $database_cnxsitephp = "forum";
    $password_cnxsitephp = "";
    // on se connecte à notre base de données
    $link = mysql_pconnect($hostname_cnxsitephp, $username_cnxsitephp, $password_cnxsitephp) or die("erreur de connexion au serveur");
    mysql_select_db($database_cnxsitephp) or die("erreur de connexion a la base de donnees");
    // on selectionne la question et l'id du sondage en cours
    $sql = 'SELECT id, question FROM sondage_questions ORDER BY id DESC LIMIT 0,1';
     
    // on lance la requête
    $req = mysql_query ($sql) or die ('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
     
    // on récupère le résultat dans un tableau associatif
    $data = mysql_fetch_array ($req);
     
    // on libère l'espace mémoire alloué à cette requête
     
    $nb_sondage = mysql_num_rows($req);
    mysql_free_result ($req);
     
    if ($nb_sondage == 0) {
                    echo 'Aucun sondage.';
    }
    else {
     
                    // on affiche la question
                    echo stripslashes(htmlentities(trim($data['question']))),'<br />';
     
                    // on déclare un tableau qui contiendra les réponses de notre sondage
                    $tableau_reponses = array();
     
                    // on déclare un tableau qui contiendra le nombre de réponse à chaque question
                    $tableau_nb_reponses = array();
     
                    // on selectionne les reponses de ce sondage
                    $sql = 'SELECT reponse, nb_reponses FROM sondage_reponses WHERE id_sondage="'.$data['id'].'"';
     
                    // on lance la requête
                    $req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
     
                    // on prépare notre boucle pour récupérer les différents choix possibles de réponses
                    while ($data = mysql_fetch_array($req)) {
                                   // on place ces valeurs dans nos deux tableaux
                                   $tableau_reponses[] = $data['reponse'];
                                   $tableau_nb_reponses[] = $data['nb_reponses'];
                    }
     
     
                    // on compte le nombre de réponses possible de notre sondage
                    $nb_reponses_du_sondage = count ($tableau_reponses);
     
                    // on compte le nombre total de réponses pour ce sondage
                    $nb_total_reponse = array_sum ($tableau_nb_reponses);
     
                    // on teste le nombre de vote
                    if ($nb_total_reponse == 0) {
                                   // cas où personne n'a voté
                                   echo 'Aucun vote pour linstant';
                    }
                    else {
                                   // cas où quelqu'un a déjà voté
                                   for ($i = 0; $i < $nb_reponses_du_sondage; $i++) {
                                                   // on affiche une réponse
                                                   echo $tableau_reponses[$i];
     
                                                   // on calcul le pourcentage de cette réponse
                                                   $pourcentage = ($tableau_nb_reponses[$i] * 100) / $nb_total_reponse;
     
                                                   // on arrondi ce calcul à un chiffre après la virgule
                                                   $pourcentage = round ($pourcentage, 1);
     
                                                   // on affiche le pourcentage
                                                   echo ' ',$pourcentage,' %<br />';
                                   }
     
                                   // on affiche le nombre total de votes
                                   echo '<br /><br />Nombre de votes : ', $nb_total_reponse;
                    }
    }
    ?>
    </body>
    </html>

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    j'ai un probleme de connexion qui s'affiche.
    peux-tu etre plus précis ?

    Quand tu fais action = "resultat.php" c'est normal que le vote ne soit pas pris en compte puisque ce traitement est réalisé dans l'autre fichier.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre confirmé
    Homme Profil pro
    Webdesigner
    Inscrit en
    Octobre 2010
    Messages
    68
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Webdesigner
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2010
    Messages : 68
    Par défaut
    Voici le message :
    Je précise qu'un vote supplémentaire est tout de même incrémenté dans la base;

    La connexion a été réinitialisée

    La connexion avec le serveur a été réinitialisée pendant le chargement de la page.

    * Le site est peut-être temporairement indisponible ou surchargé. Réessayez plus
    tard ;

    * Si vous n'arrivez à naviguer sur aucun site, vérifiez la connexion
    au réseau de votre ordinateur ;

    * Si votre ordinateur ou votre réseau est protégé par un pare-feu ou un proxy,
    assurez-vous que Firefox est autorisé à accéder au Web.

    Je précise que quand j'envoie le formulaire vers resultat.php, le problème de connexion n'intervient pas.

    Cependant, comme je le disais plus haut, ma base de donnée n'enregistre pas un nouveau vote, et la page "resultat.php" apparait sans prendre en compte le nouveau vote dans les %, mais affiche les précédents votes.

    Pouvez-vous m'aider sur ce point ?
    Merci d'avance

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    retire le mysql_close() pour voir.
    d'ailleurs, il n'y a pas besoin d'établir la connexion deux fois dans ta page, fait la tout au début et sers t'en aux différents points.

    Pouvez-vous m'aider sur ce point ?
    J'ai déjà repondu pour resultat.php
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [socket/ereg] probléme script socket
    Par UNi[FR] dans le forum Langage
    Réponses: 2
    Dernier message: 06/06/2006, 16h36
  2. Problème script a plusieurs
    Par cyrill.gremaud dans le forum ASP
    Réponses: 3
    Dernier message: 06/04/2006, 23h08
  3. problème script
    Par Didjetridoo dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 02/04/2006, 15h12
  4. [Débutant] Problème script ressource tuto
    Par MaN@eDeN dans le forum Windows
    Réponses: 8
    Dernier message: 08/03/2006, 23h20
  5. Problème : Script PHP IE NOK Firefox OK
    Par Saiyan dans le forum Langage
    Réponses: 40
    Dernier message: 15/11/2005, 23h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo