我知道还有其他帖子有同样的问题,但它对我不起作用。 好吧,我有一个数据库表(图像)' img_name'和' img_status'。状态可以是活跃的'或者'不活跃'。在php中我做了以下操作,将DB中的图像设置为活动或非活动状态:
while($row = mysqli_fetch_object($images)) {
if ($row->img_status == 'active') {
echo '<input type="hidden" name="image[]" value="' . $row->img_name . '">';
echo '<label><input type="checkbox" name="image[]" value="' . $row->img_name . '" checked> ' . $row->img_name . '</label>';
} else {
echo '<input type="hidden" name="image[]" value="' . $row->img_name . '">';
echo '<label><input type="checkbox" name="image[]" value="' . $row->img_name . '"> ' . $row->img_name . '</label>';
}
}
对于处于活动状态的行,将选中该复选框,并且取消选中该复选框。 在提交表格时我做了:
if(isset($_POST['image']) && is_array($_POST['image'])) {
foreach($_POST['image'] as $imageName) {
// here i want update table
// unchecked: set image to inactive
// checked: set image to active
}
}
现在我的问题是,当我取消选中一个被检查的(因为在数据库中它是活动的,因此在页面加载时检查它)并提交表单,它不会发布。
答案 0 :(得分:0)
我建议您创建一个名为status的列,并将其设为一个值为1的tinyint,如果图像状态为0,则表示它未激活,如果为1,则表示它处于活动状态可以使用单选按钮而不是像这样的复选框:
<input type="radio" name="status" value="0"<?php if ($row["status"] == 0) { echo "checked"; } ?> />
<input type="radio" name="status" value="1"<?php if ($row["status"] == 1) { echo "checked"; } ?> />
并且在你的while循环中你也可以这样做来显示文本而不是数字,并在任何你想要或需要的地方回显:
$stat = $row['status'];
if($stat == 0) {
$status = "Disabled";
} else {
$status = "Active";
}
答案 1 :(得分:0)
目前尚不清楚为什么需要隐藏字段,但如果您打算使用,请给它们一个不同的名称:
while($row = mysqli_fetch_object($images)) {
echo '<input type="hidden" name="allimage[]" value="' . $row->img_name . '">';
echo '<label><input type="checkbox" name="image[]" value="' . $row->img_name . '" ' . ($row->img_status == 'active' ? 'checked' : '') . '> ' . $row->img_name . '</label>';
}
然后,当你得到返回值时,$ _POST ['allimage']包含所有图像,$ _POST ['image']具有被检查的图像。然后:
array_intersect($_POST{'allimage'], $_POST['image']);
包含已检查的所有图像,
array_diff($_POST{'allimage'], $_POST['image']);
返回未检查的所有名称的数组。然后,您可以根据需要通过并将其状态设置为“活动”或“已禁用”。