web-dev-qa-db-fra.com

Comment remplir la liste déroulante HTML avec les valeurs de la base de données

dans le cadre d'un formulaire HTML que je crée, j'aimerais avoir une liste déroulante qui répertoriera tous les noms d'utilisateur dans ma base de données.

Je pensais que le code suivant ferait l'affaire, mais la liste déroulante est vide - quelqu'un pourrait-il m'aider dans ce que je fais mal? Merci.

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

Je suppose que vous avez un problème car vous ne fermez pas votre balise de sélection après la boucle. Cela pourrait-il faire l'affaire?

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

Le code ci-dessous est Nice .. Il a été donné par quelqu'un d'autre nommé aaronbd dans ce 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>";
?> 
14
Imon

Je suggère de suivre quelques étapes de débogage.

Exécutez d'abord la requête directement sur la base de données. Confirmez qu'il ramène des résultats. Même avec quelque chose d'aussi simple que cela, vous pouvez constater que vous avez fait une erreur, ou que la table est vide, ou quelque bizarrerie.

Si ce qui précède est correct, essayez de boucler et de faire écho le contenu de $ row juste directement dans le HTML pour voir ce que vous obtenez dans la mysql_query - voir si cela correspond à ce que vous avez directement dans la base de données.

Si vos données sont sorties sur la page, regardez ce qui ne va pas dans votre mise en forme HTML.

Cependant, si rien n'est sorti de $row, puis comprendre pourquoi mysql_query ne fonctionne pas, par exemple l'utilisateur a-t-il la permission d'interroger cette base de données, avez-vous une connexion ouverte à la base de données, le serveur Web peut-il se connecter à la base de données, etc. [quelque chose sur ces lignes peut souvent être un piège]

Changer légèrement votre requête en

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

peut aider à mettre en évidence les erreurs: manuel php

6
Kris C
<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>
2
user2806221
<?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>
2
rashedcs

Utilisez plutôt le concept OOP. Créez une classe avec la fonction

class MyClass {

...

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

puis utilisez l'objet classe pour appeler la fonction dans votre code

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

Le code complet et la description peuvent être trouvés ici

1
tim3in