!空($ _ POST)与$ _SERVER [' REQUEST_METHOD'] ==' POST'

时间:2018-02-02 15:00:13

标签: php forms post

如果发现此问题$_POST vs. $_SERVER['REQUEST_METHOD'] == 'POST',人们似乎更愿意选中$_SERVER['REQUEST_METHOD'] == 'POST',而不是检查$_POSTisset($_POST)

(我已经不明白为什么人们会检查isset($_POST),但总是设置好)

但是如果我们检查!empty($_POST)而不是所有这些呢?

我的意思是,$_POST superglobale总是在页面上定义为空array,所以只检查它是否为空意味着表单是post method已提交,我错了吗?如果它不是空的,我们可以检查我们想要的每个字段。

我不明白为什么我们需要通过检查

添加一个额外的步骤
$_SERVER['REQUEST_METHOD'] == 'POST'

(另外,三重" ="不会更好?)

我已经搜索过但却一无所获。如果我什么也没找到,那可能就意味着我说废话^^。

有人可以告诉我,如果我错了吗?

1 个答案:

答案 0 :(得分:3)

PHP选择将$_POST$_GET命名为可怕,并且在这里主要引起混淆。 $_GET包含请求网址的查询参数,而$_POST包含已解析的请求正文数据(如果它是' s { {1}})。

任何URL以及任何请求都可以包含URL查询参数,因此application/x-www-form-urlencoded可以用于任何类型的请求,而不仅仅是HTTP $_GET请求。 HTTP GET POST请求(可以说是您组成的任何其他动词)可以包含PUT请求正文,该请求正在/ {最终可能会在{{} 1}}(不确定PHP是否会为除urlencoded个请求之外的任何内容解析正文数据)。 $_POSTPOST请求也不必包含正文数据;如果一个空的POST请求在您的应用程序中有意义,那就这样吧。

因此,PUTPOST$_POSTPOST,请求正文数据,查询参数等都相互正交。

如果要检查HTTP请求的方法,请选中$_GET。如果您想知道是否发送了任何urlencoded正文数据,请检查GET中是否有数据。为此,$_SERVER['REQUEST_METHOD']就足够了。 An empty array evaluates as falsey.通常情况下,你可以用一个代替另一个,但这取决于你要检查的内容。

empty is used for suppressing error reporting关于其他未定义的变量。除此之外,它的行为与正常的 truthy / falsey 检查完全相同。