如果复选框是数组名称,则取消选中复选框值

时间:2015-08-04 15:53:10

标签: php checkbox

我需要在页面上提交所有复选框。我有以下代码来显示复选框:

foreach($categories as $category){
    $cat_name = $category->name;
    $cat_name = htmlspecialchars_decode($cat_name);
    $list_name = $network_name.' '.$cat_name;
    if (in_array($list_name, $list_names)) {
        $checked = 'checked';
    }else{
        $checked = '';
    }
    $output .= '<input type="hidden" name="subscribe[]" value="0">';
    $output .= '<input type="checkbox" name="subscribe[]" value="'.$list_name.'" '.$checked.'>';
    $output .= $list_name;
    $output .= '<br>';
}

现在我正试图用foreach循环处理这些:

foreach($_POST['subscribe'] as $value){
    echo "it has a value of".$value;
}

这只会显示已选中的复选框,但我还想获取未选中复选框的值。有没有办法做到这一点?

1 个答案:

答案 0 :(得分:2)

您遇到的问题是命名。每个循环都有2个元素,都命名为subscribe[],所以当发布时你无法看到'checked'值是否覆盖了'unchecked'值,因为你只有一个元素数组。

您需要一种方法将两个元素链接在一起,以便它们具有相同的名称,如果未选中,则检查的值将覆盖该值。

尝试在循环中递增一个整数并在两个元素中使用它,这样每个'循环'都有一个唯一的元素名称(而不是每个输入)。

尝试此修改:

$i = 1;
foreach($categories as $category){

    $output .= '<input type="hidden" name="subscribe[$i]" value="0">';
    $output .= '<input type="checkbox" name="subscribe[$i]"  value="'.$list_name.'" '.$checked.'>';

    $i++;
}