编程笔记

编程笔记

如何用php建立一个个人博客,全流程。
2025-01-08

一、准备工作


  1. 服务器环境搭建

    • 你需要一个支持 PHP 的服务器环境,可以使用本地开发环境,如 XAMPP(Windows)或 MAMP(Mac),这些工具集成了 Apache、MySQL 和 PHP 等服务。也可以使用云服务器,如阿里云、腾讯云等,并且安装好 LAMP(Linux + Apache + MySQL + PHP)或 LNMP(Linux + Nginx + MySQL + PHP)环境。

  2. 数据库设计

    • posts 表:存储文章信息,包括 id(文章唯一标识)、title(标题)、content(内容)、author(作者)、created_at(创建时间)等字段。

    • users 表:存储用户信息,包括 id(用户唯一标识)、username(用户名)、password(密码)、email(邮箱)等字段。

    • 创建一个 MySQL 数据库,用于存储博客文章、用户信息等数据。

    • 设计必要的表,例如:


二、后端开发


  1. 连接数据库

<?php
// 数据库连接配置
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "blog_db";

// 创建连接
$conn = new mysqli($servername, $username, $password, $dbname);

// 检查连接
if ($conn->connect_error) {
    die("Connection failed: ". $conn->connect_error);
}
?>
解释:


  • 上述代码使用 mysqli 类来连接到本地的 MySQL 数据库。

  • $servername 是数据库服务器地址,localhost 表示本地。

  • $username 和 $password 是数据库的用户名和密码,初始安装时可能是 root 和空密码。

  • $dbname 是你创建的数据库名称,这里假设为 blog_db

  • 如果连接失败,将输出错误信息并终止程序。


  1. 文章管理

    • 实现文章的添加功能:

<?php
if ($_SERVER["REQUEST_METHOD"] == "POST") {
    $title = $_POST["title"];
    $content = $_POST["content"];
    $author = $_POST["author"];
    $created_at = date("Y-m-d H:i:s");

    $sql = "INSERT INTO posts (title, content, author, created_at) VALUES ('$title', '$content', '$author', '$created_at')";
    if ($conn->query($sql) === TRUE) {
        echo "New post created successfully";
    } else {
        echo "Error: ". $sql. "<br>". $conn->error;
    }
}
?>
<form action="" method="post">
    Title: <input type="text" name="title"><br>
    Content: <textarea name="content"></textarea><br>
    Author: <input type="text" name="author"><br>
    <input type="submit" value="Submit">
</form>
解释:


  • 首先,使用 $_SERVER["REQUEST_METHOD"] 判断请求是否为 POST 方法。
  • 然后从 $_POST 中获取提交的文章标题、内容和作者信息,并使用 date() 函数获取当前时间作为创建时间。
  • 构建 SQL 插入语句,将数据插入到 posts 表中。
  • 执行 SQL 语句,如果成功,显示成功消息,否则显示错误消息。
    • 实现文章的查询功能:

<?php
$sql = "SELECT * FROM posts";
$result = $conn->query($sql);

if ($result->num_rows > 0) {
    while($row = $result->fetch_assoc()) {
        echo "Title: ". $row["title"]. " - Author: ". $row["author"]. " - Created At: ". $row["created_at"]. "<br>";
        echo "Content: ". $row["content"]. "<br><br>";
    }
} else {
    echo "No posts found";
}
?>
解释:


  • 构建 SQL 查询语句,查询 posts 表中的所有数据。

  • 使用 $conn->query() 执行查询,得到结果集。

  • 通过 while 循环和 fetch_assoc() 方法逐行读取结果集并输出文章信息。


  1. 用户管理

    • 实现用户注册功能:

<?php
if ($_SERVER["REQUEST_METHOD"] == "POST") {
    $username = $_POST["username"];
    $password = password_hash($_POST["password"], PASSWORD_DEFAULT);
    $email = $_POST["email"];

    $sql = "INSERT INTO users (username, password, email) VALUES ('$username', '$password', '$email')";
    if ($conn->query($sql) === TRUE) {
        echo "User registered successfully";
    } else {
        echo "Error: ". $sql. "<br>". $conn->error;
    }
}
?>
<form action="" method="post">
    Username: <input type="text" name="username"><br>
    Password: <input type="password" name="password"><br>
    Email: <input type="email" name="email"><br>
    <input type="submit" value="Register">
</form>
解释:


  • 从 $_POST 中获取用户注册信息,使用 password_hash() 函数对密码进行哈希处理,提高安全性。
  • 执行 SQL 插入语句将用户信息存储到 users 表中。
    • 实现用户登录功能:

<?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 == 1) {
        $row = $result->fetch_assoc();
        if (password_verify($password, $row["password"])) {
            echo "Logged in successfully";
        } else {
            echo "Invalid password";
        }
    } else {
        echo "Invalid username";
    }
}
?>
<form action="" method="post">
    Username: <input type="text" name="username"><br>
    Password: <input type="password" name="password"><br>
    <input type="submit" value="Login">
</form>
解释:


  • 从 $_POST 中获取用户登录的用户名和密码。

  • 查询 users 表中是否存在该用户名。

  • 若存在,使用 password_verify() 函数验证密码是否正确。


三、前端开发


  1. HTML 和 CSS 布局

    • 创建 HTML 文件,使用 CSS 进行页面布局和样式设计,例如:

<!DOCTYPE html>
<html>
<head>
    <title>My Blog</title>
    <link rel="stylesheet" type="text/css" href="style.css">
</head>
<body>
    <header>
        <h1>My Blog</h1>
    </header>
    <nav>
        <ul>
            <li><a href="index.php">Home</a></li>
            <li><a href="login.php">Login</a></li>
            <li><a href="register.php">Register</a></li>
        </ul>
    </nav>
    <main>
        <!-- 这里显示文章内容 -->
    </main>
    <footer>
        <p>Copyright © 2025 My Blog</p>
    </footer>
</body>
</html>
解释:


  • 这是一个简单的 HTML 页面结构,包含头部、导航、主体和底部。

  • 通过 <link> 引入外部的 CSS 文件 style.css 进行样式设置。

  • 导航栏包含指向不同页面的链接,如主页、登录页面和注册页面。


  1. 模板引擎

    • 考虑使用模板引擎,如 Twig 或 Smarty,将 PHP 逻辑和 HTML 分离,提高代码的可维护性和可读性。


四、安全考虑


  1. 防止 SQL 注入

    • 使用 mysqli 的预处理语句,而不是直接将用户输入嵌入 SQL 语句,例如:

<?php
$stmt = $conn->prepare("INSERT INTO users (username, password, email) VALUES (?,?,?)");
$stmt->bind_param("sss", $username, $password, $email);
$stmt->execute();
?>
解释:


  • 上述代码使用 prepare() 方法准备 SQL 语句,? 是占位符。

  • 使用 bind_param() 方法绑定参数,确保输入的数据不会破坏 SQL 语句的结构,防止 SQL 注入攻击。


  1. 输入验证和过滤

    • 对用户输入的数据进行验证和过滤,例如检查用户名是否合法、密码长度是否足够等,避免非法输入。


五、部署


  1. 上传代码

    • 将开发好的代码上传到云服务器上,确保服务器的 PHP 和 MySQL 环境配置正确。


建立一个完整的个人博客涉及到多个方面,上述只是一个简单的框架和示例,在实际开发中,你可以根据自己的需求不断完善和扩展功能,同时注意安全和性能方面的问题。你可以从基础的功能开始实现,逐步添加如评论、分类、标签、搜索等功能,让你的博客更加完善。