您好,登錄后才能下訂單哦!
使用php怎么編寫一個在線考試系統?相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。
1、由于小項目未使用數據庫,考題以數組的形式存儲在PHP文件中,部分代碼如下:
<?php//考試題庫二return [ //題庫標題 'title' => 'PHP基礎語法考試題(二)', //答題時限(秒數) 'timeout' => 1200, //題庫 'data' => [ //判斷題 'binary' => [ 'name' => '判斷題', //題型名稱 'score' => 24, //題型分數 'data' => [ 1 => [ 'question' => '在".php"后綴的文件中,所有的PHP代碼都只能寫在"<?php ?>"標記內。', 'answer' => 'no' ], 2=> [ 'question' => '標量類型包括布爾型、整型、字符串型和數組型。', 'answer' => 'no' ], 3=> [ 'question' => 'var_dump是PHP中用于打印變量或表達式的類型與值等相關信息的函數。', 'answer' => 'yes' ] ] ], //單選題 'single' => [ 'name' => '單選題', 'score' => 40, 'data' => [ 1 => [ 'question' => '下列選項中,不區分大小寫的標識符是( )。', 'option' => [ '函數名','常量名','變量名','屬性名' ], 'answer' => 'A' ], 2=> [
2、那么如何獲取考題數據呢?引入文件即可
$data=require "./data/1.php";
注意,上面考題文件是用return返回的數組,當我們引入文件后,直接將考題數組數據賦給$data變量,再通過操作$data來展示題庫數據。
3、變量題庫文件。
所有的題庫文件均統一放在/data/目錄下,每個考試項目對應一個.php文件,想要知道有多少考試數據,即多少個.php文件,這里我們使用了glob()函數,代碼如下:
//統計題庫目錄下的“.php”文件個數,此處要求題庫文件名必須是連續的數字$count = count(glob('./data/*.php'));
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(' ',' ',$str); }
這里使用函數htmlspecialchars()函數對可能存在的特殊字符進行轉義,這樣再輸出的時候,就能按照我們想要的格式進行輸出。
對應htmlspecialchars()函數不能對空格和換行進行轉義,要對空格進行轉義,需要使用str_replace()函數直接替換,換行符則可以使用nl2br函數。
6、return返回兩個值形式。
具體代碼如下:
function getDataInfo($data){ $count = []; //保存某種題型的題目數量 $score = []; //每道題的分值 foreach ($data as $k=>$v) { $count[$k]=count($v['data']); $score[$k]=round($v['score']/$count[$k]); } return [$count,$score]; //使用list()接收返回值:list($count,$score);順序依次對應}
代碼最后使用return返回了兩個結果變量,要接收這兩個返回值,需要使用list()來接收一個數組賦值,將數組中的元素依次賦給變量。
7、將要用到的功能封裝成一個個功能函數,方便調用,避免代碼重復。
這里將所有用到的一些功能盡可能的都封裝為一個個函數,當使用的時候引入函數文件即可,方便管理,提高代碼利用率。
8、使用模板
當使用PHP處理好數據后,在PHP文件中使用
//引入HTML模板require './view/index.html';
引入HTML模板,在模板中,我們同樣可以插入PHP標簽輸出想要的數據,進行動態的顯示數據。
在線考試系統請選擇題庫$v): ?> 時間:分鐘 總分:分開始考試
直接輸出一個變量:<?=$value?>
循環輸出一組變量:<?php foreach($value as $k=>$v): ?>~~~~~~~<?php endforeach; ?>
9、注意三元運算符的使用。:?
當做一些簡單的判斷輸出時,使用三元運算符: ?可以大大的提升效率,簡化代碼。
<!-- 答題情況 --> <td><?=$v ? '對' : '錯'?> </td><!-- 得分 --> <td><?=$v ? $score[$type] : 0?> </td>
一、phpStudy,是一個新手入門最常用的開發環境。二、WampServer,WampServer也同樣的也是和phpStudy一樣操作簡單對小白比較友好。三、XAMPP,XAMPP(Apache+MySQL+PHP+PERL)是一個功能強大的建站集成軟件包;四、MAMP,MAMP分為兩種MAMP和MAMP Pro for Mac。五、寶塔面板,寶塔面板是一款服務器管理軟件,支持windows和linux系統。六、UPUPW,UPUPW是目前Windows平臺下最具特色的Web服務器PHP套件。
看完上述內容,你們掌握使用php怎么編寫一個在線考試系統的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。