Formularios: Enviar Array de un select multiple

Hoy he trabajado con un atributo del campo select que no había utilizado aún, el multiple.
Éste nos permite seleccionar no sólo una, sino varias opciones de una lista desplegable.

Me han solicitado un formulario, para una empresa de traducciones, que contenga un campo con los idiomas que ofrecen y que permita al usuario seleccionar más de un idioma con el que trabajar, así que éste será mi ejemplo de hoy:

08

Nota: doy por hecho que ya sabéis crear un formulario simple y enviarlo por email.

1.- Insertamos el select en nuestro formulario:

<select name="traduccion-meta[]" multiple="multiple" size="4">
<option value="No">Seleccione una opci&oacute;n</option>
<option value="Ingles">Ingl&eacute;s</option>
<option value="Ruso">Ruso</option>
<option value="Chino">Chino</option>
<option value="Frances">Franc&eacute;s</option>
<option value="Rumano">Rumano</option>
<option value="Japones">Japon&eacute;s</option>
</select>

Es importante que en el name pongamos los corchetes [] finales, ya que con esto indicamos que nos va a devolver un Array, si no los pusieramos sólo nos enviaría el último campo seleccionado y no nos valdría de nada tener un select multiple.

El atributo multiple=»multiple» es el que nos permite seleccionar varias opciones.

Y con size=»4″ lo que hago es que se me muestren solamente 4 opciones a primera vista, para ver el resto aparecen las barras de desplazamiento, si no indicara el tamaño me saldría un select demasiado grande para mi gusto.

Una vez tenemos nuestro select, pasamos a enviar los datos a través de la función mail() a nuestra dirección de email.

2.- El código para recoger y enviar el contenido de nuestro select multiple es:

foreach ($_POST['traduccion-meta'] as $idioma){
$msg.= $idioma." - ";
}

Con el foreach recorremos el interior de nuestro Array y en cada vuelta sacamos los idiomas seleccionados y los añadimos al contenido del mensaje del email enviado.

Acordaros que para enviar el contenido de los campos de nuestro formulario lo haciamos así:

$msg.= $_POST['traduccion-meta];

Esta vez no lo podemos hacer así ya si sólo nos devolvería la palabra Array.

Y eso es todo, si no os acordáis de cómo enviar el formulario, echarle un vistazo a mis anteriores artículos sobre este tema.

Espero que os sirva de ayuda, cualquier duda ya sabéis,.. a preguntar ;)

  • 15 septiembre 2008
  • Programación
  • , ,

9 comments on “Formularios: Enviar Array de un select multiple”

  1. Hola mira yo tengo este codigo en el html

    Nombre:

    Telefono:

    Email:

    Universidad:

    Comentario:

    an01
    an02
    an03

    y en el php que es el de envio lo tengo asi

    lo que necesito es que el codigo php me lo modifiques para que cuando seleccione las opciones del lista/menu selecciones multiples, en el email me aparescan todas las que selecciono y no que me aparesca o la ultima, un array o nada, y ya probe con todo y no se como hacerlo si me ayudas te lo agradeceria

  2. Hola Diego, se ha interpretado el código de tu comentario por lo que no puedo leerlo :(
    Por lo que me cuentas tiene que ser que se te haya pasado algún punto de lo que he explicado arriba, por ejemplo.. ¿Has puesto los corchetes [] en el name del select?

    1. Gracias por el artículo, me estaba volviendo loco con esto de recorrer los select múltiples… y al final me di cuenta que faltaban los corchetes [] en el name del select.

  3. Hola Natali, te explico lo que hago.
    copie tu select multiple y lo pege en mi formulario en .html
    y luego copio
    foreach ($_POST[‘traduccion-meta’] as $idioma){
    $msg.= $idioma.” – “;
    }

    y lo pongo en mi enviar.php que es donde tengo el resto del formulario. Pero cuando lo subo a la pag y me fijo en mi correo no me llego nada, no se que estoy asiendo mal? Ayudame!!!!
    lo necesito si o si y no encuentro a nadie que sepa alcararmelo

    te paso lo que tengo en el enviar .php haber si te sirve

    gracias por tu ayuda

  4. Hola nnatali. Muy buena tu explicación. Acabo de hacer una prueba y funciona de 10.
    Recibo los idiomas seleccionados en una línea (uno tras otro):
    Ruso – Frances – Rumano
    Muchas gracias por compartir tus conocimientos, y de esta forma tan clara. Para los que sabemos poco, esto es un oasis :))
    Y ya que estamos … a ver si podés orientarme: En un formulario con muchos campos deseo enviar sólo aquellos que han sido completados (los que tienen un valor distinto de «0»). Supongo que debo utilizar «if», o tal vez «select».

  5. Natali, buenas tardes

    Asunto: Como paso todas las opciones existentes en un select a un arrays sin tener que marcarlas.

    Mi nombre es Antonio y estoy haciendo mis primeros pinitos en php, te agradeceria tu sugerencia a mi inquietud.

    Actualmente tengo 2 select (origen y destino) algunas opciones del select origen las paso al select destino.

    Como hago para pasar a un arrays todas las opciones que tengo en el select destino sin tener que seleccionarlas dentro del select destino.

    Todos los ejemplos que veo en la red son empleando select multiple, en cuyo caso debo luego de pasar las opciones del select origen al select destino, marcar con la tecla control en el select destino todas las opciones.

    Gracias por tu tiempo.

    Antonio

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *