簡體   English   中英

PHP陣列復選框問題,提交后保持選中“正確的”復選框

[英]PHP array checkbox issue, keep the 'right' boxes checked after submit

我目前正在基於數組中的每個學校創建一個復選框系統。 一切正常,除了在提交后僅選中第一個復選框。 示例:我有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-->

問題的形象。 看一看

希望你們能幫助我:)

我沒有您的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'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM