【PHP入门】网站的心脏!表单数据接收机制
“联系我们”表单是网站不可或缺的一部分。它是连接网站运营者与访问者,接收用户提问和反馈的重要窗口,可以说是网站的心脏。但是,很多人可能会觉得“想做一个表单,但输入的数据要怎么接收呢?”,从而感到困难。
本文将以初学者也能看懂的方式,详细解说其核心部分——“用PHP从HTML表单接收数据,并显示在确认页面上”的整个流程。这次,我们将以一个包含`name`, `email`, `message`三个项目的简单邮件表单为例,学习仅用一个文件就实现输入表单和确认画面的方法。我们准备了只需复制粘贴就能运行的代码,请务必体验一下让代码“跑起来”的乐趣!
要准备运行PHP(开发环境),如果还没有搭建XAMPP的朋友,请参考【PHP入门】XAMPP下载及安装方法完全解析!。 安装后,将PHP文件放置在指定文件夹(如 `htdocs`)中,准备工作就完成了!
1. Web表单的机制:HTML与PHP的协作
Web表单大致由两个部分构成。
- HTML: 用户输入文字的“外观”部分。
- 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)。
- 初次打开页面时:是普通访问,所以是`GET`。`if`语句为`false`,显示`else`块内的输入表单。
- 提交表单时:以`method="POST"`方式发送,所以`if`语句为`true`,显示确认画面。
此外,将表单的`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`语句进行处理分支是表单制作的核心部分。发送邮件的功能因为涉及到服务器设置等,会稍微复杂一些,但只要掌握了从输入到确认的这个流程,就可以应用到任何表单上。
接下来的步骤包括:
- 在确认画面上按下“发送”按钮时,使用PHP的`mb_send_mail()`函数实际发送邮件的处理。
- 更高级的验证(字数限制、只允许特定字符类型等)。
- 发送完成后,重定向到“感谢页面”。
这些内容我们将在别的机会中详细解说。首先,请以这次的代码为基础,尝试制作一个属于你自己的原创表单吧!