【问题标题】:How to populate HTML dropdown list with values from database如何使用数据库中的值填充 HTML 下拉列表
【发布时间】:2011-12-22 18:26:48
【问题描述】:

作为我正在创建的 HTML 表单的一部分,我想要一个下拉列表,其中将列出我的数据库中的所有用户名。

我认为下面的代码可以解决问题,但下拉列表是空的 - 有人可以帮助我解决我做错了什么吗?谢谢。

<tr>
<td>Owner</td>
<td>
<select name="owner">
<?php 

$sql = mysqli_query($connection, "SELECT username FROM users");

while ($row = $sql->fetch_assoc()){

?>
<option value="owner1"><?php echo $row['username']; ?></option>

<?php
// close while loop 
}
?>
</td>
</tr>

【问题讨论】:

    标签: php sql while-loop


    【解决方案1】:

    我的猜测是你有一个问题,因为你没有在循环后关闭你的选择标签。这能解决问题吗?

    <select name="owner">
    <?php 
    $sql = mysqli_query($connection, "SELECT username FROM users");
    while ($row = $sql->fetch_assoc()){
    echo "<option value=\"owner1\">" . $row['username'] . "</option>";
    }
    ?>
    </select>
    

    【讨论】:

      【解决方案2】:

      下面的代码很好。它是由其他人给出的 aaronbd in this forum

      <?php
      
      $conn = new mysqli('localhost', 'username', 'password', 'database') 
      or die ('Cannot connect to db');
      
          $result = $conn->query("select id, name from table");
      
          echo "<html>";
          echo "<body>";
          echo "<select name='id'>";
      
          while ($row = $result->fetch_assoc()) {
      
                        unset($id, $name);
                        $id = $row['id'];
                        $name = $row['name']; 
                        echo '<option value="'.$id.'">'.$name.'</option>';
      
      }
      
          echo "</select>";
          echo "</body>";
          echo "</html>";
      ?> 
      

      【讨论】:

      • 你能告诉我为什么 ">" 在选项中使用吗?以及它是如何工作的
      • @SmitSaraiya ">" 在选项中用作标准 html 语法。
      【解决方案3】:

      我建议遵循一些调试步骤。

      首先直接针对数据库运行查询。确认它正在带回结果。即使是这样简单的事情,你也会发现自己犯了一个错误,或者桌子是空的,或者一些奇怪的事情。

      如果上述情况正常,则尝试循环并将 $row 的内容直接回显到 HTML 中,以查看您在 mysql_query 中返回的内容 - 看看它是否与您直接在数据库中获得的内容相匹配。

      如果您的数据输出到页面上,请查看您的 HTML 格式出现了什么问题。

      但是,如果 $row 没有输出任何内容,请找出 mysql_query 不起作用的原因,例如用户是否有权查询该数据库,您是否有开放的数据库连接,网络服务器是否可以连接到数据库等[这些行中的某些内容通常是一个陷阱]

      将您的查询稍微更改为

      $sql = mysql_query("SELECT username FROM users") or die(mysql_error());  
      

      可能有助于突出显示任何错误:php manual

      【讨论】:

        【解决方案4】:
        <select name="owner">
        <?php 
        $sql = mysql_query("SELECT username FROM users");
        while ($row = mysql_fetch_array($sql)){
        echo "<option value=\"owner1\">" . $row['username'] . "</option>";
        }
        ?>
        </select>
        

        【讨论】:

        • 如果您添加一些行来解释您在做什么,或者您的解决方案与用户的解决方案之间有什么区别,这不会有害。
        【解决方案5】:
        <?php
         $query = "select username from users";
         $res = mysqli_query($connection, $query);   
        ?>
        
        
        <form>
          <select>
             <?php
               while ($row = $res->fetch_assoc()) 
               {
                 echo '<option value=" '.$row['id'].' "> '.$row['name'].' </option>';
               }
            ?>
          </select>
        </form>
        

        【讨论】:

          【解决方案6】:

          改用 OOP 概念。用函数创建一个类

          class MyClass {
          
          ...
          
          function getData($query) {
              $result = mysqli_query($this->conn, $query);
              while($row=mysqli_fetch_assoc($result)) {
                  $resultset[] = $row;
              }       
              if(!empty($resultset))
                  return $resultset;
          } }
          

          然后使用类对象在你的代码中调用函数

          <?php 
          
              $obj = new MyClass();
              $row = $obj->getData("select city_name from city"); 
          ?>
          <select>
              <?php foreach($row as $row){ ?>
                  <option><?php echo $row['city_name'] ?></option>
          
          <?php  } ?>
          </select>
          

          Full code and description can be found here

          【讨论】:

            猜你喜欢
            • 2014-08-27
            • 1970-01-01
            • 2021-04-28
            • 2020-03-26
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2016-01-09
            • 1970-01-01
            相关资源
            最近更新 更多