文章目录

PHP 表单处理:$_POST 与 $_GET 变量

发布于 2026-04-01 22:54:30 · 浏览 12 次 · 评论 0 条

PHP 表单处理是 Web 开发的核心环节。用户在网页上输入数据,点击提交后,PHP 脚本负责接收并处理这些数据。最常用的两种接收方式是通过 $_GET` 和 `$_POST 这两个超全局变量。掌握它们的使用方法和区别,是构建安全、高效交互界面的基础。


理解 HTTP 请求方法

在 HTML 表单中,<form> 标签的 method 属性决定了数据如何发送。理解这两种方式的区别,有助于根据实际场景做出正确选择。

  1. 分析 数据敏感性:如果数据包含密码、信用卡号等敏感信息,绝对不能使用 GET 方法。
  2. 考虑 数据大小:GET 方法对 URL 长度有限制(通常约 2048 字符),不适合发送长文本或文件。
  3. 评估 书签需求:如果希望用户可以将提交结果页面加入收藏夹(例如搜索查询页面),应使用 GET 方法。

使用 $_GET 获取数据 `$_GET用于收集通过method="get"发送的表单数据。数据会显示在 URL 地址栏中,形如http://example.com/welcome.php?name=John&age=25`。

  1. 创建 一个名为 form_get.html 的文件。
  2. 输入 以下 HTML 代码构建表单:
<!DOCTYPE html>
<html>
<body>

<form action="welcome_get.php" method="get">
  姓名: <input type="text" name="name"><br>
  年龄: <input type="text" name="age"><br>
  <input type="submit">
</form>

</body>
</html>
  1. 创建 处理脚本 welcome_get.php
  2. 输入 以下 PHP 代码接收数据:
<!DOCTYPE html>
<html>
<body>

欢迎 <?php echo htmlspecialchars($_GET["name"]); ?>!<br>
你的年龄是 <?php echo htmlspecialchars($_GET["age"]); ?> 岁。

</body>
</html>
  1. 运行 form_get.html,填写信息并点击提交。观察 浏览器地址栏,参数已附加在 URL 后面。

使用 $_POST 发送数据 `$_POST用于收集通过method="post"` 发送的表单数据。数据在 HTTP 请求体中传输,对用户不可见,且没有大小限制。

  1. 创建 一个名为 form_post.html 的文件。
  2. 输入 以下 HTML 代码,注意 method 已改为 post
<!DOCTYPE html>
<html>
<body>

<form action="welcome_post.php" method="post">
  姓名: <input type="text" name="name"><br>
  邮箱: <input type="email" name="email"><br>
  <input type="submit">
</form>

</body>
</html>
  1. 创建 处理脚本 welcome_post.php
  2. 输入 以下 PHP 代码:
<!DOCTYPE html>
<html>
<body>

欢迎 <?php echo htmlspecialchars($_POST["name"]); ?>!<br>
你的邮箱是: <?php echo htmlspecialchars($_POST["email"]); ?>

</body>
</html>
  1. 运行 form_post.html,提交表单。检查 地址栏,你会发现没有任何参数显示在 URL 中。

表单处理流程

下图展示了从用户填写表单到服务器处理返回的完整数据流向,帮助你直观理解两种方法在网络层面的传输区别。

graph TD A["用户填写表单"] -->|点击提交| B{"Form Method?"} B -- "get" --> C["URL 编码数据"] B -- "post" --> D["HTTP Request Body"] C --> E["服务器接收 \$_GET"] D --> F["服务器接收 \$_POST"] E --> G["PHP 脚本处理"] F --> G G --> H["生成 HTML 响应"] H --> I["浏览器显示结果"]

数据验证与安全

直接输出用户输入的数据极其危险,容易导致 XSS(跨站脚本攻击)。必须对数据进行处理。

  1. 使用 htmlspecialchars() 函数将特殊字符转换为 HTML 实体。这可以防止浏览器将用户输入的 <script> 标签当作代码执行。
$name = htmlspecialchars($_POST['name']);
echo $name;
```

2.  **验证** 表单是否通过 POST 方式提交,防止脚本被直接访问。

```php
if ($_SERVER["REQUEST_METHOD"] == "POST") {
    // 处理代码
}
  1. 检查 必填字段是否为空。

if (empty($_POST["name"])) {
    echo "姓名是必填的";
} else {
    $name = test_input($_POST["name"]);
}
```

4.  **清理** 数据(去除不必要的字符、反斜杠、空格)。可以封装一个通用函数:

```php
function test_input($data) {
  $data = trim($data);
  $data = stripslashes($data);
  $data = htmlspecialchars($data);
  return $data;
}
```

---

### $_GET 与 $_POST 对比

为了快速做出选择,请参考下表对比两者的核心差异。

| 特性 | $_GET | $_POST |
| :--- | :--- | :--- |
| **可见性** | 数据在 URL 中可见 | 数据在 HTTP 请求体中,不可见 |
| **安全性** | 较低,敏感信息易暴露 | 较高,适合传输密码等敏感信息 |
| **数据大小** | 受限于 URL 长度(约 2KB) | 无限制(通常由 php.ini 设置) |
| **书签支持** | 支持将结果页面加入收藏夹 | 不支持 |
| **历史记录** | 参数保存在浏览器历史记录中 | 参数不会保存在历史记录中 |
| **主要用途** | 搜索查询、分页、非敏感数据 | 用户登录、文件上传、表单提交 |

评论 (0)

暂无评论,快来抢沙发吧!

扫一扫,手机查看

扫描上方二维码,在手机上查看本文