一个简单的考试系统

        做了一个简单的系统,其实也就是个小功能。是一个考试系统,主要试用人群是老师,大致功能与相关代码罗列一下:

大概涉及到了两个表,分别是学生表和分数表,暂时不需要太完善的功能,所以只有一个管理员,没必要再设计管理员表了。

学生表的字段说几个重要的: 名称,年龄,家长邮箱,年龄在数据库里可以给个char类型,长度给3就可以了,再添加的时候可以验证输入的是否为纯数字。分数表:分数(给int就可以了),考试时间,(给int,date类型都可以,直接存时间戳或者存date类型的时间),s_id,它是分数表与学生表的关联字段,这个s_id是学生表里的自增id,很重要,展示一下我自己的表结构


        接下来讲一下具体的功能以及实现的代码

为了方便用户进行操作,需要一个一次添加多条的功能,表单页面如下:


这里表单里的数据必须从学生表里查出来,循环展示就可以了,学生id和学生姓名必须给一个 readonly  的样式,因为这个数据不能更改,其余的样式随便给就可以了

<?php
header("content-type:text/html;charset=utf8");
$con=mysqli_connect('127.0.0.1','root','root','student') or die(mysql_error('1233211234567'));
$sql="select s_id,s_name from student";

$res=mysqli_query($con,$sql);
	while($arr=mysqli_fetch_assoc($res)){
		$data[]=$arr;
	}
	$num=mysqli_num_rows($res);
?>
<form action="pointAdd_do.php" method="post">
	<table>
			<tr>
				<td>学生id</td>
				<td>姓名</td>
				<td>分数</td>
				<td>考试时间</td>
			</tr>
			<?php foreach($data as $k=>$v){?>
			<tr>
				<td><input type="text" name='s_id[]' value="<?php echo $v['s_id']?>" style='width: 70px;' readonly></td>
				<td><input type="text" value="<?php echo $v['s_name']?>" style='width: 70px;' disabled></td>
				<td><input type="text" name='point[]' style='width: 80px;'></td>
				<td><input type="date" name="exam_time[]"></td>
			</tr> 
			<?php }?>
			<tr>
				<td><input type="submit" value="提交"></td>
			</tr>
		</table>	
</form>

    表单页面里文本框的name属性值后跟一个文本框,类似数组的写法,其实也真是数组,否则会被最后一行的值覆盖。

    提交后的值应该是这样的

    

    很重要的一环,数组处理

$arr=[];
foreach ($data['s_id'] as $k => $v) {
	foreach ($data['point'] as $key => $val) {
		foreach ($data['exam_time'] as $key1 => $value) {
		$arr[$k]['s_id']=$v;
		$arr[$k]['point']=$val;
		$arr[$k]['exam_time']=$value;
		}
		
	}
}

处理后的数据


处理完循环添加就可以了,在这里我调了一个自己封装的Db类中的添加单条的一个方法

接下来是展示页面,

做了一个搜索的功能,根据姓名精确搜和根据分数搜,在这里用到了js的一些技术,跨页面传值和页面替换无刷新,替换页面作用挺大的,可以减少服务器压力,实现页面无刷新,这个页面数据少,用不用都可以,以下是实现代码,

<script type="text/javascript" src="jquery-1.9.1.min.js"></script>
<script type="text/javascript">
	function _username(){
		var name = $("[name='s_name']").val();
		var type = $("[name='type']").val();
		var fraction = $("[name='fraction']").val();
		$.ajax({
			type:'post',
			data:{name:name,type:type,fraction:fraction},
			// dataType:'json',
			url:"pointList_do.php",
			success:function(json_info){
				$('#data').html(json_info);
			}
		})
	}


</script>

主要是将关键字和分数条件传到php页面,根据这两个条件查询数据库,将查到的数据响应回来将之前的页面替换

<?php
	header("content-type:text/html;charset=utf8");
	// $con = mysqli_connect('127.0.0.1','root','root','student') or die('链接数据库出错');
	// $con->set_charset("utf8");
	include('./database/db.php');
	connect();
	$where = 1;
	$name  = $_POST['name'];
	$fraction  = $_POST['fraction'];
	$type  = $_POST['type'];
	if(!empty($name)){
		$where .=  " and s_name like '%$name%'";
	}
	if(!empty($fraction) && !empty($type)){
		$where .=  " and point $type $fraction";
	}
	
	$sql = "select * from student join point on point.s_id = student.s_id where $where";
// echo $sql;exit;

	$arr = mysqli_query($con,$sql);
	// var_dump($arr);exit;
	if($arr){
		while ($array = mysqli_fetch_assoc($arr)) {
			$data[] = $array;
		}
	}
	
?>
<table border="1">
	<thead>
		<tr>
			<td>学号</td>
			<td>学生姓名</td>
			<td>分数</td>
			<td>考试时间</td>
		</tr>
	</thead>
	<tbody>
		<?php 
			if (!empty($data)) {
				foreach ($data as $k => $v) { 
		?>
		<tr>
			<td><?php echo $v['p_id']; ?></td>
			<td><?php echo $v['s_name']; ?></td>
			<td><?php echo $v['point']; ?></td>
			<td><?php echo $v['exam_time']; ?></td>
		</tr>
		<?php } }else{ ?>
			
		<?php } ?>
	</tbody>
</table>

还有一个功能,是 用户可以将学生最近一次的考试成绩发送给家长的邮箱,是这样的,将学生表和分数表关联,查询最近一次的考试信息,展示

<?php 
header("content-type:text/html;charset=utf8");
include_once("./database/db.php");
$con=mysqli_connect('127.0.0.1','root','root','student') or die(mysql_error(1231231));
$sql="select distinct s_id from point";
$res=mysqli_query($con,$sql);
while ($arr=mysqli_fetch_assoc($res)){
	$data[]=$arr;
}
foreach ($data as $k => $v) {
	$id=$v['s_id'];
	$sql1="select * from `point` join `student` on `point`.s_id=`student`.s_id where `point`.s_id=$id order by exam_time desc limit 1";
	$result=mysqli_query($con,$sql1);
	while ($arr1=mysqli_fetch_assoc($result)){
		$data1[]=$arr1;
	}
}
?>
<table border="1">
	<tr>
		<td>姓名</td>
		<td>性别</td>
		<td>分数</td>
		<td>入学时间</td>
		<td>毕业时间</td>
		<td>邮箱</td>
		<td>考试时间</td>
		<td>发送邮件</td>
	</tr>·
	<?php foreach($data1 as $k=>$v){?>
		<tr>
			<td><?php echo $v['s_name'];?></td>
			<td><?php echo $v['s_sex'];?></td>
			<td><?php echo $v['point'];?></td>
			<td><?php echo $v['into_time'];?></td>
			<td><?php echo $v['gradtime'];?></td>	
			<td><?php echo $v['email'];?></td>
			<td><?php echo $v['exam_time'];?></td>
			<td><a href="dome.php?email=<?php echo $v['email']?>&point=<?dome.php echo $v['point'];?>">发送邮件</a></td>
		</tr>
	<?php }?>
</table>

在这里要用到一个模板,邮箱发送的模板,链接给大家,有需要的话可以去csdn下载    邮箱模板下载

大概就这么多。


猜你喜欢

转载自blog.csdn.net/echo981018/article/details/80345017