带有空和isset的PHP POST数组


PHP POST array with empty and isset

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

<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() 有什么区别

我大体上理解empty()isset()之间的区别。

你能在这个例子的背景下解释一下吗?

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

否,密钥fruit_list不存在

要检查数组中是否存在密钥,最好使用array_key_exists,因为如果值为NULL,isset将返回错误

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

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

empty-确定变量是否为空(0,null,'',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)

使用print_r()打印post数据。。

<?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()之间的差异,请访问此处

答案:

1.$_POST数组不包含$_POST['fruit_list']
2。第一个答案是""。如果变量不存在或其值等于FALSE,则视为空。如果变量不存在,empty()不会生成警告。请参阅php.net中的
3Empty检查变量是否已设置,如果已设置,则检查是否为null、"、0等。Isset只是检查是否设置了它,它可以是任何非null的值。参见