php论坛功能实现
数据库设计
创建用户表存储用户信息,如用户名、密码、邮箱等。帖子表包含标题、内容、作者ID、发布时间等字段。回复表关联帖子ID和用户ID,记录回复内容和时间。
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL UNIQUE,
password VARCHAR(255) NOT NULL,
email VARCHAR(100) NOT NULL UNIQUE,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE posts (
id INT AUTO_INCREMENT PRIMARY KEY,
title VARCHAR(255) NOT NULL,
content TEXT NOT NULL,
user_id INT NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (user_id) REFERENCES users(id)
);
CREATE TABLE replies (
id INT AUTO_INCREMENT PRIMARY KEY,
content TEXT NOT NULL,
user_id INT NOT NULL,
post_id INT NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (user_id) REFERENCES users(id),
FOREIGN KEY (post_id) REFERENCES posts(id)
);
用户认证系统
实现注册和登录功能,使用PHP的password_hash()进行密码加密。session管理用户登录状态。

// 注册处理
$hashed_password = password_hash($_POST['password'], PASSWORD_DEFAULT);
$stmt = $pdo->prepare("INSERT INTO users (username, password, email) VALUES (?, ?, ?)");
$stmt->execute([$_POST['username'], $hashed_password, $_POST['email']]);
// 登录验证
$stmt = $pdo->prepare("SELECT * FROM users WHERE username = ?");
$stmt->execute([$_POST['username']]);
$user = $stmt->fetch();
if ($user && password_verify($_POST['password'], $user['password'])) {
$_SESSION['user_id'] = $user['id'];
}
帖子管理功能
创建帖子发布表单和处理逻辑,实现帖子列表展示。使用分页查询优化性能。
// 发布帖子
$stmt = $pdo->prepare("INSERT INTO posts (title, content, user_id) VALUES (?, ?, ?)");
$stmt->execute([$_POST['title'], $_POST['content'], $_SESSION['user_id']]);
// 分页查询
$per_page = 10;
$page = isset($_GET['page']) ? (int)$_GET['page'] : 1;
$offset = ($page - 1) * $per_page;
$stmt = $pdo->prepare("SELECT * FROM posts ORDER BY created_at DESC LIMIT ? OFFSET ?");
$stmt->bindValue(1, $per_page, PDO::PARAM_INT);
$stmt->bindValue(2, $offset, PDO::PARAM_INT);
$stmt->execute();
$posts = $stmt->fetchAll();
回复系统
实现回复表单和显示功能,关联帖子和用户信息。在帖子详情页展示所有回复。

// 添加回复
$stmt = $pdo->prepare("INSERT INTO replies (content, user_id, post_id) VALUES (?, ?, ?)");
$stmt->execute([$_POST['content'], $_SESSION['user_id'], $_POST['post_id']]);
// 获取帖子回复
$stmt = $pdo->prepare("SELECT r.*, u.username FROM replies r JOIN users u ON r.user_id = u.id WHERE post_id = ? ORDER BY created_at");
$stmt->execute([$_GET['id']]);
$replies = $stmt->fetchAll();
安全防护
对用户输入进行过滤和转义,防止XSS攻击。使用预处理语句防止SQL注入。实现CSRF防护。
// XSS防护
function clean_input($data) {
return htmlspecialchars($data, ENT_QUOTES, 'UTF-8');
}
// CSRF防护
if (!isset($_POST['csrf_token']) || $_POST['csrf_token'] !== $_SESSION['csrf_token']) {
die('CSRF验证失败');
}
性能优化
为常用查询字段添加索引,如用户表的username和email字段。实现缓存机制减少数据库查询。
ALTER TABLE users ADD INDEX idx_username (username);
ALTER TABLE users ADD INDEX idx_email (email);
ALTER TABLE posts ADD INDEX idx_user_id (user_id);
ALTER TABLE replies ADD INDEX idx_post_id (post_id);






