本文介绍一套基于 PHP 和 MySQL 开发的证书查询管理系统,涵盖系统安装、数据库连接、模糊查询、管理员登录、证书增删改查以及 CSV 文件的导入导出功能。适合需要快速搭建证书查询平台或学习 PHP+MySQL 综合应用的开发者参考。
1. 系统结构概述
项目包含以下关键脚本:
- install.php:首次安装向导,创建数据库、数据表并添加管理员。
- config.php:存储数据库主机、库名、用户名、密码等连接参数。
- functions.php:封装数据库连接函数等公共工具。
- index.php:前端证书查询页面,支持按证书编号、姓名或颁发机构进行模糊搜索。
- login.php:管理员登录入口,验证会话后跳转管理后台。
- admin.php:后台管理页面,包含仪表盘统计、证书管理(列表/添加/编辑/删除/导入/导出)和用户管理。
2. 安装脚本的核心逻辑
install.php 首先检测 config.php 是否存在,若存在则提示“系统已安装”。用户需输入数据库主机、数据库名、数据库用户名、数据库密码以及管理员用户名和密码。安装过程中执行以下操作:
- 创建 MySQL 数据库(若不存在)。
- 创建证书表(字段至少包含证书编号、姓名、颁发机构、有效期等)。
- 创建用户表(存储管理员用户名、密码哈希等)。
- 插入初始管理员记录。
- 将数据库配置写入 config.php 文件。
- 重定向到 index.php。
3. 数据库连接函数的设计
functions.php 中提供数据库连接函数,通常使用 PDO 或 mysqli。示例连接代码(基于原文可推演):- function getDB() {
- $config = require 'config.php';
- $dsn = "mysql:host={$config['host']};dbname={$config['dbname']};charset=utf8";
- return new PDO($dsn, $config['user'], $config['pass']);
- }
复制代码 该函数被所有需要数据库操作的页面引用,确保连接统一管理。
4. 前端证书模糊查询实现
index.php 提供表单,用户输入关键词后提交。后台接收参数,使用 LIKE 子句在 certificate_number、name、issuing_agency 三个字段中进行模糊匹配:- $keyword = $_GET['keyword'] ?? '';
- $stmt = $db->prepare("SELECT * FROM certificates WHERE
- certificate_number LIKE ? OR name LIKE ? OR issuing_agency LIKE ?");
- $like = '%' . $keyword . '%';
- $stmt->execute([$like, $like, $like]);
- $results = $stmt->fetchAll();
- if (empty($results)) { echo '未找到匹配记录,请检查关键词或尝试其他关键词。'; }
复制代码 此设计支持用户快速检索多字段,无需精确匹配。
5. 管理员登录与会话管理
login.php 通过 POST 接收用户名和密码,使用 password_verify() 比对哈希值。验证成功则将管理员信息存入 $_SESSION,并跳转到 admin.php;失败则显示错误提示。
6. 后台管理核心功能
admin.php 实现以下模块:
- 仪表盘:统计证书总数、本月新增、即将过期(例如有效期距当前≤30天)、已过期证书数量,并列出最新证书及用户总数。
- 证书管理:
- 列表:分页显示所有证书,支持搜索筛选。
- 添加:检查证书编号是否已存在,若重复则拒绝添加。
- 编辑:同一条记录修改时验证编号唯一性(排除自身 ID)。
- 删除:硬删除或软删除(原文未说明,可设计为直接 DELETE)。
- 导入:上传 CSV 文件,逐行解析。若证书编号已存在则更新记录,若不存在则新增,并返回处理结果(新增/更新/跳过个数)。CSV 导入示例逻辑:- $handle = fopen($_FILES['csv']['tmp_name'], 'r');
- while (($data = fgetcsv($handle, 1000, ',')) !== FALSE) {
- $number = $data[0]; $name = $data[1]; $agency = $data[2];
- $stmt = $db->prepare("SELECT id FROM certificates WHERE certificate_number = ?");
- $stmt->execute([$number]);
- if ($stmt->fetch()) {
- // 更新记录
- $update = $db->prepare("UPDATE certificates SET name=?, issuing_agency=? WHERE certificate_number=?");
- $update->execute([$name, $agency, $number]);
- } else {
- // 插入新记录
- $insert = $db->prepare("INSERT INTO certificates (certificate_number, name, issuing_agency) VALUES (?,?,?)");
- $insert->execute([$number, $name, $agency]);
- }
- }
复制代码 - 导出:查询所有证书,输出为 CSV 文件并设置下载头。
- 用户管理:实现管理员用户的列表、添加、编辑、删除等 CRUD 操作,确保只有超级管理员可删除其他用户。
7. 总结与扩展建议
本系统以 PHP 原生脚本构建,适合中小型机构使用。可在此基础上引入安全措施(如 CSRF Token、输入过滤)、API 接口(供外部查询)或增加证书过期提醒邮件脚本。开发者可根据实际需求调整数据库字段和业务逻辑。
注意:文中代码仅为实现思路的示例,实际需配合完整表结构和配置。建议在部署前修改 config.php 权限,防止泄露敏感信息。 |