POST未选中隐藏元素的复选框

时间:2015-02-22 22:54:08

标签: php html post checkbox

我知道还有其他帖子有同样的问题,但它对我不起作用。 好吧,我有一个数据库表(图像)' 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
        }
    }

现在我的问题是,当我取消选中一个被检查的(因为在数据库中它是活动的,因此在页面加载时检查它)并提交表单,它不会发布。

2 个答案:

答案 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']);

返回未检查的所有名称的数组。然后,您可以根据需要通过并将其状态设置为“活动”或“已禁用”。