test.php的:
<?php
var_dump($_GET);
var_dump($_POST);
submit_get.php :
<form action="test.php?param=some" method="GET">
<input type="submit" value="Submit">
</form>
submit_post.php :
<form action="test.php?param=some" method="POST">
<input type="submit" value="Submit">
</form>
提交submit_get.php给出如下内容:
数组 (size = 0)
空数组 (size = 0)
空白
提交submit_post.php输出如下内容:
数组 (size = 1)
&#39; param&#39; =&GT;字符串&#39; some&#39; (长度= 4)
数组 (size = 0)
空
所以,我不太明白POST和GET方法是如何与$ _POST和$ _GET PHP变量连接的,以及为什么提交的表单方法=&#34; POST&#34;输出空$ _POST和非空$ _GET?
答案 0 :(得分:1)
通过GET发送的表单需要在表单中定义所有值。然后,浏览器将根据这些值创建查询字符串(根据表单评估规则,“成功控件”等内容)。创建此查询字符串意味着将替换操作URL中的任何现有查询字符串。如果您需要在查询字符串中包含固定值,请使用隐藏的表单字段。
使用POST表单时,表单中的所有数据都会进入请求正文,而不是替换查询字符串。因此,没有替换发生,并且操作URL中的查询字符串仍然存在。
你可能正在使用超全局变量名POST和GET太字面了。 $_GET
是解析的查询字符串,它独立于HTTP方法,即它始终存在,即使有POST,PUT和DELETE请求也是如此。 $_POST
是符合某些约束时解析的HTTP主体(内容类型标头必须指定application/x-www-form-urlencoded
或multipart/form-data
,我认为该方法必须是“POST” - “PUT”不会以这种方式工作,“DELETE”不能有HTTP主体。请注意,如果不符合约束条件,即使您使用POST方法,也不会在$_POST
内获取任何数据。
答案 1 :(得分:0)
不要在表单操作中放置任何URL参数。创建一个隐藏的输入并填充它。在调用POST时将参数作为URL中的查询字符串传递给该参数作为GET,而不是POST。这就是我们创建隐藏输入的原因,以便它将作为POST传递而不是GET。
<form action="test.php" method="POST">
<input type="submit" value="Submit">
<input type="hidden" name="param" value="some">
</form>