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

news2025/1/15 13:53:52

系列文章目录

  1. 健康云平台开发说明文档
  2. SD申报系统迭代说明文档
  3. 漏刻有时物联网传感器API接口对接说明文档
  4. Echarts数据分析系统Data Analysis Platform使用说明文档
  5. 漏刻有时云守护数据可视化v2.0迭代升级说明文档
  6. 百度地图POI多信息点标注开发说明文档
  7. 漏刻有时云守护数据可视化画质感知状态迭代说明文档
  8. Zabbix物联网可视化开发文档
  9. Echarts动态排名柱状图(自适应电脑和手机端)说明文档
  10. 漏刻有时文档系统之XE培训系统二次开发配置手册

文章目录

  • 系列文章目录
  • 前言
  • 一、用户前端
    • 1.前端登录
    • 2.绑定手机和修改密码
    • 3.流程管控
    • 3.越权安全
      • cookie传参
      • url加密传参
      • 数据验证
  • 二、后台管理
    • 1.数据大屏
    • 2.用户管理
      • 群发短信
      • 一键审核
    • 3.数据分表
      • 配置文件
      • 切换数据分表
      • 添加数据分表
      • 删除数据分表


前言

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

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

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

二、信息认证

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

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

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

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

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


一、用户前端

1.前端登录

在这里插入图片描述

  1. 后台导入用户信息,以学号为准,默认账号为学号,默认密码ZYY#身份证后6位,X大写;
  2. 支持手机号绑定,但在导入时未涉及到手机号,因此需要在用户首次登录后,强制绑定手机和修改默认密码;

2.绑定手机和修改密码

在这里插入图片描述

    /*强制弹出修改密码*/
    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;

@漏刻有时

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/379245.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Docker之路(7.DockerFile文件编写、DockerFile 指令解释、CMD与ENTRYPOINT的区别)

1.DockerFile介绍 dockerfile 是用来构建docker镜像的文件&#xff01;命令参数脚本&#xff01; 构建步骤&#xff1a; 编写一个dockerfile文件docker build构建成为一个镜像docker run 运行镜像docker push发布镜像&#xff08;DockerHub、阿里云镜像仓库&#xff09; 2.Dock…

如何使用ADFSRelay分析和研究针对ADFS的NTLM中继攻击

关于ADFSRelay ADFSRelay是一款功能强大的概念验证工具&#xff0c;可以帮助广大研究人员分析和研究针对ADFS的NTLM中继攻击。 ADFSRelay这款工具由NTLMParse和ADFSRelay这两个实用程序组成。其中&#xff0c;NTLMParse用于解码base64编码的NTLM消息&#xff0c;并打印有关消…

SAP 在建工程转固定资产

由固定资产归口采购部门或业务部门提交购置固定资产/在建工程的申请&#xff0c;经审批后&#xff0c;若是需要安装调试&#xff0c;则由财务部固定资产会计建立内部订单收集成本&#xff0c;月末结转在建工程。项目完工后&#xff0c;相关部门&#xff08;公司装备部、分公司装…

Python虚拟环境迁移

使用python开发脚本使用的时候难免会遇到需要更换电脑来运行的问题&#xff0c;但是python不同版本的兼容性较差&#xff0c;在其他电脑使原python脚本运行时经常会发生一些问题&#xff0c;因此就需要python虚拟环境的迁移了。但是&#xff0c;直接将虚拟环境复制到另一台电脑…

Git学习(1)pro git阅读尚硅谷视频

目录 目录&#xff1a; 1. 起步 2. Git 基础 3. Git 分支 4. 服务器上的 Git 5. 分布式 Git 第一章 1.3 Git是什么 1.6运行git前的配置 该开源图书网站 Git - Book (git-scm.com) 目录&#xff1a; 1. 起步 1.1 关于版本控制1.2 Git 简史1.3 Git 是什么&#xff1f;1…

《图机器学习》-GNN Augmentation and Training

GNN Augmentation and Training一、Graph Augmentation for GNNs1、Feature Augmentation2、Structure augmentation3、Node Neighborhood Sampling一、Graph Augmentation for GNNs 之前的假设&#xff1a; Raw input graph computational graph&#xff0c;即原始图等于计算…

产品需求文档需要注意10件事

01什么是完美的产品需求文档&#xff08;PRD&#xff09;&#xff1f;就像产品经理一样&#xff0c;产品需求文档需要同时有效地执行许多不同的角色。该文档将由设计师&#xff0c;营销人员和工程团队使用&#xff0c;并且需要传达他们所需的所有必要信息。参考上面的漫画&…

html,

目录1. html新建1.1 html基本结构1.2 html细节2. 标签2.1 font标签2.2 字符实体2.3 标题标签2.4 超链接标签2.5 列表标签2.6 图片标签2.7 表格标签2.8 表单标签2.8.1基本使用2.8.2表单综合练习2.8.3表单格式化2.8.4表单使用细节2.8.5get请求2.8.6post请求2.9 其它标签2.9.1div标…

【JavaScript】第一章JavaScript入门

第一章 JavaScript入门JavaScript介绍JavaScript的起源JavaScript的应用JavaScript的特点JavaScript是脚本语言支持面向对象编程&#xff0c;面向过程编程/函数式编程支持跨平台执行JavaScript和ECMAScript的关系开发工具编辑器sublime textVisual Studio CodewebstormDreamwea…

安装VMWare虚拟机之后,发现网络贼卡,打开网页很慢

事情描述&#xff1a; 最近忙一个项目&#xff0c;需要到虚拟机中部署环境&#xff0c;安装完之后&#xff0c;就开整自己的项目了。 可以过几天&#xff0c;发现本地网络贼卡&#xff0c;打开各网页慢的一批&#xff0c;一开始还以为是路由器的问题&#xff0c;反复折腾之后排…

HBuilder X启动微信开发工具报错的问题

今天通过HBuilder X启动微信开发工具&#xff0c;报了如下的错&#xff1a; [微信小程序开发者工具] [error] IDE service port disabled. To use CLI Call, please enter y to confirm enabling CLI capability, or manually open IDE -> Settings -> Security Settings…

Android Studio相关记录

目录Android Studio 便捷插件Android LogcatJava文件的类头模板Android Studio 使用遇到的问题解决方案org.jetbrains.annotations.NullableBuild 控制台编译输出中文乱码Terminal 使用 git 命令窗口git 命令窗口中文乱码Android Studio 便捷插件 Android Logcat 配置路径 Fi…

【VUE】六 路由和传值

目录 一、 路由和传值 二、案例 三、案例存在无法刷新问题 一、 路由和传值 当某个组件可以根据某些参数值的不同&#xff0c;展示不同效果时&#xff0c;需要用到动态路由。 例如&#xff1a;访问网站看到课程列表&#xff0c;点击某个课程&#xff0c;就可以跳转到课程详…

【c#】学习DATATABLE排序

c#实现Datatable排序Datatable排序结果图代码展示总结Datatable排序 结果图 原数据 倒序 去重 筛选行 代码展示 1、使用datatable视图对table进行排序 //倒序排序 dt.DefaultView.Sort “CreateTime desc”; dt dt.DefaultView.ToTable(); 如果想升序排序&#xff0c…

kafka入个门

名词 topic 表 partation 水平扩展 leader 主 follow备 produce生产 offset偏移量 消息队列的流派 什么是 MQ Message Queue&#xff08;MQ&#xff09;&#xff0c;消息队列中间件。很多人都说&#xff1a;MQ 通过将消息的发送和接收分离来实现应用程序的异步和解偶&#xf…

DASCTF X GFCTF 2022十月挑战赛 Web

from DASCTF X GFCTF 2022十月挑战赛 Web EasyPOP 就简单的php反序列化 源码 <?php highlight_file(__FILE__); error_reporting(0);class fine {private $cmd;private $content;public function __construct($cmd, $content){$this->cmd $cmd;$this->content …

Leetcode22. 括号生成

一、题目描述&#xff1a; 数字 n 代表生成括号的对数&#xff0c;请你设计一个函数&#xff0c;用于能够生成所有可能的并且 有效的 括号组合。 示例 1&#xff1a; 输入&#xff1a;n 3输出&#xff1a;[“((()))”,“(()())”,“(())()”,“()(())”,“()()()”] 示例 2&…

Java笔记028-集合章节练习

Java笔记028-集合章节练习编程题按要求实现&#xff1a;封装一个新闻类&#xff0c;包含标题和内容属性&#xff0c;提供get、set方法&#xff0c;重写toString方法&#xff0c;打印对象时只打印标题只提供一个带参构造器&#xff0c;实例化对象时&#xff0c;只初始化标题&…

【Java】Java进阶学习笔记(一)—— 面向对象(封装)

【Java】Java进阶学习笔记&#xff08;一&#xff09;—— 面向对象&#xff08;封装&#xff09;一、类中成分1、类中成分2、this关键字this() 访问构造器方法3、static关键字1. 成员变量的区分2. 成员方法的区分3. 成员变量访问语法的区分二、封装1、封装的定义封装的好处2、…

excel之古诗词打乱排序

最终效果 制作过程: 一、选择一首古诗&#xff0c;将正文内容连接起来&#xff0c;放在一个单元格中 二&#xff0c;由于这首诗是20字的&#xff0c;加工20个不重复的随机数&#xff0c;具体公式如下图 &#xff08;写好第一行数据&#xff0c;拖动下拉即可&#xff09; 其中…