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

eimct9ow  于 2023-05-16  发布在  PHP
关注(0)|答案(6)|浏览(152)

作为一个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>
ifmq2ha2

ifmq2ha21#

我的猜测是,你有一个问题,因为你没有关闭你的选择标记后,循环。考虑将与数据库相关的代码从标记中分离出来,这将有助于您轻松地发现此类错误

<?php
...
// SQL part
$sql = mysqli_query($connection, "SELECT username FROM users");
$data = $sql->fetch_all(MYSQLI_ASSOC);

// HTML part
?>
<tr>
  <td>Owner</td>
  <td>
    <select name="owner">
      <option value=""></option>
      <?php (foreach $data as $row): ?>
      <option value="<?= htmlspecialchars($row['id']) ?>">
        <?= htmlspecialchars($row['username']) ?>
      </option>
      <?php endforeach ?>
    </select>
  </td>
</tr>

请注意,您必须为每个value属性指定一个唯一的值,或者完全忽略该属性。我添加了行id作为这样的值。

eaf3rand

eaf3rand2#

下面的代码很漂亮。是一个叫aaronbd in this forum的人给的

<?php

$conn = new mysqli('localhost', 'username', 'password', 'database');
$result = $conn->query("select id, name from table");
    
echo "<html>";
echo "<body>";
echo "<select name='id'>";

while ($row = $result->fetch_assoc()) {
  $id = $row['id'];
  $name = $row['name']; 
  echo '<option value="'.htmlspecialchars($id).'">'.htmlspecialchars($name).'</option>';
}
echo "</select>";
echo "</body>";
echo "</html>";
xqk2d5yq

xqk2d5yq3#

我建议遵循几个调试步骤。
首先直接对数据库运行查询。确认它正在返回结果。即使是这样简单的事情,你也会发现你犯了一个错误,或者table是空的,或者一些奇怪的事情。
如果上面的方法可以,那么尝试循环并将$row的内容直接回显到HTML中,看看你在mysql_query中得到了什么-看看它是否与你直接在DB中得到的匹配。
如果您的数据输出到页面上,那么请查看HTML格式中的错误。
但是,如果$row没有任何输出,那么就找出mysql_query不工作的原因。用户是否有权查询该数据库,您是否有开放的数据库连接,Web服务器是否可以连接到数据库等[这些行中的某些内容通常是一个陷阱]
将您的查询稍微更改为

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

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

aydmsdu9

aydmsdu94#

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

5lhxktic

5lhxktic5#

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

gxwragnw6#

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

相关问题