做一个考试系统 添加完成绩后展示所有学生的所有成绩 并能查询学生最近的一次考试成绩并发送邮件给家长
考试系统的数据库设计
需要学生表 和 考试表 。
学生表的设计的设计要注意的有
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、
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 "邮件发送有误 ";
echo "邮件错误信息: " . $mail->ErrorInfo;
exit;
}
{
echo "邮件发送成功!
";
}
此博客最后展现的内容是可以通过页面来发送邮件告知成绩。
此博客现在就只是涉及了一个班级的所有成绩,不能体现出多班的成绩,这个博客还没有加必要的验证和年龄的处理,年龄还是出生日期。
在windows下运行 ,要注意的邮件的类库,发送邮件的模板。
在Linux下运行,如果过在Windows运行正常,在linux里报错首先要看的是防火墙是否关闭,centOS6.4 iptables、centOS7 firewall。还不成功报这个错
关闭SELINUX(linux 内核模块的防火墙)
vi /etc/selinux/config
#SELINUX=enforcing #注释掉
SELINUX=disabled #增加
:wq! #保存退出
setenforce 0 #使配置立即生效