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(无框架)下开发的一个考试计分系统(菜鸟教程)