留言板是一个非常经典的小项目,适合刚接触 PHP 的朋友动手实践。通过这个项目,你可以学习如何用 PHP 和 MySQL 交互,如何处理用户输入,以及如何搭建一个完整的小应用。这篇文章会从需求分析开始,一步步带你完成留言板的开发。放心,文章不会用太多专业术语,咱们讲人话!
在做任何项目之前,第一步肯定是搞清楚要实现什么功能。留言板嘛,说白了就是一个让人可以留下文字的地方。简单来说,我们需要实现以下几点:
需求大概就这些,咱们就围绕这些来做。
留言板的核心就是数据库。留言内容得保存到哪里呢?当然是 MySQL 里啦!我们需要一个叫 messages
的表,存每一条留言的内容、作者,以及留言的时间。
设计表的时候,你可以参考下面的字段:
id
:每条留言的唯一编号(自增,系统自动生成)。 author
:留言的作者名字,类型用 VARCHAR(100)
就够了。 content
:留言的具体内容,用 TEXT
类型存储。 created_at
:留言的时间,用 DATETIME
类型来记录。 表的结构就是这样,看起来很简单。下面是创建这张表的 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
);
建好数据库之后,我们就可以愉快地开发了!
不管干啥,第一步肯定是先连上数据库。我们用 PHP 的 PDO 来操作数据库,既安全又方便。新建一个 db.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
这个对象操作数据库了。
接下来,咱们得弄个页面让用户能留言。新建一个 index.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
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; ?>
用户提交表单之后,内容要保存到数据库里。我们新建一个 add_message.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;
?>
如果留言多了,直接全展示就不太合适了。这时候,我们得把留言分页展示。
在 index.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);
?>
分页的链接也要加上:
<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 删除。