2012-01-16 112 views
0

有没有更好的方法来做到这一点?如果未设置,将一大组复选框的值设置为“0”

我有一个简单的形式与30复选框。 如果他们不签,就PHP而言,他们不存在(未设置),所以我为我更新直接下面这段代码数据库中的值设置为0:

if(!isset($_POST['checkbox1'])) { 
    $_POST['checkbox1'] = '0'; 
} 

if(!isset($_POST['checkbox2'])) { 
    $_POST['checkbox2'] = '0'; 
} 

if(!isset($_POST['checkbox3'])) { 
    $_POST['checkbox3'] = '0'; 
} 

如果他们被检查的价值是1,所以部分是好的。

我试着用这种玩弄但无济于事:

foreach($_POST AS $key=>$value) { 
    if($value != '1') { $_POST[$key] = '0'; } 
} 
+0

在这之后你对数据做了什么?它会去一个数据库吗?你是否首先创建一个对象? – Ben 2012-01-16 00:45:52

回答

1

如何

foreach (array('checkbox1', 'checkbox2', 'checkbox3') as $k) { 
    if (!isset($_POST[$k])) { 
     $_POST[$k] = '0'; 
    } 
} 
+0

谢谢,这正是我一直在寻找的! – David 2012-01-16 00:53:22

0

你总是可以:

$MAX_CHECKS = 30; 

for($i=1; $i<=$MAX_CHECKS; $i++) 
{ 
    if(!isset($_POST['checkbox' . $i])) 
    { 
    $_POST['checkbox' . $i] = '0'; 
    } 
} 

但似乎有可能是一个这里更深层的问题你真的想做什么?

+0

谢谢Josh,但我用rfausak的解决方案,因为它正是我所期待的。 – David 2012-01-16 00:54:39

1

我认为你的大问题在于你的表格。如果你有一组复选框,你需要验证,那么你应该将它们组合成的名称的数组,像这样:

<input type="checkbox" name="myCheckBoxes[]" value="A" />Checkbox A<br /> 
<input type="checkbox" name="myCheckBoxes[]" value="B" />Checkbox B<br /> 
<input type="checkbox" name="myCheckBoxes[]" value="C" />Checkbox C<br /> 

<?php 
    if(!empty($_POST['myCheckBoxes'])) { 
     foreach ($_POST['myCheckBoxes'] as $checkBoxValue) { 
     echo $checkBoxValue; 
     } 
    } 
?> 
0

如果你创建在你有一个隐藏的申请前的复选框的方式形式与您的复选框字段名称相同,并在该隐藏字段中设置值0,那么您无需在PHP中检查它是否设置。

这里我举一个例子。

<form name="test" method="POST" action="your_action.php"> 
    <input type="hidden" name="my_checkbox_1" value="0" /> 
    <input type="checkbox" name="my_checkbox_1" /><label>One</label> 
    <input type="hidden" name="my_checkbox_2" value="0" /> 
    <input type="checkbox" name="my_checkbox_2" /><label>Two</label> 
    <input type="hidden" name="my_checkbox_3" value="0" /> 
    <input type="checkbox" name="my_checkbox_3" /><label>Three</label> 
    <input type="submit" name="submit" value="OK"/> 

如果您没有提交任何检查复选框,你会得到他们的$ POST上述形式[“my_checkbox_x”]值seted为0。但是,如果你选中其中任意一个,然后它会覆盖以前的隐藏值,你会得到它的$ POST ['my_checkbox_x']值被设置为1.

然后,你不需要额外的循环检查你的表更新。我认为通过循环检查会更快。

谢谢