一个简单的 PHP + MySQL 文章管理系统的实现,包含后台管理、简单会员系统、文章发布和审核功能。
首先,创建一个 MySQL 数据库,包含三个表:users
、articles
和 article_status
。
-- 创建数据库
CREATE DATABASE article_management;
-- 使用数据库
USE article_management;
-- 创建用户表
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL UNIQUE,
password VARCHAR(255) NOT NULL,
role ENUM('member', 'admin') DEFAULT 'member'
);
-- 创建文章表
CREATE TABLE articles (
id INT AUTO_INCREMENT PRIMARY KEY,
title VARCHAR(255) NOT NULL,
content TEXT NOT NULL,
user_id INT NOT NULL,
status_id INT NOT NULL DEFAULT 1,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (user_id) REFERENCES users(id),
FOREIGN KEY (status_id) REFERENCES article_status(id)
);
-- 创建文章状态表
CREATE TABLE article_status (
id INT AUTO_INCREMENT PRIMARY KEY,
status_name VARCHAR(20) NOT NULL
);
-- 插入文章状态数据
INSERT INTO article_status (status_name) VALUES ('待审核'), ('已通过'), ('未通过');
<?php
// 数据库连接配置
$servername = "localhost";
$username = "your_username";
$password = "your_password";
$dbname = "article_management";
// 创建连接
$conn = new mysqli($servername, $username, $password, $dbname);
// 检查连接
if ($conn->connect_error) {
die("连接失败: " . $conn->connect_error);
}
?>
<?php
include 'config.php';
if ($_SERVER["REQUEST_METHOD"] == "POST") {
$username = $_POST['username'];
$password = password_hash($_POST['password'], PASSWORD_DEFAULT);
$sql = "INSERT INTO users (username, password) VALUES ('$username', '$password')";
if ($conn->query($sql) === TRUE) {
echo "注册成功";
} else {
echo "错误: " . $sql . "<br>" . $conn->error;
}
}
?>
<!DOCTYPE html>
<html>
<body>
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
用户名: <input type="text" name="username"><br>
密码: <input type="password" name="password"><br>
<input type="submit" value="注册">
</form>
</body>
</html>
<?php
include 'config.php';
if ($_SERVER["REQUEST_METHOD"] == "POST") {
$username = $_POST['username'];
$password = $_POST['password'];
$sql = "SELECT * FROM users WHERE username = '$username'";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
$row = $result->fetch_assoc();
if (password_verify($password, $row['password'])) {
session_start();
$_SESSION['user_id'] = $row['id'];
$_SESSION['role'] = $row['role'];
header("Location: index.php");
} else {
echo "密码错误";
}
} else {
echo "用户不存在";
}
}
?>
<!DOCTYPE html>
<html>
<body>
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
用户名: <input type="text" name="username"><br>
密码: <input type="password" name="password"><br>
<input type="submit" value="登录">
</form>
</body>
</html>
<?php
session_start();
include 'config.php';
if (!isset($_SESSION['user_id'])) {
header("Location: login.php");
}
if ($_SERVER["REQUEST_METHOD"] == "POST") {
$title = $_POST['title'];
$content = $_POST['content'];
$user_id = $_SESSION['user_id'];
$sql = "INSERT INTO articles (title, content, user_id) VALUES ('$title', '$content', $user_id)";
if ($conn->query($sql) === TRUE) {
echo "文章发布成功,等待审核";
} else {
echo "错误: " . $sql . "<br>" . $conn->error;
}
}
?>
<!DOCTYPE html>
<html>
<body>
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
标题: <input type="text" name="title"><br>
内容: <textarea name="content"></textarea><br>
<input type="submit" value="发布文章">
</form>
</body>
</html>
<?php
session_start();
include 'config.php';
if (!isset($_SESSION['user_id']) || $_SESSION['role'] != 'admin') {
header("Location: login.php");
}
if ($_SERVER["REQUEST_METHOD"] == "POST") {
$article_id = $_POST['article_id'];
$status_id = $_POST['status_id'];
$sql = "UPDATE articles SET status_id = $status_id WHERE id = $article_id";
if ($conn->query($sql) === TRUE) {
echo "文章状态更新成功";
} else {
echo "错误: " . $sql . "<br>" . $conn->error;
}
}
$sql = "SELECT articles.id, articles.title, users.username, article_status.status_name
FROM articles
JOIN users ON articles.user_id = users.id
JOIN article_status ON articles.status_id = article_status.id";
$result = $conn->query($sql);
?>
<!DOCTYPE html>
<html>
<body>
<h2>文章管理</h2>
<table border="1">
<tr>
<th>文章标题</th>
<th>作者</th>
<th>状态</th>
<th>操作</th>
</tr>
<?php
if ($result->num_rows > 0) {
while ($row = $result->fetch_assoc()) {
echo "<tr>";
echo "<td>" . $row['title'] . "</td>";
echo "<td>" . $row['username'] . "</td>";
echo "<td>" . $row['status_name'] . "</td>";
echo "<td>";
echo "<form method='post' action=''>";
echo "<input type='hidden' name='article_id' value='" . $row['id'] . "'>";
echo "<select name='status_id'>";
$status_sql = "SELECT * FROM article_status";
$status_result = $conn->query($status_sql);
while ($status_row = $status_result->fetch_assoc()) {
echo "<option value='" . $status_row['id'] . "' " . ($status_row['id'] == $row['status_id'] ? 'selected' : '') . ">" . $status_row['status_name'] . "</option>";
}
echo "</select>";
echo "<input type='submit' value='更新状态'>";
echo "</form>";
echo "</td>";
echo "</tr>";
}
}
?>
</table>
</body>
</html>
数据库设计:
users
表用于存储用户信息,包括用户名、密码和用户角色(会员或管理员)。
articles
表用于存储文章信息,包括标题、内容、作者 ID 和文章状态 ID。
article_status
表用于存储文章的状态,如待审核、已通过、未通过。
PHP 文件功能:
config.php
:负责数据库连接,你需要将 your_username
和 your_password
替换为你的 MySQL 用户名和密码。
register.php
:用户注册页面,用户可以输入用户名和密码进行注册。
login.php
:用户登录页面,用户可以输入用户名和密码进行登录。
publish.php
:文章发布页面,已登录的用户可以发布文章,文章默认状态为待审核。
admin.php
:后台管理页面,只有管理员可以访问,管理员可以查看所有文章的状态并进行审核。
使用方法:
运行 SQL 代码创建数据库和表。
将 PHP 文件上传到你的 Web 服务器。
访问 register.php
进行用户注册,注册后可以访问 login.php
进行登录。
会员登录后可以访问 publish.php
发布文章。
管理员登录后可以访问 admin.php
进行文章审核。
这个系统只是一个简单的示例,实际应用中可能需要更多的功能和安全性改进,如输入验证、错误处理、权限管理等。