学生考试查看和告知系统

做一个考试系统   添加完成绩后展示所有学生的所有成绩 并能查询学生最近的一次考试成绩并发送邮件给家长

考试系统的数据库设计

需要学生表考试表 。

学生表的设计的设计要注意的有

 1、学生的年龄 

    不能只存年龄,要存出生日期在和当前时间计算一下算出年龄 

 2、入学的 时间 的字段设置   

时间用date()或time()都可以 

3、性别字段的设置 

里需要用到在数据库里只能存男或女          1或2  这里需要用到一个字段是enum,并在默认值那里写上‘男’,‘女’


4、所有字段都要注意存储的长度

5、学生分为在校生和毕业生,所以这里要给数据库一给状态来区别是在校生和离校生,以防止学生离校时还能出学生的成绩难

功能的难度

1、分数和时间的传值  和数据处理

  


    列表展示用的是foreach循环遍历这里就不能单独的写name=“name”,这要写只能接到一个值,要写成数组的形式name=“name[]”,这样$_POST接值会变成一个三维数组。

 
 
//获取数据库的字段名
foreach($datas as $k =>$v ){
    $arr[$k] = $k;
}
$id= $arr['s_id'];
$grade= $arr['grade'];
$examtime= $arr['examtime'];
//循环遍历添加入数据库
$link=mysqli_connect('127.0.0.1','root','root','grade')or die(mysqli_error());

foreach($new_data as $k =>$v ){
    if(!$v[$grade] == '' && !$v[$examtime] == ''){
        $sql = "insert into `grade` (".$id.",".$grade.",".$examtime.",stutas) values ('".$v[$id]."','".$v[$grade]."','".$v[$examtime]."',1)";
        $res=mysqli_query($link,$sql);
    }

}

2展示列表

查询状态为1的所有数据 ,并添加查询数据的input框


查询条件默认为$where = 1;

姓名模糊查询

分数查询为大于   大于等于  小于 小于等于  等于

3 展示学生最近最近一 次考试并发送邮件提醒家长

查询数据哟查询在校学生的最近一次考试成绩

//处理学生的id  去重
$link=mysqli_connect('127.0.0.1','root','root','grade')or die(mysqli_error());
$sqls = "select distinct s_id from  `grade` ";
$result=mysqli_query($link,$sqls);
while($arr=mysqli_fetch_assoc($result)) {
    $data[]=$arr;
}
//循环查询每个学生的最近一次成绩
foreach( $data as $k=>$v){
    $ids=$v['s_id'];
    $sql = "select * from  `grade` join `student` on `grade`.s_id=`student`.s_id  where `grade`.s_id = $ids and `student`.stutas =1 order by examtime desc limit 1 ";

    $results=mysqli_query($link,$sql);
    while($arr=mysqli_fetch_assoc($results)) {
        $data1[]=$arr;
    }
}

4、发送邮件

    1、注册一个邮箱(开通授权:设置->设置POP3、SMTP/IMAP勾选),如果不勾选,授权失败



2、去这个网址下载phpmailer类库,http://github.com/PHPMailer/PHPMailer

3、


 
 
<?php
header("content-type:text/html;charset=utf-8");
//接值
$s_id=$_GET['s_id'];
$link=mysqli_connect('127.0.0.1','root','root','grade')or die(mysqli_error());
//查询一条学生信息
$sql = "select * from `grade` join `student` on `grade`.s_id=`student`.s_id where grade.s_id='$s_id'";
$result=mysqli_query($link,$sql);

$arr=mysqli_fetch_assoc($result);
$name = $arr['s_name'];
//发送邮件的文本
$messgae='尊敬的'.$name.'的家长,您的孩子最近一次成绩是'.$arr['grade'].',希望您注重孩子的学习。';
//让[email protected][email protected]发送邮件

include("class.phpmailer.php");
include("class.smtp.php");
$mail = new PHPMailer();
$mail->IsSMTP(); // send via SMTP
$mail->Host = "smtp.163.com"; // SMTP servers
$mail->SMTPAuth = true; // turn on SMTP authentication
$mail->Username = "[email protected]"; // SMTP username 注意:普通邮件认证不需要加 @域名
$mail->Password = "wj1995320"; // SMTP password
$mail->From = "[email protected]"; // 发件人邮箱
$mail->FromName = "静静"; // 发件人

$mail->CharSet = "utf-8"; // 这里指定字符集!
$mail->Encoding = "base64";
$mail->AddAddress("[email protected]",$name); // 收件人邮箱和姓名
$mail->AddReplyTo("[email protected]",$name);
//$mail->WordWrap = 50; // set word wrap 换行字数
//$mail->AddAttachment("/var/tmp/file.tar.gz"); // attachment 附件
//$mail->AddAttachment("/tmp/image.jpg", "new.jpg");
$mail->IsHTML(true); // send as HTML
// 邮件主题
$subject="测试";
$mail->Subject = $subject;
// 邮件内容
$mail->Body = $messgae;
$mail->AltBody ="text/html";
if(!$mail->Send())
{
    echo "邮件发送有误 <p>";
    echo "邮件错误信息: " . $mail->ErrorInfo;
    exit;
}
{
    echo "邮件发送成功!<br />";
}

此博客最后展现的内容是可以通过页面来发送邮件告知成绩。

此博客现在就只是涉及了一个班级的所有成绩,不能体现出多班的成绩,这个博客还没有加必要的验证和年龄的处理,年龄还是出生日期。

在windows下运行  ,要注意的邮件的类库,发送邮件的模板。

在Linux下运行,如果过在Windows运行正常,在linux里报错首先要看的是防火墙是否关闭,centOS6.4  iptables、centOS7   firewall。还不成功报这个错


关闭SELINUX(linux   内核模块的防火墙)

vi /etc/selinux/config  
#SELINUX=enforcing #注释掉  
SELINUX=disabled #增加  
:wq! #保存退出  
setenforce 0 #使配置立即生效

   结束...

猜你喜欢

转载自blog.csdn.net/jingblog/article/details/80341790