Précédent   Forum des professionnels en informatique > PHP > Langage > Fonctions
Fonctions Forum d'entraide sur les fonctions PHP. Avant de poster -> FAQ fonctions et Sources diverses
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 21/11/2010, 12h38   #1
Invité régulier
 
Inscription : octobre 2010
Messages : 63
Détails du profil
Informations forums :
Inscription : octobre 2010
Messages : 63
Points : 6
Points : 6
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 :
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 :
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>
novice100 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/11/2010, 12h45   #2
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 14 929
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 14 929
Points : 16 381
Points : 16 381
Citation:
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.
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/11/2010, 12h48   #3
Invité régulier
 
Inscription : octobre 2010
Messages : 63
Détails du profil
Informations forums :
Inscription : octobre 2010
Messages : 63
Points : 6
Points : 6
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
novice100 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/11/2010, 13h14   #4
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 14 929
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 14 929
Points : 16 381
Points : 16 381
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.

Citation:
Pouvez-vous m'aider sur ce point ?
J'ai déjà repondu pour resultat.php
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/11/2010, 13h46   #5
Invité régulier
 
Inscription : octobre 2010
Messages : 63
Détails du profil
Informations forums :
Inscription : octobre 2010
Messages : 63
Points : 6
Points : 6
Pour ce qui est d'établir la connexion deux fois, je suis obligée sinon il me dit que password, etc ne sont pas definis.

Sinon, ca a l'air de fonctionner en supprimant mysql_close(), c'est à dire que les valeurs sont bien incrémentées dans la base de donnée quand je fais 'resultat.php'.

Toutefois, quand je choisi un vote, la question et les réponses vides s'affiche, alors que moi, je souhaiterais voir afficher les resultats.

J'ai bien essaye d'integrer la page 'resultat.php' dans index.php pour tout avoir sur une même page, mais je ne sais pas où mettre la page resultat.php dans index.php

Pourrais-tu m'aiguiller un peu ?
novice100 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/11/2010, 14h00   #6
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 14 929
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 14 929
Points : 16 381
Points : 16 381
Citation:
Pour ce qui est d'établir la connexion deux fois, je suis obligée
Evidemment que non.

Tu peux faire une redirection si tu ne veux pas mélanger tes deux codes :
Code :
header('Location: resultat.php');
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/11/2010, 14h21   #7
Invité régulier
 
Inscription : octobre 2010
Messages : 63
Détails du profil
Informations forums :
Inscription : octobre 2010
Messages : 63
Points : 6
Points : 6
Ok, cela fonctionne avec la redirection.
Voici où je l'ai mis :
$erreur = 'Merci d\'avoir voté ';
header('Location: resultat.php');

Mais si c'est possible, je preferais tout avoir sur la page index.php
Est-ce que c'est possible?
Si oui, comment je peux m'y prendre ?
Est-ce que je dois utiliser des conditions ou autre chose ?
novice100 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 20h20.


 
 
 
 
Partenaires

Hébergement Web