前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >用 PHP 实现一个简单的留言板功能

用 PHP 实现一个简单的留言板功能

原创
作者头像
繁依Fanyi
发布2025-01-28 22:29:18
发布2025-01-28 22:29:18
1210
举报

留言板是一个非常经典的小项目,适合刚接触 PHP 的朋友动手实践。通过这个项目,你可以学习如何用 PHP 和 MySQL 交互,如何处理用户输入,以及如何搭建一个完整的小应用。这篇文章会从需求分析开始,一步步带你完成留言板的开发。放心,文章不会用太多专业术语,咱们讲人话!


开始之前,先聊聊需求

在做任何项目之前,第一步肯定是搞清楚要实现什么功能。留言板嘛,说白了就是一个让人可以留下文字的地方。简单来说,我们需要实现以下几点:

  1. 有人能留言:用户可以在页面上输入自己的昵称和留言内容,然后提交。
  2. 别人能看到留言:提交的留言要显示在页面上,并且按最新的留言排在最前面。
  3. 多了怎么办?分页啊!:如果留言很多,不能全都堆在一个页面,那样一刷下来要累死。咱们要做分页功能。
  4. 内容不能乱来:比如有些人乱写不文明的话怎么办?得验证一下用户输入,防止搞出乱子。
  5. 防止小问题:比如用户一不小心刷新页面导致重复提交留言,这种情况也要处理。

需求大概就这些,咱们就围绕这些来做。


数据库是核心,先设计表

留言板的核心就是数据库。留言内容得保存到哪里呢?当然是 MySQL 里啦!我们需要一个叫 messages 的表,存每一条留言的内容、作者,以及留言的时间。

设计表的时候,你可以参考下面的字段:

  • id:每条留言的唯一编号(自增,系统自动生成)。
  • author:留言的作者名字,类型用 VARCHAR(100) 就够了。
  • content:留言的具体内容,用 TEXT 类型存储。
  • created_at:留言的时间,用 DATETIME 类型来记录。

表的结构就是这样,看起来很简单。下面是创建这张表的 SQL 代码:

代码语言:sql
复制
CREATE TABLE messages (
    id INT(11) AUTO_INCREMENT PRIMARY KEY,
    author VARCHAR(100) NOT NULL,
    content TEXT NOT NULL,
    created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP
);

建好数据库之后,我们就可以愉快地开发了!


动手写代码,分模块一步步来

1. 数据库连接

不管干啥,第一步肯定是先连上数据库。我们用 PHP 的 PDO 来操作数据库,既安全又方便。新建一个 db.php 文件,放数据库的连接代码。

代码语言:php
复制
<?php
$host = 'localhost';
$dbname = 'message_board';
$username = 'root';
$password = '';

try {
    $pdo = new PDO("mysql:host=$host;dbname=$dbname;charset=utf8mb4", $username, $password);
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
    die("数据库连接失败: " . $e->getMessage());
}
?>

有了这个文件之后,只要引入它,我们就可以用 $pdo 这个对象操作数据库了。


2. 前端页面:表单和留言展示

接下来,咱们得弄个页面让用户能留言。新建一个 index.php 文件,写上留言表单和展示留言的部分。

留言表单

表单部分很简单,就两个输入框(一个输入昵称,一个输入内容),再加一个提交按钮:

代码语言:php
复制
<form action="add_message.php" method="post">
    <label for="author">昵称:</label>
    <input type="text" id="author" name="author" required>
    <br>
    <label for="content">留言内容:</label>
    <textarea id="content" name="content" rows="5" required></textarea>
    <br>
    <button type="submit">提交留言</button>
</form>
展示留言

留言表单下面,我们把数据库里的留言拉出来显示出来:

代码语言:php
复制
<?php
require 'db.php';

// 查询数据库里的留言
$sql = "SELECT * FROM messages ORDER BY created_at DESC";
$stmt = $pdo->query($sql);
$messages = $stmt->fetchAll();

foreach ($messages as $message): ?>
    <div class="message">
        <p><strong><?php echo $message['author']; ?></strong> 于 <?php echo $message['created_at']; ?> 留言:</p>
        <p><?php echo nl2br($message['content']); ?></p>
    </div>
    <hr>
<?php endforeach; ?>

3. 后端处理:保存留言

用户提交表单之后,内容要保存到数据库里。我们新建一个 add_message.php 文件,专门用来处理提交的留言。

代码语言:php
复制
<?php
require 'db.php';

// 获取表单数据
$author = trim($_POST['author']);
$content = trim($_POST['content']);

// 简单的输入验证
if (empty($author) || empty($content)) {
    die("昵称和内容都不能为空!");
}

// 防止 XSS 攻击
$author = htmlspecialchars($author, ENT_QUOTES, 'UTF-8');
$content = htmlspecialchars($content, ENT_QUOTES, 'UTF-8');

// 把数据存到数据库
$sql = "INSERT INTO messages (author, content) VALUES (:author, :content)";
$stmt = $pdo->prepare($sql);
$stmt->execute([
    ':author' => $author,
    ':content' => $content
]);

// 跳回首页
header("Location: index.php");
exit;
?>

4. 分页功能

如果留言多了,直接全展示就不太合适了。这时候,我们得把留言分页展示。

index.php 里改一下代码,加入分页逻辑:

代码语言:php
复制
<?php
// 分页参数
$page = isset($_GET['page']) ? max(1, (int)$_GET['page']) : 1;
$pageSize = 5; // 每页显示 5 条
$offset = ($page - 1) * $pageSize;

// 查询当前页的留言
$sql = "SELECT * FROM messages ORDER BY created_at DESC LIMIT :offset, :pageSize";
$stmt = $pdo->prepare($sql);
$stmt->bindValue(':offset', $offset, PDO::PARAM_INT);
$stmt->bindValue(':pageSize', $pageSize, PDO::PARAM_INT);
$stmt->execute();
$messages = $stmt->fetchAll();

// 计算总页数
$totalMessages = $pdo->query("SELECT COUNT(*) FROM messages")->fetchColumn();
$totalPages = ceil($totalMessages / $pageSize);
?>

分页的链接也要加上:

代码语言:php
复制
<div class="pagination">
    <?php if ($page > 1): ?>
        <a href="?page=<?php echo $page - 1; ?>">上一页</a>
    <?php endif; ?>

    <?php if ($page < $totalPages): ?>
        <a href="?page=<?php echo $page + 1; ?>">下一页</a>
    <?php endif; ?>
</div>

最后总结

到这里,一个简单的留言板就完成了!这个项目虽然小,但它涵盖了很多 Web 开发的基础知识,比如表单提交、数据库操作、分页功能、输入验证等。如果你想继续优化,可以试试加上管理员后台、删除功能,或者美化一下页面的样式。

希望这篇文章能帮你学会留言板的开发!如果有问题,欢迎留言交流~

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 开始之前,先聊聊需求
  • 数据库是核心,先设计表
  • 动手写代码,分模块一步步来
    • 1. 数据库连接
    • 2. 前端页面:表单和留言展示
      • 留言表单
      • 展示留言
    • 3. 后端处理:保存留言
    • 4. 分页功能
  • 最后总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档