Quiz en PHP 2/3 - Médecins Maitres

Transcription

Quiz en PHP 2/3 - Médecins Maitres
Modifier cet article (190) Recalculer cette page *
Les Médecins Maîtres-Toile
Accueil
Boite à Outils
Scripts PHP
Quiz en PHP 2/3
Publié le : 15 décembre 2007
Publication antérieure :
26 avril 2006
Imprimer cet article
Auteur :
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].
Sommaire
 Installation du script
 Quelques explications sur ce code
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 :
<?php
$ p a g e = b a s e n a m e ( $ _ S ER V ER [PH P_ S EL F
$ m e la n g e = a r r a y _ r a n d ( $ q u iz z ,c o u n t( $ q u i
if ( !$ _ PO S T [r e s u lt]) {
p r in t " < f o r m a c tio n = \" $ p a g e \" m e
f o r ( $ i= 0 ; $ i< c o u n t( $ q u iz z ) ; $ i+ +
p r in t '< b lo c k q u o te > < s p
p r in t " \t" .( $ i+ 1 ) ." - " .$ q
p r in t '< /s p a n > < b r /> < b
f o r ( $ j= 1 ; $ j< c o u n t( $ q u
$ q u e s t= $ q u
p r in t " < in p u t
}
p r in t " < /b lo c k q u o te > < h
$ lis te .= $ m e la n g e [$ i]."
}
p r in t " < in p u t ty p e = \" h id d e n \" n a m
p r in t " < in p u t ty p e = \" s u b m it\" s ty le
}
e ls e {
$ n u m e r o = s p lit( " [,]" ,$ r e s u lt) ;
p r in t '< h 4 a lig n = " c e n te r " > R é s u lta
$ p o in ts = 0 ;
f o r ( $ i= 0 ; $ i< c o u n t( $ q u iz z ) ; $ i+ + )
$ r e p o n s e = tr im ( $ _ PO S T [$ i]) ;
p r in t '< b lo c k q u o te > < s
p r in t " \t" .( $ i+ 1 ) ." - " .$ q
$ n u m e r o _ b o n n e = $ q u iz
$ b o n n e = $ q u iz z [$ n u m e r o [$ i]][$ n u
if ( $ r e p o n s e = = $ n u m e r
p r in t 'V o tr e r
$ p o in ts + + ;
}
e ls e {
p r in t 'L a r é p
if ( $ r e p o n s e
pr
}
e ls e {
pr
}
}
$ c o m m e n ta ir e = $ q u iz z
p r in t " < b r /> " .$ c o m m e n
p r in t " < /b lo c k q u o te > < h r /> \n " ;
$nom++;
}
if ( $ p o in ts = = c o u n t( $ q u iz z ) ) {
p r in t" < b r /> < h 4 a lig n = 'c
}
e ls e {
p r in t " < b r /> < h 4 a lig n = 'c e n te r '> V
if ( $ p o in ts > 1 ) p r in t " s
p r in t " r é p o n s e " ;
if ( $ p o in ts > 1 ) p r in t " s
p r in t " s u r " .c o u n t( $ q u iz z ) ." q u e
}
}
?>
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.
Imprimer cet article
Copyright Médecins Maîtres-Toile francophones
Espace membres - Administration - Crédits