我正在尝试使用下面的代码完成两件事。首先,我希望从数据库中填充我的选择选项。其次,我希望表单中的字段具有在页面加载时选择的存储值(例如在成员的配置文件中)。我在下面实现的方法可行,但有两个问题。首先,如果您打开下拉菜单,则所选选项将出现两次(一次在顶部,一次在其正常位置)。其次,如果它是必填字段,则用户必须打开下拉菜单并再次选择它,即使它出现在该字段中(可怕的ux)。如果不是必填字段,则该表单的作用就好像什么都没有选择一样,并且在接下来的行中出现未定义索引错误。我非常确定,有一种更好的方法可以实现我要实现的目标,而不会给我带来这些问题……所有的帮助都非常有用。
<?php
$query6 = "SELECT catname FROM travisor_catagory";
$result6 = mysqli_query($conn, $query6) or die(mysqli_error($conn));
$queryread3 = "SELECT * FROM travisor_catagory WHERE id = $catagory";
$result3 = mysqli_query($conn, $queryread3) or die(mysqli_error($conn));
if (mysqli_num_rows($result3) > 0) {
while ($row = mysqli_fetch_assoc($result3)) {
$cat = $row["catname"];
}
}
echo "<div class='form-group'>
<label>Catagory *</label>
<select class='form-control' name='catagory' required>
<option disabled selected value> $cat </option>";
if (mysqli_num_rows($result6) > 0) {
while ($row2 = mysqli_fetch_assoc($result6)) {
$catagory2 = $row2["catname"];
echo "<option>$catagory2</option>";
}
}
echo "</select>"
?>
答案 0 :(得分:1)
不要把事情混在一起.....
进入大型程序时,您很快就会迷路,所以K.I.S.S。!!
您可以“跳入” HTML或跳出HTML,然后返回PHP以回显$ options变量,然后返回HTML以完成选择。 (这是我在教新手时对它的描述-“跳入/跳出”的概念适用于PHP,HTML,JS-以及可以在一页中组合的任何语言...-值得掌握这个概念! )
首先,通过ONE查询获得所需的选项(观察我们如何处理选定的选项)-这将在$ options变量中构成数据的“数据包”。
<?php
// declare some values that we'll use later
$options = '';
// gather the data for the options
$sql = "SELECT id, catname FROM travisor_catagory";
$result = mysqli_query($conn, $sql);
if (mysqli_num_rows($result) > 0) {
while ($row = mysqli_fetch_assoc($result)) {
$selected = '';
if($category == $row['id']){
$selected = "selected";
}
$options .= '<option ' . $selected . ' value="' . $row["id"] . '">" . $row["catname"] . "</option>";
}
}
// now we will 'jump' out of PHP and back to HTML
?>
<!-- we are in HTML, so comments and language changed... -->
<div class='form-group'>
<label>Catagory *</label>
<select class='form-control' name='catagory' required>
<!-- here we 'jump' out of HTML and into PHP to use the $options variable -->
<?php echo $options; // and back out of PHP to HTML... ?>
<!-- where we finish up our select and whatever other HTML things -->
</select>
</div>
那应该解决您所遇到的两个问题。.
顺便说一句,看来您正在使用Bootstrap-如果是这样,我强烈建议您检查一下(改变了与选择框战斗的生活!:) Bootstrap Select