PHP 网站开发综合教程

这份教程将引导你从一个对 PHP 一无所知的新手,成长为能够独立开发动态网站的开发者。

php 网站 教程
(图片来源网络,侵删)

第一部分:基础准备与学习路径

在开始写代码之前,你需要搭建好开发环境和明确学习目标。

学习目标

  • 短期目标: 理解 PHP 基本语法,能够编写简单的动态网页(如显示当前时间、用户信息等)。
  • 中期目标: 掌握 PHP 与 MySQL 数据库的交互,能够开发一个功能完整的动态网站(如个人博客、留言板)。
  • 长期目标: 掌握 MVC 架构、使用现代框架(如 Laravel)、了解服务器部署和性能优化。

必需工具

  • 代码编辑器: 用来编写和编辑代码。
  • 本地服务器环境: PHP 代码需要在服务器环境中才能运行,不能直接用浏览器打开 .php 文件。
    • 推荐新手: XAMPP (集成了 Apache, MySQL, PHP 和 Perl,一键安装,非常方便)
    • 备选: WAMP (Windows), MAMP (Mac)

学习路径图

graph TD
    A[开始:搭建环境] --> B[第一部分:PHP 基础语法];
    B --> C[第二部分:Web 交互与表单];
    C --> D[第三部分:MySQL 数据库基础];
    D --> E[第四部分:PHP 与数据库整合];
    E --> F[第五部分:会话与用户认证];
    F --> G[第六部分:内容管理系统与框架];
    G --> H[第七部分:项目实战与部署];

第二部分:PHP 基础语法

这是 PHP 的核心,就像学习一门语言的单词和语法。

第一个 PHP 程序

  1. 启动 XAMPP 中的 Apache 和 MySQL 服务。

  2. 在 XAMPP 的 htdocs 文件夹下创建一个新文件夹,myproject

    php 网站 教程
    (图片来源网络,侵删)
  3. myproject 文件夹中创建一个名为 index.php 的文件。

  4. 用 VS Code 打开 index.php,输入以下代码:

    <!DOCTYPE html>
    <html lang="zh-CN">
    <head>
        <meta charset="UTF-8">
        <title>我的第一个 PHP 页面</title>
    </head>
    <body>
        <h1>你好,世界!</h1>
        <p>当前时间是:<?php echo date('Y-m-d H:i:s'); ?></p>
    </body>
    </html>
  5. 在浏览器中访问 http://localhost/myproject/,你应该能看到页面标题和动态显示的当前时间。

核心概念:

php 网站 教程
(图片来源网络,侵删)
  • <?php ... ?>:PHP 代码的标记。
  • echo到页面的命令。
  • date('Y-m-d H:i:s'):一个 PHP 函数,用于格式化日期和时间。

变量与数据类型

PHP 是一种弱类型语言,变量以 开头。

<?php
// 字符串
$name = "张三";
$age = 25; // 整数
$isStudent = true; // 布尔值
$grades = [90, 85, 88]; // 数组
$info = ["name" => "李四", "age" => 30]; // 关联数组
echo "姓名: " . $name . "<br>";
echo "年龄: " . $age . "<br>";
echo "是否为学生: " . ($isStudent ? "是" : "否") . "<br>";
echo "成绩: " . implode(", ", $grades) . "<br>";
echo "信息: " . $info['name'] . " 的年龄是 " . $info['age'];
?>

核心概念:

  • 变量、字符串、整数、浮点数、布尔值、数组、null
  • 字符串连接用 (点)。
  • 数组有两种:索引数组和关联数组。

控制结构

  • 条件语句:

    $score = 85;
    if ($score >= 90) {
        echo "优秀";
    } elseif ($score >= 60) {
        echo "及格";
    } else {
        echo "不及格";
    }
  • 循环语句:

    // for 循环
    echo "<h3>数字 1 到 5:</h3>";
    for ($i = 1; $i <= 5; $i++) {
        echo $i . " ";
    }
    // foreach 循环 (遍历数组)
    echo "<h3>学生列表:</h3>";
    $students = ["张三", "李四", "王五"];
    foreach ($students as $student) {
        echo $student . "<br>";
    }

函数

<?php
// 定义一个函数
function greet($name) {
    return "你好, " . $name . "!";
}
// 调用函数
echo greet("赵六");
?>

第三部分:Web 交互与表单

网站的核心是“交互”,而表单是用户与网站交互的主要方式。

获取表单数据

创建一个 form.html 文件:

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">用户注册表单</title>
</head>
<body>
    <h2>用户注册</h2>
    <form action="process.php" method="post">
        <label for="username">用户名:</label>
        <input type="text" id="username" name="username" required><br><br>
        <label for="email">邮箱:</label>
        <input type="email" id="email" name="email" required><br><br>
        <button type="submit">提交</button>
    </form>
</body>
</html>

现在创建 process.php 文件来处理提交的数据:

<?php
// 检查表单是否通过 POST 方法提交
if ($_SERVER["REQUEST_METHOD"] == "POST") {
    // 从 $_POST 超全局数组中获取数据
    $username = $_POST['username'];
    $email = $_POST['email'];
    // 对数据进行简单的处理和显示
    echo "<h2>注册信息已收到!</h2>";
    echo "用户名: " . htmlspecialchars($username) . "<br>";
    echo "邮箱: " . htmlspecialchars($email);
    // 在实际应用中,这里应该进行数据验证,然后存入数据库
} else {
    echo "请通过表单提交此页面。";
}
?>

核心概念:

  • $_POST:一个 PHP 超全局数组,用于收集通过 method="post" 提交的表单数据。
  • $_GET:用于收集通过 method="get" 或 URL 参数提交的数据。
  • htmlspecialchars():一个非常重要的安全函数,可以防止 XSS(跨站脚本)攻击。

第四部分:MySQL 数据库基础

网站需要存储数据,数据库就是存放数据的地方。

创建数据库和表

  1. 打开 XAMPP 控制面板,点击 Admin 按钮,这会打开 phpMyAdmin。

  2. 在 phpMyAdmin 中,点击“新建”,创建一个名为 my_blog 的数据库。

  3. 选择 my_blog 数据库,点击“SQL”选项卡,执行以下 SQL 语句来创建一个 posts 表:

    CREATE TABLE posts (
        id INT(11) AUTO_INCREMENT PRIMARY KEY,
        title VARCHAR(255) NOT NULL,
        content TEXT NOT NULL,
        created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
    );

SQL 基础语句

  • 插入数据:
    INSERT INTO posts (title, content) VALUES ('我的第一篇博客', '这是博客的正文内容。');
  • 查询数据:
    SELECT * FROM posts; -- 查询所有
    SELECT title, content FROM posts WHERE id = 1; -- 查询特定ID的
  • 更新数据:
    UPDATE posts SET content = '更新后的内容' WHERE id = 1;
  • 删除数据:
    DELETE FROM posts WHERE id = 1;

第五部分:PHP 与数据库整合

我们将 PHP 和 MySQL 连接起来,实现动态数据读写。

连接数据库

创建一个 db_connect.php 文件来管理数据库连接,这是一个好习惯。

<?php
$servername = "localhost";
$username = "root"; // 默认用户名
$password = ""; // 默认密码为空
$dbname = "my_blog";
// 创建连接
$conn = new mysqli($servername, $username, $password, $dbname);
// 检查连接是否成功
if ($conn->connect_error) {
    die("连接失败: " . $conn->connect_error);
}
echo "连接成功!";
?>

读取数据并显示

创建 show_posts.php

<?php
require 'db_connect.php'; // 引入数据库连接文件
// SQL 查询语句
$sql = "SELECT id, title, created_at FROM posts ORDER BY created_at DESC";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
    // 输出每条数据
    while($row = $result->fetch_assoc()) {
        echo "<h2>" . htmlspecialchars($row["title"]) . "</h2>";
        echo "<p>创建时间: " . $row["created_at"] . "</p>";
        echo "<hr>";
    }
} else {
    echo "暂无博客文章";
}
$conn->close();
?>

插入数据

创建一个 add_post.php 文件,接收表单提交的数据并存入数据库。

<?php
require 'db_connect.php';
if ($_SERVER["REQUEST_METHOD"] == "POST") {
    // 获取并清理表单数据
    $title = $_POST['title'];
    $content = $_POST['content'];
    // 使用预处理语句来防止 SQL 注入
    $stmt = $conn->prepare("INSERT INTO posts (title, content) VALUES (?, ?)");
    $stmt->bind_param("ss", $title, $content); // "ss" 表示两个字符串
    if ($stmt->execute()) {
        echo "新文章创建成功!";
        // 可以在这里重定向到文章列表页
        // header("Location: show_posts.php");
    } else {
        echo "Error: " . $stmt->error;
    }
    $stmt->close();
}
$conn->close();
?>

核心概念:

  • 预处理语句: 防止 SQL 注入攻击的最佳实践。
  • mysqliPDO: PHP 操作数据库的两种主要方式。PDO 更现代,支持多种数据库。

第六部分:会话与用户认证

让用户登录、记住登录状态,这是网站的核心功能之一。

启动会话

在需要使用会话的 PHP 文件的最开始(任何 HTML 输出之前)加上:

<?php
session_start(); // 启动会话
?>

用户登录逻辑

创建 login.php

<?php
session_start();
if ($_SERVER["REQUEST_METHOD"] == "POST") {
    $username = $_POST['username'];
    $password = $_POST['password'];
    // 这里应该查询数据库验证用户名和密码
    // 为了演示,我们使用硬编码的值
    if ($username === "admin" && $password === "password123") {
        // 验证成功,将用户信息存入会话
        $_SESSION['loggedin'] = true;
        $_SESSION['username'] = $username;
        header("Location: welcome.php"); // 重定向到欢迎页
    } else {
        $error = "用户名或密码错误!";
    }
}
?>
<!-- 登录表单 HTML... -->

保护页面

创建 welcome.php,只有登录用户才能访问:

<?php
session_start();
// 检查用户是否已登录
if (!isset($_SESSION['loggedin']) || $_SESSION['loggedin'] !== true) {
    header("Location: login.php"); // 如果未登录,重定向到登录页
    exit;
}
?>
<!DOCTYPE html>
<html lang="zh-CN">
<head>欢迎页面</title>
</head>
<body>
    <h1>欢迎, <?php echo htmlspecialchars($_SESSION['username']); ?>!</h1>
    <p>这是一个受保护的页面。</p>
    <a href="logout.php">退出登录</a>
</body>
</html>

用户退出

创建 logout.php

<?php
session_start();
// 清空所有会话变量
$_SESSION = array();
// 销毁会话
session_destroy();
// 重定向到登录页
header("Location: login.php");
exit;
?>

第七部分:进阶学习 - 框架与项目实战

当你掌握了以上所有基础后,就可以进入更高级的领域了。

为什么使用框架?

  • 开发效率高: 框架提供了“脚手架”,帮你处理了重复性的工作(如路由、数据库操作、用户认证)。
  • 代码结构清晰: 强制你遵循 MVC 等设计模式,使代码更易于维护和扩展。
  • 安全性高: 框架内置了许多安全措施(如 CSRF 防护、XSS 防护)。
  • 生态系统丰富: 有大量的第三方扩展包(Composer)和社区支持。

主流 PHP 框架

  • Laravel: 最受欢迎的现代 PHP 框架,语法优雅,文档完善,社区活跃。(推荐新手入门)
  • Symfony: 非常强大和灵活的企业级框架,组件化程度高。
  • ThinkPHP: 国内非常流行的框架,对中文支持好,文档和社区资源丰富。

项目实战建议

  • 个人博客系统
    • 功能:文章列表、文章详情、文章发布、文章分类、评论。
    • 技术:Laravel + MySQL + Bootstrap (或 Tailwind CSS)。
  • 简单的任务管理系统
    • 功能:用户注册登录、创建任务、查看任务列表、标记任务完成。
    • 技术:原生 PHP (或 Slim 微框架) + MySQL + 原生 JavaScript。

第八部分:推荐资源


总结与建议

  1. 动手实践: 理论看再多不如亲手敲一遍代码,跟着教程一步步做,然后尝试自己修改和扩展。
  2. 多查资料: 遇到问题,先尝试自己解决,然后学会使用搜索引擎和官方文档。
  3. 阅读优秀代码: 去 GitHub 上找一些开源的 PHP 项目,看看别人是怎么写的。
  4. 不要怕犯错: 编程就是在不断调试和修复错误中进步的。
  5. 保持耐心: Web 开发是一个系统工程,不可能一蹴而就,打好基础,循序渐进,你一定能成为一名优秀的 PHP 开发者!