循环遍历一组复选框

时间:2013-02-07 13:56:50

标签: php

我有一个表格,其中包含从表格填充的行。每行都有一个“复选框”,用户可以检查与否。

提交表单时,我希望能够读取已选中的复选框,并将结果插入数据表。

我的代码到目前为止 FORM:

<form method="post" name="form1" action="<?php echo $editFormAction; ?>">
<table
<?php do { ?>
<tr>
<td>input type="text" name="InspectRoomNo" value="<?php print $row_InspectItems['AuditItemNo']; ?>"></td>
<td>php echo $row_InspectItems['AuditItem']; ?>td>
<td>input name="check[]" type="checkbox"  ></td>
</tr>
<?php } while ($row_InspectItems = mysql_fetch_assoc($InspectItems)); ?>
<input type="submit" value="Insert record">
</table>

insert:从表中获取$ Items

while($row = mysql_fetch_assoc($Items))
{
$array[] = $row['AuditItem'];
}


foreach($array as $id) {
$AuditItemID = mysql_real_escape_string($id);

if(isset($_POST['check'])){
$Checked = mysql_real_escape_string($_POST['check'][$row]);
}
}

我遇到的问题是所有复选框的返回值都为true,即使未选中复选框也是如此。

任何人都可以帮我解决这个问题。

非常感谢。

3 个答案:

答案 0 :(得分:6)

这样做:

if(!empty($_POST['check'])) {
    foreach($_POST['check'] as $check) {
        echo $check; 
    }
}

答案 1 :(得分:2)

您应该将项目ID放在复选框名称中:

<td><input name="check[<?= $row_InspectItems['AuditItem']; ?>]" type="checkbox" /></td>

然后,您可以简单地迭代它:

foreach ($_POST['check'] as $id => $value) {
    // do stuff with your database
}

我假设比任何人都运行这个脚本是可信的,因为很容易伪造id列表;确保当前用户有权更新这些记录。

答案 2 :(得分:0)

正在发生的事情是,只有选中的复选框才会发送到服务器,因此您会看到您的$_POST['check']数组(这是一个数组!)小于您在屏幕上显示的项目数

你应该添加你的ID,以便你知道检查了什么复选框,并调整你的php处理代码来处理数组而不是单个值。

您也会覆盖每行InspectRoomNo,因此您也应该在那里使用数组。

表单方面看起来像:

<td><input type="text" name="InspectRoomNo[<?php echo row_InspectItems['AuditItemNo']; ?>]" value="<?php print row_InspectItems['AuditItemNo']; ?>"></td>
<td><?php echo $row_InspectItems['AuditItem']; ?></td>
<td><input name="check[<?php echo row_InspectItems['AuditItemNo']; ?>]" type="checkbox"  ></td>