fill combobox with bank data

0

I'm following a php video lesson with mysql and I'm able to list the data of a table in a list (list), just so that they know that the connection problem with the bank is already over. I tried to use the same code to list the same table in a combobox, and it is not populating. The combo appears, but does not fill in the data. Does anyone know where I'm going wrong? Here is the code:

<body>
    <ul>
        <?php
            // Passo 4 - Listagem dos dados
            while($registro = mysqli_fetch_assoc($categorias)){
        ?>
                <li><?php echo $registro ["nomecategoria"]?></li>
        <?php
            }

        ?>
    </ul>
    <form name="produto" method="post" action="">
         <label for="">Selecione um produto</label>
         <select>
         <option>Selecione...</option>

         <?php 
         while($registro = mysqli_fetch_assoc($categorias)) { ?>
         <option = "<?php echo $registro['categoriaID'] ?>"><?php echo $registro["nomecategoria"] ?></option>
         <?php } ?>

         </select>
    </form>
                <?php
        //Passo 5 - Liberar dados da memória
        mysqli_free_result($categorias);
    ?>
</body>
    
asked by anonymous 06.06.2018 / 17:06

2 answers

0

True. It was time to copy that jumped. But I want to emphasize that the query to the bank is all right, because the list above the combo is filling normally.

 <body>
    <ul>
        <?php
            // Passo 4 - Listagem dos dados
            while($registro = mysqli_fetch_assoc($categorias)){
        ?>
                <li><?php echo $registro ["nomecategoria"]?></li>
        <?php
            }

        ?>
    </ul>
    <form name="produto" method="post" action="">
         <label for="">Selecione um produto</label>
         <select>
         <option>Selecione...</option>

         <?php 
         while($registro = mysqli_fetch_assoc($categorias)) { ?>
         <option = "<?php echo $registro['categoriaID'] ?>"><?php echo $registro["nomecategoria"] ?></option>
         <?php } ?>

         </select>
    </form>
                <?php
        //Passo 5 - Liberar dados da memória
        mysqli_free_result($categorias);
    ?>
</body>
    
06.06.2018 / 18:00
0

It turns out that fetch_array / fetch_assoc "consumes" all rows in the first while , ie it changes the internal pointer to the end of the data during while . That way you need to return ponteiro to the first line by putting mysqli_data_seek($categorias, 0); before the second while

..................
..................
<form name="produto" method="post" action="">
     <label for="">Selecione um produto</label>
     <select>
     <option>Selecione...</option>

     <?php 
     mysqli_data_seek($categorias, 0);
     while($registro = mysqli_fetch_assoc($categorias)) { ?>
     <option = "<?php echo $registro['categoriaID'] ?>"><?php echo $registro["nomecategoria"] ?></option>
     // o correto acima é <option VALUE = "<?php ......
     // FALTOU O value

     .................
     .................

mysqli_data_seek

You could also use only while to get the same result:

<ul>
    <?php
        // Passo 4 - Listagem dos dados
        while($registro = mysqli_fetch_assoc($categorias)){

            echo "<li>". $registro ["nomecategoria"] . "</li>";
            //concatena os registros retornados
            $paraSelect .= "<option value='" . $registro["categoriaID"] ."'>" .$registro["nomecategoria"] . "</option>";

        }

    ?>
</ul>
<form name="produto" method="post" action="">
     <label for="">Selecione um produto</label>
     <select>
     <option>Selecione...</option>

     <?php 
      //imprime os options
      echo $paraSelect; 
     ?>

     </select>
</form>
<?php
    //Passo 5 - Liberar dados da memória
    mysqli_free_result($categorias);
?>
    
06.06.2018 / 20:38