【问题标题】:POST unchecked checkboxes with hidden elements发布带有隐藏元素的未选中复选框
【发布时间】:2015-02-23 08:14:36
【问题描述】:

我知道还有其他帖子有同样的问题,但它对我不起作用。 好吧,我有一个带有“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
        }
    }

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

【问题讨论】:

  • 请澄清“不起作用”。你得到了什么,你期望得到什么?
  • 抱歉,我不小心保存了不完整的问题。

标签: php html post checkbox


【解决方案1】:

不清楚为什么需要隐藏字段,但如果要使用,请给它们一个不同的名称:

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

返回一个包含所有未检查名称的数组。然后,您可以根据需要将其状态设置为“Active”或“Disabled”。

【讨论】:

    【解决方案2】:

    我建议您创建一个名为 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";
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-12
      • 1970-01-01
      • 1970-01-01
      • 2016-05-28
      • 1970-01-01
      • 1970-01-01
      • 2013-10-14
      相关资源
      最近更新 更多