HTML tiene un elemento SELECT que permite el atributo multiple para poder seleccionar más que una opción a la vez. (Las selecciones mútliples se hacen normalmente pulsando la tecla Control mientras se seleccionan las opciones con el ratón.) El atributo multiple no tiene valor. Si no está, entonces el elemento SELECT sólo permite seleccionar una opción. Este artículo explica como puedo obtener múltiples opciones seleccionadas en un programa PHP.

PHP devuelve los datos enviados desde un formulario en la variable «súperglobal» $_REQUEST. La variable $_REQUEST es una unión de las variables súperglobales $_GET, $_POST y $_COOKIE. Por lo tanto, su contenido no depende si hemos recibido los datos via un «GET» o un «POST». Es decir, es una buena opción en general.

La variable $_REQUEST es un array asociativo, donde los índices son los valores de los atributos id o name de los elementos de entrada en el formulario HTML enviado. A cada índice se asigna el contenido del elemento correspondiente. En un SELECT simple se devolvería la opción seleccionada si hay.

Por ejemplo, consideramos el siguiente SELECT de selección simple (nótese la ausencia del atributo multiple):

<SELECT id="mi_select">
    <OPTION value="hola mundo">Hola mundo</OPTION>
</SELECT>

Si hubiéramos seleccionado la opción «Hola mundo», entonces, en PHP, la expressión $_REQUEST['mi_select'] tendría el valor 'hola mundo'. (El valor del atributo value del elemento OPTION.)

Sin embargo, si el elemento SELECT tuviera puesto el atributo multiple, entonces sólo obtendríamos el valor de la última opción seleccionado. Para obtener todas las opciones, el valor de $_REQUEST['mi_select'] debería ser un array. Esto conseguimos cambiando el id del elemento SELECT a mi_select[]. (Esto es el mismo nombre más los corchetes [].)

<SELECT id="mi_select[]" multiple>
    <OPTION value="hola mundo">Hola mundo</OPTION>
</SELECT>

Este pequeño truco causa que $_REQUEST['mi_select'] es un array. Ahora puedo hacer un bucle sobre todas las opciones seleccionadas.

foreach ($_REQUEST['mi_select'] as $option_value)
{
    // Haz algo con el valor de la opción seleccionada $option_value
}

En corto: Asigna un nombre terminado en corchetes «[]» a un elemento SELECT cuando tiene puesto el atributo multiple para poder extraer todas las opciones seleccionadas desde PHP.

Referencias