Versión en PDF

Campos de selección múltiple en PHP

Vamos a ver un forma simple de trabajar con campos de selección múltiple; es decir, que se puede seleccionar más de un valor a la vez. Para que quede mas claro vamos a ver un ejemplo completo, supongamos que tenemos el siguiente formulario:

index.html

1
2
3
4
5
6
7
8
9
10
11
   <form name="prueba" action="proceso_colores.php" method="POST">
         Cuales son tus colores preferidos?
        <br>
        Rojo <input type="checkbox" name="color_rojo" value="rojo" />
        <br>
        Azul <input type="checkbox" name="color_azul" value="azul" />
        <br>
        Verde <input type="checkbox" name="color_verde" value="verde" />
        <br>
        <input type="submit" value="Enviar" name="btn_colores" />
    </form>

Lo que vemos son 3 campos tipo checkbox llamados: color_rojo, color_azul y color_verde, típicamente recuperaríamos los valores de los campos de la siguiente forma:

proceso_colores.php

1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
//recupero mediante POST
$rojo = $_POST['color_rojo'];
$azul = $_POST['color_azul'];
$verde = $_POST['color_verde'];
 
echo $rojo  . '<br>';
echo $azul  . '<br>';
echo $verde . '<br>';
 
//despues trabajamos con las variables normalmente...
 
?>

Esto es bueno siempre que nuestros campos sean independientes, pero que sucede cuando queremos seleccionar multiples valores ? tendriamos que recuperar en nuestro código PHP todas las variables… y si el campo es cargado dinámicamente? o si los valores posibles son variables?… todo esto genera sin dudas trabajo extra, dado que tendríamos que retocar el código cada vez que algo cambie.
Por suerte, existe una forma sencilla de trabajar con este tipo de campos; ahora veremos que cambios debemos hacer en nuestros archivos .

index.html

1
2
3
4
5
6
7
8
9
10
11
<form name="prueba" action="proceso_colores.php" method="POST">
         Cuales son tus colores preferidos?
        <br>
        Rojo <input type="checkbox" name="colores[]" value="rojo" />
        <br>
        Azul <input type="checkbox" name="colores[]" value="azul" />
        <br>
        Verde <input type="checkbox" name="colores[]" value="verde" />
        <br>
        <input type="submit" value="Enviar" name="btn_colores" />
    </form>

Nótese que cambiamos los nombres de los checkboxes y agregamos los paréntesis rectos [], ahora todos se llaman colores[], al hacer esto el intérprete de PHP almacena todos los valores chequeados en el array colores[] lo que nos permite hacer lo siguiente:

proceso_colores.php

1
2
3
4
5
6
<?php
$colores = $_POST['colores'];
 
$texto_colores = implode(', ', $colores);
echo ' Tus colores son favoritos son: ' . $texto_colores;
?>

El código anterior recupera la variable colores (que ahora es un array y tiene cargados los valores chequeados); luego usamos la función implode para generar una cadena de texto y poder mostrarla.

Ahora que sabemos como trabajar con este tipo de campos, vamos a ver un ejemplo donde generamos una cadena para usarla en una sentencia SQL

proceso_colores.php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
$colores = $_POST['colores'];
 
foreach($colores as $color){
    $valor = "'".$color."'";
    $colores_aux[] = $valor;
}
$valores = implode(', ', $colores_aux);
$sql_valores = "(" .$valores. ")";
 
$sql_insert = "INSERT INTO TBL_COLORES (color) VALUES " . $sql_valores. ";";
echo $sql_insert;
 
?>

Lo que hacemos es recuperar la variable e iterar sobre el array para poner en cada valor las comillas correspondientes; luego, guardamos las cadenas nuevamente en un array auxiliar y finalmente usamos la función implode para agregar las comas. La cadena generada se concatena en la sentencia INSERT y listo.

Podemos ver que es una técnica muy util ya que nos permite manejar este tipo de campos variables de forma simple. Además, hace nuestro código mas reusable ya que ahora no tenemos que cambiar nada en el caso que se agreguen mas valores.

VN:F [1.6.3_896]
Te gusto este post?
Rating: 7.5/10 (2 votes cast)
Comparte el artículo:
  • Digg
  • Sphinn
  • del.icio.us
  • Facebook
  • Mixx
  • Google Bookmarks
  • MySpace
  • StumbleUpon
  • Technorati
  • Print
  • email
  • Twitthis

Tags: , , , , , , ,

Tambien te puede interesar...


2 Comentarios »

  1. Comentario por wilson — July 22, 2009 @ 11:29 am

    me gustaria saber del tema, pero en reslacion a una base de dato; ejemplo:
    yo estoy programando en php y necesito traerme una lista de un personal, pero que cada persona que me traiga tenga un checkbox asociado, cosa que cuando yo seleccione (mas de uno), este me traiga el nombre de la persona que seleciones;todo esto es por que tengo que actualizar los datos de esta persona, insertandoles un dato traido de in listbox que ya lo tengo, en resumidas cuentas lo que debo hacer es seleccionar por ejemplo 2 personas y un lugar en el listbox y que todo esto se acualice en la base de datos. gracias si me puede ayudar.

  2. Comentario por Juan Benitez — July 23, 2009 @ 2:14 am

    Hola wilson, si entiendo bien tu consulta creo que la solución que buscas es similar a lo que dice en el artículo.
    El formulario seria casi igual solo que en vez de colores tendrías personas y la forma de recuperación de los datos seria igual también; la única variante que se presenta es en la sentencia SQL donde tendriamos un UPDATE en vez del INSERT, el truco esta en armar la sentencia convenientemente iterando el array de personas y creando una cadena como esta: (”nombre_persona1″, “nombre_persona2″) para usarla en una sentencia similar a:
    UPDATE tbl_personas
    SET campo_modificado = “dato traido del listbox”
    WHERE persona IN (”nombre_persona1″, “nombre_persona2″)

    Espero haberte aclarado un poco tus dudas, sino es asi, no dudes en escribirme y con gusto puedo ayudarte un poco mas.

RSS feed para comentarios de este post. TrackBack URI

Deja un comentario

Security Code:




Tecnopedia.net - 2009 / Condiciones de Uso / Contacto / RSS
Tecnopedia.net desarrollada bajo licencia Creative Commons Creative Commons License