Este script enseña la técnica necesaria para acceder a los elementos seleccionados de un select múltiple.
Quizá un problema que se nos puede plantear durante el trabajo con PHP, es querer recoger los datos de un Select Múltiple. Recordamos que un select múltiple es un campo de formulario donde se pueden seleccionar varios elementos a la vez.
Para ver mejor lo que deseamos hacer, es muy interesante entrar la página 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 página y queremos recoger los datos introducidos por el usuario. Para los campos "nombre", "apellidos" y "email" no tenemos ningún tipo de problema, recogemos los datos por el método habitual, es decir:
<?php
echo "Nombre: ". $_POST["nombre"];
echo "<br>Apellidos: ". $_POST["apellidos"];
echo "<br>E-mail: ". $_POST ["email"];
?>
Uno se podría preguntar, y porque no puedo poner "$cerveza=$_POST["cerveza"]"? el problema reside en que los option del select múltiple tienen todos el mismo nombre y en caso de tener varios elementos seleccionados sólo obtendríamos el último elementoº. Y como resolver esto? Pues bien, la solución es bien sencilla. Basta con poner en el final del nombre del campo del select múltiple unos corchetes ([]), en nuestro caso sería "cerveza[]". De este modo PHP interpreta el campo en cuestión como un array con tantas posiciones como elementos haya seleccionados en el select múltiple. Veamos pues como quedaría 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 información y tratarla actuaríamos 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 posición de un array es la 0
for ($i=0;$i<count($cervezas);$i++)
{
echo "<br> Cerveza " . $i . ": " . $cervezas[$i];
}
?>
El código completo de este ejemplo podría ser el siguiente. Sería bueno fijarse que hemos colocado todo el código en un archivo PHP. Ese código tiene un formulario reentrante, es decir, la página se llama a si misma para procesar el formulario. Recordar que puede verse este ejemplo en funcionamiento en una página 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 posición de un array es la 0
for ($i=0;$i<count($cervezas);$i++)
{
echo "<br> Cerveza " . $i . ": " . $cervezas[$i];
}
}
?>
José Lorenzo Escudero
Traductor y desarrollador de CriarWeb.com