Accueil Boite à Outils Scripts PHP Quiz en PHP 2/3

Publié le : 15 décembre 2007
Publication antérieure :
26 avril 2006

Imprimer Imprimer cet article

Auteur :
Alain Sichel

Alain Sichel
Quiz en PHP 2/3
2. Variante du script avec ordre aléatoire des questions

Cet article présente une variante du script présenté dans Quiz en PHP 1/3 permettant de rendre aléatoire l’ordre des questions. D’autres variantes pour rendre aléatoire l’ordre des réponses proposées sont présentées dans Quiz en PHP 3/3 [1].

Vous pouvez voir un exemple de ce script ici : Quiz sur l’alcool.

Installation du script

Comme pour la version de base du script, vous utilisez deux fichiers :
- celui contenant la mise en forme de la page et le tableau avec les questions, les réponses et la correction,
- celui contenant le code de gestion du script.

Le premier fichier n’a besoin que de peu de modifications :

1) Il faut évidemment supprimer les numéros indiquant l’ordre des questions, puisque cet ordre va être aléatoire, ainsi :

$quizz= array(
array("1 - L'alcool réchauffe :","Vrai","Faux",$nsp,"2","C'est une impression illusoire : après une absorption d'alcool, la température s'abaisse. Ce mécanisme de refroidissement explique de nombreux cas de pneumonie chez les grands buveurs."),
array("2 - L'alcool désaltère :","Vrai","Faux",$nsp,"2","L'alcool déshydrate et la soif persiste. Plus on boit d'alcool plus on a soif."),

doit être remplacé par :

$quizz= array(
array("L'alcool réchauffe :","Vrai","Faux",$nsp,"2","C'est une impression illusoire : après une absorption d'alcool, la température s'abaisse. Ce mécanisme de refroidissement explique de nombreux cas de pneumonie chez les grands buveurs."),
array("L'alcool désaltère :","Vrai","Faux",$nsp,"2","L'alcool déshydrate et la soif persiste. Plus on boit d'alcool plus on a soif."),

2) Il faut charger le fichier de gestion du script, que j’ai nommé quizz_rand.inc.php Ce nouveau fichier permet de conserver l’ancien pour des quizz où on préfère garder un ordre déterminé des questions. La ligne :

include("quizz.inc.php");

devient donc :

include("quizz_rand.inc.php");

Le fichier quizz_rand.inc.php :

Voici son code pour pouvoir l’installer :

Quelques explications sur ce code :

Voici quelques commentaires pour comprendre ce qui change dans quizz_rand.inc.php par rapport à quizz.inc.php pour permettre un ordre aléatoire des questions.

Les questions, les réponses et la correction sont dans $quizz

En notant $melange = array_rand($quizz,count($quizz)); on obtient un tableau d’index indiquant dans quel ordre seront présentées les questions de $quizz Cet ordre sera évidemment modifié à chaque chargement de la page.

Ainsi, la ligne :

print "\t".($i+1)." - ".$quizz[$melange[$i]][0]."\n";

indique que l’on affiche une tabulation, puis le numéro de la question [2] suivie d’un tiret et $quizz[$melange[$i]][0] pour afficher la question dans l’ordre tiré au sort.

Tout ceci concerne l’affichage des questions, mais pour gérer les réponses c’est moins simple, car si on applique le même principe $melange = array_rand($quizz,count($quizz)); pour les réponse, on obtient bien un ordre aléatoire de celle-ci, mais qui est différent de celui des questions, on ne peut donc pas dire quelles sont les bonnes réponses...

Alors j’ai dû procéder autrement en notant l’ordre de présentation des questions dans une variable $liste gràce à $liste .= $melange[$i].","; et envoyée en même temps que le formulaire :

print "<input type=\"hidden\" name=\"result\" value=\"$liste\" /><br />\n<center>";

A la réception du formulaire, le numéro de chaque question séparé par une "," se trouve dans $result on récupère ensuite chaque numéro avec la fonction split() :

$numero = split("[,]",$result);

$numero étant un tableau, on aura chaque numéro dans l’ordre avec $numero[$i]


 

[1] Ce script a été modifié le 15/12/07 en remplaçant $result par $_POST[result] et $$nom par $_POST[$i].

[2] $i commençant à 0, il faut noter ($i+1) pour indiquer le numéro des questions en commençant à 1.




Cliquez ici pour réagir à cet article

Imprimer Imprimer cet article