目录
-
(图片来源网络,侵删)- 安装 XAMPP (Windows/Mac/Linux)
- 理解 Web 服务器、PHP 和 MySQL 的关系
- 创建你的第一个项目目录
-
echo和print- 变量与数据类型
- 注释
- 条件语句:
if...else - 循环:
for和foreach - 数组
- 函数
-
- 创建 HTML 表单 (
GETvsPOST) - 在 PHP 中接收表单数据:
$_GET和$_POST超全局变量 - 一个简单的联系表单实例
- 创建 HTML 表单 (
-
- 创建数据库和表
- 使用 PHP 连接 MySQL (
mysqli扩展) - 执行 SQL 查询:增、删、改、查
- 安全查询:防止 SQL 注入 (预处理语句
prepare)
-
(图片来源网络,侵删)- 项目结构规划
- 功能实现:
- 显示所有博客文章列表
- 查看单篇文章详情
- 写一篇新文章
- 删除文章
- 代码实现: 完整的代码示例和讲解
-
- 引入 CSS 文件
- 简单的页面布局美化
-
- 如何将网站部署到虚拟主机
- 代码版本控制:Git
- 推荐学习路径:MVC 框架、 Composer 等
第一步:环境搭建 - 你的 PHP 开发工坊
在开始写代码之前,你需要一个本地环境来运行 PHP 代码,我们推荐使用集成环境包,因为它一键安装了 Apache (Web 服务器)、MySQL (数据库) 和 PHP。
推荐工具:XAMPP

(图片来源网络,侵删)
- 下载: 访问 XAMPP 官网,下载适合你操作系统的版本。
- 安装: 按照安装向导进行安装,安装路径建议使用默认值,避免使用中文或空格。
- 启动:
- 安装完成后,打开 XAMPP Control Panel。
- 点击 Apache 和 MySQL 模块的 Start 按钮,这两个服务是运行网站所必需的。
- 验证:
- 在浏览器中访问
http://localhost或http://127.0.0.1。 - 如果看到 XAMPP 的欢迎页面,说明环境搭建成功!
- 在浏览器中访问
- 创建项目目录:
- XAMPP 的网站根目录在
XAMPP安装目录/htdocs/。 - 在
htdocs文件夹中创建一个新文件夹,my_blog,我们所有的项目文件都将放在这里。 - 访问
http://localhost/my_blog,如果能看到目录列表,就对了!
- XAMPP 的网站根目录在
第二步:PHP 基础语法 - 编写你的第一行代码
创建一个文件 index.php,放在 my_blog 文件夹中,并写入以下代码:
<?php
// 这是单行注释
/*
* 这是多行注释
*/
// 1. 输出内容
echo "<h1>Hello, PHP World!</h1>";
print "<p>这是我的第一个 PHP 页面。</p>";
// 2. 变量与数据类型
$name = "张三"; // 字符串
$age = 25; // 整数
$isStudent = true; // 布尔值
$price = 99.99; // 浮点数
echo "<p>姓名: " . $name . "</p>";
echo "<p>年龄: " . $age . "</p>";
echo "<p>是否为学生: " . ($isStudent ? "是" : "否") . "</p>";
// 3. 条件语句
if ($age >= 18) {
echo "<p>你已成年。</p>";
} else {
echo "<p>你还未成年。</p>";
}
// 4. 循环
echo "<h2>数字 1 到 5:</h2>";
for ($i = 1; $i <= 5; $i++) {
echo "<p>数字: " . $i . "</p>";
}
// 5. 数组
$fruits = ["苹果", "香蕉", "橙子"];
echo "<h2>我喜欢的水果:</h2>";
echo "<ul>";
foreach ($fruits as $fruit) {
echo "<li>" . $fruit . "</li>";
}
echo "</ul>";
// 6. 函数
function greet($userName) {
return "<p>你好, " . $userName . "!</p>";
}
echo greet("李四");
?>
说明:
<?php ... ?>是 PHP 代码的标记。echo和print都可以输出内容,echo更常用。- 变量以 符号开头。
- 字符串可以用 (点号) 连接。
第三步:处理表单数据 - 让网站与用户交互
创建一个文件 contact.php,用于接收用户提交的联系表单。
HTML 表单 (contact.html)
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">联系我们</title>
</head>
<body>
<h1>联系我们</h1>
<form action="process_contact.php" method="POST">
<label for="name">姓名:</label><br>
<input type="text" id="name" name="name" required><br><br>
<label for="email">邮箱:</label><br>
<input type="email" id="email" name="email" required><br><br>
<label for="message">留言:</label><br>
<textarea id="message" name="message" rows="4" cols="50" required></textarea><br><br>
<input type="submit" value="提交">
</form>
</body>
</html>
PHP 处理脚本 (process_contact.php)
<?php
// 检查是否是通过 POST 方法提交的表单
if ($_SERVER["REQUEST_METHOD"] == "POST") {
// 从 $_POST 超全局数组中获取表单数据
$name = $_POST['name'];
$email = $_POST['email'];
$message = $_POST['message'];
// 简单的数据验证和显示
echo "<h1>表单提交成功!</h1>";
echo "<p><strong>姓名:</strong> " . htmlspecialchars($name) . "</p>";
echo "<p><strong>邮箱:</strong> " . htmlspecialchars($email) . "</p>";
echo "<p><strong>留言:</strong> " . htmlspecialchars($message) . "</p>";
// 在实际应用中,这里应该将数据存入数据库或发送邮件
// saveToDatabase($name, $email, $message);
} else {
// 如果不是 POST 请求,则重定向或显示错误
echo "错误:请通过表单提交。";
}
?>
说明:
<form action="process_contact.php" method="POST">:action指定处理表单的 PHP 文件,method="POST"表示数据在后台发送,更安全。$_POST: 一个 PHP 超全局数组,用于收集method="POST"发送的表单数据。$_GET: 用于收集method="GET"发送的数据(数据会显示在 URL 中)。htmlspecialchars(): 一个非常重要的安全函数,可以防止 XSS (跨站脚本) 攻击。
第四步:连接 MySQL 数据库 - 存储网站数据
我们需要一个数据库来存储博客文章。
创建数据库和表
- 打开 XAMPP Control Panel,点击 MySQL 模块的 Admin 按钮,这将打开 phpMyAdmin。
- 在 phpMyAdmin 中,点击“新建”,创建一个名为
my_blog_db的数据库。 - 选择
my_blog_db,点击“导入”,或者直接在 SQL 标签页中执行以下 SQL 语句来创建posts表:
CREATE TABLE `posts` ( `id` int(11) NOT NULL AUTO_INCREMENT, varchar(200) NOT NULL, `content` text NOT NULL, `created_at` datetime DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
PHP 连接与操作数据库
创建一个文件 db.php 用于数据库连接,方便其他页面调用。
<?php
// db.php - 数据库连接配置
$host = 'localhost'; // 数据库主机
$dbname = 'my_blog_db'; // 数据库名
$username = 'root'; // 数据库用户名 (XAMPP默认)
$password = ''; // 数据库密码 (XAMPP默认为空)
try {
// 创建一个 PDO 实例
$pdo = new PDO("mysql:host=$host;dbname=$dbname;charset=utf8mb4", $username, $password);
// 设置 PDO 错误模式为异常
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// echo "数据库连接成功!"; // 用于测试,实际项目中注释掉
} catch(PDOException $e) {
die("连接失败: " . $e->getMessage());
}
?>
增、删、改、查 操作示例
创建一个 manage_posts.php 文件来演示所有操作。
<?php
require 'db.php'; // 引入数据库连接文件
// --- 1. 插入数据 (新增文章) ---
if (isset($_POST['add_post'])) {
$title = $_POST['title'];
$content = $_POST['content'];
// 使用预处理语句防止 SQL 注入
$sql = "INSERT INTO posts (title, content) VALUES (:title, :content)";
$stmt = $pdo->prepare($sql);
// 绑定参数
$stmt->bindParam(':title', $title);
$stmt->bindParam(':content', $content);
// 执行
if ($stmt->execute()) {
echo "<p style='color:green;'>文章添加成功!</p>";
} else {
echo "<p style='color:red;'>文章添加失败。</p>";
}
}
// --- 2. 读取数据 (获取所有文章) ---
$stmt = $pdo->query("SELECT id, title, created_at FROM posts ORDER BY created_at DESC");
$posts = $stmt->fetchAll(PDO::FETCH_ASSOC);
// --- 3. 删除数据 ---
if (isset($_GET['delete_id'])) {
$id_to_delete = $_GET['delete_id'];
$sql = "DELETE FROM posts WHERE id = :id";
$stmt = $pdo->prepare($sql);
$stmt->bindParam(':id', $id_to_delete, PDO::PARAM_INT);
if ($stmt->execute()) {
echo "<p style='color:green;'>文章删除成功!</p>";
// 删除后重定向,避免刷新页面时重复删除
header('Location: manage_posts.php');
exit();
}
}
?>
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">博客管理</title>
</head>
<body>
<h1>管理博客文章</h1>
<!-- 添加文章的表单 -->
<h2>添加新文章</h2>
<form action="manage_posts.php" method="POST">
<input type="text" name="title" placeholder="文章标题" required><br><br>
<textarea name="content" rows="5" placeholder="文章内容" required></textarea><br><br>
<input type="submit" name="add_post" value="发布文章">
</form>
<hr>
<!-- 显示所有文章列表 -->
<h2>现有文章</h2>
<ul>
<?php foreach ($posts as $post): ?>
<li>
<strong><?php echo htmlspecialchars($post['title']); ?></strong>
(发布于: <?php echo $post['created_at']; ?>)
<a href="view_post.php?id=<?php echo $post['id']; ?>">查看</a>
<a href="manage_posts.php?delete_id=<?php echo $post['id']; ?>"
onclick="return confirm('确定要删除这篇文章吗?');">删除</a>
</li>
<?php endforeach; ?>
</ul>
</body>
</html>
说明:
- PDO (PHP Data Objects): 是一个数据库访问层,提供了一个数据访问抽象层,这意味着,无论使用哪种数据库,你都可以使用相同的函数来执行查询,它推荐使用,因为它更安全(支持预处理语句)且更灵活。
- 预处理语句: 是防止 SQL 注入攻击的最佳方式,它将 SQL 语句和数据分开处理。
第五步:实战项目 - 构建一个简易博客系统
现在我们把之前的知识整合起来,完成博客系统的核心功能。
项目结构:
my_blog/
├── db.php
├── index.php (首页,显示文章列表)
├── view_post.php (查看单篇文章详情)
├── create_post.php (创建新文章的表单页面)
└── manage_posts.php (管理页面,包含增删查功能)
index.php - 显示文章列表
<?php
require 'db.php';
$stmt = $pdo->query("SELECT id, title, created_at FROM posts ORDER BY created_at DESC");
$posts = $stmt->fetchAll(PDO::FETCH_ASSOC);
?>
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">我的博客</title>
<link rel="stylesheet" href="style.css">
</head>
<body>
<div class="container">
<h1>我的博客</h1>
<a href="create_post.php" class="btn">写新文章</a>
<div class="post-list">
<?php if (empty($posts)): ?>
<p>暂无文章。</p>
<?php else: ?>
<?php foreach ($posts as $post): ?>
<div class="post-item">
<h2><a href="view_post.php?id=<?php echo $post['id']; ?>"><?php echo htmlspecialchars($post['title']); ?></a></h2>
<p class="post-meta">发布于: <?php echo $post['created_at']; ?></p>
</div>
<?php endforeach; ?>
<?php endif; ?>
</div>
</div>
</body>
</html>
view_post.php - 查看文章详情
<?php
require 'db.php';
if (isset($_GET['id'])) {
$id = $_GET['id'];
// 使用预处理语句获取单篇文章
$stmt = $pdo->prepare("SELECT * FROM posts WHERE id = ?");
$stmt->execute([$id]);
$post = $stmt->fetch(PDO::FETCH_ASSOC);
if ($post):
?>
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8"><?php echo htmlspecialchars($post['title']); ?></title>
<link rel="stylesheet" href="style.css">
</head>
<body>
<div class="container">
<a href="index.php" class="btn">返回首页</a>
<article class="post-detail">
<h1><?php echo htmlspecialchars($post['title']); ?></h1>
<p class="post-meta">发布于: <?php echo $post['created_at']; ?></p>
<div class="post-content">
<?php echo nl2br(htmlspecialchars($post['content'])); // nl2br 将换行符转为 <br> ?>
</div>
</article>
</div>
</body>
</html>
<?php
else:
echo "<p>文章未找到。</p>";
endif;
} else {
echo "<p>无效的文章 ID。</p>";
}
?>
create_post.php - 创建新文章
<?php
require 'db.php';
if ($_SERVER["REQUEST_METHOD"] == "POST" && isset($_POST['title']) && isset($_POST['content'])) {
$title = $_POST['title'];
$content = $_POST['content'];
$sql = "INSERT INTO posts (title, content) VALUES (:title, :content)";
$stmt = $pdo->prepare($sql);
$stmt->bindParam(':title', $title);
$stmt->bindParam(':content', $content);
if ($stmt->execute()) {
header('Location: index.php'); // 创建成功后跳转到首页
exit();
} else {
echo "<p>发布失败,请重试。</p>";
}
}
?>
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">写新文章</title>
<link rel="stylesheet" href="style.css">
</head>
<body>
<div class="container">
<h1>写新文章</h1>
<form action="create_post.php" method="POST">
<div class="form-group">
<label for="title">标题:</label>
<input type="text" id="title" name="title" required>
</div>
<div class="form-group">
<label for="content">内容:</label>
<textarea id="content" name="content" rows="10" required></textarea>
</div>
<button type="submit" class="btn">发布</button>
</form>
</div>
</body>
</html>
第六步:CSS 美化与用户体验
创建一个 style.css 文件,放在 my_blog 文件夹中,让你的博客看起来更美观。
/* style.css */
body {
font-family: Arial, sans-serif;
line-height: 1.6;
margin: 0;
background-color: #f4f4f4;
color: #333;
}
.container {
width: 80%;
max-width: 800px;
margin: 20px auto;
padding: 20px;
background: #fff;
border-radius: 8px;
box-shadow: 0 0 10px rgba(0,0,0,0.1);
}
h1, h2 {
color: #0056b3;
}
a {
color: #007bff;
text-decoration: none;
}
a:hover {
text-decoration: underline;
}
.btn {
display: inline-block;
background: #007bff;
color: #fff;
padding: 10px 15px;
border-radius: 5px;
margin-bottom: 20px;
}
.btn:hover {
background: #0056b3;
}
.post-list .post-item {
border-bottom: 1px solid #ddd;
padding-bottom: 15px;
margin-bottom: 15px;
}
.post-meta {
font-size: 0.9em;
color: #777;
}
.post-detail {
margin-top: 20px;
}
.post-detail h1 {
border-bottom: 2px solid #eee;
padding-bottom: 10px;
}
.post-content {
margin-top: 20px;
white-space: pre-wrap; /* 保留换行 */
}
.form-group {
margin-bottom: 15px;
}
.form-group label {
display: block;
margin-bottom: 5px;
}
.form-group input,
.form-group textarea {
width: 100%;
padding: 8px;
border: 1px solid #ddd;
border-radius: 4px;
box-sizing: border-box; /* 确保padding不会影响宽度 */
}
然后在每个 PHP 文件中通过 <link rel="stylesheet" href="style.css"> 引入它。
第七步:项目部署与未来学习
项目部署 当你完成开发并想将网站展示给他人时,需要购买一个虚拟主机(Virtual Host)。
- 购买主机: 选择支持 PHP 和 MySQL 的主机服务商(如阿里云、腾讯云、Bluehost 等)。
- 上传文件: 使用 FTP 工具(如 FileZilla)将你
my_blog文件夹内的所有文件上传到主机的网站根目录。 - 导入数据库: 在主机的控制面板中创建数据库,然后将你本地
my_blog_db的数据导出为.sql文件,再导入到远程数据库中。 - 修改配置: 修改远程服务器上的
db.php文件,填入远程数据库的主机名、用户名、密码和数据库名。
代码版本控制 - Git
- Git 是一个强大的版本控制系统,用于跟踪代码的变更,它能让你轻松地回滚到之前的版本,并与他人协作。
- 学习使用 Git 和代码托管平台(如 GitHub、Gitee)是现代开发者的必备技能。
未来学习路径 你已经掌握了 PHP 开发的基础,接下来可以学习更高级和规范的技术:
- MVC 框架: 学习使用 Laravel 或 Symfony 等现代框架,它们提供了结构化的项目组织、路由、ORM(对象关系映射,如 Eloquent)、模板引擎等,能极大提升开发效率和代码质量。
- Composer: PHP 的依赖管理工具,用于管理项目所需的第三方库。
- 前端基础: 深入学习 HTML5, CSS3, JavaScript,学习现代前端框架如 Vue.js 或 React,可以让你构建更动态、交互性更强的用户界面。
- API 开发: 学习如何使用 PHP 构建 RESTful API,为移动 App 或前端单页应用提供数据。
这份教程为你提供了一个从零到一的完整实践路径,动手敲代码,遇到问题多搜索、多思考,你很快就能成为一名合格的 PHP 开发者!祝你学习愉快!
