考试成绩平台开发功能
1、学生成绩录入(学生基本信息自行数据库模拟) 2、展示 搜索条件(1)、按学生名称搜索 (2)、按分数搜索 (3)、按学生考试时间搜索 3、考试成绩通知家长(php自带 发送邮箱类文件) |
一、表分析
----学生基本信息表(student_info) AND 学生成绩表(stuent_score) ;
----表关系:1对多 (一个学生有多个考试分数 一个分数只属于一个学生);
二、数据库设计 及 字段
表1(学生基本信息表)::【自行模拟数据】
字段:c_id-学生id、c_num-学生学号、c_name-学生姓名、c_sex-学生性别、c_age-学生年龄、enrol_time-入学时间、is_graduate-是否毕业、parents_email-学生家长邮箱
注:c_age-学生年龄date类型(当前年份-储存出生年份=年龄,可自动增长年龄);
c_sex-学生性别枚举型enum (限定男女)有关于check约束可参考点击打开链接 (博主还尚未修改^.^)
表2(学生考试分数记录表)::
字段:s_id-自增id、s_score-考试分数、test_time-考试时间、c_id-关联id
注:s_score-考试分数float类型(分数可能出现小数点)
三、代码实现 【面向过程】基本验证自行处理
(一)、添加表单 name设置数组 提交浏览器处理得到一个三维数组
<?php
$con = mysqli_connect('localhost','root','root','test');
$con->set_charset('utf8');
if (mysqli_connect_errno($con))
{
echo "连接 MySQL 失败: " . mysqli_connect_error();
}
$sql = "select * from `student_info`";
$res = mysqli_query($con,$sql);
while($arr = mysqli_fetch_assoc($res)){
$student_info[] = $arr;
}
?>
<html>
<h3>学生成绩录入</h3>
<form action="scoreEnteringDo.php" method="post">
<table>
<tr>
<td>学生学号</td>
<td>学生姓名</td>
<td>本次考分</td>
<td>考试时间</td>
</tr>
<?php foreach ($student_info as $k => $v){?>
<tr class="data">
<input type="hidden" name="student[c_id][]" value="<?php echo $v['c_id'];?>">
<td><?php echo $v['c_num'];?></td>
<td><?php echo $v['c_name'];?></td>
<td><input name="student[s_score][]" type="number"></td>
<td><input name="student[test_time][]" type="date"></td>
</tr>
<?php }?>
</table>
<input type="submit" id="demo1" style="margin-top:20px;margin-left:100px;">
<input type="reset" style="margin-top:20px;margin-left:100px;">
</form>
</html>
添加表单图样
多条数据入库处理
$con = mysqli_connect('localhost','root','root','test');
$con->set_charset('utf8');
if (mysqli_connect_errno($con))
{
echo "连接 MySQL 失败: " . mysqli_connect_error();
}
$arr = $_POST;
if(empty($arr['test_time'])){
$arr['test_time']=date('ymd');
}
//转成二维数组
foreach ($arr as $value){
foreach($value as $v){
$data[] = $v;
}
}
$arr_new = array();
foreach($data as $item){
foreach($item as $key=>$val){
$arr_new[$key][] = $val;
}
}
foreach($arr_new as $new_key =>$new_value){
if(empty($new_value[1]) || empty($new_value[2])){
unset($new_value);
}else{
$sqli = "INSERT INTO `student_score` (`c_id`, `s_score`, `test_time`) VALUES ('" . $new_value[0] . "','" . $new_value[1] . "','" . $new_value[2] . "')";
$a=mysqli_query($con , $sqli);
}
}
(二)、展示数据 【根据ajax获取搜索条件->发送请求->进行以下数据处理->回掉数据进行展示数据的替换】
ajax请求代码【引入jQuery文件】
$("#dome").click(function () {
var c_name = $("#c_name").val(); //搜索名称
var s_score = $("#s_score").val(); //搜索分数
var type = $("#type").val(); //分数类型
var date = $("#date").val(); //考试日期
$.ajax({
url: "scoreSearch.php",
type: "post",
data: {c_name: c_name, s_score: s_score, type: type, date: date},
success: function (json_data) {
// console.log(json_data);
var str = '';
if (json_data != 'no') {
var data = JSON.parse(json_data);
str += "<tr>" +
"<td>学生学号</td>" +
"<td>学生姓名</td>" +
"<td>考试分数</td>" +
"<td>考试时间</td>" +
"<td>是否毕业</td>" +
"<td>是否通知家长</td>" +
"</tr>";
for (var i in data) {
str += "<tr>" +
"<td>" + data[i]['c_num'] + "</td>" +
"<td>" + data[i]['c_name'] + "</td>" +
"<td>" + data[i]['s_score'] + "</td>" +
"<td>" + data[i]['test_time'] + "</td>" +
"<td>" + data[i]['is_graduate'] + "</td>" +
"<td><a href='javascript:;' class='send_email'>是</a></td>" +
"<input type='hidden' value=" + data[i]['c_id'] + " class='c_id'>" +
"<input type='hidden' value=" + data[i]['test_time'] + " class='test_time'>" +
"</tr>";
}
} else {
str += "<tr>" +
"<td>学生学号</td>" +
"<td>学生姓名</td>" +
"<td>考试分数</td>" +
"<td>考试时间</td>" +
"<td>是否毕业</td>" +
"<td>是否通知家长</td>" +
"</tr>";
str += "<tr>" +
"<td><p style='line-height: 40px;'>暂无此类数据</p></td>" +
"</tr>";
}
$("#data").html(str);
}
});
});
展示列表 被请求页面的数据处理header("content-type:text/html;charset=utf-8");
$con = mysqli_connect('localhost','root','root','test');
$con->set_charset('utf8');
if (mysqli_connect_errno($con))
{
echo "连接 MySQL 失败: " . mysqli_connect_error();
}
//接受搜索条件
$c_name = !empty($_POST['c_name'])?$_POST['c_name']:''; //名称
$s_score = !empty($_POST['s_score'])?$_POST['s_score']:''; //分数
$type = !empty($_POST['type'])?$_POST['type']:''; //类型
$date = !empty($_POST['date'])?$_POST['date']:''; //考试时间
//var_dump($date);
if($type ==1){
$type = '=';
}elseif($type ==2){
$type = '>';
}elseif($type ==3){
$type = '<';
}
//拼条件
$where=1;
if(!empty($c_name)){
$where .=" and c_name = '$c_name'";
}
if(!empty($s_score) && !empty($type)){
$where .=" and s_score $type '$s_score'";
}
if(!empty($date)){
$where .= " and test_time ='$date'";
}
$sql = "select * from `student_info` join `student_score` on student_info.c_id=student_score.c_id where $where";
$res = mysqli_query($con , $sql);
//判断受影响行数
$number = mysqli_num_rows($res);
if($number != 0){
while($arr = mysqli_fetch_assoc($res)){
$student_data[] = $arr;
}
foreach($student_data as $k_k => $v_v){
if($v_v['is_graduate'] == 0){
$student_data[$k_k]['is_graduate'] = "在校";
}else{
$student_data[$k_k]['is_graduate'] = "毕业";
}
}
echo json_encode( $student_data );
}else{
echo 'no';
}
展示列表图样(3)、是否通知家长 点击超链接 是 get传值学生id 进行查询学生信息表家长邮箱 调用php自带发送邮箱类库
修改模板数据,进行发送邮箱
注释::
上传到liunx运行
邮件发不出去 关闭防火墙 IPtables(6.4)或firewalld(7.0) 在运行一遍 如果还发不出去 再关闭selinux 0(临时关闭)
- vi /etc/selinux/config
- #SELINUX=enforcing #注释掉
- SELINUX=disabled #增加
- :wq! #保存退出
- setenforce 0 #使配置立即生效
上一篇: Mac下tesseract-ocr安装(用于图片识别)
下一篇: log4j注意事项