Recoger datos de un Select Múltiple con PHP
Este script enseña la técnica necesaria para acceder a los elementos seleccionados de un select múltiple.
20/7/04 - 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.
| Nota: Para seleccionar varios elementos de un campo select múltiple, tenemos que utilizar el botón 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 páginas, 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 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];
}
?>
| 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 añadir a dicho campo, además 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 daría problemas. |
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];
}
}
?>
Seguir navegando a partir aquí:
+ 1 manual relacionado
+ 1 categoria relacionada
+ 2 comentarios (Añadir)
| Autoría, licencia y acciones sobre este artículo |
|
|
Manuales relacionados con este artículo
Categorias relacionadas
A través de las categorías de nuestro directorio se pueden encontrar otro tipo de recursos relacionados con este artículo:
+ Entrar en
Scripts en PHP
Comentarios de los visitantes
|
Los comentarios de los visitantes son para ampliar la información del artículo. Cualquiera puede participar.
|
| Se muestran 2 comentarios revisados |
Comentario de Azteck11
25/8/05
En verdad muchas Gracias, lo use con checkbox y de lujo no puedo pedir mas, me soluciono el problema que tenia pues me estaba volviendo loco.
Mil Gracias por este articulo.
Comentario de Druken Master
28/11/06
Gracias, Me ayudo mucho eso del id, ya que los campos select se generaban por javascript y si lo colocabaentre corchetes, me daba error, pero al colarcarle el id, funciono artiro. Muchas Gracias.
Ir arriba