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