PHP原生留言本:从零部署到安全加固的完整实践
2026/9/16 22:27:56 网站建设 项目流程

简介:这是一份面向计算机专业本科生的PHP毕业设计实战资源,聚焦文本留言本系统开发,适用于课程设计、期末大作业及毕设选题,尤其适合PHP初学者快速上手Web后端开发与MySQL数据库应用。压缩包共115个文件,含10个核心PHP业务逻辑文件、19个HTML前端页面、83个GIF格式界面素材(用于表单交互与状态提示)、1个CSS样式文件及配套JS脚本,整体仅150KB,轻量易部署。已有160人学习下载,资源经实测可稳定运行,提供完整项目源码、建库SQL脚本及基础环境配置说明,所有代码均带中文注释,目录结构清晰(含admin管理模块、guestbook留言核心模块及image资源目录),兼顾功能完整性与教学友好性,是入门级PHP+MySQL全栈开发的典型范例。

1. 一个跑在 PHP+MySQL 上的轻量级留言本,为什么至今仍是毕业设计高频选题?

你可能觉得留言本太老套——但现实是,每年仍有大量计算机相关专业学生用它完成毕设答辩。不是因为技术多先进,而是它恰好卡在「教学闭环」的黄金点上:前端表单提交、后端逻辑处理、数据库增删改查、XSS 过滤与 SQL 注入防护、分页展示、管理员审核流程,全链路功能完整,代码量可控(通常 200–500 行核心 PHP),部署门槛极低(仅需 Apache/Nginx + PHP 7.2+ + MySQL 5.7)。这套guestbook.rar源码包,正是经过真实环境验证的典型实现:不依赖框架、纯原生 PHP 编写,所有 HTML/CSS/JS 内聚在单目录下,css.css控制样式,13 张 GIF 图标(01.gif13.gif)用于按钮、状态提示和装饰元素,结构清晰到能一眼看出 MVC 的雏形。它适合两类人:一是刚学完 PHP 基础语法、需要一个“能跑通”的完整项目练手;二是课程设计时间紧张、需快速交付可演示系统的同学。注意,这不是 Laravel 或 ThinkPHP 项目,没有 Composer 自动加载,没有路由配置——它的价值恰恰在于“裸写”,让你看清$_POST如何进数据库、mysql_query()怎么被废弃、mysqli_real_escape_string()为何必须加、以及为什么05.gif要放在根目录而非/images/下。

2. 从解压到运行:本地环境搭建与数据库初始化实操

2.1 环境版本选择与 PHP 配置关键项

该留言本源码基于 PHP 原生函数编写,兼容性集中在 PHP 7.2–8.1 区间。强烈建议使用 PHP 7.4,原因有三:一是mysql_*函数在 PHP 7.0+ 已彻底移除,而本项目实际使用的是mysqli_*(查看conn.phpconfig.php可确认),PHP 7.4 对mysqli的错误提示更友好;二是 PHP 8.0+ 默认启用严格类型检查,部分未声明返回类型的函数(如自定义分页函数)会触发Fatal error;三是宝塔面板、XAMPP、WampServer 等主流集成环境对 PHP 7.4 的扩展支持最稳定。安装后需检查php.ini中以下三项:

; 必须开启,否则 mysqli_connect() 会失败 extension=mysqli ; 留言内容含中文时,此项决定字符集是否乱码 default_charset = "UTF-8" ; 开发阶段务必打开,便于定位 SQL 错误 display_errors = On error_reporting = E_ALL

提示:若启动后页面空白,第一反应不是代码错,而是mysqli扩展未启用。Windows 下检查php.ini;extension=php_mysqli.dll是否已取消注释;Linux 下执行php -m | grep mysqli确认模块加载。

2.2 数据库创建与脚本导入全流程

项目未提供.sql文件,但根据目录结构和常见实践,数据库初始化需手动建库建表。登录 MySQL(推荐使用 Navicat 或 phpMyAdmin,避免命令行输错):

-- 1. 创建数据库,显式指定字符集,避免中文乱码 CREATE DATABASE guestbook CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- 2. 切换到该库 USE guestbook; -- 3. 创建留言表,字段名与源码中 INSERT 语句严格对应 CREATE TABLE messages ( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(50) NOT NULL, email VARCHAR(100), content TEXT NOT NULL, ip VARCHAR(45), -- 支持 IPv6 created_at DATETIME DEFAULT CURRENT_TIMESTAMP, status TINYINT DEFAULT 1 -- 1:待审核, 0:已屏蔽 ); -- 4. 插入一条测试数据,验证后续读取逻辑 INSERT INTO messages (name, email, content, ip) VALUES ('测试用户', 'test@example.com', '这是第一条测试留言', '127.0.0.1');

注意:utf8mb4是 MySQL 5.7+ 推荐字符集,支持 Emoji 和四字节 UTF-8 字符;VARCHAR(45)是 IPv6 地址最大长度(如2001:0db8:85a3:0000:0000:8a2e:0370:7334共 39 位+冒号,留余量);status字段为后台审核功能预留,源码中admin.php会用到。

2.3 源码目录结构解析与关键文件作用

解压PHP文本留言本_guestbook.rar后,得到平铺文件列表。这不是随意堆放,而是经典 LAMP 应用的扁平化组织:

文件名类型核心作用关联技术点
index.php主入口显示留言列表+提交表单mysqli_query()+while($row = mysqli_fetch_assoc())循环渲染
post.php表单处理器接收 POST、过滤输入、插入数据库htmlspecialchars()防 XSS、mysqli_real_escape_string()防注入
admin.php后台入口查看所有留言、修改status字段UPDATE messages SET status=0 WHERE id=?
conn.php数据库连接封装mysqli_connect(),返回连接资源mysqli_select_db()选择数据库
css.css样式表定义.guestbook,.form-group等类background-image: url(05.gif)调用图标
01.gif13.gif静态资源按钮图标(如affiche.gif为“公告”图标)、分割线、状态指示<img src="08.gif" alt="提交">直接嵌入 HTML

特别注意post.php中的过滤逻辑:它不会用filter_var($email, FILTER_VALIDATE_EMAIL)验证邮箱,而是简单正则/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/—— 这是教学项目典型做法:够用、易懂、不引入复杂依赖。但生产环境必须升级为filter_var()+FILTER_SANITIZE_EMAIL组合。

3. 安全加固与功能补全:从“能跑”到“可用”的四步改造

3.1 防止 SQL 注入:从mysql_real_escape_string()到预处理语句

原始代码大概率使用mysqli_real_escape_string($conn, $_POST['content'])拼接 SQL。这虽比直接拼接安全,但仍有绕过风险(如宽字节注入)。必须升级为预处理语句(Prepared Statements),这是 PHP 7.0+ 官方强推方案:

// 替换 post.php 中原有插入逻辑(约第 20–30 行) $stmt = $conn->prepare("INSERT INTO messages (name, email, content, ip) VALUES (?, ?, ?, ?)"); $stmt->bind_param("ssss", $name, $email, $content, $ip); $name = htmlspecialchars(trim($_POST['name']), ENT_QUOTES, 'UTF-8'); $email = filter_var(trim($_POST['email']), FILTER_SANITIZE_EMAIL); $content = htmlspecialchars(trim($_POST['content']), ENT_QUOTES, 'UTF-8'); $ip = $_SERVER['REMOTE_ADDR']; $stmt->execute();

逻辑说明:bind_param("ssss", ...)"ssss"表示四个字符串参数,$name等变量在execute()前赋值,SQL 语句与数据完全分离。htmlspecialchars()第二个参数ENT_QUOTES确保单双引号都被转义,防止 JS 注入;filter_var()对邮箱做净化而非仅验证,更安全。

3.2 防止 XSS 攻击:输出时的双重过滤策略

留言内容在index.php中直接echo $row['content']渲染,这是 XSS 高危点。不能只靠输入过滤,输出时必须再次转义

<!-- 在 index.php 的循环体中,替换原有 echo --> <td><?php echo htmlspecialchars($row['content'], ENT_QUOTES, 'UTF-8'); ?></td> <!-- 若需支持简单 HTML(如 <br>),改用 htmlpurifier 库或白名单过滤 --> <!-- 但毕业设计场景,纯文本更稳妥 -->

同时,admin.php中显示留言内容也需同样处理,否则后台管理员查看时会被攻击。

3.3 添加验证码机制:用 GD 库生成基础图形验证码

项目无验证码,易被机器刷屏。添加captcha.php(需 GD 库支持):

<?php session_start(); $code = substr(str_shuffle('0123456789abcdefghijklmnopqrstuvwxyz'), 0, 4); $_SESSION['captcha'] = $code; // 创建图像 $im = imagecreatetruecolor(80, 30); $bg = imagecolorallocate($im, 255, 255, 255); imagefill($im, 0, 0, $bg); // 添加干扰点 for ($i = 0; $i < 50; $i++) { $px = rand(0, 80); $py = rand(0, 30); imagesetpixel($im, $px, $py, imagecolorallocate($im, rand(100, 200), rand(100, 200), rand(100, 200))); } // 写入验证码 $font = 'arial.ttf'; // 确保服务器有此字体文件 imagettftext($im, 14, rand(-10, 10), 15, 22, imagecolorallocate($im, 0, 0, 0), $font, $code); header('Content-Type: image/png'); imagepng($im); imagedestroy($im); ?>

index.php表单中加入:

<img src="captcha.php" onclick="this.src='captcha.php?'+Math.random()" alt="验证码" /> <input type="text" name="captcha" placeholder="输入验证码" required />

post.php验证逻辑追加:

if ($_POST['captcha'] !== $_SESSION['captcha']) { die('验证码错误'); }

3.4 实现分页功能:计算总条数与 LIMIT 偏移量

原始代码可能一次性查出所有留言,数据量大时页面卡顿。添加分页(每页 10 条):

// 在 index.php 开头添加 $page = isset($_GET['page']) ? (int)$_GET['page'] : 1; $limit = 10; $offset = ($page - 1) * $limit; // 修改查询语句 $sql = "SELECT * FROM messages WHERE status=1 ORDER BY created_at DESC LIMIT {$limit} OFFSET {$offset}"; $result = mysqli_query($conn, $sql); // 获取总记录数(用于计算页码) $total_sql = "SELECT COUNT(*) as total FROM messages WHERE status=1"; $total_res = mysqli_query($conn, $total_sql); $total_row = mysqli_fetch_assoc($total_res); $total = $total_row['total']; $pages = ceil($total / $limit); // 在留言列表下方输出分页链接 for ($i = 1; $i <= $pages; $i++) { echo "<a href='?page={$i}'>{$i}</a> "; }

参数说明:OFFSET是 MySQL 分页核心,$offset由当前页码动态计算;ceil($total / $limit)向上取整得总页数;链接?page=2触发新查询。此方案无需 AJAX,符合毕业设计“功能完整”要求。

4. 部署到宝塔面板:Nginx 配置与 PHP-FPM 优化技巧

4.1 宝塔面板创建站点与目录权限设置

在宝塔面板中新建站点时,不要勾选“PHP 版本”自动匹配,手动选择 PHP 7.4。网站根目录指向解压后的文件夹(如/www/wwwroot/guestbook)。上传全部文件后,执行关键权限命令:

# 进入站点目录 cd /www/wwwroot/guestbook # 设置文件权限:PHP 文件可读可执行,CSS/图片只读 find . -type f -name "*.php" -exec chmod 644 {} \; find . -type f \( -name "*.css" -o -name "*.gif" \) -exec chmod 644 {} \; # 设置目录权限:确保 session 可写(PHP 默认 session.save_path=/tmp) chmod 755 . # 重点:若出现 "Permission denied in /www/wwwroot/guestbook/conn.php on line X" # 检查 /tmp 目录权限,或在 php.ini 中修改 session.save_path="/www/wwwroot/guestbook/sessions" mkdir -p sessions chmod 777 sessions

提示:宝塔面板的“文件管理”界面右键可批量修改权限,但命令行更精准。chmod 777 sessions是开发环境临时方案,上线前应改为755并用chown www:www sessions指定用户组。

4.2 Nginx 配置防跨站与路径重写

默认 Nginx 配置允许直接访问.php文件,但需阻止访问敏感文件(如conn.php)。在宝塔站点设置 → “配置文件”中,在server块内添加:

# 禁止访问数据库配置文件 location ~* ^/(conn|config)\.php$ { deny all; } # 禁止访问 .htaccess、.env 等配置文件 location ~ /\. { deny all; } # 确保 PHP 解析正确(宝塔通常已配置,此处为确认) location ~ \.php$ { try_files $uri =404; fastcgi_pass unix:/tmp/php-cgi-74.sock; # 注意 PHP 版本后缀 fastcgi_index index.php; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; }

4.3 PHP-FPM 进程管理与内存限制调优

留言本虽轻量,但高并发下仍需合理分配资源。在宝塔 → PHP 7.4 设置 → “配置修改”中调整:

; 将 pm.max_children 从默认 30 降至 15,避免小内存 VPS 崩溃 pm.max_children = 15 ; 设置每个子进程处理 500 个请求后重启,防止内存泄漏 pm.max_requests = 500 ; 单个脚本最大执行时间,留言本无需长耗时,设为 30 秒足够 max_execution_time = 30 ; POST 数据大小限制,留言内容一般 < 1MB,保持默认 8M 即可 post_max_size = 8M

修改后重启 PHP-FPM:宝塔界面点击“重启”按钮,或执行systemctl restart php-fpm-74

4.4 验证部署成功:三步终端检测法

不依赖浏览器,用 Linux 终端快速验证服务健康度:

# 1. 检查 Web 服务是否监听 80 端口 netstat -tuln | grep ':80' # 2. 检查 PHP 解析是否生效(返回 200 且含 "PHP Version") curl -I http://localhost/index.php 2>/dev/null | head -1 # 3. 检查数据库连接(替换 your_db_name 和 password) mysql -u root -p'your_password' -e "USE guestbook; SELECT COUNT(*) FROM messages;" 2>/dev/null

若三步均返回预期结果(如HTTP/1.1 200 OKcount(*)数值),说明环境已就绪,可进行最终功能测试。

5. 毕业答辩高频问题预判与代码注释增强技巧

5.1 针对“为什么不用框架”的答辩话术设计

当被问及“为何不使用 Laravel/ThinkPHP”时,避免回答“不会用”或“太麻烦”。采用技术决策话术:

“本项目定位是验证 PHP 原生 Web 开发全流程能力。框架封装了数据库连接、路由分发、模板渲染等细节,反而掩盖了底层交互逻辑。比如mysqli_real_escape_string()的作用、$_SESSION的存储机制、HTML 表单与 PHP$_POST的映射关系——这些正是课程设计要考察的核心知识点。用原生实现,能清晰展示从用户输入到数据落库的每一层转换,便于答辩时逐行讲解。”

同时,在conn.php头部添加注释强化此观点:

<?php /** * 数据库连接文件(原生 mysqli 实现) * 【答辩重点】此处体现:1. 连接参数明文化(host/user/pass/db); * 2. 错误处理采用 mysqli_connect_error() 而非 @ 符号抑制; * 3. 连接资源复用,避免多次 new mysqli() */ $host = 'localhost'; $user = 'root'; $pass = 'your_password'; $db = 'guestbook'; $conn = mysqli_connect($host, $user, $pass, $db); if (!$conn) { die('数据库连接失败:' . mysqli_connect_error()); } mysqli_set_charset($conn, 'utf8mb4'); ?>

5.2 在关键函数旁添加“教学注释块”

毕业设计文档常要求“代码注释率 ≥ 30%”。对post.php中的插入逻辑,用区块注释替代单行注释:

// ====== 【教学注释:SQL 注入防护原理】 ====== // 1. htmlspecialchars():将 < > " ' & 转为 HTML 实体,防止 JS 代码执行 // 2. filter_var():对邮箱进行标准化处理,移除非法字符 // 3. 预处理语句:SQL 模板与数据分离,数据库引擎自动识别参数边界 // 4. bind_param():明确指定参数类型(s=string),杜绝类型混淆漏洞 // ============================================= $stmt = $conn->prepare("INSERT INTO messages (name, email, content, ip) VALUES (?, ?, ?, ?)"); $stmt->bind_param("ssss", $name, $email, $content, $ip);

5.3 生成答辩演示用的“最小可行数据集”

避免答辩时现场录入数据耗时。准备demo_data.sql脚本,包含 5 条风格各异的留言:

INSERT INTO messages (name, email, content, ip, status) VALUES ('张三', 'zhang@school.edu', '老师好!这个留言本作业我完成了,谢谢指导!', '192.168.1.100', 1), ('李四', 'li@company.com', '请问 admin.php 的登录密码是多少?', '2001:db8::1', 1), ('王五', 'wu@test.org', '<script>alert("XSS")</script> 这段代码会被过滤吗?', '10.0.0.5', 1), ('赵六', 'zhao@demo.cn', '测试长留言:AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA......', '172.16.0.20', 1), ('答辩助教', 'assistant@exam.edu', '【系统测试】请检查分页功能、验证码刷新、后台审核是否生效。', '127.0.0.1', 1);

导入后,index.php显示 5 条留言,admin.php可见全部且能切换status,覆盖所有答辩演示点。

注意:长留言测试了TEXT字段存储上限(MySQL TEXT 最大 65535 字节),也验证了htmlspecialchars()对超长字符串的处理性能——这是答辩时可主动提及的“压力测试”细节。

本文还有配套的精品资源,点击获取

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询