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

时间:2013-12-10 10:11:07

标签: php post isset

我想检查是否发布了$ _POST ['submit']。

我原来的代码是:

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

但是我有这个代码的PHP通知 - “Undefined index:submit in ...”

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

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

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

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

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

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

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

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

谢谢

5 个答案:

答案 0 :(得分:3)

isset($_POST['submit'])检查submit数组中是否设置了$_POST密钥。它不只是检查$_POST数组是否存在,因此不是“毫无意义”。如果您想检查值 not falsey == false),其中包含0,而不会触发错误,那就是empty的用途:< / p>

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

相同
if ($_POST['submit'])

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

有关详尽的解释,请参阅The Definitive Guide To PHP's isset And empty

答案 1 :(得分:2)

尝试

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

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

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

 public  class GreaterThanValConverter:IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        return (int) value > 0;
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

如果您确定您的方法肯定是POST。并且您在var x = foo; if ((x == "val1") || (x == "val2")) { alert('Hello World'); } 中有数据发布,您可以使用以下代码:

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

我通常更喜欢$_POST

答案 4 :(得分:0)

从PHP版本7开始,有一种称为“空联合运算符”的新方法。这种方法可以节省您的代码时间和空间。

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

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

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

echo $my_message ?? 'No message found';

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

使用空合并运算符还可以做更多的事情,下面的文档链接。

Documentation here