2013-03-06 123 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

相关问题