php实现留言板功能
创建数据库表结构
留言板功能通常需要一个数据库表来存储留言信息。可以使用以下SQL语句创建一个简单的留言表:
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
);
数据库连接配置
创建一个配置文件config.php来存储数据库连接信息:
<?php
define('DB_HOST', 'localhost');
define('DB_USER', 'username');
define('DB_PASSWORD', 'password');
define('DB_NAME', 'database_name');
?>
留言表单页面
创建一个HTML表单页面index.php用于用户提交留言:
<?php require_once 'config.php'; ?>
<!DOCTYPE html>
<html>
<head>
<title>留言板</title>
</head>
<body>
<h1>留言板</h1>
<form method="post" action="submit.php">
<div>
<label for="name">姓名:</label>
<input type="text" id="name" name="name" required>
</div>
<div>
<label for="email">邮箱:</label>
<input type="email" id="email" name="email">
</div>
<div>
<label for="content">留言内容:</label>
<textarea id="content" name="content" required></textarea>
</div>
<button type="submit">提交留言</button>
</form>
</body>
</html>
处理留言提交
创建submit.php文件处理表单提交并将数据存入数据库:
<?php
require_once 'config.php';
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$name = htmlspecialchars($_POST['name']);
$email = htmlspecialchars($_POST['email']);
$content = htmlspecialchars($_POST['content']);
try {
$conn = new PDO("mysql:host=".DB_HOST.";dbname=".DB_NAME, DB_USER, DB_PASSWORD);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$stmt = $conn->prepare("INSERT INTO messages (name, email, content) VALUES (:name, :email, :content)");
$stmt->bindParam(':name', $name);
$stmt->bindParam(':email', $email);
$stmt->bindParam(':content', $content);
$stmt->execute();
header("Location: view.php");
exit();
} catch(PDOException $e) {
echo "错误: " . $e->getMessage();
}
}
?>
显示留言列表
创建view.php文件显示所有留言:
<?php
require_once 'config.php';
try {
$conn = new PDO("mysql:host=".DB_HOST.";dbname=".DB_NAME, DB_USER, DB_PASSWORD);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$stmt = $conn->query("SELECT * FROM messages ORDER BY created_at DESC");
$messages = $stmt->fetchAll(PDO::FETCH_ASSOC);
} catch(PDOException $e) {
echo "错误: " . $e->getMessage();
}
?>
<!DOCTYPE html>
<html>
<head>
<title>留言列表</title>
</head>
<body>
<h1>留言列表</h1>
<a href="index.php">添加新留言</a>
<?php foreach ($messages as $message): ?>
<div style="margin-bottom: 20px; padding: 10px; border: 1px solid #ccc;">
<h3><?php echo $message['name']; ?></h3>
<p><?php echo nl2br($message['content']); ?></p>
<small><?php echo $message['created_at']; ?></small>
</div>
<?php endforeach; ?>
</body>
</html>
安全增强措施
为增强安全性,可以添加以下措施:
// 在config.php中添加CSRF防护
session_start();
function generate_csrf_token() {
if (empty($_SESSION['csrf_token'])) {
$_SESSION['csrf_token'] = bin2hex(random_bytes(32));
}
return $_SESSION['csrf_token'];
}
// 在表单中添加CSRF令牌
<input type="hidden" name="csrf_token" value="<?php echo generate_csrf_token(); ?>">
// 在submit.php中验证CSRF令牌
if (!isset($_POST['csrf_token']) || $_POST['csrf_token'] !== $_SESSION['csrf_token']) {
die("CSRF令牌验证失败");
}
数据验证和过滤
对用户输入进行更严格的验证:
// 验证姓名
if (!preg_match("/^[a-zA-Z0-9_\x{4e00}-\x{9fa5}]+$/u", $name)) {
die("姓名只能包含中文、英文、数字和下划线");
}
// 验证邮箱
if (!empty($email) && !filter_var($email, FILTER_VALIDATE_EMAIL)) {
die("邮箱格式不正确");
}
// 限制内容长度
if (mb_strlen($content, 'UTF-8') > 1000) {
die("留言内容不能超过1000个字符");
}
这些代码提供了一个完整的PHP留言板实现,包括数据库连接、表单提交、数据显示和基本安全措施。可以根据实际需求进一步扩展功能,如分页显示、管理员回复、留言审核等。







