php实现电子公告牌
使用PHP实现电子公告牌
电子公告牌(BBS)是一种常见的网络应用,允许用户发布、查看和管理公告。以下是使用PHP实现电子公告牌的基本步骤。
数据库设计
创建一个数据库表来存储公告信息。表结构可以包含以下字段:
id:公告的唯一标识符(主键,自增)。title:公告标题。content:公告内容。author:发布者名称。created_at:发布时间(时间戳)。updated_at:更新时间(时间戳)。
SQL语句示例:
CREATE TABLE announcements (
id INT AUTO_INCREMENT PRIMARY KEY,
title VARCHAR(255) NOT NULL,
content TEXT NOT NULL,
author VARCHAR(100) NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
连接数据库
使用PHP连接MySQL数据库,确保在代码中正确处理数据库连接和错误。

<?php
$host = 'localhost';
$dbname = 'bbs_db';
$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("Database connection failed: " . $e->getMessage());
}
?>
发布公告功能
创建一个表单,允许用户输入公告标题和内容,提交后将数据插入数据库。
<?php
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$title = $_POST['title'];
$content = $_POST['content'];
$author = $_POST['author'];
$stmt = $pdo->prepare("INSERT INTO announcements (title, content, author) VALUES (?, ?, ?)");
$stmt->execute([$title, $content, $author]);
}
?>
<form method="POST" action="">
<input type="text" name="title" placeholder="公告标题" required>
<textarea name="content" placeholder="公告内容" required></textarea>
<input type="text" name="author" placeholder="发布者" required>
<button type="submit">发布公告</button>
</form>
显示公告列表
从数据库中查询公告列表并按时间倒序显示。

<?php
$stmt = $pdo->query("SELECT * FROM announcements ORDER BY created_at DESC");
$announcements = $stmt->fetchAll(PDO::FETCH_ASSOC);
foreach ($announcements as $announcement) {
echo "<div>";
echo "<h3>{$announcement['title']}</h3>";
echo "<p>{$announcement['content']}</p>";
echo "<small>发布者: {$announcement['author']} | 发布时间: {$announcement['created_at']}</small>";
echo "</div><hr>";
}
?>
删除公告功能
为管理员或发布者提供删除公告的功能。
<?php
if (isset($_GET['delete_id'])) {
$id = $_GET['delete_id'];
$stmt = $pdo->prepare("DELETE FROM announcements WHERE id = ?");
$stmt->execute([$id]);
}
foreach ($announcements as $announcement) {
echo "<div>";
echo "<h3>{$announcement['title']}</h3>";
echo "<p>{$announcement['content']}</p>";
echo "<small>发布者: {$announcement['author']} | 发布时间: {$announcement['created_at']}</small>";
echo "<a href='?delete_id={$announcement['id']}' onclick='return confirm(\"确定删除吗?\")'>删除</a>";
echo "</div><hr>";
}
?>
分页功能
当公告数量较多时,实现分页功能以提升用户体验。
<?php
$perPage = 5;
$page = isset($_GET['page']) ? (int)$_GET['page'] : 1;
$offset = ($page - 1) * $perPage;
$stmt = $pdo->prepare("SELECT * FROM announcements ORDER BY created_at DESC LIMIT :offset, :perPage");
$stmt->bindParam(':offset', $offset, PDO::PARAM_INT);
$stmt->bindParam(':perPage', $perPage, PDO::PARAM_INT);
$stmt->execute();
$announcements = $stmt->fetchAll(PDO::FETCH_ASSOC);
$totalStmt = $pdo->query("SELECT COUNT(*) FROM announcements");
$total = $totalStmt->fetchColumn();
$totalPages = ceil($total / $perPage);
foreach ($announcements as $announcement) {
echo "<div>";
echo "<h3>{$announcement['title']}</h3>";
echo "<p>{$announcement['content']}</p>";
echo "<small>发布者: {$announcement['author']} | 发布时间: {$announcement['created_at']}</small>";
echo "</div><hr>";
}
for ($i = 1; $i <= $totalPages; $i++) {
echo "<a href='?page=$i'>$i</a> ";
}
?>
安全措施
确保输入数据经过验证和过滤,防止SQL注入和XSS攻击。
<?php
function sanitizeInput($data) {
return htmlspecialchars(strip_tags(trim($data)));
}
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$title = sanitizeInput($_POST['title']);
$content = sanitizeInput($_POST['content']);
$author = sanitizeInput($_POST['author']);
$stmt = $pdo->prepare("INSERT INTO announcements (title, content, author) VALUES (?, ?, ?)");
$stmt->execute([$title, $content, $author]);
}
?>
通过以上步骤,可以实现一个基本的电子公告牌系统。根据需求可以进一步扩展功能,如用户认证、评论功能等。






