目录

  1. 第一步:环境搭建 - 你的 PHP 开发工坊

    php网站开发实例教程
    (图片来源网络,侵删)
    • 安装 XAMPP (Windows/Mac/Linux)
    • 理解 Web 服务器、PHP 和 MySQL 的关系
    • 创建你的第一个项目目录
  2. 第二步:PHP 基础语法 - 编写你的第一行代码

    • echoprint
    • 变量与数据类型
    • 注释
    • 条件语句:if...else
    • 循环:forforeach
    • 数组
    • 函数
  3. 第三步:处理表单数据 - 让网站与用户交互

    • 创建 HTML 表单 (GET vs POST)
    • 在 PHP 中接收表单数据:$_GET$_POST 超全局变量
    • 一个简单的联系表单实例
  4. 第四步:连接 MySQL 数据库 - 存储网站数据

    • 创建数据库和表
    • 使用 PHP 连接 MySQL (mysqli 扩展)
    • 执行 SQL 查询:增、删、改、查
    • 安全查询:防止 SQL 注入 (预处理语句 prepare)
  5. 第五步:实战项目 - 构建一个简易博客系统

    php网站开发实例教程
    (图片来源网络,侵删)
    • 项目结构规划
    • 功能实现:
      • 显示所有博客文章列表
      • 查看单篇文章详情
      • 写一篇新文章
      • 删除文章
    • 代码实现: 完整的代码示例和讲解
  6. 第六步:CSS 美化与用户体验

    • 引入 CSS 文件
    • 简单的页面布局美化
  7. 第七步:项目部署与未来学习

    • 如何将网站部署到虚拟主机
    • 代码版本控制:Git
    • 推荐学习路径:MVC 框架、 Composer 等

第一步:环境搭建 - 你的 PHP 开发工坊

在开始写代码之前,你需要一个本地环境来运行 PHP 代码,我们推荐使用集成环境包,因为它一键安装了 Apache (Web 服务器)、MySQL (数据库) 和 PHP。

推荐工具:XAMPP

php网站开发实例教程
(图片来源网络,侵删)
  1. 下载: 访问 XAMPP 官网,下载适合你操作系统的版本。
  2. 安装: 按照安装向导进行安装,安装路径建议使用默认值,避免使用中文或空格。
  3. 启动:
    • 安装完成后,打开 XAMPP Control Panel。
    • 点击 ApacheMySQL 模块的 Start 按钮,这两个服务是运行网站所必需的。
  4. 验证:
    • 在浏览器中访问 http://localhosthttp://127.0.0.1
    • 如果看到 XAMPP 的欢迎页面,说明环境搭建成功!
  5. 创建项目目录:
    • XAMPP 的网站根目录在 XAMPP安装目录/htdocs/
    • htdocs 文件夹中创建一个新文件夹,my_blog,我们所有的项目文件都将放在这里。
    • 访问 http://localhost/my_blog,如果能看到目录列表,就对了!

第二步: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 代码的标记。
  • echoprint 都可以输出内容,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 开发者!祝你学习愉快!