php开发在线考试系统

说明:本篇文章是为了记录下学习开发思路,程序不具备商业价值,明白开发思路,商用需二次升级!

效果图如下:

QQ截图20170629130332.png

题库首页展示

QQ截图20170629130317.png

试题在线测试

QQ截图20170629130100.png

分数统计


通过该小项目目的是练习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、那么如何获取考题数据呢?引入文件即可

[php]  view plain  copy
  1. <span style="font-size:14px;">$data=require "./data/1.php";</span>  

    注意,上面考题文件是用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(' ','&nbsp;',$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>

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


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


程序源码下载地址:

test.rar

转载至 Alphaseo 
  • 4
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
说明 1.shijuan_ertui.php为抽取坛友抽题逻辑代码所编写的文件,想看原本的可查看shijuan_kangfu.php 2.通用入口为index.html 3.想增加账号的可至xueyuan.php增加 复制代码 隐藏代码 $xueyuans = array( array('xueyuan_id'=>"110101190001011009",'xueyuan_name'=>"陈林",'xueyuan_pic'=>"chenlin.jpg",'xueyuan_kemu'=>"2"), array('xueyuan_id'=>"110101190001011017",'xueyuan_name'=>"吴彬",'xueyuan_pic'=>"wubin.jpg",'xueyuan_kemu'=>"1"), array('xueyuan_id'=>"sf证号",'xueyuan_name'=>"姓名",'xueyuan_pic'=>"照片名称",'xueyuan_kemu'=>"可学科目"), ); 4.如线上使用建议通过数据库存储 5.校验学员是否注册的逻辑仅作为演示使用,实在想作为线上使用请注意“xueyuan_id”的唯一性 6.sf证校验才用js强校验方式,新增学员的时候一定要输入正确sf证否者无法登陆,若想改为自定义账号登录,请自行更改js相关代码 7.请仔细查看源码,防止信息泄露,本系统演示中所提供的sf证号均为虚拟构造,仅作登录/考试演示使用 8.源码全部开源(其实总共也没几句代码),无任何侵权、收集信息的地方! 常见问题解析: 1.题库不一致 ——演示使用,重点请放在抽题上 2.需不需要服务器 ——本地搭建不需要,下载一个wamp或者其他集成环境,访问你的电脑内网IP即可多人答题 3.添加题库和学员信息 ——同2,我改成sql读取,不给你sql你能获取?通过读取php文件获取信息=通过sql读取的信息(从数据结果来说),为方便演示当然是文件越精简越好 4.关于交卷评分 ——参考网友提供的check.php文件,我没做他的集成,毕竟正常来说是入库。以文件方式存储,不符合上面说的越精简越好 5.完善系统 ——①,作为本地模拟考试,仅验证sf证号,密码原本的设计就是可有可无,加一个显得更正式而已,若作为线上,请加上必要的用户校验,一句话:不要相信用户的任何输入 ——②,出于精简,我是能省则省,删除很多校验和逻辑判断,以满足部分人的学习需求 ——③,文件全为初学php时无事写的,功能没问题,请无视代码质量 ——④,文中提到,此系统能公布出来完全是因为坛友的源码讨论,所以系统中会出现1.php和xueyuan.php,check.php等,最初系统设计是直接post。同3,这两个文件的出现相当于我已经帮你把数据从数据库里面取出来了放到了一个数组中。
课程内容主要讲解如下几点:1:如何使用navaicat导入sql2:如何设置网站的的数据库账号等,如何使用iis发布网站3:演示后台管理功能、前台用户功能 该系统主要分网站管理员、游客、注册用户这几个角色网站管理员系统设置网站设置:网站名称、关键字、描述、网站介绍关于我们设置:设置关于我们、联系我们、加入我们、法律声明广告和留言       首页轮播图设置:支持上传轮播图;       留言列表:用户的所有留言信息、支持删除会员管理查看会员信息列表、支持删除功能资讯中心       添加资讯:类型、标题、资讯内容等       管理资讯:查看所有资讯列表;支持修改功能;支持删除功能       资讯浏览列表:所有用户的信息浏览记录;支持删除功能。       信息收藏数据:所有注册用户的收藏资讯列表;支持删除功能。       信息评论列表:所有注册用户的用户评论列表;支持审核和删除功能。机构环境(图片)       分类设置:支持录入、查看列表、修改、删除功能;比如外围、内部、教室图片       录入图片:录入分类、标题、图片、介绍等       管理图片:查看所有图片列表;支持修改功能;支持删除功能题库中心       1级分类:题库的1级分类,支持录入、查看列表、修改、删除       2级分类:题库的2级分类,支持录入、查看列表、修改、删除       录入题库:选择分类、录入题库标题、选择单选题或者多选题、录入4个选项同时勾选答案、录入题目的解说。           注意:单选题勾选只能1个答案、多选可以勾选多个答案       管理题目:查看所有题库列表、支持修改、删除 试卷管理       录入试卷:录入试卷分类、试卷名称、试卷介绍等       管理试卷:查看时间列表、分类;支持修改和删除       录入单选题:在试卷列表的试卷名称后面,点击“录入单选题”;进入题目选择;在左侧列表选择要加入该试卷的题目即可;在右侧是已经加入该试卷的单选题列表,支持删除。       录入多选题:在试卷列表的试卷名称后面,点击“录入多选题”;进入题目选择;在左侧列表选择要加入该试卷的题目即可;在右侧是已经加入该试卷的单选题列表,支持删除。       考试列表:显示所有试卷的考试信息、会员信息、考试结果分数游客机构介绍关于我们、联系我们、加入我们、法律声明机构环境 查看机构环境所有图片:周围环境、内部环境、教室环境等资讯中心查看餐厅网站的所有资讯:通知公告、帮助中心、考试信息、疑难解答留言反馈给网站管理员留言:主题、联系人、电话、邮箱、内容等 注册用户注册用户除了享有游客的特别功能外,还有一些功能。注册和登录注册功能:填写用户名和密码注册登录:登录后可以享有会员功能。 在线考试       第1步:点击试卷列表,找到需要考试的试卷,点击进入。       第2步:点击单选题或者多选题选择答案       第3步:点击试卷右上角的“提交试卷”,提交开始结果我的考试列表       列出我的所有考试信息,试卷名称,分数,相关数等       试题解析:在考试列表,最右侧,“查看实体解析”,进入解析页面,正确的试题背景是绿色,错误的试题背景是红色,点击错误的试题,可以查看正确的答案以及试题解析。 资讯浏览、收藏、评论信息管理当前会员资讯的浏览信息列表;资讯收藏列表,支持删除;评论列表 用户信息维护自己的会员信息,包括:姓名、联系方式、邮箱、头像、简介、详细介绍等;支持修改功能密码修改和退出登录密码修改:修改自己的密码退出登录:清除登录的cookie、跳转到首页
php开源在线考试系统是一种用php语言开发在线考试系统,它的代码是开源的,意味着任何人都可以根据自己的需求进行定制和改进。这种系统的主要目的是为学校、培训机构或企业提供一个方便、高效的考试管理平台。 首先,php开源在线考试系统具有良好的可扩展性。由于其开源的特性,用户可以根据自己的需求定制系统,并且可以随时根据需求添加新功能或模块。这使得系统能够适应不同教育机构的需求,满足他们的特定需求。 其次,php开源在线考试系统具有强大的考试管理功能。例如,它可以支持多种类型的题目,如单选题、多选题、判断题等,并且可以灵活设置题目的难度、权重和分值。同时,系统可以生成自动化的试卷,并且可以生成详细的考试报告和成绩单。这些功能可以大大简化考试管理的流程,提高考试的效率和准确性。 此外,php开源在线考试系统还具有用户管理功能。管理员可以通过系统管理用户的注册、登录和权限设置。同时,系统还支持多种身份验证方式,如用户名密码登录、第三方登录等,保证用户的安全性和便利性。 最后,php开源在线考试系统还具有良好的界面设计和用户体验。系统的界面简洁明了,操作简便,用户可以轻松地进行考试和查看考试成绩。同时,系统还可以支持多种设备,如电脑、平板电脑和手机等,全面满足用户的需求。 综上所述,php开源在线考试系统是一种功能强大、灵活可定制的考试管理平台,它能够帮助学校、培训机构或企业实现高效、准确的在线考试管理,并提供良好的用户体验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值