Sei sulla pagina 1di 2

Este script ensea la tcnica necesaria para acceder a los elementos

seleccionados de un select mltiple.

Por Jos Lorenzo Escudero


Quiz un problema que se nos puede plantear durante el trabajo con PHP, es querer recoger los datos de
un Select Mltiple. Recordamos que un select mltiple es un campo de formulario donde se pueden
seleccionar varios elementos a la vez.

Nota: Para seleccionar varios elementos de un campo select mltiple, tenemos que utilizar el botn de "control" e ir pulsando cada
uno de los elementos que deseamos seleccionar. Es importante que este punto quede claro para los visitantes de vuestras pginas, ya
que es muy habitual que los usuarios no sepan manejar este tipo de campos.

Para ver mejor lo que deseamos hacer, es muy interesante entrar la pgina que contiene el ejemplo en
funcionamiento. Para continuar, echemos un vistazo al siguiente ejemplo...

<form action="trataformulario.php" method="POST">


Nombre: <input type="text" name="nombre"><br>
Apellidos: <input type="text" name="apellidos"><br>
Email: <input type="text" name="email"> <br>
Cerveza: <br>
<select multiple name="cerveza">
<option value="SanMiguel">San Miguel</option>
<option value="Mahou">Mahou</option>
<option value="Heineken">Heineken</option>
<option value="Carlsberg">Carlsberg</option>
<option value="Aguila">Aguila</option>
...
</select><br>
<input type="submit" value="Enviar datos!" >
</form>

Tenemos este formulario en nuestra pgina y queremos recoger los datos introducidos por el usuario.
Para los campos "nombre", "apellidos" y "email" no tenemos ningn tipo de problema, recogemos los
datos por el mtodo habitual, es decir:

<?php
echo "Nombre: ". $_POST["nombre"];
echo "<br>Apellidos: ". $_POST["apellidos"];
echo "<br>E-mail: ". $_POST ["email"];
?>

Uno se podra preguntar, y porque no puedo poner "$cerveza=$_POST["cerveza"]"? el problema reside


en que los option del select mltiple tienen todos el mismo nombre y en caso de tener varios elementos
seleccionados slo obtendramos el ltimo elemento. Y como resolver esto? Pues bien, la solucin es
bien sencilla. Basta con poner en el final del nombre del campo del select mltiple unos corchetes ([]), en
nuestro caso sera "cerveza[]". De este modo PHP interpreta el campo en cuestin como un array con
tantas posiciones como elementos haya seleccionados en el select mltiple. Veamos pues como quedara
nuestro ejemplo...

<form action="trataformulario.php" method="POST">


Nombre: <input type="text" name="nombre"><br>
Apellidos: <input type="text" name="apellidos"><br>
Email: <input type="text" name="email"> <br>
Cerveza: <br>
<select multiple name="cerveza[]">
<option value="SanMiguel">San Miguel</option>
<option value="Mahou">Mahou</option>
<option value="Heineken">Heineken</option>
<option value="Carlsberg">Carlsberg</option>
<option value="Aguila">Aguila</option>
...
</select><br>
<input type="submit" value="Enviar datos!" >
</form>

Y para recoger la informacin y tratarla actuaramos del siguiente modo...

<?php
echo "Nombre: ". $_POST["nombre"];
echo "<br>Apellidos: ". $_POST["apellidos"];
echo "<br>E-mail: ". $_POST ["email"];
$cervezas=$_POST["cerveza"];
//recorremos el array de cervezas seleccionadas. No olvidarse q la primera posicin de un array es
la 0

for ($i=0;$i<count($cervezas);$i++)
{
echo "<br> Cerveza " . $i . ": " . $cervezas[$i];
}
?>

Nota: Al ponerle este tipo de nombres (terminando en corchete) a un campo de un formulario y si usamos funciones Javascript para
validarlos, manejarlos, etc... debemos aadir a dicho campo, adems del nombre, el atributo de HTML id y utilizar este ltimo como
identificador del campo, en vez del nombre que se haya colocado en el atributo name, puesto que dara problemas.

El cdigo completo de este ejemplo podra ser el siguiente. Sera bueno fijarse que hemos colocado todo
el cdigo en un archivo PHP. Ese cdigo tiene un formulario reentrante, es decir, la pgina se llama a si
misma para procesar el formulario. Recordar que puede verse este ejemplo en funcionamiento en una
pgina aparte.
<?
if (!$_POST){
?>
<form action="select_multiple.php" method="POST">
Nombre: <input type="text" name="nombre"><br>
Apellidos: <input type="text" name="apellidos"><br>
Email: <input type="text" name="email"> <br>
Cerveza: <br>
<select multiple name="cerveza[]">
<option value="SanMiguel">San Miguel</option>
<option value="Mahou">Mahou</option>
<option value="Heineken">Heineken</option>
<option value="Carlsberg">Carlsberg</option>
<option value="Aguila">Aguila</option>
</select><br>
<input type="submit" value="Enviar datos!" >
</form>
<?
}else{

echo "Nombre: ". $_POST["nombre"];


echo "<br>Apellidos: ". $_POST["apellidos"];
echo "<br>E-mail: ". $_POST ["email"];
$cervezas=$_POST["cerveza"];

//recorremos el array de cervezas seleccionadas. No olvidarse q la primera posicin de un array


es la 0

for ($i=0;$i<count($cervezas);$i++)
{
echo "<br> Cerveza " . $i . ": " . $cervezas[$i];
}

}
?>

Potrebbero piacerti anche