带有空和isset的PHP POST数组

时间:2016-04-19 05:56:08

标签: php

我有以下多个复选框选择:

<input type="checkbox" name="fruit_list[]" value="apple">Apple
<input type="checkbox" name="fruit_list[]" value="banana">Banana
<input type="checkbox" name="fruit_list[]" value="mango">Mango
<input type="checkbox" name="fruit_list[]" value="orange">Orange

表单通过POST方法连接到processor.php。验证:

if ( empty($_POST['fruit_list']) ){
    echo "You must select at least one fruit.<br>"; 
} else{
    foreach ( $_POST['fruit_list'] as $frname ){
        echo "Favourite fruit: $frname<br>";
    }
}

我的问题(以上代码有效!但对我来说不明确):

  1. 如果我没有选中任何复选框然后提交表单,$_POST数组是否包含名为$_POST['fruit_list']的索引?

  2. 假设您的答案为“否”,那么如何将empty()用于该不存在的数组元素?不存在的数组元素表示NULL

  3. 使用!isset($_POST['fruit_list'])代替empty()

  4. 有何区别?

    我一般了解empty()isset()之间的区别。

    你可以在这个例子中解释一下吗?

4 个答案:

答案 0 :(得分:2)

1:不,$_POST['fruit_list']为空

ISSET检查变量是否已设置,换句话说,它检查变量是否为除NULL以外的任何值或未赋值。如果变量存在且ISCS不是NULL,则ISSET返回TRUE。这意味着设置了分配了“”,“0”,“0”或“FALSE”的变量,因此ISSET为TRUE。

EMPTY检查变量是否为空。 Empty被解释为:“”(空字符串),0(0作为整数),0.0(0作为浮点数),“0”(0作为字符串),NULL,FALSE,array()(空数组) )和“$ var;” (声明的变量,但在类中没有值。

参考here

答案 1 :(得分:1)

  1. 如果我没有选中任何复选框然后提交表单,$ _POST数组是否包含一个名为$_POST['fruit_list']的索引
  2.   

    不,关键的fruit_list不存在

    要检查数组中是否存在密钥,请更好地使用array_key_exists,因为如果您有NULL值isset则返回false

    但在你的情况下,isset是一个好方法

    isset - 确定变量是否已设置且不为NULL(具有任何值)。

    empty - 确定变量是否为空(0,null,&#39;&#39;,false,array())但您无法理解变量或密钥是否存在

    例如:

    $_POST['test'] = 0;
    print 'isset check: ';
    var_dump(isset($_POST['test']));
    print 'empty check: ';
    var_dump(empty($_POST['test']));
    
    $_POST['test'] = null;
    
    print 'isset NULL check: ';
    var_dump(isset($_POST['test']));
    
    print 'key exists NULL check: ';
    var_dump(array_key_exists('test', $_POST));
    
    isset check: bool(true)
    empty check: bool(true)
    isset NULL check: bool(false)
    key exists NULL check: bool(true)
    

答案 2 :(得分:0)

使用print_r()打印帖子数据..

<?php 
echo "<pre>"; print_r($_POST);
if (empty($_POST['fruit_list']) ){
    echo "You must select at least one fruit.<br>"; 
}
else{
    foreach ( $_POST['fruit_list'] as $frname ){
        echo "Favourite fruit: $frname<br>";
    }
}
?>

如果您没有选中任何复选框,那么您将无法获得$ _POST ['fruit_list'],数组中不存在数组索引fruit_list

isset()empty() Visit Here

之间的差异

答案 3 :(得分:0)

答案:

1。 $_POST数组不包含$_POST['fruit_list']
  2。第一个答案是“”。如果变量不存在或者其值等于FALSE,则该变量被视为空。如果变量不存在,empty()不会生成警告。see in php.net
 <强> 3 即可。 清空检查变量是否已设置,如果是,则将其检查为空,“”,0等。    Isset 只是检查它是否设置,它可以是任何非空的。 see