您好我想在php中使用Multi数组复选框,我希望检查每个数组中的所有值是否已选中。我的问题是数组仅包含已检查的值。
这是我的代码: -
if($_POST['send']){
$co = count($_POST['recomID']);
for($i=0; $i<= $co -1 ;$i++) {
$result = mysql_query("UPDATE `recom` SET
`crit1` = '".$_POST['ch1'][$i] ."',
`crit2` = '".$_POST['ch2'][$i]."',
`crit3` = '".$_POST['ch3'][$i]."',
`crit4` = '".$_POST['ch4'][$i]."', WHERE `id` = '".$_POST['recomID'][$i]."'");
}
}
while($recomObject = mysql_fetch_object($recomResult)){
echo '
<tr>
<td>'.$recomObject->op.'</td>
<td align="center"><input type="checkbox" value="1" name="ch1[]" /></td>
<td align="center"><input type="checkbox" value="1" name="ch2[]" /></td>
<td align="center"><input type="checkbox" value="1" name="ch3[]" /></td>
<td align="center"><input type="checkbox" value="1" name="ch4[]" /></td>
<td><input type="hidden" name="recomID[]" value="'.$recomObject->id.'"/>
</td>
</tr>';}
答案 0 :(得分:2)
之前我遇到过这种情况,我通过在checkbox
之前放置一个隐藏的输入来解决这个问题。如果选中checkbox
,则该值将覆盖隐藏的值。这应该适合你。
第二个input
总是覆盖第一个checkboxes
。在这种情况下POST
如果取消选中POST
,则表示隐藏输入<?php
if (isset($_POST['ch1'])) {
echo '<pre>', print_r($_POST['ch1'], true), '</pre>';
echo '<pre>', print_r($_POST['ch2'], true), '</pre>';
echo '<pre>', print_r($_POST['ch3'], true), '</pre>';
echo '<pre>', print_r($_POST['ch4'], true), '</pre>';
}
?>
值为0
PHP:
<form action="<?php $_SERVER['PHP_SELF'] ?>" method="post">
<!-- Row 1 Checkboxes -->
<input type="hidden" value="0" name="ch1[0]" />
<input type="checkbox" value="1" name="ch1[0]" />
<input type="hidden" value="0" name="ch2[0]" />
<input type="checkbox" value="1" name="ch2[0]" />
<input type="hidden" value="0" name="ch3[0]" />
<input type="checkbox" value="1" name="ch3[0]" />
<input type="hidden" value="0" name="ch4[0]" />
<input type="checkbox" value="1" name="ch4[0]" />
<br />
<!-- Row 2 Checkboxes -->
<input type="hidden" value="0" name="ch1[1]" />
<input type="checkbox" value="1" name="ch1[1]" />
<input type="hidden" value="0" name="ch2[1]" />
<input type="checkbox" value="1" name="ch2[1]" />
<input type="hidden" value="0" name="ch3[1]" />
<input type="checkbox" value="1" name="ch3[1]" />
<input type="hidden" value="0" name="ch4[1]" />
<input type="checkbox" value="1" name="ch4[1]" />
<!-- And so forth... -->
<input type="submit">
</form>
HTML:
[x] [ ] [x] [ ]
[ ] [x] [ ] [x] [ SUBMIT ]
Array
(
[0] => 1
[1] => 0
)
Array
(
[0] => 0
[1] => 1
)
Array
(
[0] => 1
[1] => 0
)
Array
(
[0] => 0
[1] => 1
)
输出:
$i = 0;
while($recomObject = mysql_fetch_object($recomResult)){
echo '
<tr>
<td>'.$recomObject->op.'</td>
<input type="hidden" value="0" name="ch1['.$i.']" />
<input type="hidden" value="0" name="ch2['.$i.']" />
<input type="hidden" value="0" name="ch3['.$i.']" />
<input type="hidden" value="0" name="ch4['.$i.']" />
<td align="center"><input type="checkbox" value="1" name="ch1['.$i.']" /></td>
<td align="center"><input type="checkbox" value="1" name="ch2['.$i.']" /></td>
<td align="center"><input type="checkbox" value="1" name="ch3['.$i.']" /></td>
<td align="center"><input type="checkbox" value="1" name="ch4['.$i.']" /></td>
<td><input type="hidden" name="recomID[]" value="'.$recomObject->id.'"/>
</td>
</tr>';
$i++;
}
修改强>
{{1}}
答案 1 :(得分:0)
每个复选框都需要相同名称,但名称不同:
<td align="center"><input type="checkbox" value="0" name="ch[]" /></td>
<td align="center"><input type="checkbox" value="1" name="ch[]" /></td>
<td align="center"><input type="checkbox" value="2" name="ch[]" /></td>
<td align="center"><input type="checkbox" value="3" name="ch[]" /></td>
现在,要获取一个数组,其中每个复选框为1且每个未选中框为0,提交后执行...
if (isset($_POST['ch'])) { // assuming form method = post
$max = 3 // set number of checkboxes -1
for ($i = 0;$i <= $max;$i++)
$ch[$i] = intval(in_array($i,$_POST['ch']));
} else $ch = array();
编辑:要为每个复选框获得0或1,请执行...
<td align="center"><input type="checkbox" value="1" name="ch1" /></td>
<td align="center"><input type="checkbox" value="1" name="ch2" /></td>
<td align="center"><input type="checkbox" value="1" name="ch3" /></td>
<td align="center"><input type="checkbox" value="1" name="ch4" /></td>
然后提交......
if (isset($_POST['ch1'])) $ch1=0; else ch1=1;
...
如果您有大量复选框,则会使用$_POST
foreach
。
答案 2 :(得分:0)
此方法将为您提供已检查/未选中状态以及4个数组
形式:
html>
<form method="post">
<input type="hidden" name="ch1[]" value="0">
<input type="checkbox" name="ch1[]" value="1">
<input type="hidden" name="ch2[]" value="0">
<input type="checkbox" name="ch2[]" value="1">
<input type="hidden" name="ch3[]" value="0">
<input type="checkbox" name="ch3[]" value="1">
<input type="hidden" name="ch4[]" value="0">
<input type="checkbox" name="ch4[]" value="1">
<input type="submit">
</form>
以下将在提交时给出2个阵列中的一个(对于每个chX)
未选中:
array([0] => "0")
检查:
array([0] => "1", [1] => "0")
因此,[0]
索引中始终有一个值。示例PHP:
if(isset($_POST['ch1'][0])){ //do check anyway
echo $_POST['ch1'][0];
}