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.
Exelente aportacion ahora si a verificar y corregir lo que tengo mal Gracias Brother
una pregunta en tu conexion $conexion = mysql_connect(‘localhost’, ‘ejemplo’, ‘ejemplo’); a que haces referencia el ejemplo=?
Hola Gustavo, el primer ‘ejemplo’ es el usuario el segundo es la contraseña.
http://php.net/manual/es/function.mysql-connect.php
Un saludo!