Foros del Web » Programando para Internet » PHP »

Utilizar el type="check" de modo múltiple

Estas en el tema de Utilizar el type="check" de modo múltiple en el foro de PHP en Foros del Web. Les expongo mi situación: Estoy haciendo un CMS que contiene una galería de fotos. Cada foto tiene un ID único en una tabla en la ...
  #1 (permalink)  
Antiguo 29/02/2008, 10:12
 
Fecha de Ingreso: febrero-2008
Ubicación: Asunción
Mensajes: 36
Antigüedad: 16 años, 2 meses
Puntos: 0
Pregunta Utilizar el type="check" de modo múltiple

Les expongo mi situación:
Estoy haciendo un CMS que contiene una galería de fotos.
Cada foto tiene un ID único en una tabla en la base de datos.
Para poder eliminar las fotos que ya no se quieran entonces las hago visualizar en grupos y debajo de cada imagen coloco un <input type=check> para que puedan ser seleccionados los archivos de imagen a ser borrados.

Ahora bien mi problema es: cómo saber qué imagen se seleccionó para ser borrada ya que el type=check tiene de valores TRUE y FALSE.
Cómo puedo hacer para que sepa cuál o cuáles checks se seleccionaron.

Estuve pensando en agregarle al nombre del check el ID de la imagen. Ejemplo:
para las imagenes que tienen el id 156, 205, 328

Código:
<input type="check" name="chk156" />
<input type="check" name="chk205" />
<input type="check" name="chk328" />
(claro, generar el nombre de los checks con php que haga echo "chk".$id)

Pero después me encontré con la situación de... cómo leer cada variable y cómo saber el nombre de cada variable despues de pulsar el botón que hace submit.

Tendrían alguna sugerencia o otra manera de hacer?
En lo posible manteniendo la idea de utilizar los checks.

Gracias!
  #2 (permalink)  
Antiguo 29/02/2008, 10:26
 
Fecha de Ingreso: enero-2007
Mensajes: 272
Antigüedad: 17 años, 4 meses
Puntos: 5
Re: Utilizar el type="check" de modo múltiple

Cita:
Iniciado por carolca79 Ver Mensaje
Estuve pensando en agregarle al nombre del check el ID de la imagen. Ejemplo:
para las imagenes que tienen el id 156, 205, 328

Código:
<input type="check" name="chk156" />
<input type="check" name="chk205" />
<input type="check" name="chk328" />
(claro, generar el nombre de los checks con php que haga echo "chk".$id)

Hola, si bien no me equivoco, no tengo php a manos para ratificarlo, pero la idea sería algo así, intenta con esto.

Código PHP:
<input type="check" name="chk[<?php$id_imagen?>]" />
<input type="check" name="chk[<?php $id_imagen?>]" />
<input type="check" name="chk[<?php $id_imagen?>]" />
luego en php te llega el arreglo chk y con el indice del id de la imagen, por cierto, html envia solo los check que son seleccionados.

Por ahí van los tiros, como dije antes no tengo php a mano para ratificar algo así, pero intenta con eso y luego imprime ese arreglo de la siguiete manera

Código PHP:
echo '<pre>'print_r($_POST['chk']; echo '</pre>'
Prueba y me lo comentas...

Hasta Luego .-
  #3 (permalink)  
Antiguo 29/02/2008, 10:32
Avatar de quinqui  
Fecha de Ingreso: agosto-2004
Ubicación: Chile!
Mensajes: 776
Antigüedad: 19 años, 8 meses
Puntos: 56
Re: Utilizar el type="check" de modo múltiple

Holas carolca79

Te cuento mi solución:

- Todos los checkboxes les pongo el mismo "name".
- A cada uno le asigno en "value" el ID correspondiente.
- Ten a saber que el valor de "seleccionado" no se guarda en la propiedad "value" del campo, sino en el evento "checked" del mismo.
- Agrego un campo "hidden" al formulario, donde almacenaré todos los checkboxes seleccionados al momento de hacer submit.
- Cuando hago submit llamo a una función Javascript que recorre los chekboxes (pues son parte de un arreglo, al haberles puesto a todos el mismo nombre), y voy verificando si están checkados: si lo están, tomo su valor y lo concateno y guardo en el campo oculto, separando los ID con ";".
- Luego cuando recibo los valores del formulario, tomo el valor del campo oculto y lo separo, basándome en que están unidos por el signo ";".

Código HTML:
<input type="hidden" name="imagenes_checkadas" />

<input type="check" name="imagen" value="chk156" />
<input type="check" name="imagen" value="chk205" />
<input type="check" name="imagen" value="chk328" /> 
__________________
pipus.... vieeeeeji plomius!!!
*quinqui site*
  #4 (permalink)  
Antiguo 29/02/2008, 11:02
 
Fecha de Ingreso: febrero-2008
Ubicación: Asunción
Mensajes: 36
Antigüedad: 16 años, 2 meses
Puntos: 0
Pregunta Re: Utilizar el type="check" de modo múltiple

Cita:
Iniciado por lucasarts_18 Ver Mensaje
Por ahí van los tiros, como dije antes no tengo php a mano para ratificar algo así, pero intenta con eso y luego imprime ese arreglo de la siguiete manera

Código PHP:
echo '<pre>'print_r($_POST['chk']; echo '</pre>'
Prueba y me lo comentas...

Hasta Luego .-
Gracias lucasarts_18 por tu ayuda. Realmente imprimió OK de la forma en que me dijiste, pero en ese caso, cómo podría tomar el valor del índice para luego pasarlo a una variable y poder procesarlo?
  #5 (permalink)  
Antiguo 29/02/2008, 11:10
 
Fecha de Ingreso: febrero-2008
Ubicación: Asunción
Mensajes: 36
Antigüedad: 16 años, 2 meses
Puntos: 0
Pregunta Re: Utilizar el type="check" de modo múltiple

Cita:
Iniciado por quinqui Ver Mensaje
Te cuento mi solución:

- Todos los checkboxes les pongo el mismo "name".
- A cada uno le asigno en "value" el ID correspondiente.
- Ten a saber que el valor de "seleccionado" no se guarda en la propiedad "value" del campo, sino en el evento "checked" del mismo.
- Agrego un campo "hidden" al formulario, donde almacenaré todos los checkboxes seleccionados al momento de hacer submit.
- Cuando hago submit llamo a una función Javascript que recorre los chekboxes (pues son parte de un arreglo, al haberles puesto a todos el mismo nombre), y voy verificando si están checkados: si lo están, tomo su valor y lo concateno y guardo en el campo oculto, separando los ID con ";".
- Luego cuando recibo los valores del formulario, tomo el valor del campo oculto y lo separo, basándome en que están unidos por el signo ";".

Código HTML:
<input type="hidden" name="imagenes_checkadas" />

<input type="check" name="imagen" value="chk156" />
<input type="check" name="imagen" value="chk205" />
<input type="check" name="imagen" value="chk328" /> 
Me parece muy buena tu propuesta Quinqui, y veo que harás la separación con eregi()...
Ahora bien, de Javascript lo único que conozco es su nombre y hacer algunas sumas, pero hasta ahi. Por si acaso me harías el favorazo de presentarme tu javascript que hace la secuencia de cadena en el type=hidden y cómo tiene que llamarse a la función desde el <input> ?

Gracias
  #6 (permalink)  
Antiguo 29/02/2008, 11:12
 
Fecha de Ingreso: enero-2007
Mensajes: 272
Antigüedad: 17 años, 4 meses
Puntos: 5
Re: Utilizar el type="check" de modo múltiple

Hola:

Ahora revise algo de mi código donde implemento esto.

Cita:
<input type="checkbox" name="chkperfil[{$fila.idmenu}]" checked/>
Acá uso smarty, pero es fácilmente reeemplazable con php.

Y en el script php proceso esa petición rescatando el valor que me trae el checkbox.

Código PHP:
// Sucede al momento presionar el botón guardar
if (isset($_REQUEST['btnGuardar'])) {

    
// verifica que se haya seleccionado un perfil
    
if ($_REQUEST['slt_perfiles'] <> -1) {
        
$idPerfil =  $_REQUEST['slt_perfiles'];

        
eliminarMenuPerfil($idPerfil);
        foreach(
array_keys($_REQUEST['chkperfil']) as $idMenu)
            
$resultado ingresarMenuPerfil($idPerfil$idMenu);

        
$listadoMenus retornarListadoMenus($idPerfil);
    }else
        
$mensaje "¡Seleccione el tipo de perfil!";


Cómo podrás ver, te llega un arreglo de todos los checkbox seleccionados, luego bastaría usar un foreach para extrar el valor que tiene cada checkbox.

La solución que plantea nuestro compañero es un poco mas complicado, sin esperar ofender a nuestro compañero pienso que si quieres llegar y borrar te sirve esta solución directa con php, ahora si piensas usar algún tipo de validación por parte del cliente, la solución por javascript puede ser un camino.

Hasta Luego .-
  #7 (permalink)  
Antiguo 29/02/2008, 11:13
 
Fecha de Ingreso: enero-2007
Mensajes: 272
Antigüedad: 17 años, 4 meses
Puntos: 5
Re: Utilizar el type="check" de modo múltiple

Cita:
Iniciado por carolca79 Ver Mensaje
Gracias lucasarts_18 por tu ayuda. Realmente imprimió OK de la forma en que me dijiste, pero en ese caso, cómo podría tomar el valor del índice para luego pasarlo a una variable y poder procesarlo?
pues puedes sacarla directamente con arrays_keys o procesarla mediante un foreach.
  #8 (permalink)  
Antiguo 29/02/2008, 11:38
 
Fecha de Ingreso: febrero-2008
Ubicación: Asunción
Mensajes: 36
Antigüedad: 16 años, 2 meses
Puntos: 0
De acuerdo Re: Utilizar el type="check" de modo múltiple

Gracias lucasarts_18,

Las dos opciones realmente me sirven ya que, la solución por javascript me dio otras ideas y otros lugares en los que puedo utilizar.
La tuya lucasarts_18, ya me funciona correctamente y lo recojo así:

Código PHP:
$cont 0;
foreach(
array_keys($_REQUEST['chk']) as $idm)
{
    
$resultado[$cont] = $idm;
    
$cont++;
    
}
print_r($resultado); 
Me ayudas con el javascript Quinqui?


Gracias!
  #9 (permalink)  
Antiguo 01/03/2008, 19:14
Avatar de quinqui  
Fecha de Ingreso: agosto-2004
Ubicación: Chile!
Mensajes: 776
Antigüedad: 19 años, 8 meses
Puntos: 56
Re: Utilizar el type="check" de modo múltiple

Holas ^^

Qué bueno que hayas solucionado el problema original, carolca79. Yo también estudiaré el método de lucasarts_18, pues la primera vez que intenté mandar un arreglo por post no me funcionó y creí que no se podía, así que opté por la que describí.

Ok, esta es la forma en que se haría usando Javascript.

Primero carga esta función desde el HEAD de la página (puede estar directo en el HTML o bien en un archivo independiente .JS al que llamas desde allí):

Código HTML:
function GuardarSeleccionados(formulario)
{
  var chk = formulario.imagen;
  var auxiliar = new Array();
  var j = 0;

   // Recorre el arreglo de checks
  for (var i; i < chk.length; i++)
  {
     // Si está checkado, lo agrega al arreglo auxiliar:
     if (chk[i].checked)
     {
        auxiliar[j] = chk[i].value; 
        j++;
     }
  }

  // Guarda elementos del arreglo auxiliar en el campo oculto:
  if (auxiliar.length > 0)
  {
     formulario.imagenes_checkadas.value = auxiliar.join(";");
     formulario.submit();
  }
  else
  {  alert("No ha seleccionado ninguna imagen para Eliminar.")  }
}
Ejecutas esta función cuando vayas a mandar el formulario.

Código HTML:
<form>
<input type="hidden" name="imagenes_checkadas" />

<input type="check" name="imagen" value="chk156" />
<input type="check" name="imagen" value="chk205" />
<input type="check" name="imagen" value="chk328" /> 

<input type="button" value="Eliminar Seleccionadas" onclick="GuardarSeleccionados(this.form)">
</form> 
Espero no haber olvidado nada.... De cualquier forma es un esbozo de la idea, no la solución exacta, porque ya que lo que quieres es ordenar que las Imágenes sean eliminadas, yo no sé si esa será la única acción del formulario o si es una de varias (como Mover, Copiar, etc.)... Por eso te puse el llamado a la función en un botón común y no en el principal (submit)...

Espero que te sirva :)
__________________
pipus.... vieeeeeji plomius!!!
*quinqui site*
  #10 (permalink)  
Antiguo 06/03/2008, 10:19
 
Fecha de Ingreso: febrero-2008
Ubicación: Asunción
Mensajes: 36
Antigüedad: 16 años, 2 meses
Puntos: 0
Re: Utilizar el type="check" de modo múltiple

Quinqui,
Está muy buena tu solución JavaScript. En unos días voy ver si llego a la página donde lo necesito y te comento que tal me fue. Y si hay mejoras tambien te las presento.


Gracias lucasart_18 y quinqui!
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 04:41.