我从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>
答案 0 :(得分:1)
你错过了一条记录,原因是:当你的第一个while循环迭代了所有SE1 *记录时,它再次调用mysqli_fetch_array()
,从结果集中取出下一条记录。此记录不符合您的第二个条件(它不以'SE1'开头),因此PHP移动到下一个while循环,其中另一个调用mysqli_fetch_array()
将从结果集中获取下一个记录。
因为你的第一个'SE2 *'项已经被第一个循环提取,但从未被该循环处理过,所以你不会在下拉列表中看到该记录。