当前位置:首页 > 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操作。示例方法:

php实现博客系统

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

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']);

文件上传处理

实现文章图片上传功能:

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 实现报表系统的关键方法 数据获取与处理 使用 Axios 或 Fetch API 从后端接口获取报表数据,建议封装为统一的 API 模块。对于大数据量报表,采用分页或懒加载优化性能。数据处理可…

vue实现户籍系统

vue实现户籍系统

Vue 实现户籍系统的基本架构 户籍系统通常涉及用户信息管理、数据展示、表单提交和权限控制等功能。以下是一个基于 Vue 的实现方案: 前端框架选择 使用 Vue 3 组合式 API 开发,搭配 V…

vue实现博客

vue实现博客

Vue实现博客的基本步骤 使用Vue.js实现博客系统可以借助Vue的组件化特性、路由管理以及状态管理工具。以下是实现博客系统的关键步骤: 创建Vue项目 使用Vue CLI或Vite初始化项目:…

vue博客实现

vue博客实现

实现Vue博客的基本步骤 安装Vue CLI并创建项目 使用Vue CLI初始化项目:vue create blog,选择默认配置或手动配置(推荐包含Vue Router)。安装完成后进入项目目录。…

php实现博客

php实现博客

使用PHP实现博客系统 数据库设计 创建数据库表存储博客文章和用户信息。常见的表包括posts(文章)和users(用户)。 CREATE TABLE users ( id INT AUT…