Portada | Monotemáticos | Secciones | Desarrolladores | Comunidad | Servicios | Servicios profesionales | RSS
Desde 0 | HTML | CSS | ASP | PHP | AJAX | Javascript | Promoción de webs | Rentabilidad de webs
Directorio | Manuales | Scripts | FAQs | Programas | Artículos Copyleft | Actualidad | La Cosecha | Colabora
Registrarse | Vuestras páginas | Foros del web | Lista de correo | Boletín de novedades
Generador METAs | Compras | Busca cursos
Alojamiento | Dominios.es | Micropagos SMS | Buscadores | Patentes, marcas | Creación web | Multimedia | Videos
Desarrollo Freelance | Buscar proyectos | Buscar profesionales | Solicitar desarrollo

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

Informe de José Lorenzo Escudero*
Traductor y desarrollador de CriarWeb.com
URL: http://www.criarweb.com

Atención: Contenido exclusivo de DesarrolloWeb.com. No reproducir. Copyright.

* Para consultas técnicas utilizar la lista de correo.

Versión imprimible Versión imprimible del artículo
Enviar artículo por e-mail Enviar artículo por e-mail
Añadir un comentario al artículo Publicar un comentario del artículo

Manuales relacionados con este artículo
Dentro de Taller de PHP

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.

Añadir un comentario al artículo Añadir un comentario del artículo



Enlaces:
Maestrosdelweb
  Ir arriba

Manuales relacionados
+Taller de PHP
Categorías
+Scripts en PHP

Lectura recomendada

Compra este libro en Agapea, la librería urgente a domicilio.

Tienda DesarrolloWeb

DesarrolloWeb.com | Copyright | Anunciese | Acerca de | Datos legales | Contacta | Por GuiarteMultimedia