PHP 入门教程
使用
使用
PHP 表单处理基础
本教程共 65 篇 · 第 23 篇 · 更新于 2026-07-24 · 约 5 分钟阅读
PHPPHP8表单处理GETPOSTXSS安全
23. PHP 表单处理基础
本节目标:掌握 HTML 表单与 PHP 的配合方式,学会用
$_GET和$_POST接收用户数据,并了解基本的安全处理。
Web 应用的核心就是与用户交互。用户通过表单提交数据,PHP 负责接收并处理。本章带你从零搭建第一个可运行的表单程序。
23.1 表单的基本结构
HTML 表单用 <form> 标签定义,有两个关键属性:
action:数据提交到哪个 PHP 文件处理method:数据传输方式,常用GET或POST
<!-- form.html -->
<!DOCTYPE html>
<html>
<body>
<form action="welcome.php" method="post">
姓名:<input type="text" name="username"><br>
年龄:<input type="text" name="age"><br>
<input type="submit" value="提交">
</form>
</body>
</html>
对应的 welcome.php:
<?php
$name = $_POST["username"] ?? "访客";
$age = $_POST["age"] ?? 0;
echo "欢迎 {$name}!<br>";
echo "你今年 {$age} 岁。";
TipPHP 8.0 起可用
??(空合并运算符)给未填写的字段设置默认值,避免报错。
23.2 GET 与 POST 的区别
| 特性 | GET | POST |
|---|---|---|
| 数据位置 | URL 参数中(?name=值) | HTTP 请求体中 |
| 数据长度 | 受浏览器限制(约 2KB) | 理论上无限制 |
| 安全性 | 低,数据暴露在地址栏 | 较高,不在地址栏显示 |
| 用途 | 搜索、筛选、幂等操作 | 登录、提交、修改数据 |
| 缓存 | 会被浏览器缓存 | 不会缓存 |
使用 $_GET 接收数据
<?php
// 访问:search.php?keyword=php&page=2
$keyword = $_GET["keyword"] ?? "";
$page = (int) ($_GET["page"] ?? 1);
echo "搜索词:{$keyword}<br>";
echo "当前页:{$page}";
使用 $_POST 接收数据
<?php
if ($_SERVER["REQUEST_METHOD"] === "POST") {
$email = $_POST["email"] ?? "";
$pwd = $_POST["password"] ?? "";
// 后续进行验证...
}
?>
Note判断
REQUEST_METHOD可以确保代码只在表单提交后执行,避免首次打开页面就处理空数据。
23.3 超级全局变量简介
$_GET 和 $_POST 都是 PHP 的超级全局变量(详见第 15 章),在任何作用域都可直接使用,无需 global 声明。
<?php
function showInput() {
// 超级全局变量无需 global
print_r($_POST);
}
showInput();
23.4 基础安全处理
用户输入不可信任,接收后要先清理。推荐两步处理:
- 去空白:
trim() - 转实体:
htmlspecialchars()
<?php
function cleanInput(string $data): string {
$data = trim($data);
$data = htmlspecialchars($data, ENT_QUOTES, "UTF-8");
return $data;
}
$name = cleanInput($_POST["name"] ?? "");
echo "清理后的姓名:{$name}";
Note
htmlspecialchars()将<、>、"、'、&转为 HTML 实体,有效防止 XSS 攻击。PHP 8.1 起默认编码已为 UTF-8,但显式指定更安全。
23.5 小练习
创建一个简单的计算器表单,接收两个数字,用 PHP 计算并输出它们的和。
<?php
$num1 = (float) ($_POST["num1"] ?? 0);
$num2 = (float) ($_POST["num2"] ?? 0);
$sum = $num1 + $num2;
?>
<form method="post">
<input type="number" name="num1" step="0.1" value="<?= htmlspecialchars((string)$num1) ?>">
+
<input type="number" name="num2" step="0.1" value="<?= htmlspecialchars((string)$num2) ?>">
<input type="submit" value="计算">
= <?= $sum ?>
</form>
Tip
<?= ... ?>是<?php echo ... ?>的简写,PHP 8 中完全可用,输出更简洁。
来源:参考了 runoob「PHP 表单」、w3cschool「PHP 表单」等,改写后所得。