PHP開発オンライン試験トレーニングシステム

angryTom
リリース: 2023-05-18 13:51:01
転載
2548 人が閲覧しました

PHP開発オンライン試験トレーニングシステム

#php オンライン試験トレーニング システムの開発

注: この記事は、学習と開発のアイデアと手順を記録することを目的としています。商業的価値はありません。開発のアイデアを理解してください。商用利用するには 2 回目のアップグレードが必要です。

(推奨される学習:

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 ファイルの数を知りたい場合は、 php ファイルがありますが、ここでは glob() 関数が使用されており、コードは次のとおりです:

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

glob() 関数はファイル リストの配列を返します。関数ダンプは次のとおりです。


array(3) {    [0]=>  string(12) "./data/1.php"    [1]=>  string(12) "./data/2.php"    [2]=>  string(12) "./data/3.php"}
ログイン後にコピー

Because データを格納するファイル名はすべて連番になっているため、ループを通じてテスト問題情報を読み取ることが容易になります。

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 は 2 つの値形式を返します。

具体的なコードは次のとおりです:


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 を使用して 2 つの結果変数を返します。これら 2 つの戻り値を受け取るには、 list( を使用する必要があります。 ) 1 つの配列割り当てを受け取ると、配列内の要素が順番に変数に割り当てられます。

7. 簡単に呼び出せるように、使用する関数を関数関数にカプセル化し、コードの重複を避けます。

ここでは、使用するすべての関数を可能な限り関数にカプセル化し、使用する場合は関数ファイルを導入するだけで管理が容易になり、コードの利用率が向上します。

8. テンプレートを使用する

PHP を使用してデータを処理した後、

//引入HTML模板require &#39;./view/index.html&#39;;
ログイン後にコピー

を使用して PHP ファイルに HTML テンプレートを導入します。テンプレート、PHP タグを挿入して目的のデータを出力し、データを動的に表示することもできます。

在线考试系统请选择题库$v): ?>
         时间:分钟 总分:分开始考试
ログイン後にコピー

変数を直接出力:

変数セットを出力するループ: $ 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 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:csdn.net
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!