在多个复选框的数组中设置默认值

时间:2015-04-11 02:04:38

标签: php checkbox

因此在设置表单中的复选框设置时遇到问题 在php文件的顶部我有以下代码:

       <?php
 if (is_array("check_list") && in_array("1",$_POST["check_list"]))
    {
      $checked = "";
    }
    else 
    {
     $checked = "checked";
    }
    if (is_array("check_list") && in_array("2",$_POST["check_list"]))
    {
      $checked = "";
    }
    else 
    {
     $checked = "checked";
    }
?>

在页面正文中有一个调用同一页面的表单,我有:

<input type="checkbox" name="check_list[]" value="1" <?php echo $checked; ?> style="margin-left:18px;"> Option 1 <input type="checkbox"  name="check_list[]" value="2" <?php echo $checked; ?> style="margin-left:18px;"> Option 2

然后在页面下方并根据上面的选择:

                <?php if (is_array("check_list") && in_array("1",$_POST["check_list"])){ ?> 
                 <li data-link="option1"><a>Option 1</a></li>
                <?php } ?>

                 <?php if (is_array("check_list") && in_array("2",$_POST["check_list"])){ ?>                     
                <li data-link="Option2"><a>Option 2</a></li>
                <?php } ?>   

我想要实现的是复选框都被选为默认选项 页面首次加载时,如果随后取消选中则会记住 状态并在执行另一次搜索时显示为未选中。

以上是不同尝试使其正常工作的结果 - 已经搜索并已达到此但它很难看并且可能会写 在较少的线条中好多了。

任何帮助表示赞赏...

2 个答案:

答案 0 :(得分:1)

检查!isset($_POST)以确定表单是否已作为POST发送,如果不是则默认,否则检查$_POST['check_list']数组中的值:

<?php if (!isset($_POST) || (is_array($_POST["check_list"]) && in_array(1, $_POST["check_list"]))){ ?> 
  <li data-link="option1"><a>Option 1</a></li>
<?php } ?>

// Assume these are $_POST, which is what you would use.
// Comment both out for default, no form posted.
// Uncomment one or both to try different combos.
//$post = array('check_list' => array(2,4));
//$post = array('check_list' => array(3,4,6,9));

for ($i = 0; $i < 10; $i++) {
    $checked = '';

    if (!isset($post)
         || (is_array($post['check_list'])
              && in_array($i, $post['check_list']))) {
        $checked = " checked='true'";
    }

    echo "<input type='checkbox' name='$i' value='$i'$checked/> $i" . PHP_EOL;
}

注释掉(模拟默认,而不是发布表格):

<input type='checkbox' name='0' value='0' checked='true'/> 0
<input type='checkbox' name='1' value='1' checked='true'/> 1
<input type='checkbox' name='2' value='2' checked='true'/> 2
<input type='checkbox' name='3' value='3' checked='true'/> 3
<input type='checkbox' name='4' value='4' checked='true'/> 4
<input type='checkbox' name='5' value='5' checked='true'/> 5
<input type='checkbox' name='6' value='6' checked='true'/> 6
<input type='checkbox' name='7' value='7' checked='true'/> 7
<input type='checkbox' name='8' value='8' checked='true'/> 8
<input type='checkbox' name='9' value='9' checked='true'/> 9

首先$post

<input type='checkbox' name='0' value='0'/> 0
<input type='checkbox' name='1' value='1'/> 1
<input type='checkbox' name='2' value='2' checked='true'/> 2
<input type='checkbox' name='3' value='3'/> 3
<input type='checkbox' name='4' value='4' checked='true'/> 4
<input type='checkbox' name='5' value='5'/> 5
<input type='checkbox' name='6' value='6'/> 6
<input type='checkbox' name='7' value='7'/> 7
<input type='checkbox' name='8' value='8'/> 8
<input type='checkbox' name='9' value='9'/> 9

第二个$post

<input type='checkbox' name='0' value='0'/> 0
<input type='checkbox' name='1' value='1'/> 1
<input type='checkbox' name='2' value='2'/> 2
<input type='checkbox' name='3' value='3' checked='true'/> 3
<input type='checkbox' name='4' value='4' checked='true'/> 4
<input type='checkbox' name='5' value='5'/> 5
<input type='checkbox' name='6' value='6' checked='true'/> 6
<input type='checkbox' name='7' value='7'/> 7
<input type='checkbox' name='8' value='8'/> 8
<input type='checkbox' name='9' value='9' checked='true'/> 9

答案 1 :(得分:1)

你可能意味着

if (is_array($_POST["check_list"]) && in_array("1",$_POST["check_list"]))  

您还使用一个变量$checked尝试同时保留选项1和选项2的选中状态。尝试使用2个变量$checked1$checked2。它现在的方式,无论你在查看选项1是否被选中时将$checked设置为什么,都会被选项2覆盖。