Nube

miércoles, 3 de septiembre de 2008

Crear un select html desde php dinámicamente

Hoy voy a mostrar como generar un listado dinámico del control select, el combo desplegable, mediante PHP a partir de los datos devueltos por una consulta MySql.

Requisitos previos:
* Conocer como crear el conector $link.
Te dejo el tutorial por si te interesa: Tutorial Conexión a MySql desde PHP



//texto encabezado

echo "<h1>Selecciona una fruta</h1>";

//abrimos el select

//(el size indica el ancho del select)

echo '<select name="frutas" size="5">';

//realizamos la conexión

mysql_conecta($link);

//realizamos la consulta

$respuesta=mysql_query("select fruta_id, fruta_nombre from frutas", $link);

//recorremos los datos

while($fila=mysql_fetch_array($respuesta)){

echo '<option value="'.$fila["fruta_id"].'">

      '.$fila["fruta_nombre"].'></option>';

}

//cerramos el select

echo '</select>';

9 comentarios:

Pablo dijo...

Aunque supongo que se ha obviado por simplificar el código o por problemas de formateado, en mi opinión:

1- No sería mala idea hacer un ..." or die(mysql_error())" detrás del query para evitarte problemas...

2- Los elementos estáticos de la página conviene dejarlos fuera de las etiquetas php.

Más o menos así, aunque yo soy más de usar el bucle for en lugar de los while, no se si te parecerá buena idea, tampoco lo he probado... solo lo he remozado como he visto rápidamente.

Lo he intentado pegar... pero blogger no te deja pegar textos formateados, y menos con php :P, supongo que por eso no has cumplido mi segunda observación, lo siento!

Demiurgo dijo...

Saludos!!

Voy a ir respondiendo :D

1- El or die no lo he puesto nunca ya que a juicio personal no tiene mucho sentido añadir un or die en cada consulta que envio.
Creo que lo ideal sería utilizar un procedimiento encargado de detectar los errores de todo PHP en general o en su defecto hacerlo en la clase/procedimiento dedicado a servir de puente entre el conector mysql y php.

2- En temas tan triviales como el que acontece no veo necesario sacar los elementos fuera, prefiero claridad antes que andar poniendo claves por doquier.
La norma que citas debería aplicarse en plantillas/templates de los programas. Ahí si estoy totalmente de acuerdo en que el código html debe mantenerse fuera del php.

3- El bucle for tiene sentido cuando sabes el número exacto de registros, en éste caso puedes saberlo si, pero deberías de hacer una operación más mientras que en el while no te hace falta. En todo caso aceptaría un for each pero no tiene sentido complicar el asunto.
El while es más que suficiente, efectivo y claro.

4- Se puede copiar sin problemas, aunque si lo haces directamente te copia # delante de cada línea, lo aconsejable es darle al botoncito "view plain" del encabezado del código, entonces se te abre la ventana en "texto plano" con formato :D

loperaja dijo...

Hombre muchas gracias! Soy un novato en el tema y por gente como usted es que he logrado ir progresando sin necesidad de pagar cursos o libros costosos, me sirvió mucho lo que expusiste... Dios bendiga al internet!!

Anónimo dijo...

me ha gustado pero si la consulta la hago cuando quiero editar producto
entonces el select de este producto fruta a de estar seleccionado
como lo haria?
option value="id2">pera<\/option>

option selected value="id3">manzana<\/option

gracias

Demiurgo dijo...

Yo lo suelo hacer así :

//dentro del bucle comprobamos si es el valor seleccionado
if($valor_seleccionado==$fila["fruta_id"]) $seleccionado=' selected="selected" '; else $seleccionado='';
//lo añadimos a lo que mostramos
option value="'.$fila["fruta_id"].'" '.$seleccionado.'>

Anuncios Gratis dijo...

Hola.

Estoy probando este script de PHP y no me funciona correctamente no se lo que hago mal.

Demiurgo dijo...

Adivino no soy convendría que pegases el código en algún lugar para ver que haces mal. Ponlo en http://rafb.net/paste/ y deja el link aquí :D

Lino H. dijo...

Gracias por el código, ahora, necesito utilizar el valor seleccionado, me pueden ayudar?. Gracias anticipadas.

Demiurgo dijo...

en el ejemplo la variable que contiene el valor seleccionado es $_POST["frutas"]