从数据库读取值后显示选中和未选中的复选框列表是不起作用的


Displaying checked and unchecked check box list after reading values from the database is not working

这是我的PHP代码:

  <?php 
include ('../connection.php');
  $query00 = mysql_query("SELECT * FROM ta_subjects WHERE USER_ID='$login_session' AND Subject_ID='00000001'",$connection);
    while ($row00 = mysql_fetch_array($query00))
              { 
                $thisSub[] = $row00['TopicName'];
              }
    $arrlength = count($thisSub);
    ?>
<!--=====Math=======-->
      <div class="tab-content">
        <div id="math" class="tab-pane fade in active"><br>
          <?php
            include '../connection.php';
            $query = mysql_query("SELECT * FROM topics WHERE SubjectID = '1'",$connection);
            while ($row = mysql_fetch_array($query))
              { 
                $sub1 = $row['TopicName']; 
                ?>
                <div class="col-sm-6">
                <?php
                $a=0;
                do
                {
                  if($thisSub[$a] == $sub1)
                  {
                    ?>
                    <input type="checkbox" class="sub" name="checklist1[]" value="<?php echo $sub1;?>" disabled checked>
                    <?php
                    $a = $a + 1;
                  }
                  else
                    $a = $a + 1;
                }while($arrlength == $a);
                ?>
                    <input type="checkbox" class="sub" name="checklist1[]" value="<?php echo $sub1;?>" disabled>
                    <label><?php echo $sub1;?></label>
                </div>
                <?php
            }
          ?>
        </div>

它应该看起来像这个

我正在比较数据库中所有受试者的列表和数据库中具有相同ID的受试者,并将其标记为已检查。但它只显示第一个选中的复选框并结束循环。因此,唯一选中的复选框仅为"代数"。我在这里错过了什么?


已解决

解决方法是将第二个复选框放在else块中,而不是像@dreamster建议的那样放在while循环下。

我认为

$query = mysql_query("SELECT * FROM topics WHERE SubjectID = '1'", $connection);

应该是

$query = mysql_query("SELECT * FROM topics", $connection);

也更改

if($thisSub[$a] == $sub1)

if(in_array($sub1, $thisSub))

我不确定我是否答对了,但试一下这样的方法,如果你告诉我们一些变量的来源,我们可以更好地帮助你,为什么要等待?

$a = 0;
// $thisSub = []; put this before you first while loop 
while ($row = mysql_fetch_array($query))
      { 
        $sub1 = $row['TopicName']; ?>
        <div class="col-sm-6">
    <input type="checkbox" class="sub" name="checklist1[]" value="<?php echo $sub1;?>" disabled <?php echo (in_array($sub1, $thisSub)) ? 'checked="checked"' : ''; ?> >
    <?php $a++; ?>
            <label><?php echo $sub1;?></label>
        </div>
        <?php
    }