一、准备工作
服务器环境搭建:
数据库设计:
二、后端开发
连接数据库:
<?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
。
如果连接失败,将输出错误信息并终止程序。
文章管理:
<?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()
方法逐行读取结果集并输出文章信息。
用户管理:
<?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>
解释:
<?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>
解释:
三、前端开发
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
进行样式设置。
导航栏包含指向不同页面的链接,如主页、登录页面和注册页面。
模板引擎:
四、安全考虑
防止 SQL 注入:
<?php
$stmt = $conn->prepare("INSERT INTO users (username, password, email) VALUES (?,?,?)");
$stmt->bind_param("sss", $username, $password, $email);
$stmt->execute();
?>
解释:
输入验证和过滤:
五、部署
上传代码:
建立一个完整的个人博客涉及到多个方面,上述只是一个简单的框架和示例,在实际开发中,你可以根据自己的需求不断完善和扩展功能,同时注意安全和性能方面的问题。你可以从基础的功能开始实现,逐步添加如评论、分类、标签、搜索等功能,让你的博客更加完善。