我需要在页面上提交所有复选框。我有以下代码来显示复选框:
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;
}
这只会显示已选中的复选框,但我还想获取未选中复选框的值。有没有办法做到这一点?
答案 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++;
}