Skip to content

9.3 $_GET / $_POST / $_REQUEST 接收数据

PHP 提供了几个超全局变量用于接收表单提交的数据,其中最常用的是 $_GET$_POST$_REQUEST

超全局变量简介

超全局变量是在整个脚本中都可访问的变量,不需要使用 global 关键字。

$_GET

  • 用于接收通过 GET 方法提交的数据
  • 数据来自 URL 查询字符串
  • 是一个关联数组

$_POST

  • 用于接收通过 POST 方法提交的数据
  • 数据来自 HTTP 请求体
  • 是一个关联数组

$_REQUEST

  • 用于接收通过 GET、POST 或 COOKIE 方法提交的数据
  • $_GET$_POST$_COOKIE 的合并
  • 是一个关联数组

示例代码

接收 GET 数据

php
<?php
// get_data.php
if (isset($_GET['name']) && isset($_GET['age'])) {
    $name = $_GET['name'];
    $age = $_GET['age'];
    echo "姓名: $name<br>";
    echo "年龄: $age<br>";
    echo "通过 GET 方法接收数据<br>";
}
?>

<!-- 表单 -->
<form action="get_data.php" method="get">
    <label>姓名: <input type="text" name="name"></label><br>
    <label>年龄: <input type="number" name="age"></label><br>
    <input type="submit" value="提交">
</form>

接收 POST 数据

php
<?php
// post_data.php
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    if (isset($_POST['username']) && isset($_POST['password'])) {
        $username = $_POST['username'];
        $password = $_POST['password'];
        echo "用户名: $username<br>";
        echo "密码: $password<br>";
        echo "通过 POST 方法接收数据<br>";
    }
}
?>

<!-- 表单 -->
<form action="post_data.php" method="post">
    <label>用户名: <input type="text" name="username"></label><br>
    <label>密码: <input type="password" name="password"></label><br>
    <input type="submit" value="登录">
</form>

接收 REQUEST 数据

php
<?php
// request_data.php
if (isset($_REQUEST['name']) && isset($_REQUEST['email'])) {
    $name = $_REQUEST['name'];
    $email = $_REQUEST['email'];
    echo "姓名: $name<br>";
    echo "邮箱: $email<br>";
    echo "通过 REQUEST 方法接收数据<br>";
    echo "请求方法: " . $_SERVER['REQUEST_METHOD'] . "<br>";
}
?>

<!-- GET 表单 -->
<form action="request_data.php" method="get">
    <h3>GET 表单</h3>
    <label>姓名: <input type="text" name="name"></label><br>
    <label>邮箱: <input type="email" name="email"></label><br>
    <input type="submit" value="提交 (GET)">
</form>

<!-- POST 表单 -->
<form action="request_data.php" method="post">
    <h3>POST 表单</h3>
    <label>姓名: <input type="text" name="name"></label><br>
    <label>邮箱: <input type="email" name="email"></label><br>
    <input type="submit" value="提交 (POST)">
</form>

处理数组数据

当表单中有多个同名元素(如复选框)时,数据会以数组形式提交:

php
<?php
// array_data.php
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    if (isset($_POST['hobbies'])) {
        $hobbies = $_POST['hobbies'];
        echo "爱好: " . implode(', ', $hobbies) . "<br>";
    }
}
?>

<!-- 表单 -->
<form action="array_data.php" method="post">
    <label>爱好: <br>
        <input type="checkbox" name="hobbies[]" value="reading"> 阅读<br>
        <input type="checkbox" name="hobbies[]" value="sports"> 运动<br>
        <input type="checkbox" name="hobbies[]" value="music"> 音乐<br>
        <input type="checkbox" name="hobbies[]" value="travel"> 旅行<br>
    </label><br>
    <input type="submit" value="提交">
</form>

注意事项

  1. 安全性:所有用户输入都应该被验证和过滤,以防止安全漏洞
  2. 数据类型:超全局变量中的数据都是字符串类型,需要时应进行类型转换
  3. 存在性检查:使用 isset()empty() 检查变量是否存在
  4. 优先级$_REQUEST 的优先级取决于 php.ini 中的 request_order 设置
  5. 性能$_REQUEST 比单独使用 $_GET$_POST 稍慢,因为它需要合并多个数组

练习

  1. 创建一个表单,使用 GET 方法提交数据并在服务器端接收
  2. 创建一个表单,使用 POST 方法提交数据并在服务器端接收
  3. 处理表单中的数组数据(如复选框)

© 2026 编程马·菜鸟教程 版权所有