答案:基于MySQL的PHP留言板通过PDO实现数据提交与查询,包含表单处理、XSS防护和UTF-8编码支持。

要实现一个简单的 PHP 数据留言板,只需使用 PHP 处理表单提交、将留言保存到文件或数据库,并读取显示出来。下面是一个基于 MySQL 数据库的完整功能实现方案,包含留言提交、显示和基本安全处理。
1. 创建数据库和数据表
使用 MySQL 创建一个名为 guestbook 的数据库,并创建一张留言表 messages:CREATE DATABASE guestbook CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; USE guestbook;CREATE TABLE messages ( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(100) NOT NULL, message TEXT NOT NULL, created_at DATETIME DEFAULT CURRENT_TIMESTAMP );
2. 数据库连接配置(config.php)
创建配置文件用于连接数据库:
try {
$pdo = new PDO("mysql:host=$host;dbname=$db;charset=utf8mb4", $user, $pass);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
die("数据库连接失败: " . $e->getMessage());
}
3. 留言提交表单(index.php)
这个页面显示留言列表和提交表单:
简单留言板
留言板
zuojiankuohaophpcn!-- 提交表单 -->
zuojiankuohaophpcnform method="POST" action="">
zuojiankuohaophpcnlabel>昵称:zuojiankuohaophpcn/label>zuojiankuohaophpcnbr>
zuojiankuohaophpcninput type="text" name="name" required style="width:100%;padding:8px;margin:5px 0;">zuojiankuohaophpcnbr>
zuojiankuohaophpcnlabel>留言内容:zuojiankuohaophpcn/label>zuojiankuohaophpcnbr>
zuojiankuohaophpcntextarea name="message" required style="width:100%;height:80px;padding:8px;margin:5px 0;">zuojiankuohaophpcn/textarea>zuojiankuohaophpcnbr>
zuojiankuohaophpcnbutton type="submit">提交留言zuojiankuohaophpcn/button>
zuojiankuohaophpcn/form>
zuojiankuohaophpcnhr>
zuojiankuohaophpcn!-- 显示留言 -->
zuojiankuohaophpcnh3>所有留言:zuojiankuohaophpcn/h3>
zuojiankuohaophpcn?php
require 'config.php';
// 处理表单提交
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$name = trim($_POST['name']);
$message = trim($_POST['message']);
if (!empty($name) && !empty($message)) {
// 防止 XSS
$name = htmlspecialchars($name, ENT_QUOTES, 'UTF-8');
$message = htmlspecialchars($message, ENT_QUOTES, 'UTF-8');
$stmt = $pdo->prepare("INSERT INTO messages (name, message) VALUES (?, ?)");
$stmt->execute([$name, $message]);
}
}
// 查询所有留言
$stmt = $pdo->query("SELECT * FROM messages ORDER BY created_at DESC");
while ($row = $stmt->fetch()) {
echo "zuojiankuohaophpcndiv class='message'>";
echo "zuojiankuohaophpcnstrong>" . htmlspecialchars($row['name']) . "zuojiankuohaophpcn/strong> zuojiankuohaophpcnsmall>(" . $row['created_at'] . ")zuojiankuohaophpcn/small>zuojiankuohaophpcnbr>";
echo nl2br(htmlspecialchars($row['message']));
echo "zuojiankuohaophpcn/div>";
}
?>











