Mostrar select con PHP y Mysqli (Corrigiendo codigo)



Colaborando con un compañero que esta aprendiendo PHP y ha preguntado por las razones por las que no ejecuta su código (el cual veremos a continuación), aprovechare para, ademas de completar el código, explicar algunas cosas que le faltan para que se ejecute correctamente y por supuesto, ayudar con el aprendizaje de todos. Aclaro que el código en principio no arroja ningún error de sintaxis ni nada que analizar a simple vista en el navegador.

<?php
$ciclos = “SELECT ciclo_escolar FROM ciclos ORDER BY ciclo_escolar asc”;
$res_ciclo= mysql_query ($ciclos);
?>
<tr>
<td align=”right”>
Ciclo Escolar:
<select name=”select” id=”txtCiclo”>
<?php
while ( $result = mysql_query($ciclos)){
echo “<option value='”.$result[‘ciclo_escolar’].”‘> “.$result[‘ciclo_escolar’].”</option>”;
echo’$result[“ciclo_escolar”]’;
}
?>
</select></td>
</tr>

Lo primero que noto es que no hay una conexión a la base de datos, un error normal cuando se esta empezando a programar haciendo uso de bases de datos 🙂 así que procedo a agregar la conexión y creo una base de datos llamada “ejemplo”, que contenga una tabla llamada “ciclos” con dos campos dentro de ella, un id único auto-incrementado y un campo llamado “ciclo_escolar”. Por supuesto, la voy a poblar de algunos datos que necesitare más adelante.

El siguiente código lo agrego al inicio del ejemplo, antes de hacer cualquier mysql_query.

$conexion = mysql_connect(‘localhost’, ‘ejemplo’, ‘ejemplo’);

Luego indico sobre cual base de datos voy a trabajar, en este caso se llama “ejemplo” también, así que debajo de la linea anterior, agrego el código para seleccionar la base de datos, quedando así:

$conexion = mysql_connect(‘localhost’, ‘ejemplo’, ‘ejemplo’);

mysql_select_db(“ejemplo”);

Ahora, hay otro error “grave” y es que se esta haciendo el while sobre un mysql_query, y esto no debe ser así 🙂 el while es un ciclo, y como se sabe, hay varios tipos de ciclos o de estructurarlos en PHP, así que para no hacer muchos cambios aun, voy a utilizar el mismo while pero como ya se tenia un mysql_query mas arriba, solamente cambiare el que va dentro del ciclo y como parámetro no paso la consulta sino el resultado del query, quedando de la siguiente manera.

while ($result = mysql_fetch_assoc($res_ciclo))

Con estas 3 modificaciones, el ejemplo funciona correctamente, ya se están mostrando los resultados de la consulta en el Select.

Hay una linea que esta mal en la sintaxis y solo escribe un texto que no esta haciendo nada, así que la elimino, la linea es la siguiente (Esta debajo del echo del select).

echo’$result[“ciclo_escolar”]’;

Para finalizar y sin complicar las cosas para que quede este articulo como algo simple y claro, voy a modificar todo lo que hay con la extensión mysql_ (que ya esta obsoleta) por mysqli_.

En realidad, he hecho unos cambios menores para dejar de usar mysql_ e implementar mysqli_ pero no quiere decir que esta sea la mejor manera de implementar mysqli_ aunque claro, es mucho mejor que seguir usando la extensión mysql_.

Los cambios que hice fueron, en la conexión a la base de datos, ahora el nombre de la base de datos es otro parámetro y ya no hace falta mysql_select_db (Una linea de código menos :)) modifique el query, ahora debe recibir como primer parámetro la variable que incluye la conexión a la base de datos y le agregue una “i” al mysql_fetch_assoc y como resultado de todos estos cambios queda el código a continuación que esta funcionando y terminado.

<?php
$conexion = mysqli_connect(‘localhost’, ‘ejemplo’, ‘ejemplo’, ‘ejemplo’);
$ciclos = “SELECT ciclo_escolar FROM ciclos ORDER BY ciclo_escolar asc”;
$res_ciclo= mysqli_query($conexion, $ciclos);
?>
<tr>
<td align=”right”>
Ciclo Escolar:
<select name=”select” id=”txtCiclo”>
<?php
while ($result = mysqli_fetch_assoc($res_ciclo)){
echo “<option value='”.$result[‘ciclo_escolar’].”‘> “.$result[‘ciclo_escolar’].”</option>”;
}
?>
</select>
</td>
</tr>

Código en GitHub para verlo mejor -> Select con resultados de una consulta a una base de datos.

3 thoughts on “Mostrar select con PHP y Mysqli (Corrigiendo codigo)

  1. Exelente aportacion ahora si a verificar y corregir lo que tengo mal Gracias Brother

  2. una pregunta en tu conexion $conexion = mysql_connect(‘localhost’, ‘ejemplo’, ‘ejemplo’); a que haces referencia el ejemplo=?

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *