PHP-正确检查是否发布了$_POST[';variable';]


PHP - proper check if $_POST['variable'] is posted

我想检查$_POST['submit']是否已过帐。

我最初的代码是:

if ($_POST['submit']) { }

但我有一个PHP通知,上面有这样的代码——"未定义的索引:在…中提交"

所以要删除通知,我必须写下:

if (isset($_POST['submit'])) { }

但这是毫无意义的,因为$_POST数组是全局的,并且它总是返回true。此外,如果我想在没有PHP通知的情况下检查$_POST['submit']是否不是0,我必须写下:

if (isset($_POST['submit']) && $_POST['submit'] != 0) { }

在这种特殊情况下,我更喜欢:

if ($_POST['submit']) {}

但在这里我得到了PHP通知。

那么,哪种方式最合适/最被接受呢?

感谢

isset($_POST['submit'])检查submit键是否设置在$_POST数组中。它不只是检查$_POST数组是否存在,因此不是"毫无意义的"。如果您想在不触发错误的情况下检查值是否为而非false== false),包括0,这就是empty的作用:

if (!empty($_POST['submit']))

这和是一样的

if ($_POST['submit'])

但是如果该值不存在,则不触发通知。

请参阅PHP的isset和empty的最终指南以获得详尽的解释。

尝试

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

从PHP版本7开始,有一种新的方法可用,称为"空凝聚运算符";。这种方法可以节省代码中的时间和空间。

$submit = $_POST['submit'] ?? '';

如果提交密钥不存在或为NULL,则$submit变量的值将为空字符串。

此方法不限于$_POST。它适用于任何变量。例如:

echo $my_message ?? 'No message found';

如果消息未初始化或为NULL,则上面的语句将输出No message found

使用下面的文档链接,您可以使用null联合运算符做更多的事情。

此处的文档

$_POST[]检查是否提交了变量而不是表单名称。

if ( isset($_POST['name']) ) {
    // work here
}

根据我的理解,应该如下所示:

if (isset($_SERVER) && isset($_SERVER['REQUEST_METHOD']) && $_SERVER['REQUEST_METHOD']=='POST'){
  # if method is post, code goes here.
}

如果您确信您的方法是POST。并且您在$_POST中有数据发布,您可以使用以下代码:

if (isset($_POST['submit']) && $_POST['submit'] != '') {# I think, '' instead of 0
  # if data is posted, code goes here.
}

我通常更喜欢$_POST