Hago una consulta a la bd y por medio de un while genero un listado de usuarios cada uno con su respectivo checkbox. Uso una función check para que, si en la bd aparece activado, ponga el checked="checked" o de lo contrario no ponga nada.
Código PHP :
while($dat = mysql_fetch_array($res)){ echo $dat['usuario']; echo "<input type='hidden' name='usuario[]' value=' ".$dat['usuario']." '>"; echo "<input type='checkbox' name='selec[]' value='1'". check($dat['selec']); }Hasta aquí bien. Genera la lista y los usuarios que están activados aparecen con su tiquet y los que no, no. El problema me surge al enviar el formulario:
Código PHP :
$usuario = $_POST['usuario']; $i = -1; foreach ($usuario as $key => $value){ $i++; $usuario = $_POST['usuario'][$i]; $selec = $_POST['selec'][$i]; if (empty($selec)){ $selec = '0'; } else { $selec = $_POST['selec'][$i]; } echo "usuario: ".$usuario.". estado: ".$selec; }Lo anterior presenta los siguientes problemas:
1. Arroja un Notice: Undefined offset en ésta línea: $selec = $_POST['selec'][$i];
por lo que me veo obligado a ponerle un @ para evitar el mensaje. Asumo que ocurre debido a que los checkbox vacíos no envían valor alguno. He probado varias formas pero no logro que el checkbox no seleccionado me envíe el valor 0 para no recibir la advertencia.
2. El listado de usuarios lo despliega bien, sin embargo, los checkbox marcados los pone siempre al inicio, independientemente de a quién corresponden. Por ejemplo:
Como es en realidad:
usuario: 1. estado: 0
usuario: 2. estado: 0
usuario: 3. estado: 1
usuario: 4. estado: 0
usuario: 5. estado: 1
Como lo muestra el script anterior:
usuario: 1. estado: 1
usuario: 2. estado: 1
usuario: 3. estado: 0
usuario: 4. estado: 0
usuario: 5. estado: 0
Probé cambiando el checkbox por un input tipo text y ahí funciona a la perfección, es decir, muestra el estado de cada usuario como corresponde a la info de la bd. Es más, el Notice: Undefined offset tampoco aparece. Sin embargo, necesito que sea con un input tipo checkbox.
Espero haber sido claro. Llevo varios días buscando y no logro dar con el problema. Agradeceré cualquier sugerencia. De antemano muchas gracias.
¡Buena Caza!