Crear campos select con PHP.
Resumen.
Si hay un tipo de campo que puede hacerse bastante pesado crear es precisamente el campo SELECT. Si las opciones son pocas, resulta manejable, pero cuando tenemos más de 10 o 12 opciones, tenemos que entregarnos a “doña paciencia” para que esta nos asista. Sin embargo esta tarea se puede simplificar muchísimo generando este campo a partir de un array. A esto dedicaremos este artículo.Artículo.
En el curso de PHP ya hablamos de los arrays y de su importancia, pues bien, en este artículo veremos una vez más materializadas tales afirmaciones. Y teniendo en cuenta que, como vimos en el curso de MySQL, podemos guardar todos los datos de una fila o columna en un array, podemos crear un SELECT a partir de los datos almacenados en nuestra base de datos.
Dicho esto, entremos a materia, vamos a ver como creamos un campo SELECT a partir de los datos almacenados en un array. Para ello, como ya dijimos precisamos usar bucles, en este caso, lo haremos mediante el bucle FOR en un caso y FOREACH en los demás. Vamos a ver 6 casos, cada uno con sus particularidades.
Caso 1: Generamos un SELECT mediante el bucle FOR con un rango de años.
Imaginemos que tenemos un Web para adultos y no queremos que menores de edad (menores de 18 años en España) puedan seleccionar un año de nacimiento que suponga minoría de edad. También delimitamos una edad máxima, en este caso, 85 años. Además este SELECT se actualizará cada año por si mismo, dado que se genera a partir del año actual dado por la función date('Y'). Observe en el código fuente que todo el SELECT se genera en la misma línea, después veremos como podemos evitar esto si así lo deseamos.
En este caso, a diferencia del anterior si partimos de un array, lo que hacemos es tomar los valores del array e introducirlos en el SELECT. Observe que los días le hemos asignado un orden (de lunes a domingo), con lo que el bucle le ha asignado las keys (claves) de manera automática, por lo que NO hay una concordancia entre las keys y los valores que asigna la función date('w'), que nos da el día de la semana comenzando por 0 para el domingo y terminando en 6 para el sábado.
Al hacer estos cambios en el array queremos poner de manifiesto la versatilidad que nos proporcionan los arrays a la hora de realizar cambios conservando la integridad de los datos originales. En este caso precisaremos dos bucles, uno para darle la forma deseada al los datos del array y ordenarlos, y otro para generar el campo SELECT en cuanto tal.
Más de una vez habréis llegado a una Web, digamos, de anuncios clasificados y nos encontramos un SELECT con las provincias españolas, y vemos que tras seleccionar la provincia de interés no hay anuncios para esa categoría, pues bien, con un SELECT generado así, de manera dinámica, este molesto problema no se daría.
Y esto es todo por ahora amigos, hasta el próximo artículo.
Dicho esto, entremos a materia, vamos a ver como creamos un campo SELECT a partir de los datos almacenados en un array. Para ello, como ya dijimos precisamos usar bucles, en este caso, lo haremos mediante el bucle FOR en un caso y FOREACH en los demás. Vamos a ver 6 casos, cada uno con sus particularidades.
Caso 1: Generamos un SELECT mediante el bucle FOR con un rango de años.
Imaginemos que tenemos un Web para adultos y no queremos que menores de edad (menores de 18 años en España) puedan seleccionar un año de nacimiento que suponga minoría de edad. También delimitamos una edad máxima, en este caso, 85 años. Además este SELECT se actualizará cada año por si mismo, dado que se genera a partir del año actual dado por la función date('Y'). Observe en el código fuente que todo el SELECT se genera en la misma línea, después veremos como podemos evitar esto si así lo deseamos.
Caso 2: Generamos un SELECT mediante el bucle FOREACH a partir de un array que contiene los días de la semana.<?php // ------ CASO 1 // Generamos un SELECT mediante el bucle FOR con un rango de años $anio = date('Y'); // Restamos 17 y no 18, por que lo mismo puede ser el cumpleaños el primer que el ultimo dia del años $nacimiento = $anio - 17; $maxima_edad = 85; $edad = $maxima_edad - 18; echo '<select class="cmp30" name="anio"> <option selected value="---">¿Nacimiento?</option>'; for($a = 0; $a <= $edad; ++$a){ $ar_anio[$a] = $nacimiento--; echo "<option value=\"$a\">$nacimiento</option>"; } echo '</select>'; echo '<pre>'; print_r($ar_anio); echo '</pre>'; ?>
En este caso, a diferencia del anterior si partimos de un array, lo que hacemos es tomar los valores del array e introducirlos en el SELECT. Observe que los días le hemos asignado un orden (de lunes a domingo), con lo que el bucle le ha asignado las keys (claves) de manera automática, por lo que NO hay una concordancia entre las keys y los valores que asigna la función date('w'), que nos da el día de la semana comenzando por 0 para el domingo y terminando en 6 para el sábado.
Caso 3: Generamos un SELECT mediante el bucle FOREACH a partir de un array que contiene los días de la semana y como keys asigna del valor de la función date('w') para cada día. Además en este caso, incluimos marcas de tabulacion y saltos de línea para que no aparezca todo el SELECT en una misma línea en el código fuente.<?php // ------ CASO 2 // Generamos un SELECT a partir de un array que contiene los dias de la semana $dia_semana = array('Lunes','Martes','Miércoles','Jueves','Viernes','Sábado','Domingo'); // El domingo debe estar en primer lugar para que tome la clave 0 del array echo '<select class="cmp30" name="semana"> <option selected value="---">Elija un dia</option>'; foreach ($dia_semana as $ndia => $dia){ echo "<option value=\"$ndia\">$dia</option>"; } echo '</select>'; echo '<pre>'; print_r($dia_semana); echo '</pre>'; ?>
Caso 4: Generamos un SELECT mediante el bucle FOREACH a partir de un array que contiene las provincias españolas y como keys asigna el valor de su código provincial. Es lo mismo que hemos hecho para el caso anterior, solo que en este caso, el array son las provincias españolas junto con su código como key del array.<?php // ------ CASO 3 // Generamos un SELECT a partir de un array que contiene los dias de la semana y sus respectivas keys $Dia_Semana = array(1=>'Lunes',2=>'Martes',3=>'Miércoles',4=>'Jueves',5=>'Viernes',6=>'Sábado',0=>'Domingo'); echo '<select class="cmp50" name="semana"> <option selected value="---">Elija un dia</option>'."\n"; foreach ($Dia_Semana as $kdia => $dia){ echo "\t\t<option value=\"$kdia\">$dia</option>\n"; } echo '</select>'."\n"; echo '<pre>'; print_r($Dia_Semana); echo '</pre>'; ?>
Caso 5: Generamos un SELECT mediante el bucle FOREACH a partir de un array que contiene las comunidades autónomas españolas. Pero en este caso, le eliminaremos la acentuación y la escritura será en mayúsculas. La eliminación de la acentuación es precisa para convertir a mayúsculas dado que la función strtoupper() no actúa sobre letras acentuadas (con tilde) ni sobre la “ñ”. La eliminación de las tildes la haremos mediante esta función. También le asignaremos una ordenación alfabética.<?php // ------ CASO 4 // Generamos un SELECT con las provincias españolas y como key su codigo provincial $Ar_Provincias = array( '01'=>'Álava', '02'=>'Albacete', '03'=>'Alicante', '04'=>'Almería', '33'=>'Asturias', '05'=>'Ávila', '06'=>'Badajoz', '08'=>'Barcelona', '48'=>'Bizkaia', '09'=>'Burgos', '10'=>'Cáceres', '11'=>'Cádiz', '39'=>'Cantabria', '12'=>'Castellón', '51'=>'Ceuta', '13'=>'Ciudad Real', '14'=>'Córdoba', '15'=>'Coruña, A', '16'=>'Cuenca', '17'=>'Girona', '18'=>'Granada', '19'=>'Guadalajara', '20'=>'Gipuzkoa', '21'=>'Huelva', '22'=>'Huesca', '07'=>'Islas Baleares', '23'=>'Jaén', '24'=>'León', '25'=>'Lleida', '27'=>'Lugo', '28'=>'Madrid', '29'=>'Málaga', '52'=>'Melilla', '30'=>'Murcia', '31'=>'Navarra', '32'=>'Ourense', '34'=>'Palencia', '35'=>'Palmas, Las','36'=>'Pontevedra', '26'=>'Rioja, La', '37'=>'Salamanca', '38'=>'Santa Cruz de Tenerife', '40'=>'Segovia', '41'=>'Sevilla', '42'=>'Soria', '43'=>'Tarragona', '44'=>'Teruel', '45'=>'Toledo', '46'=>'Valencia', '47'=>'Valladolid', '49'=>'Zamora', '50'=>'Zaragoza'); echo '<select class="cmp75" name="provincias"> <option selected value="---">Elija su provincia</option>'."\n"; foreach ($Ar_Provincias as $kcp => $provin){ echo "\t\t<option value=\"$kcp\">$provin</option>\n"; } echo '</select>'."\n"; echo '<pre>'; print_r($Ar_Provincias); echo '</pre>'; ?>
Al hacer estos cambios en el array queremos poner de manifiesto la versatilidad que nos proporcionan los arrays a la hora de realizar cambios conservando la integridad de los datos originales. En este caso precisaremos dos bucles, uno para darle la forma deseada al los datos del array y ordenarlos, y otro para generar el campo SELECT en cuanto tal.
Caso 6: Generamos un SELECT mediante el bucle FOREACH a partir de un array que contiene las comunidades autónomas españolas con sus respectivos códigos autonómicos.<?php include('funciones/func_eli_acento.php'); // ------ CASO 5 // Generamos un SELECT con las autonomias españolas y cambiamos formato y orden $Ar_Comun_Autonomas = array('Aragón','Extremadura','Islas Baleares','Canarias','Andalucía', 'Cantabria','Castilla-La Mancha','Castilla y León','Cataluña','Comunidad de Madrid', 'Comunidad Foral de Navarra','Comunidad Valenciana','Galicia','País Vasco', 'Principado de Asturias','Región de Murcia','La Rioja'); // Modificamos el&nnbsp;array pasandolo a mayusculas y elimnando las tildes (acentos) foreach ($Ar_Comun_Autonomas as $kca => $comunidad){ $Comunidades = strtoupper(No_Acento($comunidad)); $Autonomias[$kca] = $Comunidades; // Nuevo array modificado } ASORT($Autonomias); echo '<select class="cmp95" name="provincias"> <option selected value="---">Elija su Comunidad Autonoma</option>'."\n"; foreach ($Autonomias as $kCA => $Com_Aut){ echo "\t\t<option value=\"$kCA\">$Com_Aut</option>\n"; } echo '</select>'."\n"; echo '<pre>'; print_r($Autonomias); echo '</pre>'; ?>
Y con esto vamos llegando al final de este artículo, pero no puedo dejar de mencionar algo que ya dijimos en otro artículo, podemos crear SELECT a partir de los datos almacenados en nuestras bases de datos, lo que puede tener implicaciones muy interesantes, voy a un caso que personalmente a mi me resulta bastante molesto.<?php // ------ CASO 6 // Generamos un SELECT con las autonomias españolas y sus respectivos codigos $Ar_Comun_Codig = array('01'=>'Andalucía', '02'=>'Aragón', '03'=>'Asturias, Principado de', '04'=>'Balears, Illes', '05'=>'Canarias', '06'=>'Cantabria', '07'=>'Castilla y León', '08'=>'Castilla - La Mancha', '09'=>'Cataluña', '10'=>'Comunitat Valenciana', '11'=>'Extremadura', '12'=>'Galicia', '13'=>'Madrid, Comunidad de', '14'=>'Murcia, Región de', '15'=>'Navarra, Comunidad Foral de', '16'=>'País Vasco', '17'=>'Rioja, La', '18'=>'Ceuta', '19'=>'Melilla'); echo '<select class="cmp95" name="provincias"> <option selected value="---">Comunidad Autonoma con codigo</option>'."\n"; foreach ($Ar_Comun_Codig as $kCA => $Com_Aut){ echo "\t\t<option value=\"$kCA\">$Com_Aut</option>\n"; } echo '</select>'."\n"; ?>
Más de una vez habréis llegado a una Web, digamos, de anuncios clasificados y nos encontramos un SELECT con las provincias españolas, y vemos que tras seleccionar la provincia de interés no hay anuncios para esa categoría, pues bien, con un SELECT generado así, de manera dinámica, este molesto problema no se daría.
Y esto es todo por ahora amigos, hasta el próximo artículo.
Tags: SELECT || for || foreach || dinámico || campo