做了一个简单的系统,其实也就是个小功能。是一个考试系统,主要试用人群是老师,大致功能与相关代码罗列一下:
大概涉及到了两个表,分别是学生表和分数表,暂时不需要太完善的功能,所以只有一个管理员,没必要再设计管理员表了。
学生表的字段说几个重要的: 名称,年龄,家长邮箱,年龄在数据库里可以给个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下载 邮箱模板下载。
大概就这么多。