php实现留言功能
实现留言功能的基本步骤
创建一个简单的留言功能需要处理表单提交、数据存储和显示留言。以下是使用PHP和MySQL实现的基本方法。
数据库设置
创建一个名为messages的表,用于存储留言信息:
CREATE TABLE messages (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(50) NOT NULL,
email VARCHAR(100),
content TEXT NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
连接数据库
创建一个db.php文件用于数据库连接:
<?php
$host = 'localhost';
$dbname = 'your_database';
$username = 'your_username';
$password = 'your_password';
try {
$pdo = new PDO("mysql:host=$host;dbname=$dbname", $username, $password);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
die("Database connection failed: " . $e->getMessage());
}
?>
创建留言表单
在HTML文件中添加留言表单:

<form action="submit_message.php" method="post">
<input type="text" name="name" placeholder="Your Name" required>
<input type="email" name="email" placeholder="Your Email">
<textarea name="content" placeholder="Your Message" required></textarea>
<button type="submit">Submit</button>
</form>
处理表单提交
创建submit_message.php处理表单提交:
<?php
require 'db.php';
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$name = htmlspecialchars($_POST['name']);
$email = htmlspecialchars($_POST['email']);
$content = htmlspecialchars($_POST['content']);
$stmt = $pdo->prepare("INSERT INTO messages (name, email, content) VALUES (?, ?, ?)");
$stmt->execute([$name, $email, $content]);
header('Location: index.php');
exit;
}
?>
显示留言列表
创建index.php显示所有留言:

<?php
require 'db.php';
$stmt = $pdo->query("SELECT * FROM messages ORDER BY created_at DESC");
$messages = $stmt->fetchAll(PDO::FETCH_ASSOC);
?>
<!DOCTYPE html>
<html>
<head>
<title>Message Board</title>
</head>
<body>
<h1>Leave a Message</h1>
<!-- 留言表单放在这里 -->
<h2>Messages</h2>
<?php foreach ($messages as $message): ?>
<div>
<h3><?= $message['name'] ?></h3>
<p><?= $message['content'] ?></p>
<small><?= $message['created_at'] ?></small>
</div>
<?php endforeach; ?>
</body>
</html>
安全增强措施
为防止SQL注入和XSS攻击,所有用户输入都应进行适当的处理:
// 使用预处理语句防止SQL注入
$stmt = $pdo->prepare("INSERT INTO messages (name, email, content) VALUES (?, ?, ?)");
// 输出时使用htmlspecialchars防止XSS
echo htmlspecialchars($message['content'], ENT_QUOTES, 'UTF-8');
数据验证
在提交前验证表单数据:
if (empty($_POST['name']) || empty($_POST['content'])) {
die('Name and content are required');
}
if (!filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) {
die('Invalid email format');
}
分页显示留言
对于大量留言,可以添加分页功能:
$perPage = 5;
$page = isset($_GET['page']) ? (int)$_GET['page'] : 1;
$offset = ($page - 1) * $perPage;
$stmt = $pdo->prepare("SELECT * FROM messages ORDER BY created_at DESC LIMIT ? OFFSET ?");
$stmt->bindValue(1, $perPage, PDO::PARAM_INT);
$stmt->bindValue(2, $offset, PDO::PARAM_INT);
$stmt->execute();
文件结构建议
/message_board
/includes
db.php
/templates
header.php
footer.php
index.php
submit_message.php
扩展功能建议
- 添加用户注册/登录系统
- 实现留言回复功能
- 添加富文本编辑器
- 实现留言审核机制
- 添加文件上传功能
- 实现留言搜索功能





