Maison  >  Article  >  système de formation aux examens en ligne de développement php

système de formation aux examens en ligne de développement php

angryTom
angryTomavant
2020-02-22 12:12:002566parcourir

système de formation aux examens en ligne de développement php

Système de formation aux examens en ligne pour le développement php

Remarque : cet article vise à enregistrer des idées et des procédures d'apprentissage et de développement. n'a aucune valeur commerciale. Comprendre les idées de développement. L'utilisation commerciale nécessite une deuxième mise à niveau !

(Apprentissage recommandé : formation php)

Le rendu est le suivant :

système de formation aux examens en ligne de développement php

Question affichage de la page d'accueil de la banque

système de formation aux examens en ligne de développement php

Test en ligne des questions du test

système de formation aux examens en ligne de développement php

Statistiques de score

Le but de ce petit projet consiste à mettre en pratique les bases de PHP Knowledge, grâce à des opérations sur les tableaux, les informations sur les questions de test sont stockées et chargées, et des fichiers modèles sont introduits pour réaliser la disposition des appels des données des questions de test.

1. Le petit projet n'utilisant pas de base de données, les questions du test sont stockées dans le fichier PHP sous forme de tableaux :

Remarque : Le code ci-dessous est un chaos très complexe. . Vous pouvez télécharger le code source du programme à la fin de l'article et le consulter dans cet article de blog.

<?php
// 考试题库二
return [   
// 题库标题  
&#39;title&#39; => &#39;PHP基础语法考试题(二)&#39;,   
// 答题时限(秒数) 
&#39;timeout&#39; => 1200,   
// 题库   
&#39;data&#39; => [      
// 判断题 
&#39;binary&#39; => [       
          &#39;name&#39; => &#39;判断题&#39;, 
        // 题型名称
&#39;score&#39; => 24,     
        // 题型分数 
&#39;data&#39; => [          
          1 => [       
          &#39;question&#39; => &#39;在".php"后缀的文件中,所有的PHP代码都只能写在"<?php ?>"标记内。&#39;,               &#39;answer&#39; => &#39;no&#39;            ], 
        2=> [           
            &#39;question&#39; => &#39;标量类型包括布尔型、整型、字符串型和数组型。&#39;,               &#39;answer&#39; => &#39;no&#39;            ], 
        3=> [    
                  &#39;question&#39; => &#39;var_dump是PHP中用于打印变量或表达式的类型与值等相关信息的函数。&#39;,              
         &#39;answer&#39; => &#39;yes&#39;        
            ]        
         ]    
          ],      
        // 单选题  
&#39;single&#39; => [     
            &#39;name&#39; => &#39;单选题&#39;,         &#39;score&#39; => 40
        ,         &#39;data&#39; => [ 
                   1 => [               
        &#39;question&#39; => &#39;下列选项中,不区分大小写的标识符是( )。&#39;,               &#39;option&#39; => [                  &#39;函数名&#39;,&#39;常量名&#39;,&#39;变量名&#39;,&#39;属性名&#39;               ],               &#39;answer&#39; => &#39;A&#39;            ], 2=> [

2. Alors, comment obtenir les données des questions du test ? Importez simplement le fichier

$data=require "./data/1.php";

Notez que le fichier de questions de test ci-dessus est un tableau renvoyé par return Lorsque nous importons le fichier, nous attribuons directement les données du tableau de questions de test à la variable $data. , puis utilisez $ data pour afficher les données de la banque de questions.

3. Fichier de banque de questions variables.

Tous les fichiers de la banque de questions sont placés dans le répertoire /data/ Chaque élément de test correspond à un fichier .php Si vous voulez savoir combien de données de test il y a, c'est-à-dire combien. php il y a, ici nous La fonction glob() est utilisée, et le code est le suivant :

//统计题库目录下的“.php”文件个数,此处要求题库文件名必须是连续的数字$count = count(glob(&#39;./data/*.php&#39;));

La fonction glob() renvoie un tableau de listes de fichiers Le résultat du dump de l'exécution de glob(. ) est la suivante :

array(3) {    [0]=>  string(12) "./data/1.php"    [1]=>  string(12) "./data/2.php"    [2]=>  string(12) "./data/3.php"}

Parce que les noms de fichiers pour stocker les données sont tous des nombres consécutifs, ce qui nous permet de lire plus facilement les informations des questions de test à travers des boucles.

4. Utilisation de fonctions anonymes.

Une fonction anonyme est une fonction sans nom de fonction, également appelée fonction de fermeture. Elle est souvent utilisée pour détruire la valeur des paramètres de fonction. Pour les fonctions définies temporairement, l'utilisation de fonctions anonymes ne nécessite pas de prise en compte. question de noms de fonctions. La fonction anonyme utilisée ici est uniquement à des fins pratiques. Nous pouvons également encapsuler le code suivant dans une fonction fonctionnelle :

$func = function ($data) use(&$func){  $result = [];  foreach ($data as $k=>$v){    //如果是数组,则继续递归,如果是字符串,则转义      $result[$k] = is_array($v) ? $func($v) : (is_string($v) ? toHtml($v) : $v);  }  return $result;};

Utilisez la fonction anonyme pour échapper récursivement les caractères spéciaux des données de la question de test.

5. Échapper aux caractères spéciaux HTML.

Si des balises HTML apparaissent dans les questions du test, elles seront analysées par le navigateur et ne pourront pas être affichées telles quelles. Par conséquent, il est nécessaire d'échapper les caractères aux balises HTML qui peuvent exister dans la question. bank. Le code est le suivant :

//HTML特殊字符转义function toHtml($str){    $str=htmlspecialchars($str,ENT_QUOTES);    return str_replace(&#39; &#39;,&#39; &#39;,$str);}

Ici, nous utilisons la fonction htmlspecialchars() pour échapper aux éventuels caractères spéciaux, afin que lors de la sortie, nous puissions le sortir dans le format souhaité.

La fonction htmlspecialchars() correspondante ne peut pas échapper aux espaces et aux nouvelles lignes. Pour échapper aux espaces, vous devez utiliser la fonction str_replace() pour les remplacer directement. Pour les nouvelles lignes, vous pouvez utiliser la fonction nl2br.

6. return renvoie deux formes de valeur.

Le code spécifique est le suivant :

function getDataInfo($data){    $count = [];            //保存某种题型的题目数量    $score = [];            //每道题的分值    foreach ($data as $k=>$v) {        $count[$k]=count($v[&#39;data&#39;]);        $score[$k]=round($v[&#39;score&#39;]/$count[$k]);    }    return [$count,$score];         //使用list()接收返回值:list($count,$score);顺序依次对应}

Le code utilise enfin return pour renvoyer deux variables de résultat. Pour recevoir ces deux valeurs de retour, vous devez utiliser list(. ) pour recevoir une affectation de tableau, affecte les éléments du tableau aux variables dans l'ordre.

7. Encapsulez les fonctions à utiliser dans des fonctions fonctionnelles pour un appel facile et évitez la duplication de code.

Ici, toutes les fonctions utilisées sont encapsulées dans des fonctions autant que possible. Lorsqu'elles sont utilisées, il suffit d'introduire le fichier de fonction pour faciliter la gestion et améliorer l'utilisation du code.

8. Utiliser des modèles

Après avoir utilisé PHP pour traiter les données, utilisez

//引入HTML模板require &#39;./view/index.html&#39;;

pour introduire le modèle HTML dans le fichier PHP. modèle, nous pouvons également insérer des balises PHP pour générer les données souhaitées et afficher les données de manière dynamique.

在线考试系统请选择题库$v): ?>
         时间:分钟 总分:分开始考试

Sortez directement une variable : =$value?>

Boucle pour générer un ensemble de variables : $ v) : ?>~~~~~~~

9. Faites attention à l'utilisation de l'opérateur ternaire. :?

当做一些简单的判断输出时,使用三元运算符: ?可以大大的提升效率,简化代码。

<!-- 答题情况 --><td><?=$v ? &#39;对&#39; : &#39;错&#39;?></td><!-- 得分 --><td><?=$v ? $score[$type] : 0?></td>

上述代码中,$v是一个bool值,通过三元运算符我们可以省略一大堆if判断,使代码看上去更加整洁。

10、页面中的计时倒计时、关闭页面提示、未做考题提交提示、考试时间结束自动交卷功能是通过jQuery、javascript来实现的,这里不作说明。

程序源码下载地址:

http://www.seoalphas.com/data/upload/ueditor/20170629/595494a1f01ea.rar

注:php中文网提供大量免费、原创、高清的php视频教程,并且会定期举行php公益培训

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer