基于PHP+MySQL+Apache在线考试管理系统(附源码)

作者:BSXY_陈永跃
BSXY_信息学院
注:未经允许禁止转发任何内容

1、前言

1.1、编写目的

明确本项目功能,简单的介绍了本系统的设计思想,基本功能,模块划分,以便于开发人员更好的了解改系统

1.2、项目需求

提供用户(学生&教师)登录,用户权限(分教师与学生端),教师出卷子,学生写卷子。学生答题后显示答案与分数,并记录在历史成绩中(教师查看),提供教师二次批改试卷

1.3、项目环境及其功能

操作系统:Windows 10/7
运行环境:装有xampp的电脑即可

2、模块分析 & 数据表

2.1、学生&教师信息

student_idstudent_namestudent_passwordstudent_sjstudent_answerstudent_stdfstudent_cjdate
用户id用户名密码科目学生答题答案正确答案考试成绩作答时间
teacher_idteacher_nameteacher_passwordteacher_sjdata
教师id教师用户名密码科目出卷时间

2.2、登录 & 注册 & 找回密码

(1)登录login.html:

<!doctype html>
<html>
<head>
	<meta charset="utf-8">
	<title>用户登录</title>
	<!--<link rel="stylesheet" href="../css/dashicons.css">-->
	<link rel="stylesheet" href="../css/layout.css">
</head>
<body>
<div class="login">
	<div class="login-wrap">
		<div class="login-box">
			<form method="post" action="../login.php">
				<table>
					<tr><th>编号:</th><td><input type="text" name="no" value="190901102" required></td></tr>
					<tr><th>姓名:</th><td><input type="text" name="name" value="用户" required></td></tr>
					<tr><th>密码:</th><td><input type="password" name="password" value="111111" required></td></tr>
					<tr><th>身份:</th><td><select type="text" name="usageid" style=width:260px;height:30px;padding:3px 4px;font-size:20px;border:1px solid #ddd;color:#666><option value="student">学生</option><option value="teacher">教师</option></select></td></tr>
					<tr><th>验证码:</th><td><input type="text" name="code"></td></tr>
					<tr><th></th><td><img src="../common/validcode.php" style="width:150px;height:40px;" id="code"/>
						<a href="javascript:changeCode()">看不清,换一张</a>
					<tr class="m-reg-act"><th></th><td><input type="submit" value="立即登录">
						<span> 没有账号?<a href="./register.html" target="_blank" >立即注册</a></span>
						<span> 忘记密码?<a href="./find.html" target="_blank">找回密码</a></span>
				</table>
			</form>
		</div>
	</div>
</div>
<script type="text/javascript">
	//点击图片更新验证码
	function changeCode() {
		document.getElementById("code").src = "../common/validcode.php?id=" + Math.random();
	}
</script>
</body>
</html>

在这里插入图片描述
(2)注册register.html:

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>用户注册</title>
<link rel="stylesheet" href="../css/dashicons.css">
<link rel="stylesheet" href="../css/layout.css">
<script src="../js/jquery.min.js"></script>
<script>
if(top.location !== self.location){ 
	top.location = self.location; 
}
</script>
</head>
<body>
<div class="top">
<div class="top-title icon-home">用户注册</div>
</div>
<div class="login">
<div class="login-wrap">
	<div class="login-box">
        <form method="post"  action="../register.php" >
        <table>
        <tr><th>编号:</th><td><input type="text" name="no"   placeholder="请输入编号"    required></td></tr>
     	<tr><th>姓名:</th><td><input type="text" name="name"  placeholder="请输入姓名"   required></td></tr>
		<tr><th>密码:</th><td><input type="password" name="password"  id="pw1"  placeholder="请输入6位以上的密码" required></td></tr>
		<tr><th>确认密码:</th><td><input type="password"  id="pw2"  onBlur="check()" placeholder="请再次输入密码,进行确认"   required></td></tr>
        <tr><th>电话:</th><td><input type="text" name="tel" id="phone" onBlur="checkphone()"  placeholder="请输入电话号码"  required></td></tr>
        <tr><th>QQ:</th><td><input type="text" name="email"  placeholder="请输入qq号"   required></td></tr>
         <tr><th>身份:</th><td><select type="text" name="usageid" style=width:260px;height:30px;padding:3px 4px;font-size:20px;border:1px solid #ddd;color:#666><option value="student">学生</option><option value="teacher">教师</option></select></td></tr>
		<tr><th>验证码:</th><td><input type="text" name="code" placeholder="请输入验证码" required></td></tr>
			<tr><th></th><td><img src="../common/validcode.php" style="width:150px;height:40px;" id="code"/>
		  <a href="javascript:changeCode()">看不清,换一张</a></td></tr>
			<tr><th></th><td><p>
		<tr class="m-reg-act"><th></th><td><input type="submit" value="确认注册"><span>已经有账号?<a href="./login.html">立即登录</a></span></td></tr>
	</table>
	</form>

</div>
</div></div>

<script type="text/javascript">
//判断两次密码输入是否一致
function $(id)
    {
        return document.getElementById(id)
    }
  
function check()
    {
        var boo=$('pw1').value==$('pw2').value;
        if (boo) 
		    {
			     $teacher_password=$_SESSION["pw1"];
                 return true;
            }
		else
		    {
                 alert('两次密码不一致');
            }
  
         }
//验证码更新
function changeCode() 
    {
		document.getElementById("code").src = "../common/validcode.php?id=" + Math.random();jisuanjikexueyujishu        
	}
//检查手机号码
function checkphone($tel)
    {
		var phone=document.getElementById("phone").value;
		if(!(/^[1]\d{10}$/.test(phone)))
		    {
				alert("电话号码格式不对,必须1开头且总长度位11位数字");
			}
		else
		{
			return ture;
		}
	}
</script>

在这里插入图片描述
(3)找回密码find.html:

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>用户密码找回</title>
<link rel="stylesheet" href="../css/dashicons.css">
<link rel="stylesheet" href="../css/layout.css">
<script src="../js/jquery.min.js"></script>
<script>
if(top.location !== self.location){ 
	top.location = self.location; 
}
</script>
</head>
<body>
<div class="top">
<div class="top-title icon-home">用户密码找回</div>
</div>
<div class="login">
<div class="login-wrap">
	<div class="login-box">
        <form method="post"  action="../find.php" >
        <table>
        <tr><th>编号:</th><td><input type="text" name="no"   placeholder="请输入要找回的编号"    required></td></tr>
     	<tr><th>姓名:</th><td><input type="text" name="name"  placeholder="请输入该编号绑定的姓名"   required></td></tr>
        <tr><th>电话:</th><td><input type="text" name="tel" id="phone" onBlur="checkphone()"  placeholder="请输入绑定的电话号码"  required></td></tr>
        <tr><th>QQ:</th><td><input type="text" name="email"  placeholder="请输入绑定的QQ号"   required></td></tr>
		<tr><th>验证码:</th><td><input type="text" name="code" placeholder="请输入验证码" required></td></tr>
			<tr><th></th><td><img src="../common/validcode.php" style="width:150px;height:40px;" id="code"/>
		  <a href="javascript:changeCode()">看不清,换一张</a></td></tr>
			<tr><th></th><td><p>
		<tr class="m-reg-act"><th></th><td><input type="submit" value="确认找回"><span>已找回密码?<a href="./login.html">立即登录</a></span></td></tr>
	</table>
	</form>
</div>
</div></div>

<script type="text/javascript">
//验证码更新
function changeCode() 
    {
		document.getElementById("code").src = "../common/validcode.php?id=" + Math.random();jisuanjikexueyujishu        
	}
//检查手机号码
function checkphone($tel)
    {
		var phone=document.getElementById("phone").value;
		if(!(/^[1]\d{10}$/.test(phone)))
		    {
				alert("电话号码格式不对,必须1开头且总长度为11位数字");
			}
		else
		{
			return ture;
		}
	}
</script>

在这里插入图片描述

2.3、试卷页面 & 题目数据表

<!doctype html>
<html>
<head>
	<meta charset="utf-8">
	<meta name="viewport" content="width=device-width, initial-scale=1.0">
	<title><?=$data['title']?> - 在线考试系统</title>
	<link rel="stylesheet" href="css/style.css">
	<script src="js/jquery.min.js"></script>
	<script src="js/jquery.timeout.js"></script>
	<script>

		$(function(){
			//关闭页面前提示
			$(window).on("beforeunload",function(){
				return "您尚未交卷!此操作将导致您的回答丢失。";
			});
			timeOver = false; //保存当前是否已经达到交卷时间
			//倒计时功能
			$(".timeout").timeout({
				//考试时间(页面刷新时,时间会重置。)
				"maxTime":<?=$data['timeout']?>,
					//到达时间自动交卷。(如果浏览器禁用JavaScript,此功能不会生效)
					"onTimeOver":function(){
				timeOver = true;
				alert("考试时间结束,系统自动交卷。");
				$("#testForm").submit();//交卷
			}
		});
			$("#testForm").submit(function(event){
				$(window).off("beforeunload");      //解除绑定页面关闭事件
				timeOver || checkMultiple(event);	//检查多选题是否全部作答
			});
			//多选题至少选择一项
			function checkMultiple(event){
				$(".jq-multiple .question-each").each(function(){
					if($(this).find(".question-option input[type=checkbox]:checked").length < 1){
						$(this).find(".question-option input[type=checkbox]:first").focus();
						event.preventDefault();  //阻止表单提交
						alert('您有多选题未作答');
						return false;
					}
				});
			};
		});
	</script>
</head>
<body>
<div class="top">
	<div class="top-title">正在考试
		<div style="float: right;margin-right: 20px;font-weight: normal;color: black;font-size: 13px;">
			你好,<?=$name?>同学
		</div>
	</div>
</div>
<div class="main">
	<div class="main-wrap">
		<!-- 顶部标题 -->
		<div class="question-top">
			<!-- 试卷标题 -->
			<div class="question-title"><?=$data['title']?></div>
			<!-- 题型导航 -->
			<div class="question-nav">
				<a href="#binary">判断题</a>
				<a href="#single">单选题</a>
				<a href="#multiple">多选题</a>
				<a href="#fill">填空题</a>
				<a href="#reply">简答题</a>
				<a href="#complex">综合题</a>
			</div>
		</div>
		<!-- 题目内容 -->
		<form action="total.php?id=<?=$id?>" method="post" id="testForm" >
			<!-- 判断题 -->
			<div id="binary" class="anchor" ></div>
			<div class="question-wrap">
				<div class="question-type">一、判断题<span>(共<?=$count['binary']?>题,每题<?=$score['binary']?>分)</span></div>
				<?php foreach($data['data']['binary']['data'] as $k=>$v): ?>
				<div class="question-each">
					<!-- 标题 -->
					<div class="question-name"><?=$k,'. ',$v['question']?></div>
					<!-- 选项 -->
					<div class="question-option">
						<label><input type="radio" value="yes" name="binary[<?=$k?>]" required></label>
						<label><input type="radio" value="no" name="binary[<?=$k?>]" required></label>
					</div>
				</div>
				<?php endforeach; ?>
			</div>
			<!-- 单选题 -->
			<div id="single" class="anchor" ></div>
			<div class="question-wrap">
				<div class="question-type">二、单选题<span>(共<?=$count['single']?>题,每题<?=$score['single']?>分)</span></div>
				<?php foreach($data['data']['single']['data'] as $k=>$v): ?>
				<div class="question-each">
					<!-- 标题 -->
					<div class="question-name"><?=$k,'. ',$v['question']?></div>
					<!-- 选项 -->
					<div class="question-option">
						<label><input type="radio" value="A" name="single[<?=$k?>]" required>A. <?=$v['option'][0]?></label>
						<label><input type="radio" value="B" name="single[<?=$k?>]" required>B. <?=$v['option'][1]?></label>
						<label><input type="radio" value="C" name="single[<?=$k?>]" required>C. <?=$v['option'][2]?></label>
						<label><input type="radio" value="D" name="single[<?=$k?>]" required>D. <?=$v['option'][3]?></label>
					</div>
				</div>
				<?php endforeach; ?>
			</div>
			<!-- 多选题 -->
			<div id="multiple" class="anchor" ></div>
			<div class="question-wrap jq-multiple">
				<div class="question-type">三、多选题<span>(共<?=$count['multiple']?>题,每题<?=$score['multiple']?>分)</span></div>
				<?php foreach($data['data']['multiple']['data'] as $k=>$v): ?>
				<div class="question-each">
					<!-- 标题 -->
					<div class="question-name"><?=$k,'. ',$v['question']?></div>
					<!-- 选项 -->
					<div class="question-option">
						<label><input type="checkbox" value="A" name="multiple[<?=$k?>][]">A. <?=$v['option'][0]?></label>
						<label><input type="checkbox" value="B" name="multiple[<?=$k?>][]">B. <?=$v['option'][1]?></label>
						<label><input type="checkbox" value="C" name="multiple[<?=$k?>][]">C. <?=$v['option'][2]?></label>
						<label><input type="checkbox" value="D" name="multiple[<?=$k?>][]">D. <?=$v['option'][3]?></label>
					</div>
				</div>
				<?php endforeach; ?>
			</div>
			<!-- 填空题 -->
			<div id="fill" class="anchor" ></div>
			<div class="question-wrap">
				<div class="question-type">四、填空题<span>(共<?=$count['fill']?>题,每题<?=$score['fill']?>分)</span></div>
				<?php foreach($data['data']['fill']['data'] as $k=>$v): ?>
				<div class="question-each">
					<!-- 标题 -->
					<div class="question-name"><?=$k,'. ',$v['question']?></div>
					<!-- 选项 -->
					<div class="question-option">
						<span>请输入答案:<textarea name="fill[<?=$k?>]" style="width:99%;height:16px;  "required></textarea></span>
					</div>
				</div>
				<?php endforeach; ?>
			</div>
			<!-- 简答题 -->
			<div id="reply" class="anchor" ></div>
			<div class="question-wrap">
				<div class="question-type">五、简答题<span>(共<?=$count['reply']?>题,每题<?=$score['reply']?>分)</span></div>
				<?php foreach($data['data']['reply']['data'] as $k=>$v): ?>
				<div class="question-each">
					<!-- 标题 -->
					<div class="question-name"><?=$k,'. ',$v['question']?></div>
					<!-- 选项 -->
					<div class="question-option">
						<span>请输入答案:<textarea name="reply[<?=$k?>]" style="width:99%;height:80px;  "required></textarea></span>
					</div>
				</div>
				<?php endforeach; ?>
			</div>
			<!-- 综合题 -->
			<div id="complex" class="anchor" ></div>
			<div class="question-wrap">
				<div class="question-type">六、综合题<span>(共<?=$count['complex']?>题,每题<?=$score['complex']?>分)</span></div>
				<?php foreach($data['data']['complex']['data'] as $k=>$v): ?>
				<div class="question-each">
					<!-- 标题 -->
					<div class="question-name"><?=$k,'. ',$v['question']?></div>
					<!-- 选项 -->
					<div class="question-option">
						<span>请输入答案:<textarea name="complex[<?=$k?>]" style="width:99%;height:80px;  "required></textarea></span>
					</div>
				</div>
				<?php endforeach; ?>
			</div>
			<div class="question-act">
				<input type="submit" value="交卷" >
			</div>
		</form>
	</div>
</div>
<div class="footer">
	PHP在线考试系统 本项目仅供学习使用
</div>
</body>
</html>

在这里插入图片描述
数据库题目字段:
在这里插入图片描述在这里插入图片描述

2.4、考试结束

total.html:

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>考试结束 - 在线考试系统</title>
<link rel="stylesheet" href="css/style.css">
</head>
<body>
	<div class="top">
		<div class="top-title">在线考试系统 - 考试结束</div>
	</div>
	<div class="main">
		<div class="main-wrap">
			<div class="main-title center"><?=$name?>同学,您的成绩:<?=$sum?></div>
			<table class="total-table">
				<tr><th>题型</th><th>题号</th><th>答题情况</th><th>得分</th></tr>
				<!-- 循环输出各题型结果 -->
				<?php foreach($total as $type=>$each): ?>
                   <?php if($data['data'][$type]['name']=="判断题" or $data['data'][$type]['name']=="单选题" or $data['data'][$type]['name']=="多选题" or $data['data'][$type]['name']=="填空题"): ?>
 					<?php foreach($each as $k=>$v): ?>
						<tr>
							<!-- 题型 -->
							<?php if($k==1): ?>
								<td <?="rowspan=\"$count[$type]\""?>><?=$data['data'][$type]['name']?></td>
							<?php endif; ?>
							<!-- 题号 -->
							<td><?=$k?></td>
							<!-- 答题情况 -->
							<td><?=$v ? '对' : '错'?></td>
							<!-- 得分 -->
							<td><?=$v ? $score[$type] : 0?></td>
						</tr>
					<?php endforeach; ?>
                    <?php else: ?>
                       <?php foreach($each as $k=>$v): ?>
						<tr>
							<!-- 题型 -->
							<?php if($k==1): ?>
								<td <?="rowspan=\"$count[$type]\""?>><?=$data['data'][$type]['name']?></td>
							<?php endif; ?>
							<!-- 题号 -->
							<td><?=$k?></td>
							<!-- 答题情况 -->
							<td><?=$total[$type][$k] ?></td>
							<!-- 得分 -->
                            <?php if($data['data'][$type]['name']=="简答题"): ?>
                            	<td><?=$reply[ $type ][ $k ] ?></td>
                               <?php else: ?> 
                               <td><?=$complex[ $type ][ $k ] ?></td> 
                               <?php endif; ?>
                            </tr>
					<?php endforeach; ?>
                    <?php endif; ?>
				<?php endforeach; ?>
			</table>
			<div class="total-act">
				<a href="./">返回首页</a>
			</div>
		</div>
	</div>
	<div class="footer">
		PHP在线考试系统 本项目仅供学习使用
	</div>

<!--禁止页面回退-->
<script language="javascript">
    //防止页面后退
    history.pushState(null, null, document.URL);
    window.addEventListener('popstate', function () {
    history.pushState(null, null, document.URL);
});

	document.onkeydown = function(e) {
        e = window.event || e;
        var k = e.keyCode;
        //屏蔽ctrl+R,F5键,ctrl+F5键  F3键!验证
        if ((e.ctrlKey == true && k == 82) || (k == 116)
                || (e.ctrlKey == true && k == 116)||k==114) {
            e.keyCode = 0;
            alert("当前页面不能刷新!");
            e.returnValue = false;
            e.cancelBubble = true;
            return false;
 
        }
        if (k == 8) {
            alert("不能返回或后退!");
            e.keyCode = 0;
            e.returnValue = false;
            return false;
        }
        //屏蔽 Ctrl+n   验证可以实现效果
        if (e.ctrlKey && k == 78){
            e.keyCode = 0;
            e.returnValue = false;
            e.cancelBubble = true;
            return false;
            }
        //屏蔽F11   验证可以实现效果
        if (k == 122) {
            e.keyCode = 0;
            e.returnValue = false;
            e.cancelBubble = true;
            return false;
        }
        //屏蔽 shift+F10  验证可以实现效果      
        if ((e.shiftKey && k == 121)||(e.ctrlKey && k == 121)){
            e.keyCode = 0;
            e.returnValue = false;
            e.cancelBubble = true;
            return false;
            }
 
        //屏蔽Alt+F4  
        if ((e.altKey) && (k== 115)) {
            window.showModelessDialog("about:blank", "",
                    "dialogWidth:1px;dialogheight:1px");
            e.keyCode = 0;
            e.returnValue = false;
            e.cancelBubble = true;
            return false;
        }
        //屏蔽 Alt+ 方向键 ← ;屏蔽 Alt+ 方向键 → !验证
        if ((e.altKey)
                && ((k == 37) || (k == 39))) {
            alert("不准你使用ALT+方向键前进或后退网页!");
            e.keyCode = 0;
            e.returnValue = false;
            e.cancelBubble = true;
            return false;
        }
 
    };
    
    //屏蔽右键菜单,!验证
    document.oncontextmenu = function(event) {
        if (window.event) {
            event = window.event;
        }
        try {
            var the = event.srcElement;
            if (!((the.tagName == "INPUT" && the.type.toLowerCase() == "text") || the.tagName == "TEXTAREA")) {
                return false;
            }
            return true;
        } catch (e) {
            return false;
        }
    };
</script>

</body>
</html>

在这里插入图片描述

2.5、教师阅卷(是要数据库添加成为学生才可以由教师阅卷)

在这里插入图片描述在这里插入图片描述

2.6、关键技术说明

(1)1.php:

功能是随机生成试卷;方法是选取数据库中的试题序号;缺陷是如果数据表中序号间断,试卷会显示空题。

(2)2.php:

功能是读取数据库的试题;方法是用 S E S S I O N [ ] 接收 1. p h p 的随机的试题序号,然后用 s e l e c t ∗ f r o m 数据库表 w h e r e 试题 i d = _SESSION[]接收1.php的随机的试题序号,然后用select * from 数据库表 where 试题id= SESSION[]接收1.php的随机的试题序号,然后用selectfrom数据库表where试题id=_session查询。

(3)function.php:功能函数库

a、获取题库ID:
 function getTestId(){
	//读取用户访问的题库序号
	$id = isset($_GET['id']) ? (int)$_GET['id'] : 1;
	//题库序号最小为1
	return max($id, 1);
}
b、根据序号载入题库
 @param int $id   题库序号
  @param bool $toHTML  是否对题库进行转义
  $return 如果题库存在,读取并返回数据;不存在,返回falsefunction getDataById($id, $toHTML=true){
	//根据序号拼接题库文件路径
	$target = "./data/$id.php";
	//判断题库文件是否存在
	if(!file_exists($target)){
		return false;
	}
	//载入题库
	$data = require $target;
	//对题库数组进行递归转义
	$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;
	};
	//返回数据
	return $toHTML ? $func($data) : $data;
}
c、获取题库信息
@param array $data   题库
  @param array $score  分数
  $return array 每种题型的个数、每种题型下1道题的分数
 function getDataInfo($data){
	$count = []; //保存每种题型个数
	$score = []; //保存每种题型下1道题的分数
	//从题库中读取信息
	foreach($data as $k=>$v){
		//计算各题型下的题目个数
		$count[$k] = count($v['data']);
		//计算各题型中单题的分数
		//单题分数 =  该题型总分数 ÷ 该题型下的题目个数
		$score[$k] = round($v['score'] / $count[$k]);
	}
	return [$count, $score];
}
d、计算总分
@params array $data 题库
  $return int 总分数
 function getDataTotal($data){
	$sum = 0; //保存总分
	//从题库中读取信息
	foreach($data as $v){
		$sum += $v['score'];
	}
	return $sum;
}
e、将字符串编码为HTML
转换的特殊字符有:& " ' < > 和空格
  未对换行符进行转换,如果需要,再调用nl2br函数即可
  @param string $str 输入的字符串
  @return string 编码后的字符串
 function toHTML($str){
	$str = htmlspecialchars($str, ENT_QUOTES);
	return str_replace(' ', '&nbsp;', $str);
}

3、本地部署(运行) & 云服务器部署

3.1、本地部署

1、如果没有安装xampp的先安装xampp(会联同项目一起打包)
2、将整个test项目复制到xampp下的htdocs下如图所示
在这里插入图片描述
test下的如图所示:
在这里插入图片描述
3、运行xampp开启两个服务后点击MySQL的admin
在这里插入图片描述
4、新建数据库:
在这里插入图片描述
5、导入数据库
在这里插入图片描述
之后点击运行:
在这里插入图片描述
出现以下界面说明数据库导入成功:
在这里插入图片描述
6、浏览器中新建一个页面访问localhost/test
如果没有出现以下界面可输入:localhost/test/view/login.html
在这里插入图片描述
出现以下界面即可:
在这里插入图片描述

3.2、云服务器部署(从购买开始)(选看)

这个云服务部署PHP这个在线考试管理系统,由于之前已经写成了PDF的格式了所以这里就不在写了,如果想在云服务器上部署的可以参考,
在这里插入图片描述

4、项目获取

由于百度网盘对于普通用户来说下载速度太慢太慢所以就放在了阿里云盘中方便大家提取与下载:
提取码: 7cb3
下载链接:https://www.aliyundrive.com/s/Cx4ndY8SvJ1
如若过期或失效等等的原因那抱歉了就只能可以根据以下链接方式下载了:
在这里插入图片描述
[基于PHP+MySQL+Apache在线考试管理系统(附源码-已开源(可一键三连))_根据图片及标题找到对应的资源即可]

公众号(小猿网),回复“考试管理系统”或“b01"即可

资源为收费资源,如不符合您的消费观,还请您见谅

由于公众号可能目前没有太大的曝光度,搜索时可能
不是置顶的公众号。这时可以多往下滑一下找到该公
众号,或者直接到文章结尾处获取公众号二维码即可

希望对各位小伙伴有所帮助吧

  • 33
    点赞
  • 102
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 35
    评论
说明 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,这两个文件的出现相当于我已经帮你把数据从数据库里面取出来了放到了一个数组中。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小猿网

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值