Lorsque j'ai commencé à apprendre le PHP, mon premier objectif a ...
Web Entreprise Design (W.E.D.) est une entreprise spécialisée dans les activités
de création de cybersites (sites web) et participe au développement de portails ...
part of the document
Créer un quiz en PHP (Partie I)
Introduction
Lobjectif de cet article est dexposer les étapes à suivre pour mettre en place un jeu de questions et réponses en PHP. Il est destiné aux développeurs débutants qui voudraient booster leur site perso avec un jeu du genre « Questions pour un champion ». Alors, à vos marques, prêt, partez.
Les notions suivantes seront abordées :
Accès à une base de données (en lecture et en écriture)
Affichage de données provenant dune base de données
Utilisation des formulaires, notamment les champs de texte, les boutons radios, les listes déroulantes et les champs masqués
Au minimum, le lecteur doit avoir une certaine connaissance du langage PHP et des bases de données. Si ce nest pas le cas, je recommande de lire le cours de PHP sur le site du zéro ( HYPERLINK "http://www.siteduzero.com" www.siteduzero.com).
Bref rappel sur le PHP
Il sagit dun langage de script côté serveur créé en 1994 par Rasmus Lerdorf. Ce langage lui permettait de garder la trace des personnes venant consulter son CV sur son site grâce à l'accès à une base de données par l'intermédiaire de requêtes SQL.
Lun des avantages de PHP réside dans sa facilité à interfacer les bases de données. Depuis sa version 3.0, les S.G.B.D. suivants (entre autres) sont supportés par lui :
Dbase, Informix, Interbase, mSQL, MySQL, Oracle, PostgreSQL, Sybase etc
Mais lorsquune base de données nest pas directement supportée par PHP, il est toujours possible dutiliser un pilote ODBC (Open Data Base Connectivity) pour communiquer avec elle. La communication avec les bases de données se fait à laide de requêtes SQL (Structured Query Language), un langage reconnu par lensemble des S.G.B.D.
Le S.G.B.D. que nous utiliserons dans ce tutoriel est MySQL. Il sagit dun S.G.B.D. gratuit et rapide fonctionnant sous Linux (entre autres). Etant donné que la majorité des serveurs web fonctionnent sous Linux, MySQL est de ce fait le S.G.B.D. le plus utilisé avec PHP.
Première étape : Création de la table
On suppose que EASYPHP est installé sur votre ordinateur et que vous êtes déjà familiarisé avec lenvironnement de PhpMyAdmin. Si ce nest pas la cas, téléchargez-le sur HYPERLINK "http://www.easyphp.org" www.easyphp.org et installez-le sur votre ordinateur. Ensuite, il faudra créer une base de données avec lutilitaire PhpMyAdmin. Si vous disposiez déjà dune base de données, il est inutile den créer une nouvelle. Vous accédez simplement à votre base de données, puis vous créerez la table qui nous servira dans notre application. Pour créer la table, il faut dabord exécuter le fichier « qcm.exe » (il sagit dun fichier auto extractible) ; puis procéder de lune des deux façons suivantes :
- Cliquer sur le lien SQL. Il apparaît sur la nouvelle page qui saffiche une zone de texte multi-lignes au dessus de laquelle il est écrit : Exécuter une ou des requêtes sur la base Nom_de_votre_base_de_données. Ensuite, ouvrir le fichier « qcm.sql » qui se trouve dans le dossier qui vient dêtre créé sur votre disque dur après exécution du fichier « qcm.exe » , puis copiez le contenu de ce fichier que vous collerez dans la zone de texte multi-lignes. Enfin, cliquer sur le bouton de commande EXECUTER. Lexécution de la requête crée automatiquement la table avec les enregistrements que jai prévus à cet effet.
- Cliquer sur le lien SQL. Au-dessous de la zone de texte multi-lignes, cliquer sur le bouton PARCOURIR. Dans la fenêtre qui saffiche, indiquer le chemin daccès au fichier « qcm.sql » qui contient la requête à exécuter. Ce chemin saffiche alors dans la zone de texte se trouvant à gauche du bouton PARCOURIR. Enfin, cliquer sur le bouton EXECUTER. Cela produira le même résultat que précédemment.
Deuxième étape : Copie des fichiers du projet dans le dossier racine local de votre ordinateur.
Les fichiers du projet sont organisés suivant larborescence suivante :
Les fichiers du dossier « maj » permettent de mettre à jour votre table de questions en ajoutant de nouvelles questions ou en modifiant des questions existantes. Pour mettre à jour votre table de questions, charger dans votre navigateur le fichier « index.php » du dossier « maj ».
Vous pouvez maintenant supprimer le fichier « qcm.sql ». Ensuite copier le reste des fichiers (tout en conservant larborescence ci-dessus) dans votre dossier racine local. Cest généralement le dossier ../www/nom_de_votre_site/
NB : Le fichier « contrôle.js » est un fichier JavaScript qui vérifiera que des données ont été effectivement saisies avant de les enregistrer dans la base de données.
Troisième étape : Codage
Jusquà présent, nous parlions dans loptique que vous avez téléchargé le fichier « qcm.exe ». Si cest le cas, il vous reste une seule chose pour que votre application fonctionne. Il faut éditer le fichier « config.php » situé à la racine de larborescence. Pour cela, ouvrir le fichier et, remplacer la ligne :
$Base_name="ricksodjahin";
par la ligne :
$Base_name="nom_de_votre_base_de_donnees";
Où nom_de_votre_base_de_donnees désigne le nom de la base de données que vous avez créée.
Ainsi, votre application fonctionnera à merveille.
Mais admettons que vous nayez pas téléchargé le fichier « qcm.exe ». La première chose à faire sera bien évidemment de créer la table qui conservera les questions qui seront posées ainsi que les réponses et dautres subtilités. Pour cela, dans PhpMyAdmin, copier-coller le code suivant qui est la requête qui créera la table :
#
# Structure de la table `qcm`
#
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 ;
#
# Contenu de la table `qcm`
#
INSERT INTO `qcm` VALUES (1, 'En informatique, quel mot désigne la plus petite quantité d\'information ?', 'Le bit', 'L\'octet', 'L\'algorithme', 'Le bit', 'En effet, 1 octet équivaut à 8 bits. \r\nUn algorithme est la description ordonnée d\'un ensemble d\'opérations qui, losqu\'elles sont effectuées, conduisent à un résultat bien précis.', 'facile');
INSERT INTO `qcm` VALUES (2, 'Quelle catégorie de personnes participent aux jeux paralympiques ?', 'Les handicapés', 'Les vieillards', 'Les enfants de moins de 12ans', 'Les handicapés', 'Les jeux paralympiques sont réservés aux handicapés. Il n\'existe pas de jeux olympiques ni pour vieillards, ni pour enfants de moins de 12ans. Pour informations, les derniers jeux paralympiques se sont déroulés à Turin, fin Février 2006.', 'difficile');
INSERT INTO `qcm` VALUES (3, 'Dans quelle ville des Etats-Unis se trouve la prestigieuse université Harvard ?', 'à Cambridge', 'à Philadelphie', 'à New York', 'à Cambridge', 'Harvard University a été créée en 1636 par John Harvard.C\'est la plus vieille université des Etats Unis, et l\'une des plus prestigieuses du monde. A New York, l\'université Columbia a été fondée en 1912.', 'difficile');
INSERT INTO `qcm` VALUES (4, 'Combien de cantons compte la Suisse ?', '13', '23', '33', '23', 'Sans commentaire', 'difficile');
INSERT INTO `qcm` VALUES (5, 'A quelle discipline olympique asocie t-on l\'épée, le fleuret et le sabre ?', 'L\'escrime', 'Le triathlon', 'L\'heptathlon', 'L\'escrime', 'Le triathlon est une compétition comportant 3 épreuves différentes, généralement la course à pied, la course cycliste sur route et la natation. ', 'facile');
INSERT INTO `qcm` VALUES (6, 'Dans quelle ville a été signée la charte instituant l\'ONU ?', 'Los Angeles', 'New York', 'San Francisco', 'San Francisco', 'C\'était en Avril-Juin 1945, lors de la première conférence de San Francisco. Du 4 au 8 Septembre 1951, la deuxième conférence de San Francisco établit le traité de paix entre le Japon et les Alliés. ', 'facile');
INSERT INTO `qcm` VALUES (7, 'En 1940, quelle découverte est due au médecin Karl Landsteiner ?', 'Les groupes sanguins', 'Le facteur Rhésus', 'L\'hémoglobine', 'Le facteur Rhésus', 'Un peu plus tôt en 1900, ce médecin d\'origine autrichienne avait déjà découvert chez l\'homme l\'existence de groupes sanguins. En 1930, il reçut le prix Nobel de Médecine.', 'difficile');
INSERT INTO `qcm` VALUES (8, 'Depuis 1936, quel prix international est décerné chaque année à des mathématiciens âgés de moins de 40 ans ?', 'Le prix Nobel de Mathématiques', 'Le prix international Isaac Newton', 'La médaille Fields', 'La médaille Fields', 'Il n\'existe pas de prix Nobel dans le domaine des Mathématiques. Le "prix international Isaac Newton" est une pure invention de ma part. La médaille FIELDS est la plus haute récompense dans le domaine des Mathématiques.', 'facile');
INSERT INTO `qcm` VALUES (9, 'Quelle est la capitale constitutionnelle de la Bolivie ?', 'La Paz', 'Sucre', 'Quito', 'Sucre', 'SUCRE est la capitale constitutionnelle de la Bolivie. Le siège du gouvernement se trouve à LA PAZ. Par ailleurs, QUITO est la capitale de l\'EQUATEUR', 'difficile');
INSERT INTO `qcm` VALUES (10, 'Comment s\'appelle le palais présidentiel des Etats-Unis ?', 'La monneda', 'La maison blanche', 'L\'élysée', 'La maison blanche', 'La MONNEDA est le nom du palais présidentiel chilien et l\'ELYSEE, celui de la France.', 'facile');
INSERT INTO `qcm` VALUES (11, 'Quel mathématicien grec est l\'auteur d\'un fameux théorème selon lequel dans un triangle rectangle, la somme des carrés des côtés de l\'angle droit est égale au carré de l\'hypoténuse ?', 'Pythagore', 'Thalès', 'Archimède', 'Pythagore', 'Thalès est l\'auteur de célèbres théorèmes sur les rapports de proportionnalité qui existent entre les côtés d\'un triangle traversés par une sécante parallèle.', 'facile');
INSERT INTO `qcm` VALUES (12, 'Combien la France compte t-elle de régions ?', '12', '22', '96', '22', '96 correspond au nombre de départements que compte la France.', 'facile');
INSERT INTO `qcm` VALUES (13, 'De quel pays Michelle Bachelet a t-elle remporté les élections présidentielles de janvier 2006 ?', 'La Belgique', 'La Suisse', 'Le Chili', 'Le Chili', 'Il n\'y a jamais d\'élection présidentielle en Belgique. Pour la première fois, une femme est élue à la tête du Chili.', 'facile');
INSERT INTO `qcm` VALUES (14, 'Quelle ville est la capitale du Honduras ?', 'Tegucigalpa', 'Bandar Seri Begawan', 'Ankara', 'Tegucigalpa', 'Bandar Seri Begawan est la capitale du BRUNEI et Ankara est la capitale de la Turquie.', 'difficile');
INSERT INTO `qcm` VALUES (15, 'Qui a renové les jeux olympiques modernes en 1896 à Athènes ?', 'Pierre de Coubertin', 'Alfred Nobel', 'Georges Clémenceau', 'Pierre de Coubertin', 'Ce pédagogue français né à Paris en 1863 a renové les J.O. modernes et a présidé le comité international olympique jusqu\'en 1925.', 'facile');
INSERT INTO `qcm` VALUES (16, 'Quel nom donne t-on à un pratiquant du yoga ?', 'yogi', 'yogiste', 'yogalien', 'yogi', 'Dans la tradition hindoue, le Yoga est une technique de méditation et de concentration mentale visant à placer graduellement la conscience au centre même de l\'Etre , là ou le soi individuel est identique à l\'Etre universel.', 'difficile');
INSERT INTO `qcm` VALUES (17, 'Quelle grande école française est familièrement désignée sous le nom de l\'X ?', 'Centrale Paris', 'SUPAERO Toulouse', 'Polytechnique', 'Polytechnique', 'Polytechnique est depuis plusieurs années la meilleure école d\'ingénieurs en France, devant l\'école des mines de Paris. Dans l\'argotique des grandes écoles, on l\'appelle aussi l\'X.', 'facile');
INSERT INTO `qcm` VALUES (18, 'De quelle nationalité était Jan Tinbergen qui a reçu avec Ragnar Frisch le premier prix nobel de sciences économiques en 1969 ?', 'Suédoise', 'Norvégienne', 'Néerlandaise', 'Néerlandaise', 'Jan Tinbergen etait néerlandais. Son co-lauréat, Ragnar Frisch était norvégien.', 'difficile');
INSERT INTO `qcm` VALUES (19, 'De quelle maladie souffrait le président Sanni ABACHA avant sa mort ?', 'Le cancer de prostate', 'Le cyrrhose de foie', 'La tuberculose', 'Le cirrhose de foie', 'Contrairement à la plupart de ses pairs chefs d\'états qui souffraient de cancer de prostate (comme Houphouet-Boigny, Mobutu Sese Seko ou encore François Mitterrand), le président ABACHA souffrait d\'une cirrhose de foie qui l\'aurait emporté (version officielle).', 'difficile');
INSERT INTO `qcm` VALUES (20, 'Sous quel nom est plus connu la Banque Internationale pour la Reconstruction et le Développement BIRD ?', 'La Banque Mondiale', 'Le Fonds Monétaire International', 'La Réserve Fédérale Américaine', 'La Banque Mondiale', '', 'Facile');
INSERT INTO `qcm` VALUES (21, 'Dans la réligion catholique, quel est le nom du dernier livre de l\'ancien testament ?', 'Apocalypse', 'Ecclesiaste', 'Malachie', 'Malachie', 'L\'apocalypse est en fait le dernier livre du nouveau Testament. Quant à l\'ecclesiaste, il est l\'un des livres de l\'ancien testament mais n\'est pas le dernier.', 'difficile');
INSERT INTO `qcm` VALUES (22, 'Dans la réligion catholique, quel nom a été donné par les grecs aux cinq premiers livres de la Bible ?', 'Le Pentateuque', 'Le Pentagone', 'Le Pentaèdre', 'Le Pentateuque', 'Pentateuque est la bonne réponse. En effet, un pentagone est une figure géométrique qui a 5 côtés et 5 angles. Un pentaèdre est un polyèdre qui a 5 faces.', 'difficile');
INSERT INTO `qcm` VALUES (23, 'Le 19 Mars 2006, qui remporta le second tour des élections présidentielles au Bénin ?', 'Adrien HOUNGBEDJI', 'Boni YAYI', 'Bruno AMOUSSOU', 'Boni YAYI', 'Boni Yayi bat Adrien Houngbedji avec près de 75% des voix. Bruno Amoussou qui était 3eme au premier tour, n\'était pas qualifié pour la finale.', 'facile');
INSERT INTO `qcm` VALUES (24, 'Quelle ville visitait le président John Fitzgerald KENNEDY le 22 Novembre 1963 vers 12H ?', 'New York', 'Dallas', 'Chicago', 'Dallas', 'Le président John Fitzgerald KENNEDY était en visite à Dallas ce 22 Novembre 1963 avec son épouse et son fils John John, lorsqu\'un tireur embusqué visa le cortège présidentiel. Le président est atteint grièvement et décéda quelques minutes plus tard. Son assassinat qui était officiellement attribué à Lee Harvey Oswald (qui a été lui-même tué lors de son procès) n\'a jamais été élucidé', 'difficile');
INSERT INTO `qcm` VALUES (25, 'Quel était le titre de noblesse du rénovateur des J.O. modernes Pierre de Coubertin ?', 'Comte', 'Duc', 'Baron', 'Baron', 'Sans commentaire', 'facile');
INSERT INTO `qcm` VALUES (26, 'Quel cinéaste français mort à Paris en 1924 a donné son nom à une récompense annuellement décernée à un film français depuis 1936 ?', 'Jim César', 'Louis Delluc', 'Robert Bresson', 'Louis Delluc', 'Sans commentaire', 'difficile');
La table « qcm » est désormais créée. Comme vous pouvez le remarquer, cette table comporte les champs suivants :
id : Cest la clé de la table
question : Ce champ comporte les questions
rep1, rep2 et rep3 sont les différentes propositions de réponse puisquil sagit quun questionnaire à choix multiple.
rep_juste est la réponse juste à la question et doit être égale à lune des propositions de réponse (rep1, rep2, rep3)
commentaire : contient des précisions ou des détails concernant la question posée. Si vous ne disposez pas de précisions, la valeur « Sans commentaire » est automatiquement affectée à ce champ (comme vous le verrez plus tard dans le module de mise à jour de la table).
Niveau : détermine le niveau de la question. Vous êtes le seul qui jugerez quune question donnée est facile ou difficile.
Létape suivante consistera en la création des fichiers qui se chargeront de faire fonctionner le jeu. Le premier fichier à créer est « niveau.php ». Le joueur devra donc préciser grâce à un formulaire le niveau des questions auxquelles il souhaiterait répondre. Pour des raisons de simplicité du jeu, deux choix sont possibles : FACILE et DIFFICILE. Dautre part, le joueur pourra aussi spécifier le nombre de questions qui lui seront posées (5 ou 10, mais vous pouvez toujours ajouter dautres options comme 15 ou 20).
Voici le code du fichier « niveau.php » :
Choix du niveau du QCM
Choisissez un niveau de questions
Niveau :
Facile
Difficile
Nombre de questions :
5
10
Voici également le code du fichier « qcm.css » qui effectuera certaines mises en forme de la page :
/* CSS Document */
fieldset{margin-left:180px; width:650px}
BODY {scrollbar-face-color: #FFFF00; scrollbar-shadow-color: #000000; scrollbar-highlight-color: #FFFFFF; scrollbar-3dlight-color: #000000; scrollbar-darkshadow-color: #000000; scrollbar-track-color: #cccccc; scrollbar-arrow-color: #ffffff;}
/* Pour le titre des pages. Exple: */
p.couleur{text-align:center; font-size:36px; color:#FF0000; font-weight:bold}
/* Pour indiquer le nombre de points obtenus; */
p.couleur2{text-align:center; font-size:24px; color:#FF0000; font-weight:bold}
Dès que le joueur indique le niveau et le nombre de questions qui lui seront posées, le jeu débute avec lappel de la page « debut.php ». Nous devrons donc définir un fichier nommé « config.php » qui contiendra les paramètres de connexion à la base de données. En effet, à chaque accès à la base de données en lecture ou en écriture, il faudrait sy connecter en précisant les paramètres de connexion ; de ce fait, il serait intéressant de créer ce fichier et de linclure à laide de la fonction PHP include. Cela évite de saisir le même code à chaque connexion. Dans la ligne en italique, le nom « ricksodjahin » doit être remplacé par le nom de votre base de données. Voici donc le contenu du fichier « config.php » :
Vous avez répondu :
Vous avez donné réponse juste sur .
Vous avez donné réponses justes sur .
Rejouer
Maintenant, il faudra assurer la continuité du jeu en ajoutant de nouvelles questions ou en actualisant des questions existantes. Cela se fera grâce aux fichiers ajout.php, modifier.php et modifier2.php que vous pouvez télécharger. Ils sont regroupés au sein dune archive auto extractible nommée « maj.exe ». Après décompression, les copier dans un dossier de votre dossier racine local.
Télécharger la version PDF
Télécharger le projet