Appearance
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>注意事项
- 安全性:所有用户输入都应该被验证和过滤,以防止安全漏洞
- 数据类型:超全局变量中的数据都是字符串类型,需要时应进行类型转换
- 存在性检查:使用
isset()或empty()检查变量是否存在 - 优先级:
$_REQUEST的优先级取决于php.ini中的request_order设置 - 性能:
$_REQUEST比单独使用$_GET或$_POST稍慢,因为它需要合并多个数组
练习
- 创建一个表单,使用 GET 方法提交数据并在服务器端接收
- 创建一个表单,使用 POST 方法提交数据并在服务器端接收
- 处理表单中的数组数据(如复选框)
