当前位置:首页 > PHP

php实现博客系统

2026-01-15 13:30:57PHP

数据库设计

创建MySQL数据库表存储博客内容。主要需要posts表(文章)、categories表(分类)、users表(用户)和comments表(评论)。以下是核心表的SQL示例:

CREATE TABLE posts (
    id INT AUTO_INCREMENT PRIMARY KEY,
    title VARCHAR(255) NOT NULL,
    content TEXT NOT NULL,
    category_id INT,
    user_id INT,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (category_id) REFERENCES categories(id),
    FOREIGN KEY (user_id) REFERENCES users(id)
);

核心功能实现

建立数据库连接使用PDO扩展,创建Database.php类处理连接:

class Database {
    private $host = 'localhost';
    private $db_name = 'blog_db';
    private $username = 'root';
    private $password = '';
    private $conn;

    public function connect() {
        $this->conn = null;
        try {
            $this->conn = new PDO(
                'mysql:host='.$this->host.';dbname='.$this->db_name,
                $this->username,
                $this->password
            );
            $this->conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        } catch(PDOException $e) {
            echo 'Connection Error: '.$e->getMessage();
        }
        return $this->conn;
    }
}

文章管理模块

创建Post.php模型类处理文章CRUD操作。示例方法:

class Post {
    private $conn;
    private $table = 'posts';

    public function __construct($db) {
        $this->conn = $db;
    }

    public function read() {
        $query = 'SELECT p.*, c.name as category_name, u.username as author 
                 FROM '.$this->table.' p
                 LEFT JOIN categories c ON p.category_id = c.id
                 LEFT JOIN users u ON p.user_id = u.id
                 ORDER BY p.created_at DESC';
        $stmt = $this->conn->prepare($query);
        $stmt->execute();
        return $stmt;
    }
}

用户认证系统

实现用户注册和登录功能,使用PHP的password_hash()进行密码加密:

class User {
    public function register($username, $password) {
        $hashed_password = password_hash($password, PASSWORD_BCRYPT);
        $query = 'INSERT INTO users (username, password) VALUES (:username, :password)';
        $stmt = $this->conn->prepare($query);
        $stmt->bindParam(':username', $username);
        $stmt->bindParam(':password', $hashed_password);
        return $stmt->execute();
    }

    public function login($username, $password) {
        $query = 'SELECT * FROM users WHERE username = :username';
        $stmt = $this->conn->prepare($query);
        $stmt->bindParam(':username', $username);
        $stmt->execute();
        $user = $stmt->fetch(PDO::FETCH_ASSOC);

        if($user && password_verify($password, $user['password'])) {
            $_SESSION['user_id'] = $user['id'];
            return true;
        }
        return false;
    }
}

前端界面构建

使用Bootstrap框架快速搭建响应式界面。创建基础模板文件header.phpfooter.php

<!-- header.php -->
<!DOCTYPE html>
<html>
<head>
    <title>PHP Blog</title>
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
    <nav class="navbar navbar-expand-lg navbar-dark bg-dark">
        <div class="container">
            <a class="navbar-brand" href="index.php">PHP Blog</a>
        </div>
    </nav>
    <div class="container mt-4">

路由系统

创建简单路由机制处理不同页面请求:

// index.php
$page = isset($_GET['page']) ? $_GET['page'] : 'home';

switch($page) {
    case 'post':
        include 'views/post.php';
        break;
    case 'login':
        include 'views/login.php';
        break;
    default:
        include 'views/home.php';
}

安全防护措施

防止SQL注入和XSS攻击:

function sanitizeInput($data) {
    $data = trim($data);
    $data = stripslashes($data);
    $data = htmlspecialchars($data);
    return $data;
}

// 在接收用户输入时使用
$title = sanitizeInput($_POST['title']);

文件上传处理

实现文章图片上传功能:

php实现博客系统

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

    // 检查文件类型
    if($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg") {
        echo "只允许JPG, JPEG, PNG文件";
    } else {
        if(move_uploaded_file($_FILES["image"]["tmp_name"], $target_file)) {
            // 保存文件路径到数据库
        }
    }
}

标签: 系统博客
分享给朋友:

相关文章

vue实现一个插件系统

vue实现一个插件系统

实现插件系统的核心思路 Vue的插件系统允许通过Vue.use()注册全局功能,通常包含以下要素: 暴露install方法供Vue调用 添加全局资源(指令/过滤器/组件等) 注入组件选项 添加实例方…

vue实现家教系统

vue实现家教系统

Vue实现家教系统的关键步骤 项目初始化与配置 使用Vue CLI创建项目框架,安装必要依赖如Vue Router、Vuex和Axios。配置基础路由和状态管理结构,确保项目具备SPA特性。 用户认…

vue系统的实现

vue系统的实现

Vue 系统的实现方法 Vue.js 是一个渐进式 JavaScript 框架,用于构建用户界面。以下是一些关键步骤和最佳实践,帮助实现一个基于 Vue 的系统。 环境搭建与项目初始化 安装 Nod…

基于vue实现桌面系统

基于vue实现桌面系统

使用Vue构建桌面系统的方法 技术选型与框架整合 Vue本身是前端框架,构建桌面系统需要结合Electron或NW.js等跨平台桌面开发工具。Electron更为流行,适合与Vue深度集成。推荐使用v…

用vue实现会员系统

用vue实现会员系统

使用Vue实现会员系统 项目初始化与依赖安装 创建一个新的Vue项目,安装必要的依赖: vue create member-system cd member-system npm install v…

博客css制作

博客css制作

CSS 制作博客的实用方法 布局设计 博客布局通常采用响应式设计,确保在不同设备上都能良好显示。常见的布局结构包括头部(导航栏)、主体内容区(文章列表或单篇文章)和页脚。 使用 CSS Grid…