🇯🇵 日本語 | 🇺🇸 English | 🇪🇸 Español | 🇵🇹 Português | 🇹🇭 ไทย | 🇨🇳 中文

【PHP入门】网站的心脏!表单数据接收机制

“联系我们”表单是网站不可或缺的一部分。它是连接网站运营者与访问者,接收用户提问和反馈的重要窗口,可以说是网站的心脏。但是,很多人可能会觉得“想做一个表单,但输入的数据要怎么接收呢?”,从而感到困难。

本文将以初学者也能看懂的方式,详细解说其核心部分——“用PHP从HTML表单接收数据,并显示在确认页面上”的整个流程。这次,我们将以一个包含`name`, `email`, `message`三个项目的简单邮件表单为例,学习仅用一个文件就实现输入表单和确认画面的方法。我们准备了只需复制粘贴就能运行的代码,请务必体验一下让代码“跑起来”的乐趣!

要准备运行PHP(开发环境),如果还没有搭建XAMPP的朋友,请参考【PHP入门】XAMPP下载及安装方法完全解析!。 安装后,将PHP文件放置在指定文件夹(如 `htdocs`)中,准备工作就完成了!

1. Web表单的机制:HTML与PHP的协作

Web表单大致由两个部分构成。

  1. HTML: 用户输入文字的“外观”部分。
  2. PHP: 接收并处理已发送数据的“幕后”部分。

首先,我们来看看HTML的<form>标签。这就是表单的主体。

<!-- 指定数据发送目的地(action)和发送方式(method) -->
<form action="receive.php" method="POST">
    <!-- 为每个输入框设置“名称(name)”,以便PHP接收数据 -->
    <p>姓名: <input type="text" name="user_name"></p>
    <p>电子邮件地址: <input type="email" name="user_email"></p>
    <p><button type="submit">发送</button></p>
</form>

重要的是method="POST"和每个输入框的name属性。`POST`是一种安全发送数据而不会在URL中显示的方法,在表单中被普遍使用。而赋予`name`属性的名称,将成为PHP端接收数据时的“密钥”。

在PHP端,我们使用一个名为$_POST的特殊变量(超全局变量)来接收数据。通过像$_POST['user_name']这样,将HTML的`name`属性作为密钥来指定,就可以取出输入的值。

<?php
// 显示从名为"user_name"的输入框发送来的数据
echo $_POST['user_name'];

// 显示从名为"user_email"的输入框发送来的数据
echo $_POST['user_email'];

// 查看所有通过POST发送来的数据(用于调试)
print_r($_POST);
?>

HTML和PHP的这种协作,就是Web表单的基本机制。

2. 实践!用一个文件制作输入表单和确认画面

那么,让我们在一个PHP文件中实现输入表单和确认画面的功能吧。这种方法的好处是文件管理变得简单。以下代码是一个完整的示例,可以直接复制粘贴到文件中,并立即在浏览器中确认其运行效果。

<!DOCTYPE html>
<html lang="zh">
<head>
    <meta charset="UTF-8">
    <title>联系我们表单</title>
    <style>
        body { font-family: sans-serif; line-height: 1.7; padding: 20px; max-width: 600px; margin: auto; }
        .form-group { margin-bottom: 15px; }
        label { display: block; margin-bottom: 5px; font-weight: bold; }
        input[type="text"], input[type="email"], textarea {
            width: 100%; padding: 10px; border: 1px solid #ccc; border-radius: 4px; box-sizing: border-box;
        }
        textarea { height: 120px; }
        .confirmation-table { width: 100%; border-collapse: collapse; }
        .confirmation-table th, .confirmation-table td { border: 1px solid #ddd; padding: 12px; text-align: left; }
        .confirmation-table th { background-color: #f2f2f2; width: 30%; }
        button { padding: 10px 20px; border: none; background-color: #007bff; color: white; border-radius: 4px; cursor: pointer; }
        button:hover { background-color: #0056b3; }
    </style>
</head>
<body>

    <?php
    // 根据是否有POST请求来分支处理
    if ($_SERVER['REQUEST_METHOD'] === 'POST') {
        // --- 显示确认画面 ---
        $name = htmlspecialchars($_POST['name'], ENT_QUOTES, 'UTF-8');
        $email = htmlspecialchars($_POST['email'], ENT_QUOTES, 'UTF-8');
        $message = htmlspecialchars($_POST['message'], ENT_QUOTES, 'UTF-8');
    ?>
        <h1>确认您输入的内容</h1>
        <p>如果以下内容无误,请按发送按钮。</p>
        <table class="confirmation-table">
            <tr>
                <th>姓名</th>
                <td><?php echo $name; ?></td>
            </tr>
            <tr>
                <th>电子邮件地址</th>
                <td><?php echo $email; ?></td>
            </tr>
            <tr>
                <th>咨询内容</th>
                <td><?php echo nl2br($message); ?></td>
            </tr>
        </table>
        <p>*本示例不会实际发送邮件。*</p>

    <?php } else { ?>
        // --- 显示输入表单 ---
        <h1>联系我们</h1>
        <form action="" method="POST">
            <div class="form-group">
                <label for="name">姓名</label>
                <input type="text" id="name" name="name" required>
            </div>
            <div class="form-group">
                <label for="email">电子邮件地址</label>
                <input type="email" id="email" name="email" required>
            </div>
            <div class="form-group">
                <label for="message">咨询内容</label>
                <textarea id="message" name="message" required></textarea>
            </div>
            <button type="submit">确认输入内容</button>
        </form>
    <?php } ?>

</body>
</html>

此代码的最大要点是`if ($_SERVER['REQUEST_METHOD'] === 'POST')`这个条件分支。`$_SERVER['REQUEST_METHOD']`保存了访问页面的方式(GET或POST)。

此外,将表单的`action`属性留空,如`action=""`,数据就会被发送到该文件自身。这样,用一个文件就能表现出两个画面。

3. 注意事项(输入值验证)

在实际的网站中,用户有可能什么都不输入,或者发送不合法的数据。因此,检查接收到的数据是否符合预期的**验证(Validation)**处理是必不可少的。

在这里,我们来增加一个简单的验证,检查各个项目是否为空。

<?php
// 确认画面的处理(在if语句内)
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $name = $_POST['name'];
    $email = $_POST['email'];
    $message = $_POST['message'];
    $errors = []; // 存放错误信息的数组

    // 姓名的验证
    if (empty($name)) {
        $errors[] = '姓名是必填项。';
    }

    // 电子邮件地址的验证
    if (empty($email)) {
        $errors[] = '电子邮件地址是必填项。';
    } elseif (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
        $errors[] = '电子邮件地址格式不正确。';
    }

    // 咨询内容的验证
    if (empty($message)) {
        $errors[] = '咨询内容是必填项。';
    }

    // 根据是否有错误来分支处理
    if (!empty($errors)) {
        // 有错误时:显示错误信息
        echo '<h1>输入错误</h1>';
        echo '<ul style="color: red;">';
        foreach ($errors as $error) {
            echo '<li>' . htmlspecialchars($error) . '</li>';
        }
        echo '</ul>';
        echo '<a href="javascript:history.back();">返回输入表单</a>';
    } else {
        // 没有错误时:显示确认画面
        // ...(前面例子中的确认画面显示代码)...
    }
}
?>

在这个例子中,我们用`empty()`检查各项输入是否为空,并用`filter_var()`这个方便的函数验证电子邮件地址的格式是否正确。这样,如果有错误就显示错误信息,如果没有就进入确认画面,流程变得更加实用。

4. 总结与后续步骤

这次,我们学习了Web表单的基本机制,以及使用PHP接收数据并显示到确认画面的整个流程。`$_POST`变量和通过`if`语句进行处理分支是表单制作的核心部分。发送邮件的功能因为涉及到服务器设置等,会稍微复杂一些,但只要掌握了从输入到确认的这个流程,就可以应用到任何表单上。

接下来的步骤包括:

这些内容我们将在别的机会中详细解说。首先,请以这次的代码为基础,尝试制作一个属于你自己的原创表单吧!