简介:这是一套基于PHP7.4开发的轻量级学生信息管理系统源码,面向Web开发初学者与课程设计实践者,用于掌握前后端协同开发、MySQL数据库操作及基础MVC结构实现。资源包含74个文件,涵盖22个核心PHP业务逻辑文件(如StudentIndex.php、Main.php等)、23个CSS样式文件、5个JS交互脚本、13张PNG图标与图片素材,以及stusys.sql数据库脚本和README.md说明文档,整体压缩包仅852KB,结构清晰、依赖精简。已有1324人学习下载,适合作为PHP入门项目快速上手:开箱即用,仅需在phpstudy Pro中导入SQL并配置Conn.php中的数据库连接参数(默认root/123456),即可运行完整增删改查功能;前端采用静态HTML+CSS+JS实现响应式界面,后端通过controller层统一管理数据库交互,便于理解请求流转与分层设计思想。
1. 这不是「教学演示」,而是一套可直接部署的 PHP 学生管理最小可行系统
你拿到的这个PHP学生管理系统源代码.zip,不是教科书里的伪代码示例,也不是只跑通登录页就戛然而止的半成品。它是一套完整闭环的轻量级业务系统:从index.html静态入口开始,经regist.html注册、student.php列表展示、StudentGradeInfo.php单条详情、Main.php后台主控,到controller/Conn.php数据库连接层,全部串联打通;配套stusys.sql可一键导入建库建表,字段设计覆盖学号、姓名、班级、成绩、入学时间等核心教育管理字段;前端不依赖任何框架,纯 HTML/CSS/JS 实现响应式布局,css/和images/目录结构清晰,连.DS_Store这类 macOS 元数据文件都保留在压缩包里——说明作者是在真实开发环境中反复调试后打包的。
这套系统专为两类人准备:一是高校数据库课程设计或 Web 开发实训的学生,需要在 3 天内完成「能运行、能增删改查、能截图交作业」的硬性交付;二是中小培训机构或教务老师,想快速搭一个内部用的学生信息看板,不求高并发,但要求部署简单、修改直观、故障可定位。它默认适配phpstudy pro + PHP 7.4 + MySQL 5.7组合,避开了 PHP 8+ 的严格类型检查和 MySQL 8.0 的认证插件兼容问题,属于当前 Windows 环境下最稳妥的入门级技术栈。
提示:该系统未做 XSS 过滤、SQL 注入防护、密码明文存储等安全加固,严禁直接暴露在公网环境。仅限局域网或本地开发测试使用,这是所有同类教学源码的通用前提,而非本项目的缺陷。
2. 从零部署:环境准备、数据库初始化与连接配置三步落地
2.1 环境确认与目录结构还原
该系统对运行环境有明确约束:必须使用phpstudy pro(非旧版 phpStudy)且 PHP 版本锁定为7.4。这是因为Conn.php中使用的mysql_connect()函数在 PHP 7.4 中仍可用,但在 PHP 8.0+ 中已被彻底移除;同时stusys.sql中的CREATE TABLE语句未声明ENGINE=InnoDB DEFAULT CHARSET=utf8mb4,在 MySQL 8.0 默认配置下可能触发sql_mode报错。因此,第一步不是写代码,而是验证环境:
# 在 phpstudy pro 控制台中确认 PHP 版本 # 或执行以下命令(需将 phpstudy 的 php 路径加入系统 PATH) php -v # 输出应为:PHP 7.4.x (cli) ...解压PhpStudentManageSystem-master.zip后,目录结构必须保持原样:
PhpStudentManageSystem-master/ ├── css/ ├── images/ ├── js/ ├── controller/ │ └── Conn.php # 数据库连接核心文件 ├── StudentGradeInfo.php ├── student.php ├── index.html ├── regist.html ├── Main.php ├── stusys.sql # 数据库结构与初始数据 └── README.md注意:
index.html是整个系统的唯一入口,不能放在子目录下;controller/Conn.php必须位于controller文件夹内,否则include 'controller/Conn.php';会报错。
2.2 数据库创建与 SQL 导入实操
stusys.sql文件包含建库、建表、插入示例数据三部分。关键点在于:它不创建数据库,只创建表结构并插入数据,因此必须先手动创建名为stusys的数据库。操作步骤如下(以 phpstudy 自带的 MySQL 管理工具为例):
- 打开 phpstudy → 点击「数据库管理」→ 输入用户名
root、密码123456(默认凭据)→ 登录; - 左侧导航栏点击「新建数据库」→ 数据库名填
stusys→ 字符集选utf8mb4→ 排序规则选utf8mb4_general_ci→ 点击「创建」; - 选中刚创建的
stusys数据库 → 点击「导入」→ 选择本地stusys.sql文件 → 点击「执行」。
导入成功后,执行以下 SQL 验证表结构是否完整:
USE stusys; SHOW TABLES; -- 应返回:student_info、student_grade 等至少 2 张表 SELECT COUNT(*) FROM student_info; -- 应返回大于 0 的数字,证明示例数据已载入若导入失败,常见原因有二:一是数据库名拼写错误(如stusys写成stusy),二是 SQL 文件编码非 UTF-8。此时可用记事本另存为「UTF-8 无 BOM 格式」再重试。
2.3 连接参数修改与路径映射配置
controller/Conn.php是整个系统数据库访问的枢纽,其内容如下(节选关键行):
<?php $host = "localhost"; $user = "root"; $pass = "123456"; $dbname = "stusys"; $conn = mysql_connect($host, $user, $pass) or die("连接失败"); mysql_select_db($dbname, $conn); mysql_query("set names utf8"); ?>此处需根据实际环境修改三项参数:
$host:若 MySQL 服务不在本机,需改为对应 IP(如192.168.1.100);$user和$pass:若修改过 MySQL root 密码,必须同步更新;$dbname:若创建的数据库名非stusys,此处必须一致。
提示:
mysql_*函数族在 PHP 7.4 中虽可用,但已被标记为废弃(Deprecated)。若未来升级 PHP 版本,需替换为mysqli或PDO。当前可暂不处理,但需知晓此技术债存在。
部署时还需确保 Web 服务器根目录指向PhpStudentManageSystem-master文件夹。在 phpstudy 中:点击「网站」→ 「添加网站」→ 根目录选择解压后的完整路径 → 域名填localhost或自定义如stusys.test→ 端口保持80→ 点击「确定」。完成后访问http://localhost/index.html即可看到首页。
3. 核心功能链路解析:从前端路由到后端数据流的全路径拆解
3.1 前端静态页面的请求驱动逻辑
该系统前端完全基于静态 HTML 实现,无前端框架参与,所有交互通过<form>提交和<a href>跳转完成。以学生注册流程为例,regist.html中的关键代码段如下:
<form action="student.php" method="post"> <input type="text" name="sno" placeholder="学号" required> <input type="text" name="sname" placeholder="姓名" required> <input type="text" name="class" placeholder="班级"> <input type="submit" value="提交注册"> </form>此处action="student.php"指向后端处理脚本,method="post"表明数据通过 POST 方式传递。注意:student.php并非纯展示页,而是承担了「接收 POST 数据 → 插入数据库 → 重定向回列表页」三重职责。这种设计省去了 AJAX 请求和 JSON 解析环节,降低了初学者理解门槛,但也意味着每次操作都会触发整页刷新。
index.html中的导航菜单则采用纯链接跳转:
<a href="student.php">学生信息管理</a> <a href="StudentGradeInfo.php">学生成绩查询</a> <a href="Main.php">后台管理</a>这些链接不携带参数,所有数据筛选逻辑均在对应 PHP 文件中通过$_GET或$_POST获取。例如StudentGradeInfo.php通过 URL 参数?id=1001获取学号,再执行SELECT * FROM student_grade WHERE sno='1001'查询。
3.2 后端 PHP 文件的数据处理分工
各 PHP 文件职责明确,形成清晰的数据流管道:
| 文件名 | 主要职责 | 关键数据操作 | 典型参数来源 |
|---|---|---|---|
student.php | 学生信息增删改查主控页 | INSERT INTO student_info,DELETE FROM student_info WHERE sno=... | $_POST['sno'],$_GET['action'],$_GET['sno'] |
StudentGradeInfo.php | 成绩详情展示页 | SELECT * FROM student_grade WHERE sno=... | $_GET['id'](URL 参数) |
Main.php | 后台管理总入口 | 无直接 DB 操作,仅包含导航框架 | 无 |
controller/Conn.php | 数据库连接封装 | mysql_connect(),mysql_query() | 全局包含,提供$conn连接资源 |
以student.php中的删除逻辑为例(节选):
if (isset($_GET['action']) && $_GET['action'] == 'delete') { $sno = $_GET['sno']; $sql = "DELETE FROM student_info WHERE sno='$sno'"; if (mysql_query($sql, $conn)) { echo "<script>alert('删除成功');location.href='student.php';</script>"; } else { echo "<script>alert('删除失败:" . mysql_error() . "');history.back();</script>"; } }这段代码暴露了两个典型教学场景下的实现特征:一是直接拼接 SQL 字符串(存在注入风险,但教学项目常如此简化),二是用mysql_error()输出原始错误信息(便于调试,但生产环境必须关闭)。
3.3 数据库表结构与字段语义映射
stusys.sql定义了至少两张核心表,其字段设计直指学生管理业务本质:
CREATE TABLE `student_info` ( `sno` varchar(20) NOT NULL PRIMARY KEY, `sname` varchar(50) NOT NULL, `class` varchar(30) DEFAULT NULL, `sex` varchar(10) DEFAULT NULL, `birth` date DEFAULT NULL, `entrance_date` date DEFAULT NULL, `phone` varchar(20) DEFAULT NULL, `email` varchar(100) DEFAULT NULL ); CREATE TABLE `student_grade` ( `id` int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY, `sno` varchar(20) NOT NULL, `course_name` varchar(100) NOT NULL, `score` decimal(5,2) DEFAULT NULL, `term` varchar(20) DEFAULT NULL, `teacher` varchar(50) DEFAULT NULL );字段命名采用下划线分隔(entrance_date),符合 MySQL 命名惯例;sno(学号)作为外键关联两张表,体现关系型数据库范式思想;score使用decimal(5,2)精确存储成绩(如89.50),避免浮点数精度误差;term字段预留学期维度,为后续扩展「按学期统计平均分」埋下伏笔。这些设计虽未达到企业级规范,但已覆盖课程设计评分标准中的「表结构合理、字段类型恰当、主外键明确」三项核心要求。
4. 功能增强实战:增加搜索过滤、导出 Excel 与密码加密三处关键改造
4.1 在 student.php 中添加模糊搜索功能
原student.php仅支持全量展示,无法按姓名或学号筛选。可在表格上方添加搜索表单,并修改 PHP 查询逻辑:
<!-- 在 student.php 表格上方插入 --> <form method="get" style="margin: 10px 0;"> <input type="text" name="keyword" placeholder="输入姓名或学号搜索" value="<?php echo isset($_GET['keyword']) ? htmlspecialchars($_GET['keyword']) : ''; ?>"> <button type="submit">搜索</button> <a href="student.php">[重置]</a> </form>对应 PHP 查询部分修改为:
// 替换原有的 $sql = "SELECT * FROM student_info"; $keyword = isset($_GET['keyword']) ? trim($_GET['keyword']) : ''; if (!empty($keyword)) { $sql = "SELECT * FROM student_info WHERE sname LIKE '%$keyword%' OR sno LIKE '%$keyword%'"; } else { $sql = "SELECT * FROM student_info"; } $result = mysql_query($sql, $conn);注意:此处
LIKE '%$keyword%'仍存在注入风险,但htmlspecialchars()已对输出做 XSS 过滤,且教学场景下搜索词不涉及敏感操作,属可接受范围。若需强化,可改用mysqli_real_escape_string()。
4.2 实现成绩数据 Excel 导出(无需第三方库)
利用 PHP 原生fputcsv()函数生成 CSV 文件,兼容 Excel 打开:
// 在 StudentGradeInfo.php 末尾添加导出按钮及处理逻辑 if (isset($_GET['export']) && $_GET['export'] == 'excel') { header('Content-Type: text/csv; charset=utf-8'); header('Content-Disposition: attachment; filename="student_grades.csv"'); $output = fopen('php://output', 'w'); fputcsv($output, ['学号', '课程名称', '成绩', '学期', '任课教师']); $sql = "SELECT sno, course_name, score, term, teacher FROM student_grade"; $result = mysql_query($sql, $conn); while ($row = mysql_fetch_assoc($result)) { fputcsv($output, $row); } fclose($output); exit; }在页面中添加导出链接:
<a href="StudentGradeInfo.php?export=excel" style="margin-left:20px;">[导出成绩表]</a>CSV 文件以 UTF-8 编码生成,Excel 2016+ 可直接识别中文;若需.xlsx格式,则必须引入PhpSpreadsheet库,超出本项目轻量定位,故不展开。
4.3 将明文密码升级为 password_hash() 加密存储
当前系统未涉及用户登录模块,但regist.html已预留密码输入框。若需扩展登录功能,必须改造密码存储方式。在student.php的注册插入逻辑中:
// 原始明文存储(危险!) // $password = $_POST['password']; // 替换为 bcrypt 加密 $password = password_hash($_POST['password'], PASSWORD_DEFAULT); // 插入时使用加密后字符串 $sql = "INSERT INTO student_info (sno, sname, class, password) VALUES ('$sno', '$sname', '$class', '$password')";验证时使用password_verify():
// 登录验证示例 $sql = "SELECT password FROM student_info WHERE sno='$sno'"; $result = mysql_query($sql, $conn); $row = mysql_fetch_assoc($result); if (password_verify($_POST['password'], $row['password'])) { // 登录成功 } else { // 密码错误 }PASSWORD_DEFAULT使用 bcrypt 算法,生成的哈希值长度固定为 60 字符,student_info表中password字段需提前扩容至VARCHAR(255)。
5. 故障排查与边界验证:五类高频问题的定位方法与修复指令
5.1 页面空白或报错“Fatal error: Call to undefined function mysql_connect()”
此错误表明 PHP 环境未启用mysql扩展,或版本不匹配。验证命令:
php -m | grep mysql # 若无输出,说明扩展未加载修复步骤:
- 打开 phpstudy →「PHP 设置」→「扩展管理」→ 勾选
mysql(注意:不是mysqli); - 重启 PHP 服务;
- 创建
phpinfo.php文件放入根目录,访问http://localhost/phpinfo.php,搜索mysql确认已启用。
注意:PHP 7.4 中
mysql扩展默认禁用,必须手动开启。若勾选后仍无效,需检查php.ini中extension=php_mysql.dll是否取消注释。
5.2 访问 index.html 显示 “No input file specified.” 或 404
此问题多因 Web 服务器未正确映射根目录。检查 phpstudy 中「网站」列表:
- 确认「根目录」路径精确指向
PhpStudentManageSystem-master(非其父文件夹); - 确认「域名」设置为
localhost且状态为「运行中」; - 若使用自定义域名(如
stusys.test),需在C:\Windows\System32\drivers\etc\hosts中添加127.0.0.1 stusys.test。
5.3 数据库连接失败:“Access denied for user 'root'@'localhost'”
即使密码正确仍报错,常见于 MySQL 8.0+ 的caching_sha2_password认证插件不兼容。解决方案:
- 用 phpstudy 自带的 MySQL 客户端登录;
- 执行以下 SQL 重置 root 用户认证方式:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456'; FLUSH PRIVILEGES;- 重启 MySQL 服务。
5.4 中文乱码:网页显示“æŽå”而非“李四”
根源在于字符集未统一。需三处同步设置:
stusys.sql文件保存为 UTF-8 无 BOM;Conn.php中mysql_query("set names utf8");保持启用;- MySQL 数据库、表、字段的字符集均为
utf8mb4(非utf8)。
验证命令:
SHOW CREATE DATABASE stusys; SHOW CREATE TABLE student_info; -- 两处输出中均应含 DEFAULT CHARSET=utf8mb45.5 表单提交后无反应或跳转错误
检查student.php中的重定向逻辑:
// 错误写法(相对路径易失效) header("Location: student.php"); // 正确写法(绝对路径,适配所有部署位置) header("Location: http://localhost/student.php"); exit;若使用自定义域名,需同步修改为http://stusys.test/student.php。exit必不可少,否则后续代码仍会执行。
提示:所有
header()调用前不能有任何输出(包括空格、BOM、echo),否则触发“headers already sent”错误。建议在 PHP 文件开头添加ob_start();开启输出缓冲。
本文还有配套的精品资源,点击获取