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

Publié le : 15 décembre 2007
Publication antérieure :
1er mai 2006

Imprimer Imprimer cet article

Auteur :
Alain Sichel

Alain Sichel
Quiz en PHP 3/3
3. Variantes du script avec ordre aléatoire des réponses

Après avoir présenté Quiz en PHP 1/3 et avec Quiz en PHP 2/3 une variante pour rendre aléatoire l’ordre des questions, cet article présente une modification du script pour rendre aléatoire l’ordre des réponses proposées, et si on veut aussi les questions dans un ordre aléatoire une combinaison avec le script précédent. [1]

Script avec ordre aléatoire des réponses proposées

Vous pouvez voir un exemple de ce script ici : Quiz Bases du secourisme.

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 doit être modifié :

1) Un nouveau tableau va contenir les propositions de réponses, qui sont donc retirées de $quizz, ainsi par exemple :

$quizz= array(
array("1 - Devant un accident, il faut d'abord :","Alerter les secours","Examiner la victime","S'assurer qu'il ne persiste pas de danger",$nsp,"3","Toute situation d'accident peut créer de nouveaux dangers (électrisation, aggravation d'un accident de voiture...). La vie ou la santé du sauveteur, de la victime et des témoins est alors menacée. Tout danger doit être immédiatement écarté ou supprimé par le sauveteur avant même d'examiner la victime ou d'alerter les secours."),
array("2 - Si la victime est exposée à un danger qui ne peut être supprimé (local enfumé, personne au milieu d'une route), il faut&nbsp;:","Ne rien faire en attendant les secours","Rester &agrave; c&ocirc;t&eacute; de la victime","Effectuer un d&eacute;gagement d'urgence",$nsp,"3","Il faut saisir la victime et la sortir de la zone dangereuse (sauf si on pense qu'on s'expose soi-m&ecirc;me &agrave; un trop grand risque). Si on ne fait pas imm&eacute;diatement ce d&eacute;gagement d'urgence, la personne ne pourra peut-&ecirc;tre plus &ecirc;tre sauv&eacute;e quand les secours seront sur place. Dans ce cas particulier, le d&eacute;gagement d'urgence est moins dangereux que de laisser la victime sur place, m&ecirc;me si elle a des fractures.<br />Attention, dans un local enfum&eacute; ou une atmosph&egrave;re toxique, il faut retenir sa respiration quand on est dans la pi&egrave;ce.<br />Si le sauveteur reste &agrave; c&ocirc;t&eacute; de la victime, il est expos&eacute; aux m&ecirc;mes dangers, et sa vie est menac&eacute;e de la m&ecirc;me fa&ccedil;on.")
);

doit être remplacé par :

$quizz= array(
array("1 - Devant un accident, il faut d'abord&nbsp;:","3","Toute situation d'accident peut cr&eacute;er de nouveaux dangers (&eacute;lectrisation, aggravation d'un accident de voiture...). La vie ou la sant&eacute; du sauveteur, de la victime et des t&eacute;moins est alors menac&eacute;e. Tout danger doit &ecirc;tre imm&eacute;diatement &eacute;cart&eacute; ou supprim&eacute; par le sauveteur avant m&ecirc;me d'examiner la victime ou d'alerter les secours."),
array("2 - Si la victime est expos&eacute;e &agrave; un danger qui ne peut &ecirc;tre supprim&eacute; (local enfum&eacute;, personne au milieu d'une route), il faut&nbsp;:","3","Il faut saisir la victime et la sortir de la zone dangereuse (sauf si on pense qu'on s'expose soi-m&ecirc;me &agrave; un trop grand risque). Si on ne fait pas imm&eacute;diatement ce d&eacute;gagement d'urgence, la personne ne pourra peut-&ecirc;tre plus &ecirc;tre sauv&eacute;e quand les secours seront sur place. Dans ce cas particulier, le d&eacute;gagement d'urgence est moins dangereux que de laisser la victime sur place, m&ecirc;me si elle a des fractures.<br />Attention, dans un local enfum&eacute; ou une atmosph&egrave;re toxique, il faut retenir sa respiration quand on est dans la pi&egrave;ce.<br />Si le sauveteur reste &agrave; c&ocirc;t&eacute; de la victime, il est expos&eacute; aux m&ecirc;mes dangers, et sa vie est menac&eacute;e de la m&ecirc;me fa&ccedil;on.")
);
$propositions= array(
array("Alerter les secours","Examiner la victime","S'assurer qu'il ne persiste pas de danger"),
array("Ne rien faire en attendant les secours","Rester &agrave; c&ocirc;t&eacute; de la victime","Effectuer un d&eacute;gagement d'urgence")
);

A noter que $nsp qui correspond à "Je ne sais pas" a disparu. Cette proposition sera affichée mais toujours après les autres qui sortiront dans un ordre aléatoire.

2) Il faut charger le fichier de gestion du script, que j’ai nommé quizz_rand2.inc.php La ligne :

include("quizz.inc.php");

devient donc :

include("quizz_rand2.inc.php");

Le fichier quizz_rand2.inc.php :

Voici son code pour pouvoir l’installer :

Quelques explications sur ce code

Voici quelques commentaires pour comprendre ce qui change dans quizz_rand2.inc.php par rapport à quizz.inc.php pour rendre aléatoire l’ordre des réponses proposées.

Les réponses sont dans $propositions
Pour mélanger l’ordre des réponses il suffit de faire shuffle($propositions[$i]);
Pour pouvoir comparer la réponse choisie avec la bonne réponse, on va envoyer le texte de la proposition avec value=\"$quest\" plutôt que son numéro.
La proposition "Je ne sais pas" est ajoutée ensuite par print "<input type='radio' name=\"$i\" value=\"$k\" /> Je ne sais pas<br />\n</blockquote><hr />";

A la réception du formulaire, le texte de la proposition choisie est récupéré par $reponse
Avant de comparer à la bonne réponse, $reponse est traité par htmlentities() et stripslashes() pour éliminer les modifications dues à l’envoi par le formulaire.

Ce script fonctionne bien sur le site du CYES où j’utilise le code HTML pour les caractères accentués (é est remplacé par &eacute;). Il sera peut-être nécesssaire de faire quelques essais et adaptations en fonction de votre serveur ou du codage de vos pages.

Combinaison avec le script précédent

Si vous voulez à la fois rendre aléatoire l’ordre des questions comme indiqué dans Quiz en PHP 2/3 et modifier également l’ordre des réponses proposées comme indiqué ci-dessus, voici un script sur ce principe, dont vous pouvez voir un exemple ici : Quizz Premiers secours.

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

Le premier fichier doit être modifié :

1) Il faut évidemment supprimer les numéros indiquant l’ordre des questions puisque cet ordre va être aléatoire et mettre les propositions de réponses dans un nouveau tableau, ainsi :

$quizz= array(
array("1 - Devant un accident, il faut d'abord&nbsp;:","Alerter les secours","Examiner la victime","S'assurer qu'il ne persiste pas de danger",$nsp,"3","Toute situation d'accident peut cr&eacute;er de nouveaux dangers (&eacute;lectrisation, aggravation d'un accident de voiture...). La vie ou la sant&eacute; du sauveteur, de la victime et des t&eacute;moins est alors menac&eacute;e. Tout danger doit &ecirc;tre imm&eacute;diatement &eacute;cart&eacute; ou supprim&eacute; par le sauveteur avant m&ecirc;me d'examiner la victime ou d'alerter les secours."),
array("2 - Si la victime est exposée à un danger qui ne peut être supprimé (local enfumé, personne au milieu d'une route), il faut&nbsp;:","Ne rien faire en attendant les secours","Rester &agrave; c&ocirc;t&eacute; de la victime","Effectuer un d&eacute;gagement d'urgence",$nsp,"3","Il faut saisir la victime et la sortir de la zone dangereuse (sauf si on pense qu'on s'expose soi-m&ecirc;me &agrave; un trop grand risque). Si on ne fait pas imm&eacute;diatement ce d&eacute;gagement d'urgence, la personne ne pourra peut-&ecirc;tre plus &ecirc;tre sauv&eacute;e quand les secours seront sur place. Dans ce cas particulier, le d&eacute;gagement d'urgence est moins dangereux que de laisser la victime sur place, m&ecirc;me si elle a des fractures.<br />Attention, dans un local enfum&eacute; ou une atmosph&egrave;re toxique, il faut retenir sa respiration quand on est dans la pi&egrave;ce.<br />Si le sauveteur reste &agrave; c&ocirc;t&eacute; de la victime, il est expos&eacute; aux m&ecirc;mes dangers, et sa vie est menac&eacute;e de la m&ecirc;me fa&ccedil;on.")
);

doit être remplacé par :

$quizz= array(
array("Devant un accident, il faut d'abord&nbsp;:","3","Toute situation d'accident peut cr&eacute;er de nouveaux dangers (&eacute;lectrisation, aggravation d'un accident de voiture...). La vie ou la sant&eacute; du sauveteur, de la victime et des t&eacute;moins est alors menac&eacute;e. Tout danger doit &ecirc;tre imm&eacute;diatement &eacute;cart&eacute; ou supprim&eacute; par le sauveteur avant m&ecirc;me d'examiner la victime ou d'alerter les secours."),
array("Si la victime est expos&eacute;e &agrave; un danger qui ne peut &ecirc;tre supprim&eacute; (local enfum&eacute;, personne au milieu d'une route), il faut&nbsp;:","3","Il faut saisir la victime et la sortir de la zone dangereuse (sauf si on pense qu'on s'expose soi-m&ecirc;me &agrave; un trop grand risque). Si on ne fait pas imm&eacute;diatement ce d&eacute;gagement d'urgence, la personne ne pourra peut-&ecirc;tre plus &ecirc;tre sauv&eacute;e quand les secours seront sur place. Dans ce cas particulier, le d&eacute;gagement d'urgence est moins dangereux que de laisser la victime sur place, m&ecirc;me si elle a des fractures.<br />Attention, dans un local enfum&eacute; ou une atmosph&egrave;re toxique, il faut retenir sa respiration quand on est dans la pi&egrave;ce.<br />Si le sauveteur reste &agrave; c&ocirc;t&eacute; de la victime, il est expos&eacute; aux m&ecirc;mes dangers, et sa vie est menac&eacute;e de la m&ecirc;me fa&ccedil;on.")
);
$propositions= array(
array("Alerter les secours","Examiner la victime","S'assurer qu'il ne persiste pas de danger"),
array("Ne rien faire en attendant les secours","Rester &agrave; c&ocirc;t&eacute; de la victime","Effectuer un d&eacute;gagement d'urgence")
);

2) Il faut charger le fichier de gestion du script, que j’ai nommé quizz_rand3.inc.php La ligne :

include("quizz.inc.php");

devient donc :

include("quizz_rand3.inc.php");

Le fichier quizz_rand3.inc.php :

Voici son code pour pouvoir l’installer :

 


 

[1] Cet article a été modifié le 10/11/2006 pour corriger un bug dans le code du script et le 15/12/07 pour remplacer $result par $_POST[result] et $$nom par $_POST[$i].




Cliquez ici pour réagir à cet article

Imprimer Imprimer cet article


Réactions à l'article :