Bonjour,
j'espère que je suis dans le bon forum (j'ai hésité avec celui des scripts téléchargés, mais le mien ne semblait pas rentrer dans les catégories)
Voilà, je cherche un réaliser un quiz en php, avec une base de données MySQL.
Je sais, cela parait trivial.
J'ai pas mal cherché sur internet, jusqu'à trouver un script simple qui me convenait.
Mais il a un bug! Le fichier "correction.php" ne fonctionne pas.
Je suis débutant depuis 15 jours en PHP et je ne saisis pas encore toutes les subtilités du langage.
Voici les différents fichiers:
Création de la table:
Voici le fichier niveau.php, par lequel tout commence:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 CREATE TABLE `qcm` ( `id` tinyint(4) NOT NULL auto_increment, `question` text NOT NULL, `rep1` varchar(60) NOT NULL default '', `rep2` varchar(60) NOT NULL default '', `rep3` varchar(60) NOT NULL default '', `rep_juste` varchar(60) NOT NULL default '', `commentaire` text NOT NULL, `niveau` varchar(10) NOT NULL default '', PRIMARY KEY (`id`) ) TYPE=MyISAM AUTO_INCREMENT=27 ;
Voici le fichier de connexion, classique, intitulé login.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 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> <title>Choix du niveau du QCM</title> <link href="qcm.css" rel="stylesheet" type="text/css" media="screen"> </head> <body> <p align="center" class="couleur"> Choisissez un niveau de questions</p> <form method="post" action="debut.php"> Niveau : <select name="niveau" size="1"> <option value="facile">Facile</option> <option value="difficile">Difficile</option> </select> Nombre de questions : <select name="nbQuestions" size="1"> <option value="5" selected>5</option> <option value="10">10</option> </select> <input type="submit" value="Envoyer" /> </form> <p> </p> </body> </html>
Voici le fichier debut.php, qui permet de démarrer le quiz, une fois le niveau et le nombre de questions renseignés:
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 <?php // Url de votre base de données. Généralement, c'est localhost. $Serveur_db ="localhost"; // Votre login/identification pour votre base de données $User_db ="root"; // Votre mot de passe pour la base de donnée $Passe_db =""; // Nom de votre base de donnée $Base_name="ricksodjahin"; // Connection à MySQL. En utilisant une connexion persistante, on na pas besoin de faire //mysql_close() à chaque fois. $Connect_db = mysql_connect($Serveur_db,$User_db,$Passe_db) or die("Connexion au serveur impossible"); // Sélection de la base de donnée mysql_select_db($Base_name) or die("Impossible de se connecter à la base de données."); ?>
Et voici le fichier de correction, qui bloque.
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 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr"> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> <title>Début du QCM</title> <link href="qcm.css" rel="stylesheet" type="text/css" media="screen"> </head> <body> <p class="couleur">PLACE AU JEU </p> <fieldset> <legend align="center">QCM</legend> <form method="post" action="correction.php"> <?php $nbQuestions = $_POST['nbQuestions']; include ("config.php"); //Comptage du nombre d'enregistrements dans la table QCM $nbEnreg = mysql_query("SELECT * FROM qcm"); $nbEnreg = mysql_num_rows($nbEnreg); // Requete-sélection des questions. Ceci se fait aléatoirement avec RAND(); $requete = mysql_query("SELECT id,question,rep1,rep2,rep3,rep_juste,commentaire FROM qcm WHERE niveau='".$_POST['niveau']."' ORDER BY RAND() LIMIT $nbQuestions "); $i=0; while ($donnees = mysql_fetch_array($requete)){ ?> <table> <tr> <td><?php $i++; echo $i.') '.$donnees['question']; ?></td></tr> <tr><td><input type="radio" name="<?php echo 'reponse'.$i; ?>" value="<?php echo $donnees['rep1']; ?>" /> <?php echo $donnees['rep1']; ?></td></tr> <tr><td><input type="radio" name="<?php echo 'reponse'.$i; ?>" value="<?php echo $donnees['rep2']; ?>" /> <?php echo $donnees['rep2']; ?></td></tr> <tr><td><input type="radio" name="<?php echo 'reponse'.$i; ?>" value="<?php echo $donnees['rep3']; ?>" /> <?php echo $donnees['rep3']; ?></td></tr><br/> <input type="hidden" name="<?php echo 'question'.$i; ?>" value="<? echo htmlentities($donnees['question'], ENT_QUOTES); ?>" /> <input type="hidden" name="<?php echo 'juste'.$i; ?>" value="<? echo $donnees['rep_juste']; ?>" /> <input type="hidden" name="<?php echo 'commentaire'.$i; ?>" value="<? echo htmlentities($donnees['commentaire'], ENT_QUOTES); ?>" /></table> <?php } ?> <br /> <input type="hidden" name="nbQuestions" value="<?php echo $nbQuestions ; ?>" /> <input name="envoyer" type="submit" value="Corriger le QCM" /> </form> </fieldset> </body> </html>
En effet, les réponses choisies ne sont pas récupérées et on obtient donc à chaque fois: "mauvaise réponse". De plus, la bonne réponse n'est pas indiquée et il n'y a pas de commentaire.
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 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr"> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> <title>Début du QCM</title> <link href="qcm.css" rel="stylesheet" type="text/css" media="screen"> </head> <body> <p class="couleur">Correction du QCM</p> <p align="center"><a href="niveau.php">Rejouer</a></p> <fieldset><legend align="center">Correction</legend> <?php //La variable $nbPoints comptera le nombre de réponses justes données par le joueur $nbPoints = 0; function verif ($joueur,$correct){ if ($joueur == $correct){ echo '<b>Bonne réponse.</b><br>'; $GLOBALS["nbPoints"]++ ; } else echo '<b>Mauvaise réponse.</b><br/> La bonne réponse est <b>'.$correct.'.</b><br/> ' ; echo 'Détails : '; } for ($j=1; $j<=$_POST['nbQuestions']; $j++) { if (isset($_POST['reponse'.$j])) ${"reponse"."$j"} = $_POST['reponse'.$j]; else ${"reponse"."$j"} =' QUE DALLE. '; } $i=1; while ($i<=$_POST['nbQuestions']){ echo $i.') '.$_POST['question'.$i].'<br>'; ?> Vous avez répondu : <?php echo '<u>'.${"reponse"."$i"}.'</u> '; verif(${"reponse"."$i"},$_POST['juste'.$i]); echo $_POST['commentaire'.$i].'<br /><br />'; $i++; } if ($nbPoints <= 1) { ?> <p class="couleur2"> Vous avez donné <?php echo $nbPoints; ?> réponse juste sur <?php echo $_POST['nbQuestions']; ?> .</p> <?php } else { ?> <p class="couleur2"> Vous avez donné <?php echo $nbPoints; ?> réponses justes sur <?php echo $_POST['nbQuestions']; ?> .</p> <?php } ?> </fieldset> <p align="center"><a href="niveau.php">Rejouer</a></p> </body> </html>
J'y suis depuis deux jours, mais j'ai beau essayer de debugguer le code, étant débutant en PHP, je ne vois pas ce qui se passe.
La seule chose que j'ai remarqué est que la commandedonne false.
Code : Sélectionner tout - Visualiser dans une fenêtre à part if (isset($_POST['reponse'.$j]))
Quelqu'un pourrait-il m'aider à correctement récupérer les données du formulaire?
Merci par avance,
Johnny







Répondre avec citation
Partager