PHP数组复选框问题,提交后保持选中“正确”框

Posted

技术标签:

【中文标题】PHP数组复选框问题,提交后保持选中“正确”框【英文标题】:PHP array checkbox issue, keep the 'right' boxes checked after submit 【发布时间】:2017-01-05 23:39:57 【问题描述】:

我目前正在创建一个基于数组中每个学校的复选框系统。一切正常,除了提交后,只有第一个复选框被选中。 示例:我有 10 个复选框,复选框编号为 ​​4,5 和 6。提交后,选中框 1,2 和 3。 我希望框 4,5 和 6 在提交后保留他们的选择。 希望你能通过问题来想象。

<!--Start Checkbox system for schools-->
<form method="POST">
<?php
$q = "SELECT id, name FROM $school_table";  
$result = mysqli_query($con, $q);
    while(($row =  mysqli_fetch_array($result))) 
    //First line of <input>
    echo '<input type="checkbox" name="check_list[]" value="';  

    //Value of the input (school ID)
    echo $row['id'] .'"';                                       

    //Keep the box checked after submit. PROBLEM MIGHT BE HERE!!!
    if(isset($_POST['check_list'][$row['id']]))echo 'checked="checked"'; 

    //Echos the school name out after the checkbox. 
    echo '>' . $row['name'] . " <br> ";                         
    
?>
<script language="javascript">
//Select all on/off function
function checkAll(bx) 
    var cbs = document.getElementsByTagName('input');
    for(var i=0; i < cbs.length; i++) 
            if(cbs[i].type == 'checkbox') 
            cbs[i].checked = bx.checked;
            
    

</script>
<!--Check all mark. Works with Javascript written above-->
<input type="checkbox" name="check_all" onclick="checkAll(this)" <?php if(isset($_POST['check_all']))echo "checked"; ?>> Check all: On/Off
<input type="submit" name="submit" value="sort"> 
</form>
<!--End Checkbox system for schools-->

Image of the problem. Take a look

希望你们能帮帮我:)

【问题讨论】:

生成复选框的代码在哪里? $row['id'] 不一定匹配check_list[] 的索引。请注意,仅发布 选中 框。您可以考虑在输入名称中指定 ID:name="check_list[&lt;?=$row['id']?&gt;]"'; Working with checkbox from form array in php的可能重复 【参考方案1】:

我没有你的 MySQL,所以我通过使用 for 循环创建一些行来模拟它。

<html>
<!--Start Checkbox system for schools-->
<head>
<title>Test checklist</title>
</head>
<body>
<form method="POST">
<?php
     for ($i = 0; $i < 10; $i++) 
         $rows[$i]['id'] = $i*2+1;
         $rows[$i]['name'] = "Name ".strval($i*2+1);
     
 //     $q = "SELECT id, name FROM $school_table";
 //$result = mysqli_query($con, $q);
 //while(($row =  mysqli_fetch_array($result))) 
     foreach ( $rows as $row )
     
    //First line of <input>
    echo '<input type="checkbox" name="check_list['.$row['id'].']" value="checked"';

    //Keep the box checked after submit. PROBLEM MIGHT BE HERE!!!
    if(isset($_POST['check_list'][strval($row['id'])]))
        echo 'checked="checked"';

    //Echos the school name out after the checkbox.
    echo '>' . $row['name'] . " <br>\n";

?>
<script language="javascript">
//Select all on/off function
    function checkAll(bx)


    var cbs = document.getElementsByTagName('input');
    for(var i=0; i < cbs.length; i++) 

        if(cbs[i].type == 'checkbox') 

            cbs[i].checked = bx.checked;
        
    

</script>
<!--Check all mark. Works with Javascript written above-->
<input type="checkbox" name="check_all" onclick="checkAll(this)" <?php if(isset($_POST['check_all']))
    echo "checked"; ?>> Check all: On/Off
<input type="submit" name="submit" value="sort">
</form>
<!--End Checkbox system for schools-->
</body>
</html>

关键是这一行:

echo '<input type="checkbox" name="check_list['.$row['id'].']" value="checked"';

您需要将 check_list 中的数组索引设置为您的行 ID。否则 数组中的行将基于 0 并且具有值 = 您的行 ID。您对 post 字段的值实际上并没有按照您编写它的方式使用。

check_list[0] = '1'
check_list[1] = '3'
check_list[2] = '5'

【讨论】:

以上是关于PHP数组复选框问题,提交后保持选中“正确”框的主要内容,如果未能解决你的问题,请参考以下文章

保持复选框选中,刷新并提交后

php数组转换字符串及复选框如何勾选中

如何在提交后保持数组和动态复选框保持检查状态?

提交 PHP 后保留表单值

如果未选中复选框,如何提交 0,如果在 HTML 中选中复选框,如何提交 1 [重复]

提交 - 不工作后保持复选框数组