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