所有分类
  • 所有分类
  • 游戏源码
  • 网站源码
  • 单机游戏
  • 游戏素材
  • 搭建教程
  • 精品工具

php留言板后台管理页面代码完整实例|新手入门教程|增删改查功能实现

php留言板后台管理页面代码完整实例|新手入门教程|增删改查功能实现 一

文章目录CloseOpen

从零搭建留言板后台:环境准备与数据库设计

很多人学编程第一步就栽在环境配置上,我刚开始学PHP那会,又是装Apache又是配PHP.ini,弄了两天还是500错误,后来发现用集成环境真香。你要是没接触过服务器配置,直接下载XAMPP(https://www.apachefriends.org/index.html{nofollow})就行,这软件把PHP、MySQL、Apache打包好了,一键安装完就能用,我带过的8个新人里有7个都是靠它入门的。安装时注意别改默认端口,除非你清楚自己在做什么,默认80端口对新手最友好,省得后面记一堆端口号。

环境搞定后,咱们先别急着写代码,数据库设计这步要是偷懒,后面改起来能让你哭。我2021年帮朋友改一个留言板时,就因为他当初没设计”留言状态”字段,用户发的垃圾留言只能删数据库,后来加字段时连带着改了13个PHP文件,折腾到半夜。所以咱们这次一步到位,先把表结构设计清楚:

字段名 数据类型 长度 是否主键 说明
id int 11 留言唯一编号,自增
nickname varchar 50 留言者昵称,非空
content text 留言内容,非空
create_time datetime 留言时间,默认当前时间
status tinyint 1 状态:0未审核/1已显示/2已删除

你可能会问,为什么status字段要用tinyint存数字而不是直接存”未审核”这样的文字?这就是数据库设计的小技巧了——数字比文字占用空间小,查询速度也快,而且方便后续扩展。比如以后想加”置顶”功能,直接加个3就行,不用改字段类型。我之前帮一个小网站改版,他们原来用varchar存状态,10万条数据查询要3秒,改成tinyint后直接降到0.5秒,这就是细节决定效率。

建表的SQL语句也给你准备好了,直接复制到MySQL里执行就行:

CREATE TABLE message_board (

id int(11) NOT NULL AUTO_INCREMENT,

nickname varchar(50) NOT NULL,

content text NOT NULL,

create_time datetime DEFAULT CURRENT_TIMESTAMP,

status tinyint(1) DEFAULT 0 COMMENT '0未审核/1已显示/2已删除',

PRIMARY KEY (id)

) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

记得把数据库编码设为utf8mb4,这样能存emoji表情,用户体验会更好。我见过不少新手用utf8编码,结果用户发个笑脸表情就乱码,排查半天才发现是编码问题,这个细节你可得注意。

核心功能实现:增删改查代码逐行解析

后台管理页面说白了就是”看数据、改数据”,核心就是增删改查四个功能。我把每个功能的代码都拆成了”页面展示”和”逻辑处理”两部分,你跟着抄都能跑起来。先从最常用的”查询展示”开始,这是后台打开第一眼看到的东西。

数据列表展示:从数据库到网页的桥梁

管理页面肯定要有个表格展示所有留言,我 你先写HTML骨架,再填PHP逻辑。这样结构清晰,不容易乱。页面顶部放个导航栏,中间是搜索框和”批量操作”按钮,下面就是数据表格。这里分享个偷懒技巧:用Bootstrap的现成样式,几行代码就能让页面变好看,不用自己写CSS。比如表格加个class="table table-striped",自动就有行底色交替效果,新手完全可以照搬。

PHP部分主要做三件事:连数据库、查数据、循环输出。连接数据库的代码最好单独写个config.php文件,以后改密码或地址时不用满世界找。你看这段代码:

<?php 

$host = 'localhost';

$user = 'root';

$pass = '';

$dbname = 'message_board';

// 创建连接

$conn = new mysqli($host, $user, $pass, $dbname);

// 检查连接

if ($conn->connect_error) {

die("连接失败: " . $conn->connect_error);

}

?>

我刚开始学的时候,总把数据库密码写死在每个文件里,后来服务器密码到期修改,改了整整一下午——血的教训告诉你,复用代码真的很重要。查询数据用SELECT FROM message_board WHERE status != 2 ORDER BY id DESC,这里加status != 2是为了过滤已删除的留言,避免显示垃圾数据;ORDER BY id DESC让最新的留言排在前面,符合用户习惯。

循环输出数据时,记得判断一下有没有数据,不然空表的时候页面会很难看。可以加个if(mysqli_num_rows($result) > 0)判断,如果没数据就显示”暂无留言”。我之前给一个客户做后台,没加这个判断,结果上线第一天因为没数据,表格里全是PHP错误提示,客户还以为我技术不行,真是太尴尬了。表格里最后一列放”编辑”和”删除”按钮,按钮链接带上当前留言的id,比如edit.php?id=,这样点按钮就能定位到具体留言。

新增与编辑:数据录入的正确姿势

新增留言有两种场景:用户前台提交和管理员后台添加。咱们先做后台添加功能,界面就是一个带表单的页面,有昵称、内容两个输入框,加个提交按钮。这里要注意,表单提交方式必须用POST,不能用GET——GET会把内容显示在URL里,要是有人输入长篇大论,URL能拉得老长,而且不安全。

处理表单提交的PHP代码要分三步走:接收数据、验证数据、保存数据。接收数据用$_POST['nickname'],但直接存数据库很危险,必须先过滤。比如用trim()去空格,htmlspecialchars()转义特殊字符,防止XSS攻击。我之前帮朋友看代码,他直接把用户输入存进数据库,结果被人插了一段JS代码,整个页面都被篡改了,后来花了两天才清干净。

验证数据时至少要检查昵称和内容不为空,昵称长度不超过50。可以用empty()判断是否为空,strlen()检查长度。保存数据的SQL语句要用预处理语句,比如:

$stmt = $conn->prepare("INSERT INTO message_board (nickname, content) VALUES (?, ?)");

$stmt->bind_param("ss", $nickname, $content);

这里的”ss”表示两个字符串参数,这样就算用户输入里有单引号也不会导致SQL错误。PHP官方文档里特别强调,预处理语句是防止SQL注入的最佳实践,你一定要养成这个习惯。

编辑功能和新增很像,区别是要先根据id查询原数据显示在表单里。比如从URL里获取id:$id = $_GET['id'];,然后查数据库:SELECT FROM message_board WHERE id = $id。这里有个坑:一定要判断id是否合法,比如用is_numeric()检查是不是数字,不然可能被人传个恶意值搞垮数据库。我刚开始写编辑功能时就没判断,结果测试时输入id=1 OR 1=1,直接把所有数据都查出来了,吓出一身冷汗。提交编辑时用UPDATE语句,记得加WHERE条件指定id,不然会把所有数据都改掉——这是新手最容易犯的错误,我见过好几个同学在演示时不小心把测试数据全改了,场面一度很尴尬。

删除功能:不是真删,而是”假删”

很多新手写删除功能直接用DELETE FROM语句,这其实很危险——万一删错了,数据就找不回来了。专业的做法是”逻辑删除”,就是只改status状态为2,不真正删除数据。这样想恢复的时候改回1就行,安全多了。

删除按钮的链接可以写成delete.php?id=,但直接点链接就删除太冒险,最好加个确认框。用JavaScript的confirm()函数就行:onclick="return confirm('确定要删除这条留言吗?')",这样用户误点也有挽回的机会。

处理删除的PHP文件里,先获取id,验证合法性,然后执行UPDATE语句:UPDATE message_board SET status=2 WHERE id=?。同样要用预处理语句,安全第一。删除成功后跳回列表页,可以用header("Location: index.php");,记得加exit()防止后续代码执行。我之前没加exit,结果跳转后后面的代码还在跑,导致出现莫名其妙的错误,排查了好久才发现这个细节。

最后再给你个小 所有操作成功后最好给个提示,比如”删除成功”、”编辑成功”。可以用SESSION存提示信息,在列表页显示。用户体验会好很多,你想想,你操作完不知道成功没,是不是很焦虑?我刚开始做后台时没加提示,用户总跑来问我”我点了保存,到底保存上没啊?”,后来加上提示框,这种问题就再也没出现过。

如果你按这些步骤一步步做,现在应该已经有个能用的留言板后台了。记得把所有文件放在XAMPP的htdocs目录下,在浏览器输入localhost/你的文件夹名/index.php就能看到效果。要是遇到问题,先检查数据库连接信息对不对,SQL语句有没有写错,这些都是新手常踩的坑。你要是试了这个实例,欢迎回来告诉我效果,或者有哪个步骤卡住了,我给你支招!


你是不是刚写完数据库连接代码,一运行就蹦出“Access denied for user”这个红通通的提示?别慌,这就像你拿钥匙开门,结果钥匙不对或者门没找对,数据库也在跟你说“进不去哦”。最常见的问题就是用户名和密码没对上——XAMPP装完后,MySQL默认的用户名就是root,密码刚开始是空的,如果你没特意改过密码,config.php里$pass那行就直接留空,别自己瞎填个“123456”,我之前带的一个学弟,就是自己偷偷改了密码,结果写代码时还按默认空密码填,折腾了半小时才发现“哦原来钥匙被我自己换了”。

除了用户名密码,数据库名也容易踩坑。文章里咱们建的数据库叫message_board,你要是嫌这个名字太长,改成了“liuyanban”或者其他名字,那config.php里$dbname那行也得跟着改,就像你给朋友写信,地址写错了,信肯定寄不到啊。还有个特基础但特容易忘的点——MySQL服务没启动!你打开XAMPP控制面板看看,Apache和MySQL那两行,是不是都显示“Running”?有时候你光顾着点Apache的Start,忘了MySQL也得启动,它要是显示“Stopped”,赶紧点Start,等它变绿了再试。对了,启动后别急着马上刷新页面,等个三五秒让服务完全跑起来,我之前太心急,刚点Start就刷新,结果还是连不上,还以为自己改错了哪里,白紧张半天。


用XAMPP启动后,访问localhost显示无法连接怎么办?

这种情况大概率是端口被占用了。你可以打开XAMPP控制面板,点击Apache的“Config”按钮,选择“Apache (httpd.conf)”,搜索“Listen 80”,把80改成8080或其他没被占用的端口(比如8081),保存后重启Apache。 检查是否有其他服务器软件(如IIS、Nginx)在运行,这些也可能占用80端口,关闭它们再试。我之前帮同学解决过类似问题,改完端口后记得用“localhost:8080”访问,端口号要加上。

数据库连接时提示“Access denied for user”,是什么原因?

这通常是数据库用户名或密码错误导致的。你先打开config.php文件,检查$user和$pass参数是否和XAMPP的MySQL一致——XAMPP默认用户是root,密码为空(如果没改过的话)。 确认数据库名是否正确,文章里建的数据库叫message_board,如果你改成了其他名字,这里也要对应修改。还有一种可能是MySQL服务没启动,去XAMPP控制面板看看MySQL的状态是不是“Running”,没启动就点“Start”。

表单提交后数据没显示在列表页,可能哪里出问题了?

先检查两个地方:一是表单提交的PHP文件里,数据是否真的保存到了数据库。你可以打开phpMyAdmin(XAMPP里有链接),找到message_board表,看看有没有新增的记录。如果数据库里有数据但列表页不显示,那就是查询SQL的问题——文章里列表查询加了“status != 2”的条件,新增留言默认status是0(未审核),如果你在列表页SQL里误写成“status=1”,就会看不到未审核的留言。 提交后记得用header()跳回列表页,不然页面停留在处理页,看起来像没反应。

点击删除按钮后没反应,后台也没提示,怎么排查?

首先检查删除链接里有没有id参数,比如链接应该是“delete.php?id=1”,如果id没传过去,PHP就不知道删哪条数据。然后看删除按钮的onclick事件,文章里加了“return confirm(‘确定要删除吗?’)”,如果漏了“return”,点击“取消”也会执行删除。 打开delete.php文件,在开头加上“var_dump($_GET[‘id’]);exit;”,刷新页面看看能不能输出id值,如果显示NULL,就是id没传对;如果有id但没删除,检查SQL语句是不是用了“UPDATE … SET status=2 WHERE id=?”,有没有用预处理绑定参数,这些步骤漏了都会导致删除失败。

怎么防止用户在留言里写恶意代码或广告?

主要靠两方面:一是输入过滤,在接收表单数据时,用htmlspecialchars($_POST[‘content’], ENT_QUOTES)转义特殊字符,把这类符号变成HTML实体,就算用户输入也不会执行。二是长度限制,昵称字段在数据库设了50字符,PHP里可以用strlen(trim($nickname))检查,超过就提示“昵称太长”。 文章里提到的预处理语句(prepare()和bind_param())也很重要,能防止SQL注入。我之前给一个小论坛做后台时,就因为加了这些处理,半年没出现过恶意内容问题,比纯靠人工删高效多了。

原文链接:https://www.mayiym.com/41465.html,转载请注明出处。
0
显示验证码
没有账号?注册  忘记密码?

社交账号快速登录

微信扫一扫关注
如已关注,请回复“登录”二字获取验证码