手搓了一个分班查询和成绩查询系统(PHP程序,无数据库,直接查询xlsx文件):
(前期PHP出现巨大漏洞,大约影响了世界75%的网站。故该系统非常注重安全设计,已进行了多次安全审计和功能审计)
系统主要功能简介:
1、查询时可使用 姓名+验证码 模式(该模式下同名的学生都会显示出来)
也可使用 姓名+身份证+验证码 模式(该模式下查询到的身份证号码显示会进行脱敏处理)
2、查询到结果后,才会显示对应班级的二维码,以方便加入班级群,也防止误加入别的班级群
3、查询结果文字可复制,更人性化
4、入学须知会分别显示在首页和查询结果页
4、查询功能可定时开放,不到时间无法查询
5、系统直接查询xlsx文件(excel或wps表格文件),直接读取文件里面的字段和内容(有什么内容就读取和查询什么内容),灵活性和人性化都很好
5、手机和电脑会自动适配
6、后台管理功能丰富,详见下面
其他:
这个分班查询和成绩查询可塑性很强,可从后台改成别的查询系统以便进行数据查询,只需要上传一个电子表格文件就行
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
下面是部分页面演示截图:
查询首页展示:

查询结果展示:

定时查询展示:

===============================================================
详细说明:
分班 / 成绩查询系统(PHP 零依赖版)
直接读取 Excel(.xlsx / .csv)内容进行查询,**不需要数据库、不需要 composer 安装任何库**。
管理员在后台上传表格、勾选"依据哪些列查询"、开关功能,学生/家长在前台输入姓名 + 身份证号即可查到分班或成绩。
## 一、功能特性
| 能力 | 说明 |
| ---------------- | --------------------------------------------------------------------------- |
| 直接搜 Excel | 上传 xlsx/csv 后即时解析,无需导入数据库,换名单只需重新上传 |
| 自定义查询条件 | 后台勾选哪些列作为查询条件,可设显示名、输入类型(文本/身份证/数字/手机号)、是否必填、排列顺序 |
| 验证码 | 图形(GD)/SVG(无 GD 也能用)/算术题,后台可一键开关 |
| 姓名 + 身份证校验 | 身份证做 18 位校验位验证,自动兼容 15 位老身份证 |
| 查询条件开关 | 后台可一键开关「需要输入身份证号」:关掉后前台只剩姓名 + 验证码;每个查询字段也能单独停用(配置保留) |
| 模块显示开关 | 「系统设置 → 首页模块显示」一处统管:关掉成绩查询后首页不再显示该入口,也无法检索;两个模块可以同时关,也可以只留一个(只剩一个时自动隐藏切换标签) |
| **多文件(多级部)合并查询** | 分班查询、成绩查询都可以上传**多个表格**(如一年级部、二年级部各一张表),查询时依次在所有文件中查找,结果合并返回;可单独删除其中某一个文件 |
| 分班 / 成绩双模块 | 两个模块可分别上传不同表格、分别开关、分别设置展示方式(卡片/表格) |
| 结果脱敏 | 身份证、手机号等敏感列可设置为打码显示 |
| 后台开关 | 系统总开关、各模块开关、验证码开关、防刷限流开关 |
| 防刷限流 | 按 IP 限制查询次数与验证码错误次数 |
| 入学注意事项 | 后台编辑报到时间、携带材料等说明,可显示在首页、查询结果页或两处都显示 |
| 班级群二维码 | 后台按班级上传微信群二维码,学生查到班级后直接显示该班二维码,**手机上长按即可识别进群**,点击可放大保存 |
| **班级来源列可多选** | 多个级部的表里班级列名不一样("班级"/"所在班级"/"行政班"…)时,后台**可勾选多个列名**,还能在上传文件时自动收集,不会漏掉任何一个班的班级名 |
| **同名班级按单位区分** | 给每个数据文件填一个「所属单位 / 校区」,二维码就按「单位 · 班级」分别绑定。三个校区都有"1班"也各用各的码,不会串 |
| **上传数据体检** | 每次上传名单后自动扫描:前后空格、身份证为空/科学计数法/校验位错/重复、班级为空、姓名为空或重复,直接列出第几行、哪个值;还会随机抽样几行跑一次真实查询做"自查"。再也不会出现"名单有问题但家长查不到"的尴尬 |
| **配置备份 / 导出导入** | 后台「备份与迁移」可一键导出配置 JSON(**不含管理员密码**)、导出含上传文件与二维码的完整数据包 ZIP,也能导入配置恢复 settings;导入前会自动把现有配置另存一份 |
| **二维码批量上传** | 把二维码图片**按班级命名**(如 `初一(1)班.png`)后一次多选上传,系统按文件名自动认班级并绑定;认不出来的文件会被点名提示,支持全角括号、多余空格、`副本` 后缀等常见写法 |
| **结果一键复制** | 查询结果页底部有「复制结果」按钮,一键把整条结果复制成纯文本,方便家长粘贴到微信或表格里(不支持剪贴板 API 的老浏览器会自动降级) |
| **定时开放** | 每个模块可设置"几点几分以后才开放查询",未到时间前台按钮禁用并提示自定义等待文案(支持 `{time}` 占位符),到点自动放行,不用半夜守着改开关 |
| **后台预览搜索 + URL 直达** | 后台「数据预览」可按关键词过滤行(有搜索时最多显示 50 行);前台支持 `index.php?module=score` 直接落到某个模块,可以把成绩查询链接单独发给家长 |
| **未命中引导文案可配** | 每个模块的"查不到"提示语可自定义,支持换行,适合写清"请核对…/若仍查不到请联系…"之类的引导 |
| 响应式适配 | 一套页面自适应:电脑上表格平铺、结果卡片双列;手机上表格自动转成"一条记录一张卡片",二维码放大到方便长按;输入框 16px 避免 iOS 聚焦时自动缩放,并适配 iPhone 底部安全区 |
| **后台入口可改名 / 可隐藏** | 首页默认**不显示**后台链接;后台文件可以改成任意名字(如 `mgr_8f2k.php`),改名后所有链接自动跟随,不用改任何配置。后台「系统设置」里还能一键改名并自动重命名文件,躲开批量扫描 `admin.php` 的机器人 |
| 后台试查 | 配置完立刻在后台试查,不用跑到前台验 |
| 中文兼容 | 自动识别 UTF-8/GBK 编码的 CSV;表单提交 GBK 也能正确匹配 |
## 二、环境要求
- PHP **7.0 以上**(推荐 7.4 / 8.x)
- 读取 .xlsx 需要 PHP 的 **zip** 扩展(绝大多数环境默认开启);没开启也能用 **CSV** 格式
- **openssl 扩展(授权校验必需)**:授权用 RSA 验签,没有它系统无法校验凭证,
前台查询会停用(后台仍可进,环境自检里会标红)。绝大多数环境默认开启
- **mbstring 扩展(中文处理)**:身份证/姓名打码、验证码、后台中文搜索都要用。
绝大多数环境默认开启;缺了后台环境自检会标红
- GD 扩展仅影响图形验证码,没有时自动降级为 SVG 验证码
- 目录 `data/` 需要**可写**权限
后台"系统设置"页底部有环境自检,会明确列出哪些扩展可用。
## 三、部署步骤
1. 把整个 `score-query` 目录上传到网站根目录(或任意子目录,如 `/query/`)。
2. 确保 `data` 目录可写(Linux 下:`chmod -R 777 data`)。
3. 浏览器访问 `http://你的域名/admin.php`(建议装好后**改个名**,见下):
- 首次访问会要求**设置管理员账号密码**;
- 进入后台后 →「分班查询」→ 上传 Excel → 确认查询字段与显示列 → 保存;
- 「成绩查询」同样操作;
- 到「**授权管理**」复制机器码 → 签发注册码 → 填回激活(详见第五节);
- 前台访问 `index.php` 即可查询。
> ⚠️ **新装的系统默认要求授权才能查询**,没激活前前台会提示"系统尚未授权"。
> 后台不受影响,随时可以进去激活。想先给人试用,可在「授权管理」里填**试用天数**;
> 内部演示则可以在该页关掉这个开关。
本地快速试用(无需 Apache/Nginx):
```bash
cd score-query
php -S 127.0.0.1:8080
# 浏览器打开 http://127.0.0.1:8080/index.php 后台 http://127.0.0.1:8080/admin.php
```
### 装好后建议:把后台入口改个名
`admin.php` 是全网扫描器必扫的名字。改成不容易猜到的名字能挡掉绝大部分自动化攻击,
而且**改完不用动任何配置**——程序所有内部链接都是按当前文件名动态生成的。
两种方式,任选其一:
- **后台一键改名**:「系统设置 → 后台入口」里填个新名字(如 `mgr_8f2k.php`)点「改名」,
程序会自己重命名文件并跳转。
- **手动改名**:用 FTP / 文件管理器把 `admin.php` 重命名为任意 `xxx.php`,
然后用新地址访问一次,系统会自动记住新名字(首页若开了入口链接也会同步指向它)。
> ⚠️ 改名后**务必记住新地址**。万一忘了,用 FTP 看一下网站根目录里哪个 `.php`
> 打开是后台登录页即可(前台只有 `index.php` / `api.php`,其余就是后台)。
另外,「系统设置」里的**「在首页底部显示『管理后台』链接」默认是关闭的**:
首页是给家长看的,没必要把后台入口摆上去。需要时再打开。
## 四、Excel 表格要求
- **第一行必须是列标题**,例如:`姓名 | 身份证号 | 班级 | 班主任 | 教室`
- 支持 `.xlsx`(推荐)和 `.csv`;老版 `.xls` 请先用 Excel「另存为 .xlsx」
- 只有一张表有多个工作表时,后台可选择具体工作表和表头所在行
- **身份证号列务必在 Excel 里设置为"文本"格式**(或在前面加英文单引号 `'`),否则 Excel 会把它变成科学计数法导致后 3 位丢失,无法查询
- 修改表头行/工作表后,点一下后台的「按当前设置重新识别表头」
- 一个模块可以**上传多个文件**(多级部 / 多校区 / 正表 + 补录表),各文件的列名可以不完全一致,详见 [常见问题](#七常见问题)
示例数据见 `sample/` 目录(分班名单示例.xlsx、成绩表示例.xlsx),可直接上传测试。
## 五、后台配置项说明
- **系统设置**:总开关、标题/**全站公告**(显示在首页顶部,两个模块共用)、关闭提示语、**首页模块显示**(一处统管哪些模块出现在首页)、验证码(开关/形式/长度/有效期)、防刷限流(次数/时间窗口/错误上限)
- **模块设置**:
1. **数据文件(可多个)**:上传是「追加」而不是覆盖,可同时挂多张表(多级部 / 多校区 / 分班表 + 补录表)。列表里显示每个文件的名称、行数、上传时间,可单独选择工作表、单独删除,也可一键清空
- 各文件会按「查询字段」对应的**列名**去匹配;某个文件缺少该列时会自动跳过(不会报错、也不会误匹配)
- 多个文件的列可以不完全一致:新出现的列会自动合并进来并默认显示,缺失的列留空
2. 功能开关、模块名称、展示方式(卡片/表格)、匹配方式(全部条件匹配 / 任一匹配)、无结果提示语(支持换行)、工作表与表头行、**定时开放时间 + 等待文案**
- **「查询时需要输入身份证号」开关**:勾上 → 前台显示姓名 + 身份证号 + 验证码;取消 → 前台只显示姓名 + 验证码
- **「定时开放」**:留空 = 立即开放;填了时间 = 到点才允许查询。等待文案里写 `{time}` 会自动替换成开放时间,例如「成绩将于 {time} 公布」
3. **入学注意事项**:开关 + 标题 + 正文(支持换行)+ 显示位置(首页 / 查询结果页 / 两处都显示)
4. 查询字段:勾选哪些列参与查询、显示名、类型、必填、输入提示、顺序
- 每行的**「启用」**列可单独停用某个字段:配置保留,只是前台不显示、不参与查询。用来临时只按姓名查询,之后一键恢复
5. 显示列与脱敏:勾选结果里展示哪些列,每列可选"不处理/身份证打码/手机号打码/保留首尾字/完全隐藏"
6. **班级群二维码**:选择哪一列是班级(上传表格时会自动识别"班级"列)→ 系统自动列出该列所有班级值 → 逐个或批量上传二维码 → 家长查到自己班级时就显示对应二维码。可自定义标题与提示语,可单独删除某个班的二维码,也可手动添加班级
- **批量上传**:把图片按班级命名后一次多选上传即可自动匹配;文件名里的「班级」「二维码」等字样、全角括号、空格、`副本` / `(1)` 这类副本后缀都会被自动忽略
7. **数据体检**:显示上次体检结论(扫描行数、错误/提醒条数)、问题清单(第几行、哪列、什么值、什么问题)、抽样自查结果;可随时点「重新体检」。每次上传名单也会自动体检并把结论附在上传提示里
8. **数据预览**:按当前表头解析出的前几行;可在搜索框输入关键词过滤(如输入某个姓名确认名单里到底有没有、写成什么样),有关键词时最多显示 50 行
- **备份与迁移**:导出配置 JSON(不含密码)/ 导出完整数据包 ZIP(含上传文件、二维码、配置)/ 导入配置(可选是否连管理员账号一起导入),导入前自动备份现有配置
- **后台入口**:显示当前后台文件名;可一键改名(自动重命名文件);也可开关首页底部的后台链接
- **授权管理**:见下一节
- **修改密码**、**查询日志**(最近 200 条)
下载地址:
https://pan.baidu.com/s/1QHsxxgEVDz9MRblobZLZng?pwd=uxdm
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。


评论(0)