SDYY大学普通话考试报名系统说明文档

简介: SDYY大学普通话考试报名系统说明文档

系列文章目录

健康云平台开发说明文档

SD申报系统迭代说明文档

漏刻有时物联网传感器API接口对接说明文档

Echarts数据分析系统Data Analysis Platform使用说明文档

漏刻有时云守护数据可视化v2.0迭代升级说明文档

百度地图POI多信息点标注开发说明文档

漏刻有时云守护数据可视化画质感知状态迭代说明文档

Zabbix物联网可视化开发文档

Echarts动态排名柱状图(自适应电脑和手机端)说明文档

漏刻有时文档系统之XE培训系统二次开发配置手册


文章目录

系列文章目录

前言

一、用户前端

1.前端登录

2.绑定手机和修改密码

3.流程管控

3.越权安全

cookie传参

url加密传参

数据验证

二、后台管理

1.数据大屏

2.用户管理

群发短信

一键审核

3.数据分表

配置文件

切换数据分表

添加数据分表

删除数据分表


前言

一、账户登录

1.SDYY大学普通话考试报名系统的账户为学号,不能自行注册,其中默认密码ZYY#身份证后6位,X大写;

2.输入学号和系统默认密码登录,建议登录后马上修改自己的密码,防止信息泄露;

3.如忘记密码,请联系系统管理员,重新设置;


二、信息认证

1.注册状态,由系统管理员导入完成,能登录即表明已完成该状态;

2.身份认证,系统核对姓名、性别、民族和身份证号,如非实名,则无法提交;

3.基础信息,所在学院、班级、CET状态、联系电话和证件照,用于生成准考证;

4.费用缴纳,考生扫描条码后,系统会自动认证,一经认证,基础信息无法修改;

5.准考制证,系统根据审核情况,进行自动制证。生成后,可打开下载或打印


一、用户前端

1.前端登录


0dc9666a154044b6b342bff778f2226c.jpg


1.后台导入用户信息,以学号为准,默认账号为学号,默认密码ZYY#身份证后6位,X大写;

2.支持手机号绑定,但在导入时未涉及到手机号,因此需要在用户首次登录后,强制绑定手机和修改默认密码;

2.绑定手机和修改密码


ffa3d6ec5fab41cfa0dc149cd4cf1029.png

    /*强制弹出修改密码*/
    if (user_agree == "0") {
        getConfirm('?m=Index&a=userBind', '90%', '90%', 'no', '首次登录绑定手机');
    }
//确认协议弹出模态框
function getConfirm(url, width, height, pop, title) {
    layer.open({
        type: 2,
        fix: false,
        shade: 0.6,
        title: title,
        maxmin: false,
        area: [width, height],
        closeBtn: 0,
        shadeClose: false,
        anim: 3,
        isOutAnim: true,
        content: [url, pop]
    });
}

3.流程管控



        var stepData = [
            {'title': "注册用户",links:"#", "desc": "2022-11-12 00:00:00"},
            {'title': "身份认证",links:"?m=Index&a=infomationIdentity&act=showIdentity", "desc": "2022-11-12 00:00:00"},
            {'title': "报名信息",links:"?m=Index&a=infomationEdit&act=showInfo", "desc": "2022-11-12 00:00:00"},
            {'title': "费用缴纳",links:"?m=Index&a=infomationPay", "desc": "2022-11-12 00:00:00"},
            {'title': "下载准考证",links:"?m=Index&a=infomationExam&act=showExam", "desc": "2022-11-12 00:00:00"}
        ];
        $.ajax({
            type: "get",
            url: "api/api.php?act=getUserStatus&token=3cab7ce4142608c0f40c785b5ab5ca24",
            async: true,
            data: {},
            dataType: "json",
            success: function (res) {
                var data = res.data[0]['user_status'];
                //更新状态
                steps.make(stepData, '#steps', data);
            }
        });


3.越权安全

多用户系统,使用user_id数字时,容易明文越权,即通过手动修改user_id,可访问不同用户的信息,为了保证用户信息的私密性和完整性,需要对用户信息进行越权控制。

cookie传参

即用户登录后,将user_id设置为cookie,在后台处理时,默认传参。

$user_id = AuthCode($_COOKIE['db_id'], 'DECODE', '', '');

url加密传参

将user_id加密,后台解密,实现参数的密文传参。

m=Index&a=indexDeal&act=preview&user_id=6d0ed7O1wKrWZ8uLeIV3Q8wymU8EUzlCcuwI4CBAtvqf。由于生成的密钥,默认带+,带url传参的时候,系统会默认将+转为空格,因此在get方法获取user_id时,需要将空格替换为+.

$sys_id = str_ireplace(' ', '+', get_param('user_id'));//未解码
$user_id = AuthCode($sys_id, 'DECODE', '', '');//已解码



数据验证

在后台读取数据库记录,如果为空,直接跳转到信息提示页。

 $row = $db->fetch($current_table, '*', array('user_id' => $user_id), ' user_id DESC');
        if (!$row) {
            redirect('?m=Index&a=tips&act=tips&tips_id=7');
        }


二、后台管理

1.数据大屏

调用echarts展示各个学院的报名情况(未报名、已报名)



2.用户管理



群发短信

//发送短信;
    case "sendSms";
        $user_id = $_POST['user_id'];
        //var_dump($user_id);
        if (is_array($user_id)) {
            //循环发送信息;
            for ($i = 0; $i < count($user_id); $i++) {
                $row = $db->fetch($current_table, 'user_name,user_sms,user_phone', array('user_id' => $user_id[$i]), ' user_id DESC');
                if ($row['user_phone'] == NULL || $row['user_phone'] == "") {
                    $res['code'] = 0;
                    $res['msg'] = $row['user_name'] . "手机号码有误,无法发送";
                    die(json_encode_lockdata($res));
                }
                //发送短信 TODO
                //更新发送短信次数
                $user_sms = $row['user_sms'] + 1;
                $db->update($current_table, array('user_sms' => $user_sms), array('user_id' => $user_id[$i]));
            }
            $res['code'] = 1;
            $res['msg'] = "短信发送成功";
            die(json_encode_lockdata($res));
        } else {
            $row = $db->fetch($current_table, 'user_name,user_sms,user_phone', array('user_id' => $user_id), ' user_id DESC');
            if ($row['user_phone'] == NULL || $row['user_phone'] == "") {
                $res['code'] = 0;
                $res['msg'] = $row['user_name'] . "手机号码有误,无法发送";
                die(json_encode_lockdata($res));
            }
            //发送短信 TODO
            //更新发送短信次数
            $user_sms = $row['user_sms'] + 1;
            $db->update($current_table, array('user_sms' => $user_sms), array('user_id' => $user_id));
            $res['code'] = 1;
            $res['msg'] = $row['user_name'] . ",短信发送成功";
            die(json_encode_lockdata($res));
        }
        break;

一键审核

 //一键审核;
    case "sendVerify";
        $user_id = $_POST['user_id'];
        //var_dump($user_id);
        if (is_array($user_id)) {
            //循环发送信息;
            for ($i = 0; $i < count($user_id); $i++) {
                $row = $db->fetch($current_table, 'user_name,user_sms,user_phone', array('user_id' => $user_id[$i]), ' user_id DESC');
                $db->update($current_table, array('user_verify' => 2), array('user_id' => $user_id[$i]));
            }
            $res['code'] = 1;
            $res['msg'] = "报名审核成功";
            die(json_encode_lockdata($res));
        } else {
            $row = $db->fetch($current_table, 'user_name,user_sms,user_phone', array('user_id' => $user_id), ' user_id DESC');
            $db->update($current_table, array('user_verify' => 2), array('user_id' => $user_id));
            $res['code'] = 1;
            $res['msg'] = $row['user_name'] . ",短信发送成功";
            die(json_encode_lockdata($res));
        }
        break;

3.数据分表

为了提高系统的复合利用率,系统增加了数据分表。即:不同批次的学生报名时,切换数据表,当前使用的为当期的。



配置文件

config.table.php

<?php return ['current_table' => '2024'];

切换数据分表

 //切换数据分表;
    case "sendVerify";
        $tb_name = $_POST['tb_name'];
        if ($tb_name == "") {
            $res['code'] = 0;
            $res['msg'] = "未选择数据表";
            die(json_encode_lockdata($res));
        } else {
            //生成数据分表的配置文件config.table.php
            $config_table = "<?php return ['current_table' => '" . $tb_name . "'];";
            @file_put_contents('conf/config.table.php', $config_table);
            //更新状态码;
            $db->update('subtables', array('tb_use' => 0), array(''));
            $db->update('subtables', array('tb_use' => 1), array('tb_name' => $tb_name));
            //操作日志;
            addlogs($_COOKIE["admin_name"], $tb_name . '切换数据分表,STATUS:OK', '', time(), getip());
            $res['code'] = 1;
            $res['msg'] = "数据分表切换成功";
            die(json_encode_lockdata($res));
        }
        break;

添加数据分表

case "add";
        $tb_name = $_POST['tb_name'];
        $tb_times = time();
        $row = $db->fetch('subtables', '*', array('tb_name' => trim(addslashes($tb_name))), ' tb_id DESC');
        if ($row) {
            $res['code'] = 0;
            $res['msg'] = "数据表名已存在,请更换名称。";
            die(json_encode_lockdata($res));
        }
        //创建数据;
        $db->insert('subtables', array('tb_name' => $tb_name, 'tb_use' => 0, 'tb_times' => $tb_times));
        //创建分表;
        $sql = "CREATE TABLE IF NOT EXISTS `" . $CONF['db_prefix'] . 'user_' . $tb_name . "` (
        `user_id` int(11) NOT NULL,
          `user_ticket` varchar(64) DEFAULT NULL COMMENT '学号',
          `user_phone` varchar(32) DEFAULT NULL COMMENT '手机',
          `user_name` varchar(32) DEFAULT NULL COMMENT '姓名',
          `user_pwd` varchar(64) DEFAULT NULL COMMENT '密码',
          `user_gender` varchar(32) DEFAULT NULL COMMENT '性别',
          `user_nation` varchar(32) DEFAULT NULL COMMENT '民族',
          `user_cet` varchar(32) DEFAULT NULL COMMENT '四六级',
          `user_card` varchar(32) DEFAULT NULL COMMENT '身份证',
          `user_campus` varchar(64) DEFAULT NULL COMMENT '所在校区',
          `major_id` int(11) DEFAULT '0' COMMENT '学院Id',
          `user_work` varchar(255) DEFAULT NULL COMMENT '学院',
          `user_class` varchar(32) DEFAULT NULL COMMENT '班级',
          `user_time` int(11) DEFAULT NULL COMMENT '注册时间',
          `user_photo` varchar(255) DEFAULT NULL COMMENT '证件照',
          `user_sms` int(2) DEFAULT '0' COMMENT '短信发送次数',
          `user_verify` int(2) DEFAULT '0' COMMENT '0未报名1已报名2已审核',
          `user_pay` int(2) DEFAULT '0' COMMENT '0未交费1已缴费',
          `user_status` int(2) DEFAULT '0' COMMENT '1已注册2已认证3已完善4已缴费5已通过',
          `user_ip` varchar(255) DEFAULT NULL COMMENT 'ip',
          `user_agree` int(2) NOT NULL DEFAULT '0' COMMENT '0未验证1已验证',
          `user_period` varchar(64) DEFAULT NULL COMMENT '用户批次',
          `user_salt` varchar(64) DEFAULT NULL,
          `user_city` varchar(32) DEFAULT NULL COMMENT '地级市',
          `user_area` varchar(32) DEFAULT NULL COMMENT '地区',
          `user_province` varchar(32) DEFAULT NULL COMMENT '省份',
          `exam_no` varchar(255) DEFAULT NULL COMMENT '准考证号',
          `exam_times` varchar(255) DEFAULT NULL COMMENT '考试时间',
          `exam_place` varchar(255) DEFAULT NULL COMMENT '考试地点',
          `exam_class` varchar(255) DEFAULT NULL COMMENT '考场号',
          `exam_seat` varchar(255) DEFAULT NULL COMMENT '座位号',
          `exam_prepare` varchar(255) DEFAULT NULL COMMENT '备考室',
          `exam_notice` text COMMENT '考生须知'
        ) ENGINE=InnoDB AUTO_INCREMENT=4457 DEFAULT CHARSET=utf8 COMMENT='信息表';";
        $row = $db->queryall($sql);
        $res['code'] = 1;
        $res['msg'] = "数据分表创建成功,请在conf/config中配置切换";
        die(json_encode_lockdata($res));
        //操作日志;
        addlogs($_COOKIE["admin_name"], $tb_name . '数据分表创建,STATUS:OK', '', time(), getip());
        break;

删除数据分表

//删除数据分表;
    case "del";
        $tb_id = get_param('tb_id');
        $tb_name = get_param('tb_name');
        if (is_array($tb_id)) {
            $tb_id = implode(",", $tb_id);
        }
        if ($tb_id == '') {
            die("tb_id错误");
        }
        //删除记录;
        $db->delete('subtables', 'tb_id in(' . $tb_id . ')');
        //删除数据表;
        $sql = "DROP TABLE IF EXISTS " . $CONF['db_prefix'] . $tb_name;
        $row = $db->queryall($sql);
        //操作日志;
        addlogs($_COOKIE["admin_name"], $tb_id . '数据分表删除,STATUS:OK', '', time(), getip());
        break;


@漏刻有时

相关文章
|
机器学习/深度学习 算法 C++
2019第十届蓝桥杯大赛青少年创意编程省赛C++组试题解析
2019第十届蓝桥杯大赛青少年创意编程省赛C++组试题解析
380 0
|
3月前
|
存储 JavaScript 前端开发
程序与技术分享:C++程序设计实验考试准备资料(2019级秋学期)
程序与技术分享:C++程序设计实验考试准备资料(2019级秋学期)
|
4月前
如何制作一份专业高通过率的简历——【大学生就业训练营】系列第三课
系列课程共有八节,下方完成视频课程观看并在评论区回复学习心得,还可以领取惊喜礼品~
384324 1366
|
项目管理
探索PMP认证:为明天所有考试的朋友送上祝福
亲爱的家人们,明天我们有些朋友要进行PMP考试,在这篇文章中,我们将深入了解PMP认证,这一在项目管理领域备受尊崇的认证,同时也送上我们最真诚的祝愿,愿他们的考试顺利通过!
108 1
|
4月前
|
定位技术 数据安全/隐私保护
保研夏令营、考研复试院校信息汇总表的模板与制作注意事项
保研夏令营、考研复试院校信息汇总表的模板与制作注意事项
|
4月前
|
算法 定位技术
保研夏令营与考研复试联系导师、婉拒导师的语言模板与注意事项
保研夏令营与考研复试联系导师、婉拒导师的语言模板与注意事项
|
存储 人工智能 文字识别
高考志愿填报指南:使用AI阅读工具ChatDOC搭建专业、好用、免费的AI高考志愿填报系统
针对高考志愿填报,这篇文章能为你提供以下内容:高考志愿填报专业数据、高考志愿填报分析思路、专业 AI 工具分析示范。
477 0
|
数据采集 数据可视化 数据挖掘
python数据分析之高校考试监考安排
python数据分析之高校考试监考安排
141 0
|
人工智能 数据挖掘
【Adobe教师培训免费前导课】一场“科技”与“艺术”的邂逅
【Adobe教师培训免费前导课】一场“科技”与“艺术”的邂逅