1.基本思路
1.考试系统无非就是储存学校同学的每次考试的成绩!及时告知家长让家长知道其孩子的情况(确认目的)
做考试系统首先要设计数据库
2.学生表:字段:( 学生id.s_id @@ 学生姓名.s_name @@ 学生年级(存储出身年月因为年龄是在变的).s_age @@ 学生性别.s_sex @@ 学生入学时间.s_s_enrolment_time @@ 学生的父母邮箱.s_email)
学生成绩表:字段:(学生成绩表id.id @@ 学生id.s_id @@ 学生成绩.mark @@ 学生考试创建时间.ctime @@ 学生考试名称(不能重复))
3.首先先把学校的所有学生全部存入数据库,然后在添加页面将所有学生展示出来做一个多条添加,把学生的成绩添加到数据库中然后做一个展示,在展示页面为了方便我们做一个按照学生名字和成绩的搜索,然后做一个邮箱发送功能让我们可以及时通知家长,(要实现的一些功能)
学生表中的数据是我门在数据库中自己添加的不是活的
2.代码和一些解释
1.添加的界面
<?php
/*编辑语言*/ header("content-type:text/html;charset=utf-8"); $con = mysqli_connect('127.0.0.1','root','root','student_exam');//连接数据库 $con->set_charset('utf-8');//改数据库的编辑语言 $sql = "select * from student_input";//sql语句查询数据库中所有学生信息 $arr = mysqli_query($con,$sql);//执行sql语句 $data = []; while($a = mysqli_fetch_array($arr,MYSQLI_ASSOC)){ $data[] = $a; }//从结果集中将数据取出放到一个数组中 ?> <!doctype html>//html页面 <html lang="en"> <head> <meta charset="UTF-8"> <title>考试分数的录入</title> </head> <body> <form action="student_input_add.php" method="post"> <table border="1"> <tr> <td>本场考试名字:</td> <td><input type="text" name="name"></td> </tr> <tr> <td>学生姓名:</td> <td>学生分数:</td> </tr> <?php foreach($data as $k=>$v){ ?> <tr> <input type="hidden" name="s_id[]" value="<?php echo $v['s_id']; ?>"> <td><?php echo $v['s_name']; ?></td> <td><input type="text" name="score[]"></td> </tr> <?php } ?> <tr> <td></td> <td><input type="submit" value="提交"></td> </tr> </table> </form> </body> </html>
name定义成s_id[]是为了可以提价过去一个数组
2.执行添加页面
<?php $con = mysqli_connect('127.0.0.1','root','root','student_exam');//连接数据库 $con->set_charset('utf-8');//更改数据库取出数据库的语言 $sql1 = "select * from entry_of_results";//sql语句取出学生成绩表的数据(主要为了验证考试名是否充在) $arr1 = mysqli_query($con,$sql1);//执行sql语句 $data1 = []; while($a = mysqli_fetch_array($arr1,MYSQLI_ASSOC)){ $data1[] = $a; }//从结果集中取出数据放到数组中 $name = []; foreach($data1 as $k=>$v){ $name[] = $v['examination_name']; }//将所有考试取出放到一个新数组 $name1 = array_unique($name);//去重 $name2 = array_filter($name1);//去空 $tt = $_POST['name'];//接姓名 if(in_array($tt,$name2)){ echo "此场考试以填过分数"; header("refresh:2;url='student_input'"); exit; }//判断是否充在考试名 $arr = $_POST;//接所有post传过来的值 unset($arr['name']); $data = []; foreach($arr as $k=>$v){ foreach($v as $key=>$val){ $data[$key][$k] = $val; $data[$key]['examination_name'] = $tt; } }//处理数组 $now = time(); foreach($data as $k=>$v){ $sql = "insert into entry_of_results (s_id,mark,ctime,examination_name) values ('$v[s_id]','$v[score]','$now','$v[examination_name]')"; mysqli_query($con,$sql); }//循环添加 $u = mysqli_affected_rows($con);//获得数据库影响行数 if($u){//判断是否成功 echo "添加成功"; header("refresh:2;url='student_input_list.php'"); }else{ echo "添加失败"; header("refresh:2;url='student_input.php'"); } ?>3.展示页面(默认没有数据)(ajax搜索)
<?php header("content-type:text/html;charset=utf-8"); ?> <!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <title>分数展示</title> </head> <body> <table border="1"> <tr> <td><a href="./student_input_email.php">发邮件去</a></td> </tr> <tr> <td>根据用户名查找:</td> <td><input type="text" name="name"></td> <td><input type="button" οnclick="a()" value="查找"></td>//调用jquery中的a方法 <td>更据分数查找:</td> <td> <select id="a"> <option value=">"> > </option> <option value="="> = </option> <option value="<"> < </option> </select> </td> <td> <select id="b"> <option value="10">10</option> <option value="20">20</option> <option value="30">30</option> <option value="40">40</option> <option value="50">50</option> <option value="60">60</option> <option value="70">70</option> <option value="80">80</option> <option value="90">90</option> <option value="100">100</option> </select> </td> <td><input type="button" οnclick="b()" value="查找"></td>//调用jquery中的b()方法 </tr> <tr> <td>学生姓名:</td> <td>学生年龄:</td> <td>学生成绩:</td> <td>学生成绩创建时间:</td> </tr> <div id="vvv"> </div> </table> </body> </html> <script type="text/javascript" src="./jquery-1.9.1.min.js"></script>//引入jQuery文件 <script> function a(){//a方法调用按名字查 var name = $('input[name=name]').val(); $.ajax({ type: 'post', data: {'name': name}, dataType: 'json', url: './student_searth.php', success: function (result) { var str = ''; if(result == ""){ str = "没有内容!"; } for(x in result){ str +="<tr>"+ "<td>"+result[x]['s_name']+"</td>"+ "<td>"+result[x]['s_age']+"</td>"+ "<td>"+result[x]['mark']+"</td>"+ "<td>"+result[x]['ctime']+"</td>"+ "</tr>"; } $('#vvv').html(str); } }) }
function b(){//b方法按照成绩查 var a = $('#a').val(); var b = $('#b').val(); $.ajax({ type: 'post', data: {'a': a,'b':b}, dataType: 'json', url: './student_searth.php', success: function (result) { var str = ''; if(result == ""){ str = "没有内容!"; } for(x in result){ str +="<tr>"+ "<td>"+result[x]['s_name']+"</td>"+ "<td>"+result[x]['s_age']+"</td>"+ "<td>"+result[x]['mark']+"</td>"+ "<td>"+result[x]['ctime']+"</td>"+ "</tr>"; } $('#vvv').html(str); } })
用jquery要引入jQuery文件要不然不能用jQuery
4.ajax搜索ajax请求页面处理ajax请求
<?php header("content-type:text/html;charset=utf-8"); $con = mysqli_connect('127.0.0.1','root','root','student_exam');//连接数据库 $con->set_charset('utf-8'); $name = empty($_POST['name']) ? "" : $_POST['name'];//接数据 $a = empty($_POST['a']) ? "" : $_POST['a'];//接数据 $b = empty($_POST['b']) ? "" : $_POST['b'];//接数据 //判断传过来的是名字还是成绩然后再生成各自的sql语句 if(!empty($name)){ $sql = "select * from student_input join entry_of_results on student_input.s_id=entry_of_results.s_id where student_input.s_name like '%$name%'"; } if(!empty($a) && !empty($b)){ $sql = "select * from student_input join entry_of_results on student_input.s_id=entry_of_results.s_id where entry_of_results.mark $a '$b'"; }//判断是否有sql语句怕没有走ajax直接进入页面报错 if(isset($sql)){ $arr = mysqli_query($con,$sql); $data = []; while($a = mysqli_fetch_array($arr,MYSQLI_ASSOC)){ $data[] = $a; } foreach($data as $k=>$v){ $data[$k]['ctime'] = date('Y-m-d H:i:s',$v['ctime']); } }else{ $data = []; } echo json_encode($data);//以json的形式放回数据 ?>
5. 发送邮件页面(查出最近的一次成绩)
<?php header("content-type:text/html;charset=utf-8"); $con = mysqli_connect('127.0.0.1','root','root','student_exam');//连接数据库 $con->set_charset('utf-8'); $sql = "select * from entry_of_results order by ctime desc";//sql语句按照考试时间倒叙查 $arr = mysqli_query($con,$sql);//执行sql语句 $a = mysqli_fetch_array($arr,MYSQLI_ASSOC);//从结果集中取一条数据 $e = $a['ctime'];从上面的数组中取出时间 $sql1 = "select * from student_input join entry_of_results on student_input.s_id=entry_of_results.s_id where entry_of_results.ctime='$e'"; $arr1 = mysqli_query($con,$sql1); $data = []; while($a = mysqli_fetch_array($arr1,MYSQLI_ASSOC)){ $data[] = $a; }//查出最近一次的成绩 foreach($data as $k=>&$v){ $v['ctime'] = date('Y-m-d H:i:s',$v['ctime']); }//把字符串形式的时间戳改成时间 ?> <!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <title>学生最近的一次考试成绩:</title> </head> <body> <table border="1"> <tr> <td>学生姓名:</td> <td>学生年龄:</td> <td>学生家长邮箱:</td> <td>学生成绩:</td> <td>学生创建时间:</td> <td>操作</td> </tr> <?php foreach($data as $k=>$v){ ?> <tr> <td><?php echo $v['s_name']; ?></td> <td><?php echo $v['s_age']; ?></td> <td><?php echo $v['s_email']; ?></td> <td><?php echo $v['mark'] ?></td> <td><?php echo $v['ctime']; ?></td> <td id="g"><a href="javascript:;" id="v" yy="<?php echo $v['s_email']; ?>" uu="<?php echo $v['mark']; ?>">发邮件</a></td>//ajax发邮件 </tr> <?php } ?> </table> </body> </html> <script type="text/javascript" src="./jquery-1.9.1.min.js"></script>//引入jquery文件 <script> $(document).on('click','#v',function(){//点击时把当前点击的成绩和邮箱发到发邮件页面 var email = $(this).attr('yy'); var mark = $(this).attr('uu'); var th = $(this); $.ajax({ type: 'post', data: {'email': email,'mark':mark}, dataType: 'json', url: './student_email.php', success: function (result) { if(result.code == 1){ alert('OK'); $(th).parent('#g').html("<a href='javascript:;'>已发送</a>"); }else{ alert('发送失败'); } } }) }) </script>
6.发邮件页面引用网上的发邮件类(下载一个包Mailer网站www.github中搜索邮件发送包就可以下了)
我用的是163邮箱QQ邮箱新浪邮箱都可以
<?php $email = empty($_POST['email']) ? "" : $_POST['email'];//接值 $mark = empty($_POST['mark']) ? "" : $_POST['mark'];//接值 include_once './Mailer/PHPMailer.php';//引入扩展(Mailer包中的) include_once './Mailer/SMTP.php';//引入扩展(Mailer包中的) include_once './Mailer/Exception.php';//引入扩展(Mailer包中的) $mail=new PHPMailer\PHPMailer\PHPMailer();//实例化一个命名空间是PHPMailer\PHPMailer类名为PHPMailter的类 $mail->Host = 'smtp.163'; $mail->isSMTP(); // Set mailer to use SMTP 使用SMTP方式发送 $mail->SMTPAuth = true; // Enable SMTP authentication 启用SMTP验证功能 $mail->SMTPSecure = 'ssl'; // Enable TLS encryption, `ssl` also accepted $mail->Port = 587; // TCP port to connect to // 设置发送的邮件的编码 $mail->CharSet = 'UTF-8'; // 设置发件人昵称 显示在收件人邮件的发件人邮箱地址前的发件人姓名 $mail->FromName = '[小轩科技]'; // smtp登录的账号 QQ邮箱即可 $mail->Username = '18311091694@163'; // smtp登录的密码 使用生成的授权码 $mail->Password = '444455555..'; // 设置发件人邮箱地址 同登录账号 $mail->From = '18311091694@163'; // 邮件正文是否为html编码 注意此处是一个方法 $mail->isHTML(true); // 设置收件人邮箱地址 $mail->addAddress($email);//邮箱填写地方 // 添加该邮件的主题 $mail->Subject = '[小轩科技] 学校您孩子的成绩'; // 添加邮件正文 $mail->Body = "学校您孩子的成绩 :".$mark; // 为该邮件添加附件 //$mail->addAttachment($att_path); // 发送邮件 返回状态 //判断是否发送成功 if($mail->send()){ $arr = ['code'=>1];//返回一个数组到前一个页面做判断 echo json_encode($arr); }else{ $arr = ['code'=>2];//返回一个数组到前一个页面做判断 echo json_encode($arr); } ?>
完成下级待续。。
更多推荐
php(无框架)下开发的一个考试计分系统(菜鸟教程)
发布评论