Search code examples
phpsqlwhile-loop

How to populate HTML dropdown list with values from database


as part of a HTML form I am creating I would like to have a dropdown list which will list all the usernames in my database.

I thought the following code would do the trick but the dropdown list is empty - could someone assist me in what i'm doing wrong? Thanks.

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

Solution

  • My guess is that you have a problem since you don't close your select-tag after the loop. Consider separating your database-related code from the markup, it will help you to spot such mistakes easily

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

    Note that you have to either give the each value attribute a unique value or omit this attribute altogether. I added the row id as such value.

    Edit: move "(" before the 'foreach' command to after.