Foros del Web » Programando para Internet » Javascript »

Checkboxes múltiples

Estas en el tema de Checkboxes múltiples en el foro de Javascript en Foros del Web. Saludos, Acudo nuevamente al foro para resolver la siguiente cuestión: Genero un reporte automáticamente tomando registros desde mi base de datos, por cada registro genero ...
  #1 (permalink)  
Antiguo 21/01/2011, 12:28
 
Fecha de Ingreso: septiembre-2010
Ubicación: Puebla
Mensajes: 14
Antigüedad: 13 años, 7 meses
Puntos: 0
Checkboxes múltiples

Saludos,

Acudo nuevamente al foro para resolver la siguiente cuestión:

Genero un reporte automáticamente tomando registros desde mi base de datos, por cada registro genero un checkbox, el formulario queda armado como sigue:

//aqui hago mi conexion a la base de datos, ect...

<? $variable = mysql_query("SELECT * FROM tabla WHERE id>0") ?> //selecciono los registros

<form name="form" method="post" action="update.php">
<input type="checkbox" name="master" onclick="check(document.form.check);">
<?
while ($row = mysql_fetch_array($variable))
{
?>
<input type="checkbox" name="check[]" value="'.$row['id'].'">
<?
}
?>
<input type="submit" value="Actualizar" style="width:150px;">
</form>

El checkbox llamado master es el que llama a la función javascript, cuando lo selecciono hace que todos los demas checkboxes se selecciones y si lo deselecciono hace que todos los demas checkboxes se deseleccionen. Ahora les dejo la función check(); en javascript:

<script type="text/javascript">
function check(field)
{
if (document.form.master.checked == true)
{
for (i = 0; i < field.length; i++)
field[i].checked = true;
}
else if (document.form.master.checked == false)
{
for (i = 0; i < field.length; i++)
field[i].checked = false;
}
}
</script>

Y aqui es donde empieza el truco, al darle click al checkbox master funciona bien SOLO A VECES, hay ocasiones en donde me marca un error "lenght es nulo o no es un objeto" y, naturalmente no funciona. Mi problema debe estar al momento de crear el array para JS y recuperar los elementos de dicho array pero simplemente se me escapa.

Ahora viene la fase dos, el archivo update.php al que hace referencia el action de mi formulario recoge el valor de cada checkbox, en mi caso contiene el id de cada registro listado y actualiza mi base de datos afectando sólo los registros cuyo id coincida con el value de mi checkbox, lo estoy haciendo como sigue:

(en el archivo update.php)
<?
$pdate = date('Y-m-d');
$lista = implode(',',$_POST['check']); //aqui se supone que debe venir el array con los value de cada checkbox seleccionado
mysql_query("UPDATE tabla SET fecha='".$pdate."', estado='pagado' WHERE id IN ('".$lista."')");
?>

Pero, al tener un error en el array de JS, este update no hace nada, sólo afecta al primer registro correspondiente al primer checkbox del array y debería afectar a todos los registros cuyo checkbox haya sido seleccionado.

Esto es muy al estilo de Hotmail donde yo selecciono los correos que quiero borrar y le doy click en "eliminar" y entonces afecta sólo a esos correos seleccionados; por otra parte yo tengo un checkbox que me permite selecionar todos los correos de una vez para realizar una accion sobre ellos.

Espero que haya sido claro en mi explicación y lo que necesito... algunas veces soy medio bestia para explicar las cosas.

¿Alguna sugerencia?
  #2 (permalink)  
Antiguo 21/01/2011, 13:03
 
Fecha de Ingreso: septiembre-2010
Ubicación: Puebla
Mensajes: 14
Antigüedad: 13 años, 7 meses
Puntos: 0
Respuesta: Checkboxes múltiples

Ya no importa, lo solucioné...

Adoro postear aquí porque puedo haber estado dos días buscando como solucionar algo sin encontrar la solución por ningún lado de la red, pero basta que la postee por aquí y como por arte de magia la encuentro en los siguientes 10 minutos, en algún sitio remoto y casi olvidado por los dioses del internet.

gracias!

Etiquetas: checkboxes
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




La zona horaria es GMT -6. Ahora son las 18:08.