php实现简单留言板
创建数据库表
留言板需要一个数据库表存储留言信息,通常包含字段如id、用户名、留言内容、留言时间等。以下为MySQL创建表的SQL语句:
CREATE TABLE messages (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL,
content TEXT NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
连接数据库
使用PDO连接MySQL数据库,确保在PHP中配置正确的数据库信息:
$host = 'localhost';
$dbname = 'message_board';
$username = 'root';
$password = '';
try {
$pdo = new PDO("mysql:host=$host;dbname=$dbname", $username, $password);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
die("数据库连接失败: " . $e->getMessage());
}
提交留言功能
创建一个HTML表单用于提交留言,后端处理表单数据并存入数据库:
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$username = htmlspecialchars($_POST['username']);
$content = htmlspecialchars($_POST['content']);
$stmt = $pdo->prepare("INSERT INTO messages (username, content) VALUES (?, ?)");
$stmt->execute([$username, $content]);
}
显示留言列表
从数据库中查询留言并按时间倒序显示:
$stmt = $pdo->query("SELECT * FROM messages ORDER BY created_at DESC");
$messages = $stmt->fetchAll(PDO::FETCH_ASSOC);
foreach ($messages as $message) {
echo "<div class='message'>";
echo "<h3>" . htmlspecialchars($message['username']) . "</h3>";
echo "<p>" . nl2br(htmlspecialchars($message['content'])) . "</p>";
echo "<small>" . $message['created_at'] . "</small>";
echo "</div>";
}
前端界面
简单的HTML表单和CSS样式可以提升用户体验:
<form method="post" action="">
<input type="text" name="username" placeholder="您的名字" required>
<textarea name="content" placeholder="留言内容" required></textarea>
<button type="submit">提交留言</button>
</form>
<style>
.message {
border: 1px solid #ddd;
padding: 10px;
margin-bottom: 10px;
}
textarea {
width: 100%;
height: 100px;
}
</style>
安全增强
对输入数据进行过滤和转义,防止XSS攻击。使用预处理语句防止SQL注入。可以添加验证码防止垃圾留言。
// 示例:简单的长度验证
if (strlen($content) > 500) {
die("留言内容过长");
}
分页功能
当留言数量较多时,添加分页功能:
$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();






