当前位置:首页 > PHP

php实现文章系统

2026-02-15 18:04:21PHP

数据库设计

创建数据库表存储文章数据,常用字段包括文章ID、标题、内容、作者、发布时间等。示例SQL语句:

CREATE TABLE articles (
    id INT AUTO_INCREMENT PRIMARY KEY,
    title VARCHAR(255) NOT NULL,
    content TEXT NOT NULL,
    author VARCHAR(100),
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);

连接数据库

使用PDO或MySQLi扩展连接MySQL数据库:

$host = 'localhost';
$dbname = 'article_system';
$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("Connection failed: " . $e->getMessage());
}

文章发布功能

创建表单提交文章数据并插入数据库:

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $title = $_POST['title'];
    $content = $_POST['content'];
    $author = $_POST['author'];

    $stmt = $pdo->prepare("INSERT INTO articles (title, content, author) VALUES (?, ?, ?)");
    $stmt->execute([$title, $content, $author]);

    header("Location: index.php");
    exit;
}

文章列表展示

从数据库查询文章并展示:

php实现文章系统

$stmt = $pdo->query("SELECT * FROM articles ORDER BY created_at DESC");
$articles = $stmt->fetchAll(PDO::FETCH_ASSOC);

foreach ($articles as $article) {
    echo "<h3>{$article['title']}</h3>";
    echo "<p>作者: {$article['author']}</p>";
    echo "<p>发布时间: {$article['created_at']}</p>";
    echo "<div>{$article['content']}</div>";
    echo "<hr>";
}

文章编辑功能

实现文章更新功能:

if (isset($_GET['edit'])) {
    $id = $_GET['edit'];
    $stmt = $pdo->prepare("SELECT * FROM articles WHERE id = ?");
    $stmt->execute([$id]);
    $article = $stmt->fetch(PDO::FETCH_ASSOC);
}

if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['update'])) {
    $id = $_POST['id'];
    $title = $_POST['title'];
    $content = $_POST['content'];
    $author = $_POST['author'];

    $stmt = $pdo->prepare("UPDATE articles SET title=?, content=?, author=? WHERE id=?");
    $stmt->execute([$title, $content, $author, $id]);

    header("Location: index.php");
    exit;
}

文章删除功能

实现文章删除功能:

php实现文章系统

if (isset($_GET['delete'])) {
    $id = $_GET['delete'];
    $stmt = $pdo->prepare("DELETE FROM articles WHERE id = ?");
    $stmt->execute([$id]);

    header("Location: index.php");
    exit;
}

安全防护措施

防止SQL注入和XSS攻击:

// 使用预处理语句防止SQL注入
$stmt = $pdo->prepare("SELECT * FROM articles WHERE id = ?");
$stmt->execute([$id]);

// 输出时过滤HTML标签防止XSS
echo htmlspecialchars($article['content'], ENT_QUOTES, 'UTF-8');

分页功能实现

添加文章列表分页功能:

$perPage = 5;
$page = isset($_GET['page']) ? (int)$_GET['page'] : 1;
$offset = ($page - 1) * $perPage;

$stmt = $pdo->prepare("SELECT * FROM articles ORDER BY created_at DESC LIMIT :offset, :perPage");
$stmt->bindValue(':offset', $offset, PDO::PARAM_INT);
$stmt->bindValue(':perPage', $perPage, PDO::PARAM_INT);
$stmt->execute();
$articles = $stmt->fetchAll(PDO::FETCH_ASSOC);

// 获取总页数
$total = $pdo->query("SELECT COUNT(*) FROM articles")->fetchColumn();
$totalPages = ceil($total / $perPage);

文件上传功能

实现文章图片上传功能:

if (isset($_FILES['image'])) {
    $targetDir = "uploads/";
    $targetFile = $targetDir . basename($_FILES["image"]["name"]);
    $imageFileType = strtolower(pathinfo($targetFile, PATHINFO_EXTENSION));

    // 检查文件类型
    $allowedTypes = ['jpg', 'png', 'jpeg', 'gif'];
    if (in_array($imageFileType, $allowedTypes)) {
        move_uploaded_file($_FILES["image"]["tmp_name"], $targetFile);
        // 将文件路径存入数据库
        $stmt = $pdo->prepare("UPDATE articles SET image_path = ? WHERE id = ?");
        $stmt->execute([$targetFile, $articleId]);
    }
}

标签: 系统文章
分享给朋友:

相关文章

vue实现考试系统

vue实现考试系统

Vue实现考试系统的基本架构 使用Vue.js构建考试系统需要结合前端框架和后端API。Vue负责用户界面和交互逻辑,后端处理数据存储和业务规则。 核心功能模块设计 用户认证模块 实现登录/注册功…

vue系统怎么实现的

vue系统怎么实现的

Vue 系统的实现原理 Vue 是一个渐进式 JavaScript 框架,其核心实现基于响应式数据绑定和虚拟 DOM。以下是 Vue 系统实现的关键点: 响应式系统 Vue 使用 Object.de…

java如何获取系统时间

java如何获取系统时间

获取当前系统时间的方法 在Java中获取系统时间有多种方式,以下列举几种常用方法: 使用 java.util.Date 类 Date currentDate = new Date(); System…

java 如何获取系统时间

java 如何获取系统时间

获取系统时间的常用方法 使用 java.time 包(Java 8及以上推荐) Java 8引入了新的日期时间API(java.time),提供了更简洁和线程安全的方式获取系统时间。 impor…

vue实现文章目录

vue实现文章目录

实现文章目录的基本思路 在Vue中实现文章目录,通常需要解析文章的标题(如h1、h2、h3等标签),动态生成目录结构,并支持点击跳转。以下是具体实现方法: 解析文章标题 通过DOM操作或正则表达式提…

vue实现一个插件系统

vue实现一个插件系统

实现插件系统的基本思路 Vue的插件系统允许通过Vue.use()方法注册全局功能,插件可以添加全局方法、指令、混入或组件。插件通常是一个对象或函数,需暴露install方法供Vue调用。 插件定义…