如果发现此问题$_POST vs. $_SERVER['REQUEST_METHOD'] == 'POST',人们似乎更愿意选中$_SERVER['REQUEST_METHOD'] == 'POST'
,而不是检查$_POST
或isset($_POST)
。
(我已经不明白为什么人们会检查isset($_POST)
,但总是设置好)
但是如果我们检查!empty($_POST)
而不是所有这些呢?
我的意思是,$_POST
superglobale总是在页面上定义为空array
,所以只检查它是否为空意味着表单是post method
已提交,我错了吗?如果它不是空的,我们可以检查我们想要的每个字段。
我不明白为什么我们需要通过检查
添加一个额外的步骤$_SERVER['REQUEST_METHOD'] == 'POST'
(另外,三重" ="不会更好?)
我已经搜索过但却一无所获。如果我什么也没找到,那可能就意味着我说废话^^。
有人可以告诉我,如果我错了吗?
答案 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
个请求之外的任何内容解析正文数据)。 $_POST
或POST
请求也不必包含正文数据;如果一个空的POST
请求在您的应用程序中有意义,那就这样吧。
因此,PUT
,POST
,$_POST
,POST
,请求正文数据,查询参数等都相互正交。
如果要检查HTTP请求的方法,请选中$_GET
。如果您想知道是否发送了任何urlencoded正文数据,请检查GET
中是否有数据。为此,$_SERVER['REQUEST_METHOD']
就足够了。 An empty array evaluates as falsey.通常情况下,你可以用一个代替另一个,但这取决于你要检查的内容。
empty
is used for suppressing error reporting关于其他未定义的变量。除此之外,它的行为与正常的 truthy / falsey 检查完全相同。