在线考试系统PHP编码,在线考试系统

[php]代码库<?php

set_include_path('.' . PATH_SEPARATOR . './admin'. PATH_SEPARATOR . get_include_path());

include("global.php");

$threadid = intval($_REQUEST[threadid]);

if($_POST["action"]=="dotest"){

$_POST[radio] = $_POST[radio] ? $_POST[radio] : array();

$_POST[checkbox] = $_POST[checkbox] ? $_POST[checkbox] : array();

//取得单选和多选分值

$getsetmark = $db->query_first("SELECT radio,checkbox FROM ".$db_prefix."setmark");

//缓存所有正确答案

$answers = $db->query("SELECT id,title,choicetype,answer FROM ".$db_prefix."title WHERE 1");

$answer_array = array();

$titles = array();

$error = array();

$tmark = 0;

while($row = $db->fetch_array($answers)){

$answer_array[$row[id]] = $row[answer];

$titles[$row[id]] = $row[title];

if($row[choicetype]=="radio"){

$tmark += $getsetmark[radio];

}elseif($row[choicetype]=="checkbox"){

$tmark += $getsetmark[checkbox];

}

}

$mark = 0;

foreach($_POST[radio] as $titleid=>$choice){

if($choice == $answer_array[$titleid]){

$mark += $getsetmark[radio];

}else{

$error[] = array($titleid,$choice,$answer_array[$titleid]);

}

}

foreach($_POST[checkbox] as $titleid=>$choice){

$c_answers = explode(",",$answer_array[$titleid]);

$flag = false;

foreach($c_answers as $answer){

if(!in_array($answer,$choice)){

$flag = true;

}

}

foreach($choice as $answer){

if(!in_array($answer,$c_answers)){

$flag = true;

}

}

if($flag){

$error[] = array($titleid,implode(",",$choice),$answer_array[$titleid]);

continue;

}

$mark += $getsetmark[checkbox];

}

$msg = "本次考试总分{$tmark}分\\n你的得分{$mark}分\\n";

if($error){

$msg .= "以下题目你回答错误:\\n";

foreach($error as $v){

$msg .= "{$titles[$v[0]]}\\n你的答案:{$v[1]}\\n正确答案:{$v[2]}\\n\\n";

}

}

echo "";

exit;

}

if(!$threadid){

echo "参数错误";

echo '';

exit;

}

//考试名称

$threads = $db->query_first("SELECT name FROM ".$db_prefix."thread WHERE id=$threadid");

$threadtitle = $threads[name];

//题目表单

$conditions = $threadid ? "threadid='$threadid'" : 1;

$titles = $db->query("SELECT * FROM ".$db_prefix."title WHERE $conditions ORDER BY id ASC");

$titlelist = false;

$int = 0;

while($title = $db->fetch_array($titles)){

$int++;

$choices = false;

$tests = $db->query("SELECT * FROM ".$db_prefix."choice WHERE extends=$title[id] ORDER BY id ASC");

$i=0;

while($test=$db->fetch_array($tests)) {

$i++;

$checked = $test["IsDefault"] ? "checked" : false;

if($title[choicetype]=="radio"){

$choices .= " $test[choice]"; //

}else{

$choices .= " $test[choice]";//

}

}

eval("\$titlelist .= \"".gettemplate("test_title_list")."\";");

}

eval("\$header = \"".gettemplate("test_header")."\";");

eval("\$footer = \"".gettemplate("test_footer")."\";");

eval("dooutput(\"".gettemplate("test_test")."\");");

?>

694748ed64b9390909c0d88230893790.png

说明 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,这两个文件的出现相当于我已经帮你把数据从数据库里面取出来了放到了一个数组中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值