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:

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 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
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>
  &nbsp; 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>&nbsp;</p>
</body>
</html>
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
<?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 n’a 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."); 
?>
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
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&eacute;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 />&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; 
 <input type="hidden" name="nbQuestions" value="<?php echo $nbQuestions ; ?>" />
 <input name="envoyer" type="submit" value="Corriger le QCM" />
</form>
</fieldset>
</body>
</html>
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
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&eacute;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>'; ?>
&nbsp;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']; ?>&nbsp;.</p>
<?php 
} else {
?>
<p class="couleur2"> Vous avez donné <?php echo $nbPoints; ?> réponses justes sur <?php echo $_POST['nbQuestions'];  ?>&nbsp;.</p> <?php } ?>
</fieldset>
<p align="center"><a href="niveau.php">Rejouer</a></p>
</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.

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 commande
Code : Sélectionner tout - Visualiser dans une fenêtre à part
if (isset($_POST['reponse'.$j]))
donne false.

Quelqu'un pourrait-il m'aider à correctement récupérer les données du formulaire?

Merci par avance,
Johnny