Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/240.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP if($\u POST)烦恼_Php_Post - Fatal编程技术网

PHP if($\u POST)烦恼

PHP if($\u POST)烦恼,php,post,Php,Post,我发现自己现在正在处理很多其他人的代码。我在一些代码中注意到了if(isset($\u POST)),并确保解决了这个问题。(它将始终计算true)。然后我开始看到: if ($_POST) 经过思考,这让我很恼火,但似乎仍然有效。是否有人认为使用此检查表单是否已提交有任何问题?如果$\u POST数组为空,则其计算结果为false。任何特殊情况下,这可能不起作用吗?应该没有不起作用的情况(无论如何,这不是我能想到的),但我仍然会这样做: if (!empty($_POST)) { 让你做的

我发现自己现在正在处理很多其他人的代码。我在一些代码中注意到了
if(isset($\u POST))
,并确保解决了这个问题。(它将始终计算
true
)。然后我开始看到:

if ($_POST)

经过思考,这让我很恼火,但似乎仍然有效。是否有人认为使用此检查表单是否已提交有任何问题?如果
$\u POST
数组为空,则其计算结果为
false
。任何特殊情况下,这可能不起作用吗?

应该没有不起作用的情况(无论如何,这不是我能想到的),但我仍然会这样做:

if (!empty($_POST)) {
让你做的事情更清楚。这实际上是同一句话,但使之更加明显

[timwolla@/var/www]telnet localhost 80
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
GET /test.php HTTP/1.0
Host: localhost

HTTP/1.0 200 OK
X-Powered-By: PHP/5.3.6-13ubuntu3.3
Content-type: text/html
Content-Length: 13
Connection: close

array(0) {
}

似乎对GET请求也没问题。但是使用
更具可读性!空($\u POST)
或类似内容。

如果程序员不希望发布表单,那么它将成为一个非常危险的测试。我的模式是针对我期望的每个领域进行测试:

if (isset($_POST['foo_id']) && is_numeric($_POST['foo_id'])
    && isset($_POST['name'])
    && isset($_POST['value'])
) {

通过这种方式,我可以确保不存在处理错误表单的机会。

这是一个不可靠的测试-它假设至少会提交一个表单元素。完全有可能在未提交数据的情况下执行POST,这将使($\u POST)的计算结果为false,但在实际执行POST时,它将为meta false

正确的100%可靠测试是必要的

if ($_SERVER['REQUEST_METHOD'] == 'POST') { ... }

要检查数组是否为空,应使用或并检查其是否大于零:

if( count($_POST) > 0 )
{ # Array not empty
}

检查是否提交表单的更好方法是检查是否发送了post VAR:

if( $_SERVER['REQUEST_METHOD'] === 'POST' )
{ # Form submitted
}

在PHP4.1之前,没有$\u POST。取而代之的是一个名为$HTTP_POST_VARS的变量,除了它不是一个超全局变量之外,它的作用是相同的$HTTP_POST_VARS已被弃用,希望您不必太担心这一点,但是如果您运行的是php<4.1安装,那么$_POST的检查实际上可能会返回false,因此您的代码可能已经检查过了

if($\u POST)
的行为与
if(!empty($\u POST))
相同,只是有一个重要的区别:如果未设置$\u POST,第一个版本将抛出通知,empty()-version将不会抛出通知(当然,必须将error\u输出设置为回显通知,以便您看到某些内容)。如果正在检查的变量可能未设置,则应始终使用empty

我想说,如果你发现一个
if($\u POST)
,那是一种难闻的气味。您已经注意到原始编码者的意图不清楚。如果他想让用户知道HTTP请求使用了POST方法,那么Wouter的回答会使意图更加明确。如果他想检查$\u POST是否存在(检查旧的PHP版本),那么
isset($\u POST)
就更清楚了。如果他想检查POST请求是否至少有一个参数send using POST,那么
empty($\u POST)
就更清楚了,而且这种意图应该很少出现


我的建议是继续阅读源代码,并检查您是否能够找出原始编码者的意图,然后相应地替换构造(或者至少在该行上添加注释)。

顺便问一下,为什么要检查POST array?您将检查POST变量,对吗
$\u POST[“data1”]
检查单个
POST
变量的有效性可能更好,但使用它的一个很好的理由是,如果用户手动导航到表单处理页面,在这种情况下
POST
数组将为空,您可以相应地处理这种情况。我不认为有一种情况下,该位代码将失败,虽然。我认为最好的办法是使用它,然后分别检查
if
中的每个变量。我总是检查特定的值。我只是想知道我是否应该浏览和编辑在其他人代码中找到的数百个if($\u POST)实例。empty是不正确的。如果数组(0),则它也是空的。用于检查大小。@WouterJ
如果数组(0)也是空的
-不正确。试试这个
$arr=array(0);var_转储(空($arr))
@DaveRandom,试试这个:if(empty(array(0)))回显“I'm empty”;这是因为
empty()。如果您传递一个尚未分配给变量的值,它将为空,因为实际上您没有传递任何内容。转向或错误报告,你会明白我的意思…这更有意义,因为我在处理史前代码。