2017-03-20 76 views
-2

我在複選框的表單驗證時遇到問題。表單驗證 - 確保至少選中1個複選框

這裏是複選框代碼:

<div class="form-group"> 
    <div class="checkbox checkbox-danger checkbox-inline"> 
     <input type="checkbox" name="defect[]" value="{$ng_id}"> 
    </div> 
</div> 

如果我只是做這樣的事情,然後它呼應的出來不管我選擇。

foreach($_POST['defect'] as $defects) { 
echo $defects; 
} 

我曾嘗試使用空函數自身以及本:

if(empty($defects) || count($defects) < 1) { 

,但我只是不斷收到錯誤:

Undefined index: defect

+2

'$缺陷= $ _ POST [ '缺陷']; foreach($ defect as $ defect){...'這是訪問包含在$ _POST ['defect']內的數組的正確方法' –

+0

複選框不使用'empty()',它們使用'isset ()'。 –

+0

和這裏的形式或你如何處理「POST」? –

回答

-2

貼出的陣列通常是如果沒有勾選,則不設置。

,如果你還需要檢查它是一個數組你可以做以下檢查: -

if(@!is_array($_POST['defect'])){ 
    // Error 
} else { 
    foreach($_POST['defect']){ 
     // do stuff 
    } 
} 

這是使用@否則你會得到「沒有定義」錯誤抑制警告。

如果你想避免這種情況,你可以只是做:

if(!isset($_POST['defect'])){ 
    // Now check it's an array and has a count > 0 
} 

..但除此之外,你還需要確保它是一個數組,具有大於零的計數。在這個特定的實例中抑制警告的好處是你知道它是一個數組PLUS,你知道它必須有一個值,否則沒有數組會從POST傳入。這是罕見的時刻之一,在這種情況下,抑制警告可以節省您額外進行2次IF檢查以避免發生其他警告。您必須檢查它是否爲數組,否則您將收到「無效的foreach」警告..​​.

-1

問題是,您不選擇任何複選框,不發送名爲defect的變量。只需在任何具有空值的複選框之前創建隱藏字段即可始終發送它。

<input type="hidden" name="defect[]" value=""> 

而在PHP端:

if (!empty($_POST['defect']) && count($_POST['defect']) > 1) { 
    // all ok 
} else { 
    // show error 
} 
+0

不幸的是,這段代碼沒有考慮到$ _POST ['defect']可能不是一個數組。應用計數不是數組的變量將返回TRUE。然後用戶會假定他們可以遍歷不在那裏的數組,並在「警告」中獲得「爲foreach()提供的無效參數」。另外,用戶請求至少需要檢查1個複選框,但上面的代碼表示必須有多個複選框。 –

相關問題