php实现html发帖
使用PHP实现HTML发帖功能
创建一个简单的发帖系统需要处理HTML表单提交、数据验证、数据库存储等步骤。以下是一个基础实现示例:
数据库准备
创建一个名为posts的表,包含id, title, content, created_at等字段。MySQL创建语句示例:
CREATE TABLE posts (
id INT AUTO_INCREMENT PRIMARY KEY,
title VARCHAR(255) NOT NULL,
content TEXT NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
HTML表单(post_form.html)
<!DOCTYPE html>
<html>
<head>
<title>发帖</title>
</head>
<body>
<form action="submit_post.php" method="post">
<label for="title">标题:</label>
<input type="text" id="title" name="title" required>
<label for="content">内容:</label>
<textarea id="content" name="content" required></textarea>
<button type="submit">提交</button>
</form>
</body>
</html>
PHP处理脚本(submit_post.php)
<?php
// 数据库连接配置
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "database_name";
// 创建连接
$conn = new mysqli($servername, $username, $password, $dbname);
// 检查连接
if ($conn->connect_error) {
die("连接失败: " . $conn->connect_error);
}
// 获取表单数据并验证
$title = htmlspecialchars($_POST['title'] ?? '');
$content = htmlspecialchars($_POST['content'] ?? '');
if (empty($title) || empty($content)) {
die("标题和内容不能为空");
}
// 准备SQL并绑定参数
$stmt = $conn->prepare("INSERT INTO posts (title, content) VALUES (?, ?)");
$stmt->bind_param("ss", $title, $content);
// 执行SQL
if ($stmt->execute()) {
echo "发帖成功";
} else {
echo "错误: " . $stmt->error;
}
$stmt->close();
$conn->close();
?>
安全增强措施
输入验证 对所有用户输入进行过滤和验证,防止XSS攻击:

$title = filter_input(INPUT_POST, 'title', FILTER_SANITIZE_STRING);
$content = filter_input(INPUT_POST, 'content', FILTER_SANITIZE_STRING);
防止SQL注入 使用预处理语句(如上例所示)而非直接拼接SQL查询。
CSRF防护 在表单中添加CSRF令牌:
<input type="hidden" name="csrf_token" value="<?php echo $_SESSION['csrf_token']; ?>">
处理时验证令牌:

if ($_POST['csrf_token'] !== $_SESSION['csrf_token']) {
die("CSRF验证失败");
}
显示帖子列表
创建显示帖子的页面(view_posts.php):
<?php
// 数据库连接(同上)
$result = $conn->query("SELECT id, title, content, created_at FROM posts ORDER BY created_at DESC");
if ($result->num_rows > 0) {
while($row = $result->fetch_assoc()) {
echo "<h3>" . htmlspecialchars($row["title"]) . "</h3>";
echo "<p>" . nl2br(htmlspecialchars($row["content"])) . "</p>";
echo "<small>" . $row["created_at"] . "</small><hr>";
}
} else {
echo "暂无帖子";
}
$conn->close();
?>
文件上传扩展
如需支持图片上传,可在表单中添加文件字段:
<input type="file" name="post_image" accept="image/*">
PHP处理部分:
$target_dir = "uploads/";
$target_file = $target_dir . basename($_FILES["post_image"]["name"]);
$imageFileType = strtolower(pathinfo($target_file, PATHINFO_EXTENSION));
// 验证是否为真实图片
$check = getimagesize($_FILES["post_image"]["tmp_name"]);
if ($check === false) {
die("文件不是图片");
}
// 限制文件大小(例如2MB)
if ($_FILES["post_image"]["size"] > 2000000) {
die("图片太大,最大2MB");
}
// 允许特定格式
if(!in_array($imageFileType, ["jpg", "png", "jpeg", "gif"])) {
die("只允许JPG, JPEG, PNG和GIF格式");
}
// 保存文件
if (move_uploaded_file($_FILES["post_image"]["tmp_name"], $target_file)) {
// 将文件路径存入数据库
$image_path = $target_file;
} else {
die("上传图片时出错");
}
此实现提供了基础的发帖功能,可根据需求进一步扩展用户认证、富文本编辑、评论系统等功能。






