2016-04-19 85 views
2

具有予下述多重複選框的選擇:PHP POST陣列空和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

你可以通過運行一個小實驗來發現它。 – larsAnders

+0

我是初學者。我已經嘗試 – Amali

+0

好吧,但至少爲自己回答問題1。你可以做到這一點。 – larsAnders

回答

0
    之間的差異存在
  1. 如果我不選擇任何複選框然後提交表單,$ _POST數組是否包含索引$_POST['fruit_list']

沒有,關鍵fruit_list不存在

要檢查是在陣列項是否存在更好的使用array_key_exists因爲如果你有NULL值isset返回false

但在你的情況下isset是一個好辦法

isset - 確定是否設置了變量並且不是NULL(有任何值)。

empty - 確定一個變量是否爲空(0,NULL, '',假,陣列()),但你無法理解變量或密鑰的存在與否

例如:

$_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

1:無,$_POST['fruit_list']是空

ISSET檢查變量,看它是否已被設定,換言之,它檢查以查看是否變量是除了NULL或不分配一個值的任何值。如果變量存在並且具有非NULL值,ISSET將返回TRUE。這意味着分配了「」,0,「0」或FALSE的變量已設置,因此ISSET爲TRUE。

EMPTY檢查變量是否爲空。空被解釋爲:「」(一個空字符串),0(0作爲一個整數),0.0(0作爲一個float),「0」(0作爲一個字符串),NULL,FALSE,array() )和「$ var;」 (變量聲明,但沒有在一個類的值。

參閱here

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

+0

print_r($ _ POST)令人驚歎。非常感謝 – Amali

+0

歡迎@Amali主要是'print_r()'用於打印數組.... –

0

答案:

1.$_POST陣列不包含$_POST['fruit_list']
2.第一個答案是「」。如果變量不存在或者其值等於FALSE,則認爲該變量爲空。如果變量不存在,則empty()不會生成警告。 see in php.net
檢查變量是否設置,如果它檢查爲空,「」,0等 Isset只是檢查是否設置,它可以是任何非空。 see