2013-03-06 172 views
1

我有4個複選框,用戶需要勾選1才能繼續(但可能會打勾更多)。所以我做了4個複選框:檢查PHP中是否至少勾選了1個複選框

I have blue skin 
    <input class="cbox" type="checkbox" name="skin" value="Yes" /><br> 
    I have blue hair 
    <input class="cbox" type="checkbox" name="hair" value="Yes" /><br> 
    I have blue eyes 
    <input class="cbox" type="checkbox" name="eyes" value="Yes" /><br> 
    I have blue teeth 
    <input class="cbox" type="checkbox" name="teeth" value="Yes" /><br> 

我期待存儲這些數據。但首先,我確認至少檢查了其中一個。

if(isset($_POST['sent']) && !(isset($_POST['skin']) || isset($_POST['hair']) || isset($_POST['eyes']) || isset($_POST['teeth']))) 

我不確定這是實現這一目標的最佳方法,因爲我想存儲所有這些列表。我想最好的方法是使用數組。

I have blue skin 
    <input class="cbox" type="checkbox" name="blue[]" value="skin" /><br> 

並將其存儲在文本字段中,使其崩潰。作爲新人,我不確定如何實現這一點,我正在閱讀的教程有點混亂。這樣做會允許我檢查數組是否爲空(而不是4個獨立的isset?)。我將如何使用$ _POST處理數組?

回答

0

最後,我做了以下工作(圍繞它做了大量的工作)。

I have blue skin 
    <input class="cbox" type="checkbox" name="blue[]" value="skin" /><br> 

所有4個使用相同的方法。然後...

if(isset($_POST['sent']) && empty($_POST['blue'])) { 
$bluedata = mysql_escape_string(implode(",",$_POST['blue'])); 
} 

然後我寫了那個字符串到數據庫。

希望這可以幫助別人。

3

您可以嘗試使用name="appearance[skin]",name="appearance[hair]"等,然後檢查
if(empty($_POST['appearance']))與否。如果它是空的,那麼沒有選擇複選框。

然後,您可以訪問$_POST['appearance']['skin']等等,或使用
foreach($_POST['appearance'] as $attribute=>$value)遍歷選擇。

+0

如果沒有點擊複選框,那麼'$ _POST ['appearance']'根本就不應該存在,即不會設置爲空數組。但是在這兩種情況下,檢查'empty($ _POST ['appearance'])'是真的。 – feeela 2013-03-06 20:24:13

+0

@feeela是的,這就是我的意思XD將編輯澄清。 – 2013-03-06 20:25:13

0

你可以把所有的字段到一個數組,然後遍歷數組,並設置一個標誌:

$checkboxes = array('skin', 'hair', 'eyes', 'teeth'); 

$oneTicked = false; 
foreach($checkboxes as $checkbox) 
{ 
    if(!empty($_POST[$checkbox])) 
    { 
     $oneTicked = true; 
     break; 
    } 
} 

然後,你可以檢查是否$oneTicked是真實的。

+1

導致未發送的每個變量的未定義索引通知。相反,只考慮在$ checkboxes數組中保存鍵名,然後檢查if(empty($ _ POST [$ checkbox]))'。當找到一個匹配項時,還要考慮'從循環中斷開,因爲沒有必要繼續搜索。 – 2013-03-06 20:26:31

+0

好主意!我已經更新了我的答案,謝謝。 – Jamesking56 2013-03-06 20:28:25

相關問題