使用php从数据库填充HTML下拉框,但我缺少一条记录

时间:2013-12-05 21:06:41

标签: php html mysql drop-down-menu mysqli

我从mysql数据库中提取行以填充下拉框。它有效,但它错过了一个选项。我想这可能是因为我在中间使用了<optgroup>标签,其中选项将是 - 实际上如果我删除它,则打印整个列表。 我的数据库有类似下面的数据:

Module Code|Module Name
-----------|-------------
SE1AA11    |Animal Acting
SE1BB11    |Boring Billiards
  ...      |     ...
SE2AA11    |Animal Archery
SE2BB11    |Boring Boxes
  ...      |     ...

...表示更多数据,是的,组成模块名称)

当页面加载时,它会错过第一个SE2选项。有什么想法吗?任何帮助,将不胜感激。代码如下:

<select name="module1" id="module1" style="display: none;">
<option value="" selected disabled>Module 1</option>
<?php 

$sql = "SELECT * FROM Modules";
$result=mysqli_query($con,$sql);

echo '<optgroup label="Part One">';

while (($row = mysqli_fetch_array($result)) && 
      (substr($row['ModuleCode'], 0, -4) == "SE1")){
$code = $row['ModuleCode'];
$name = $row['ModuleName']; 
echo '<option value="'.$code.'">' . $name . '</option>';
}
echo '</optgroup>';

echo '<optgroup label="Part Two">';
while (($row = mysqli_fetch_array($result)) && 
      (substr($row['ModuleCode'], 0, -4) == "SE2")){
$code = $row['ModuleCode'];
$name = $row['ModuleName']; 
echo '<option value="'.$code.'">' . $name . '</option>';
}
echo '</optgroup>';
?>
</select>

1 个答案:

答案 0 :(得分:1)

你错过了一条记录,原因是:当你的第一个while循环迭代了所有SE1 *记录时,它再次调用mysqli_fetch_array(),从结果集中取出下一条记录。此记录不符合您的第二个条件(它不以'SE1'开头),因此PHP移动到下一个while循环,其中另一个调用mysqli_fetch_array()将从结果集中获取下一个记录。

因为你的第一个'SE2 *'项已经被第一个循环提取,但从未被该循环处理过,所以你不会在下拉列表中看到该记录。