在Web开发中,前端通过表单收集用户输入的信息后,通常会将数据提交到后端PHP程序进行处理,PHP提供了对应的全局变量来接收不同方式提交的表单数据,开发者可以根据提交方式选择合适的接收方法。

常见的表单提交方式
前端表单提交数据最常用的两种方式是GET和POST,两种方式的特点和适用场景不同,对应的PHP接收方式也有区别。
GET方式提交
GET方式会将表单数据拼接在URL后面进行传递,适合提交少量非敏感数据,比如搜索关键词、分页参数等。前端表单设置method为get时就会使用这种方式提交。
对应的HTML表单示例如下:
<form action="receive.php" method="get">
<label>用户名:</label>
<input type="text" name="username">
<label>年龄:</label>
<input type="number" name="age">
<input type="submit" value="提交">
</form>
在PHP中,使用$_GET全局数组接收GET方式提交的表单数据,数组的键对应表单元素的name属性值。
<?php
// 接收GET方式提交的表单数据
$username = $_GET['username'] ?? '';
$age = $_GET['age'] ?? '';
echo "接收到的用户名是:{$username},年龄是:{$age}";
?>
POST方式提交
POST方式会将表单数据放在请求体中传递,不会显示在URL里,适合提交敏感数据或者大量数据,比如用户登录密码、文件上传等。前端表单设置method为post时就会使用这种方式提交。
对应的HTML表单示例如下:
<form action="receive.php" method="post">
<label>用户名:</label>
<input type="text" name="username">
<label>密码:</label>
<input type="password" name="password">
<input type="submit" value="提交">
</form>
在PHP中,使用$_POST全局数组接收POST方式提交的表单数据,同样数组的键对应表单元素的name属性值。
<?php
// 接收POST方式提交的表单数据
$username = $_POST['username'] ?? '';
$password = $_POST['password'] ?? '';
echo "接收到的用户名是:{$username},密码是:{$password}";
?>
通用接收方式$_REQUEST
PHP还提供了$_REQUEST全局数组,它可以同时接收GET、POST以及COOKIE传递的数据,不需要区分提交方式,使用起来更灵活。
<?php
// 使用$_REQUEST接收表单数据,不区分GET和POST方式
$username = $_REQUEST['username'] ?? '';
$age = $_REQUEST['age'] ?? '';
echo "接收到的用户名是:{$username},年龄是:{$age}";
?>
不过需要注意的是,$_REQUEST的变量获取顺序受php.ini中request_order配置的影响,默认顺序是GET、POST、COOKIE,如果存在同名的键,后面的会覆盖前面的,实际开发中更推荐明确使用$_GET或者$_POST来接收数据,避免不必要的覆盖问题。
接收数据后的基础处理
接收到表单数据后,通常需要做一些基础处理再使用,避免安全问题和逻辑错误。
- 空值判断:使用isset()或者空合并运算符判断数据是否存在,避免未定义索引的报错。
- 数据过滤:对用户输入的数据做过滤,比如去除首尾空格,过滤特殊字符,避免XSS攻击。
- 类型转换:如果接收的是数字类型的数据,可以转换为对应的整数或者浮点数类型再使用。
以下是处理后的示例代码:
<?php
// 接收POST提交的表单数据并处理
$username = $_POST['username'] ?? '';
$age = $_POST['age'] ?? 0;
// 去除首尾空格
$username = trim($username);
// 过滤特殊字符,避免XSS
$username = htmlspecialchars($username, ENT_QUOTES, 'UTF-8');
// 转换为整数类型
$age = intval($age);
if (empty($username)) {
echo "用户名不能为空";
} else {
echo "处理后的用户名:{$username},年龄:{$age}";
}
?>
常见问题说明
在接收表单数据时,经常会遇到一些问题,这里做简单说明:
如果表单的enctype属性设置为multipart/form-data,用于文件上传场景,普通的表单字段依然可以通过$_POST接收,文件内容需要通过$_FILES全局数组接收。
另外,如果表单元素的name属性是数组形式,比如name="hobby[]",那么PHP接收到的对应数据会是数组类型,可以直接按照数组的方式遍历使用。
<?php
// 接收数组形式的表单数据
$hobbies = $_POST['hobby'] ?? [];
if (!empty($hobbies)) {
echo "你的爱好是:";
foreach ($hobbies as $hobby) {
echo htmlspecialchars($hobby, ENT_QUOTES, 'UTF-8') . " ";
}
}
?>