Créer une application – QCM en PHP5/Mysql – partie 6

La partie 6 sera dédiée aux différents contrôleurs dont on aura besoin pour cette webapplication.

Les contrôleurs que j’ai identifiés sont :

  • Lister les QCM (inc/lister.php)
  • Ajouter un QCM (inc/ajouter.php)
  • Afficher un QCM (inc/afficher.php)

Il est important de noter que ces contrôleurs n’ont aucun rôle d’afficher de l’information sur l’écran de l’utilsateur. Ils sont là pour récupérer et construire les données que les « vues » vont utiliser pour la sortie écran.

Le contrôleur : Lister les QCM (inc/lister.php)
Pour lister les QCM, rien de plus simple de faire une requête sur la table myqcm et créer un tableau à 2 dimensions qu’on nommera « Questions » et qui contiendra les informations suivantes :

[php]  

Le code associé à ce contrôleur est le suivant :

 <?     // Initialisation des variables du contrôleur     $Questions = array();     $i = 0;     // Requête sur la table myqcm     $query = "select * from myqcm";     $temp = @mysql_query($query, $db);     while($res = @mysql_fetch_array($temp)){         $questionnaire = array(                         'compteur'=>$i++,                         'id'=>$res["idQCM"],                         'nomqcm'=>$res["NomQCM"],                         'auteur'=>$res["author"],                         'email'=>$res["email"],                         'hachverif'=>$res["hachverif"]                         );         // Ajouter le questionnaire au tableau des questionnaires ($Questions)         $Questions[] = $questionnaire;     }     // Intialiser les variables du template <? 

Le contrôleur : Ajouter un QCM (inc/ajouter.php)
Ce contrôleur aura pour rôle de créer un nouveau QCM.
Le moyen le plus simple pour créer un QCM est de le faire à partir d’un fichier csv qui va contenir les couples question / réponses.
Etant donnée qu’un fichier sera uploadé, il faut donc le récupérer et le parser (lire et parcourir le fichier ligne par ligne), afin de constituer le tableau des questions / réponses qui vont constituer le QCM. Ce traitement est déjà implémenté par la classe myqcm.class.php.
Une fois le tableau constitué, il ne reste plus qu’à l’inserer dans la table myqcm.
Le code du script inc/ajouter.php est le suivant :

     // INTIALISATION DES VARIABLES     $Fichier = $_FILES['Fichier']['name'];     $Fichier_tmp = $_FILES['Fichier']['tmp_name'];     $errorUPL = false;     // TEST SUR L'ACTION REALISEE & L'ETAPE DE VALIDATION     if($action == 'add' && $step == 'validate'){         // Nouvelle instance du QCM         $QCM = new MyQcm($nameqcm, $nom_resp,$email_resp);         // Parser le fichier         $ext = substr($Fichier, strlen($Fichier)-3, 3);         $statut = $QCM->parseFile($Fichier_tmp, $ext);         if($statut){             // sérialiser l'objet             $objet = serialize($QCM);             $hachverif = md5($nameqcm);             // Inserer le questionnaire dans la table myqcm             $sql = 'INSERT INTO myqcm (`idQCM`, `NomQCM`, `QCM`, `hachverif`, `author`, `email`) '.                   .'VALUES ("", "'.$nameqcm.'", "'.addslashes($objet).'", "'.$hachverif.'", "'.$nom_resp.'", "'.$email_resp.'");';             @mysql_query($sql, $db);         }else {             $errorUPL = true;         }     } 

Le contrôleur : Afficher un QCM (inc/afficher.php)
le contrôleur inc/afficher.php se chargera de générer les données nécessaire pour afficher le qcm.
Pour chaque question, nous allons construire un tableau avec les éléments suivants :

         $questionnaire = array(             "compteur"             "question",             "nbchoix",             "choix",             "response",             "response_text",             "choix_user",             "arepondu",             "checked",             "resultat"             ); 

Ce tableau questionnaire sera stocké dans un tableau afin d’avoir l’ensemble des informations sur chaque question, le choix fait par l’utilisateur, s’il a répondu, la bonne réponse de chaque question, … .
De cette manière, on sépare bien le traitement du resultat affiché sur l’écran de l’utilisateur.
Au final, le script du contrôleur inc/afficher.php est le suivant :

     // INITIALISATION DES VARIABLES     $q = $_GET["q"];     $a_repondu = array();     $Questions = array();     $score = 0;     // RECUPERER L'OBJET DU QCM ASSOCIE AU HACHVERIF $q     $sql = "select * from myqcm where hachverif = \"$q\"";     $temp = mysql_query($sql, $db);     $res = mysql_fetch_array($temp);     $id = $res["idQCM"];     // déserialiser l'objet     $object = stripslashes($res[2]);     $QCM = unserialize($object);     $nbQuestion = sizeof($QCM->Questions);     for ($i=1;$i<=$nbQuestion;$i++) // Les questions     {         $a_repondu[$i] = false;         $nbchoix=sizeof($QCM->Questions[$i][1]);         // Traitement de la réponse de l'utilisteur         $data = split('#',$bt[$i]);         $choice = $data[1];         if($choice != '') {$a_repondu[$i]=true;}         // Vérifier si la réponse est juste         if($QCM->verifyResponse($i, $choice)) $score++;         $questionnaire = array(             "compteur"      => $i,             "question"      => html_entity_decode($QCM->Questions[$i][0]),             "nbchoix"       => $nbchoix,             "choix"         => $QCM->Questions[$i][1],             "response"      => $QCM->Questions[$i][2],             "response_text" => $QCM->Questions[$i][1][$QCM->Questions[$i][2]],             "choix_user"    => $bt[$i],             "arepondu"      => $a_repondu[$i],             "checked"       => $choice,             "resultat"      => $QCM->verifyResponse($i, $choice)             );         array_push($Questions, $questionnaire);     }     // Calcul du score     $score = ($score * 100 )/ $nbQuestion; 

Le dernier controleur est le script index.php :

 // INCLUDES     require 'configs/config.php'; // VARIABLES     foreach ($_POST as $cle => $valeur){ $$cle = $valeur; }     $action = @$HTTP_GET_VARS["action"];     $q      = @$HTTP_GET_VARS["q"]; // TRAITEMENT     // AFFICHAGE DU QCM     include('inc/afficher.php');     if($q != '') {         $smarty->display('afficher.tpl');     }else {         print "No QCM found !";     } // AFFICHAGE DU PIED DE PAGE $smarty->display('footer.tpl'); 

Ces articles peuvent vous intéresser :

  1. Créer une application – QCM en PHP5/Mysql – partie 3
  2. Créer une application – QCM en PHP5/Mysql – partie 2
  3. Créer une application – QCM en PHP5/Mysql – partie 7
  4. Créer une application – QCM en PHP5/Mysql – partie 4
  5. Créer une application – QCM en PHP5/Mysql – partie 5

Aucun commentaire Posté dans Coding
Tagged , , , ,

Répondre

Comment Spam Protection by WP-SpamFree

Utilisez Gravatars dans ces commentaires!

XHTML: Vous pouvez utiliser les balises suivantes : <a href=""> <b> <blockquote> <code> <em> <i> <strike> <strong>