在PHP编程中,当我们需要同时处理通过多种HTTP方法提交的数据时,$_REQUEST 超全局数组提供了便捷的解决方案。
$_REQUEST 是一个关联数组,默认情况下包含了 $_GET、$_POST 和 $_COOKIE 的数据。它允许开发者通过统一的方式访问通过不同HTTP方法提交的数据。
$_REQUEST数组的语法结构:
<?php // 访问请求数据$_REQUEST['参数名'];// 设置REQUEST变量$_REQUEST['参数名'] = 值;?>
我们知道,$_GET是通过URL传递,$_POST是通过HTTP请求体传递,所以我们可以准备一个test.php来模拟这两个场景来验证$_REQUEST数组:
<?php
error_reporting(E_ALL);//开启所有报错
ini_set('display_errors', 1);//允许在页面展示错误
// 设置cookie
setcookie('my_cookie', 'cookie_data', time() + 3600, '/');//准备一个1个小时后过期的cookie
// 处理提交的数据
if ($_SERVER['REQUEST_METHOD'] === 'POST' || !empty($_GET)) {
echo "<h2>数据接收结果:</h2>";
/*显示GET参数*/
echo "<strong>GET参数:</strong><br>";
foreach ($_GET as $key => $value) {
echo "$key = $value<br>";
}
/*显示POST参数 */
echo "<br><strong>POST参数:</strong><br>";
foreach ($_POST as $key => $value) {
echo "$key = $value<br>";
}
/*显示COOKIE参数*/
echo "<br><strong>COOKIE参数:</strong><br>";
foreach ($_COOKIE as $key => $value) {
echo "$key = $value<br>";
}
/*显示REQUEST参数(三者合并)*/
echo "<br><strong>REQUEST参数(全部):</strong><br>";
foreach ($_REQUEST as $key => $value) {
echo "$key = $value<br>";
}
echo '<hr><a href="test.php">返回</a>';
exit;
}
?>
<!DOCTYPE html>
<html>
<head>
<title>:$_REQUEST 数组</title>
</head>
<body>
<h1>Dotcpp编程——:$_REQUEST 数组测试</h1>
<!-- GET表单 -->
<form method="GET" action="test.php">
<h3>GET 请求:</h3>
<input type="text" name="get_name" value="get_test">
<button type="submit">GET提交</button>
</form>
<form method="POST" action="test.php">
<h3>POST 请求:</h3>
<input type="text" name="post_name" value="post_test">
<button type="submit">POST提交</button>
</form>
<p><strong>说明:</strong></p>
<ul>
<li>GET参数:通过URL传递(如:?get_name=get_test)</li>
<li>POST参数:通过表单体传递(不在URL中显示)</li>
<li>COOKIE参数:通过浏览器cookie传递</li>
<li>REQUEST参数:包含以上所有(注意:同名参数有优先级)</li>
</ul>
<p><strong>重要提示:</strong></p>
<ul>
<li>COOKIE需要刷新页面或第二次访问才能看到</li>
<li>REQUEST中同名参数:POST > GET > COOKIE(受php.ini中request_order影响)</li>
</ul>
</body>
</html>总结:$_REQUEST 数组在快速开发和简单应用中很方便,但在重要的生产代码中建议使用更明确的数据来源。
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程