如何使用数据库中的值填充HTML下拉列表

时间:2011-11-05 18:38:03

标签: php sql while-loop

作为我正在创建的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>

6 个答案:

答案 0 :(得分:31)

我的猜测是你遇到问题,因为你没有在循环后关闭你的select-tag。这可以吗?

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

答案 1 :(得分:15)

下面的代码很好..它是由其他人命名的 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>";
?> 

答案 2 :(得分:6)

我建议按照一些调试步骤进行操作。

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

如果上面没问题,那么尝试循环并直接将$ row的内容回显到HTML中,看看你在mysql_query中找到了什么 - 看看它是否与你在DB中直接得到的相匹配。

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

但是,如果$row没有输出任何内容,那么找出mysql_query无法正常工作的原因,例如用户是否有权查询该数据库,您是否拥有开放的数据库连接,网络服务器是否可以连接到数据库等[这些行上的内容通常可能是一个问题]

稍微更改您的查询

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

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

答案 3 :(得分:3)

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

答案 4 :(得分:2)

<?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>

答案 5 :(得分:0)

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

CREATE DEFINER=`root`@`localhost` PROCEDURE `findPaths`()
BEGIN
WITH RECURSIVE descendants AS
(
SELECT e.activity, CAST(e.activity AS CHAR(500)) AS path, n.cost as total_cost
FROM edges e JOIN nodes n
ON e.activity=n.code
WHERE e.activity='A'
UNION ALL
SELECT e.activity, CONCAT(d.path, ',', e.activity), d.total_cost+(SELECT cost FROM nodes WHERE code=e.activity)
FROM descendants d, edges e
WHERE e.parent=d.activity
)
SELECT * FROM descendants WHERE activity='M' OR activity='N' ORDER BY total_cost;

END

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

class MyClass {

...

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

Full code and description can be found here