PHP-从MySQL DB填充选择下拉列表,并以表格

时间:2018-06-28 22:14:29

标签: php mysql sql

我正在尝试使用下面的代码完成两件事。首先,我希望从数据库中填充我的选择选项。其次,我希望表单中的字段具有在页面加载时选择的存储值(例如在成员的配置文件中)。我在下面实现的方法可行,但有两个问题。首先,如果您打开下拉菜单,则所选选项将出现两次(一次在顶部,一次在其正常位置)。其次,如果它是必填字段,则用户必须打开下拉菜单并再次选择它,即使它出现在该字段中(可怕的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>"

?>

1 个答案:

答案 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