首頁  >  文章  >  php開發線上考試培訓系統

php開發線上考試培訓系統

angryTom
angryTom轉載
2020-02-22 12:12:002566瀏覽

php開發線上考試培訓系統

php開發線上考試培訓系統

說明:本篇文章是為了記錄下學習開發思路,程序不具備商業價值,明白開發思路,商用需二次升級!

(推薦學習:php訓練

效果圖如下:

php開發線上考試培訓系統

問題庫首頁展示

php開發線上考試培訓系統

試題線上測驗

php開發線上考試培訓系統

#分數統計

透過這個小項目目的是練習PHP基礎知識,透過對數組操作實現考題資訊儲存加載,引入模板文件,實現考題資料的調用佈局。

1、由於小項目未使用資料庫,因此考題以陣列的形式儲存在PHP檔案中,部分程式碼如下:

註:下方程式碼很亂。 。可下載文末的程式原始碼,對照本篇博文觀看。

<?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、那麼如何取得考題資料呢?引入文件即可

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

注意,上面考題文件是用return返回的數組,當我們引入文件後,直接將考題數組資料賦給$data變量,再通過操作$ data來展示題庫資料。

3、變數題庫檔。

所有的題庫文件均統一放在/data/目錄下,每個考試項目對應一個.php文件,想要知道有多少考試數據,即多少個.php文件,這裡我們使用了glob()函數,程式碼如下:

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

glob()函數傳回的是檔案清單的數組,執行glob()函數dump輸出結果如下:

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

因為存放資料的檔案名稱都是連續的數字,方便我們透過循環讀取考題資訊。

4、匿名函數的使用。

    匿名函數就是沒有函數名稱的函數,也稱為閉包函數,經常用來作為毀掉函數參數的值,對於暫時定義的函數,使用匿名函數不需要考慮函數命名衝突的問題。這裡使用匿名函數純屬是練習的目的,我們也可以將如下的程式碼封裝成一個功能函數:

$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;};

使用匿名函數遞歸對考題資料的特殊字元進行轉義。

5、轉義HTML特殊字元。

測驗中如果出現HTML標記,會被瀏覽器解析,導致無法依照原樣輸出,因此需要對題庫中可能存在的HTML標記進行字元轉義,程式碼如下:

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

    這裡使用函數htmlspecialchars()函數對可能存在的特殊字元進行轉義,這樣再輸出的時候,就能按照我們想要的格式進行輸出。

    對應htmlspecialchars()函數不能對空格和換行進行轉義,要對空格進行轉義,需要使用str_replace()函數直接替換,換行符則可以使用nl2br函數。

6、return傳回兩個值形式。

具體程式碼如下:

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);顺序依次对应}

    程式碼最後使用return回傳了兩個結果變量,要接收這兩個回傳值,需要使用list()來接收一個數組賦值,將數組中的元素依序賦給變數。

7、將要用到的功能封裝成一個個功能函數,方便調用,避免程式碼重複。

這裡將所有用到的一些功能盡可能的都封裝為一個個函數,當使用的時候引入函數檔即可,方便管理,提高程式碼利用率。

8、使用模板

當使用PHP處理好資料後,在PHP檔案中使用

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

引入HTML模板,在模板中,我們同樣可以插入PHP標籤輸出想要的數據,進行動態的顯示數據。

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

直接輸出一個變數:=$value?>

#迴圈輸出一組變數:$v) : ?>~~~~~~~

#9、注意三元運算子的使用。 :?

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

<!-- 答题情况 --><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公益培训

以上是php開發線上考試培訓系統的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:csdn.net。如有侵權,請聯絡admin@php.cn刪除