Ver Mensaje Individual
  #1 (permalink)  
Antiguo 21/01/2011, 12:28
Malk
 
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?