$_GET,$_post与$_REQUEST

PHP $_GET

$_GET 变量是一个数组,内容是由 HTTP GET 方法发送的变量名称和值。

PHP $_POST

$_POST 变量用于收集来自 method="post" 的表单中的值。

$_POST 变量

$_POST 变量是一个数组,内容是由 HTTP POST 方法发送的变量名称和值。

$_POST 变量用于收集来自 method="post" 的表单中的值。从带有 POST 方法的表单发送的信息,对任何人都是不可见的(会显示在浏览器的地址栏),并且对发送信息的量也没有限制。

例子

<form action="welcome.php" method="post"> Enter your name: <input type="text" name="name" /> Enter your age: <input type="text" name="age" /> <input type="submit" /> </form> 

当用户点击提交按钮,URL 不会含有任何表单数据,看上去类似这样:

http://www.w3school.com.cn/welcome.php 

"welcome.php" 文件现在可以通过 $_POST 变量来获取表单数据了(请注意,表单域的名称会自动成为 $_POST 数组中的 ID 键):

Welcome <?php echo $_POST["name"]; ?>.<br /> You are <?php echo $_POST["age"]; ?> years old! 

为什么使用 $_POST?

  • 通过 HTTP POST 发送的变量不会显示在 URL 中。
  • 变量没有长度限制。

不过,由于变量不显示在 URL 中,所有无法把页面加入书签。

$_REQUEST 变量

PHP 的 $_REQUEST 变量包含了 $_GET, $_POST 以及 $_COOKIE 的内容。

PHP 的 $_REQUEST 变量可用来取得通过 GET 和 POST 方法发送的表单数据的结果。

例子

Welcome <?php echo $_REQUEST["name"]; ?>.<br /> You are <?php echo $_REQUEST["age"]; ?> years old! 

ATTENTION:慎用$_REQUEST 
如果get的一个变令名称和post的一个变量名称相同,则POST的值会覆盖GET的变量值 
以为REQYEST先获取了get的值,然后获取了post的值,post的值会覆盖get值 
我们可以来看php.ini中的配置 
; This directive describes the order in which PHP registers GET, POST, Cookie,
; Environment and Built-in variables (G, P, C, E & S respectively, often
; referred to as EGPCS or GPC). Registration is done from left to right, newer
; values override older values.
variables_order = "EGPCS"

这个EGPCS就是说明用$_REQUEST数组获取内容的优先级,其字母的含义分别代表为:E代表$_ENV,G代表$_GET,P代表$_POST,C代表$_COOKIE,S代表$_SESSION。后面出现的数据会覆盖前面写入的数据,其默认的数据写入方式就是EGPCS,所以POST包含的数据将覆盖GET中使用相同关键字的数据。
通过这个我们也可以看出PHP获取参数的步骤 
环境变量=》GET=》POST=》COOKIE=>SESSION 

转载于:https://www.cnblogs.com/balaamwe/archive/2012/04/19/2458654.html

<think>我们正在讨论PHP中的$_POST$_GET方法。根据引用内容,我们可以总结以下几点: 1. **数据传输方式**: - $_GET:通过URL参数传递数据,数据附加在URL之后,可见且长度有限制(通常受浏览器和服务器限制)。 - $_POST:通过HTTP请求体传递数据,数据不会显示在URL中,相对安全,且数据大小理论上无限制(但实际受服务器配置限制)。 2. **安全性**: - $_GET:由于数据暴露在URL中,不适合传输敏感信息(如密码)。 - $_POST:数据在请求体中,不会显示在URL中,因此相对安全。 3. **使用场景**: - $_GET:适用于获取数据(如搜索、分页),因为参数可被收藏或分享。 - $_POST:适用于提交表单数据(如登录、注册),特别是涉及敏感信息或数据量较大的情况。 4. **在PHP中的使用**: - 通过$_GET数组可以获取URL参数。 - 通过$_POST数组可以获取通过POST方法提交的表单数据。 5. **$_REQUEST**:这是一个超全局变量,它包含了$_GET$_POST$_COOKIE的内容。但使用它时需要注意安全性,因为数据来源不确定。 此外,引用[2]提到了处理POST数据时的安全措施,如使用`htmlspecialchars`转义和`filter_var`验证邮箱。引用[3]和[4]展示了如何使用$_GET$_POST获取表单数据。 因此,回答用户问题: PHP$_POST$_GET的主要区别在于数据传输方式、安全性和使用场景。$_GET通过URL传递数据,可见且长度有限;$_POST通过请求体传递,不可见且数据大小限制较小。$_POST更适合提交敏感信息或大量数据。 现在,根据系统指令,我们需要生成相关问题。 相关问题: 1. 在PHP中,如何安全地处理用户通过$_POST$_GET提交的数据? 2. 除了$_POST$_GETPHP中还有哪些超全局变量?它们的作用是什么? 3. 为什么说使用$_REQUEST可能存在安全风险?应该如何避免? 4. 在什么情况下应该使用$_GET方法提交表单数据?</think>### PHP$_POST$_GET 的区别详解 #### 1. **数据传输方式** - **$_GET** 通过 URL 参数传递数据,数据附加在 URL 后,格式为: `example.com?name=value&key=data` 例如: ```php // URL: page.php?user=Alice&id=123 $username = $_GET['user']; // 获取 "Alice" ``` 数据在地址栏可见,长度受浏览器限制(通常约 2048 字符)。 - **$_POST** 通过 HTTP 请求体传输数据,不可见: ```html <!-- 表单示例 --> <form method="POST" action="submit.php"> <input type="text" name="email"> <input type="submit"> </form> ``` ```php // submit.php 中获取数据 $email = $_POST['email']; ``` 数据大小通常由服务器配置限制(默认几 MB),无 URL 暴露风险[^1][^3]。 --- #### 2. **安全性对比** - **$_GET** ⚠️ 数据暴露在 URL 中,易被篡改或缓存,**不适合敏感信息**(如密码、支付数据)。 - **$_POST** 🔒 数据在 HTTP 头中传输,不可直接见,**相对更安全**(但仍需 HTTPS 加密)[^1][^2]。 --- #### 3. **使用场景** - **用 $_GET 时** - 获取公开数据(如商品 ID:`product.php?id=100`) - 可收藏/分享的链接(参数包含在 URL 中) - 幂等操作(如搜索、分页) - **用 $_POST 时** - 提交表单(登录、注册) - 修改服务器数据(创建/更新资源) - 传输敏感或大量数据(如图片上传)[^3][^4]。 --- #### 4. **代码处理差异** ```php // 安全获取 GET 数据(防 XSS) $search = htmlspecialchars($_GET['q'] ?? ''); // 验证并清理 POST 数据 if ($_SERVER["REQUEST_METHOD"] == "POST") { $email = filter_var($_POST['email'], FILTER_VALIDATE_EMAIL); $name = htmlspecialchars($_POST['name'], ENT_QUOTES, 'UTF-8'); } ``` > 关键点: > - `$_SERVER["REQUEST_METHOD"]` 判断请求类型 > - `filter_var()` 验证数据格式 > - `htmlspecialchars()` 防 XSS 攻击[^2][^4] --- #### 5. **其他注意事项** - **$_REQUEST 变量** 同时包含 `$_GET`、`$_POST` 和 `$_COOKIE` 数据,但**优先级可配置**(易导致混淆,不推荐)[^1]。 - **RESTful API 设计** GET 用于读取资源,POST 用于创建资源(遵循 HTTP 语义)。 --- ### 相关问题 1. 如何防止通过 `$_GET` 或 `$_POST` 传递的数据被恶意利用(如 SQL 注入)? 2. 在哪些场景下使用 `$_REQUEST` 比单独使用 `$_GET/$_POST` 更合适? 3. 除了 `$_GET` 和 `$_POST`,PHP 还有哪些超全局变量用于处理用户输入? 4. 如何通过 `$_SERVER` 变量判断请求是 GET 还是 POST 方法?[^2] [^1]: $_REQUEST$_GET$_POST 的区别和联系 [^2]: PHP$_GET$_POST 的安全处理方法 [^3]: 何时使用 method="get" 或 method="post" [^4]: PHP$_GET$_POST 的实际应用示例
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值