有更好的方法吗?
我有一个带有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 :(得分:1)
怎么样
foreach (array('checkbox1', 'checkbox2', 'checkbox3') as $k) {
if (!isset($_POST[$k])) {
$_POST[$k] = '0';
}
}
答案 1 :(得分: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;
}
}
?>
答案 2 :(得分:0)
你可以随时:
$MAX_CHECKS = 30;
for( $i=1; $i<=$MAX_CHECKS; $i++ )
{
if( !isset( $_POST['checkbox' . $i] ) )
{
$_POST['checkbox' . $i] = '0';
}
}
但似乎这里可能存在更深层次的问题。你真的想做什么?
答案 3 :(得分: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']值被设置为0.但如果您选中其中任何一个,那么它将覆盖之前的隐藏值并且您获得它的$ POST ['my_checkbox_x']值设置为1。
然后您无需为表更新额外检入循环。我认为它比循环检查更快。
由于