Autor Tema: Checkboxes: Seguir la pista a elementos marcados y desmarcados  (Leído 1399 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado MalOrion

  • Trade Count: (0)
  • MiembrosReales
  • *
  • Thank You
  • -Given: 0
  • -Receive: 0
  • Mensajes: 22
Hola,
estoy haciendo un script donde se le pueda seguir la pista a los elementos marcados y no marcados en una lista de checkboxes. Al cargar, algunos estaran marcados o desmarcados dependiendo de la base de datos, pero en este caso para motivos de simplicidad pongo los elementos que estaran marcados en un arreglo auxiliar.

Resulta que los checkboxes al postearlos solo marca los que han sido marcados, pero yo quiero saber los marcados y los no marcados. Si estaba marcado y se ha desmarcado, ELIMINAR. Si no estaba marcado y ahora esta marcado, entonces AGREGAR.

Algoritmo:
Guardar en un arreglo hidden los elementos que automaticamente aparecieron marcados al cargar la pagina LISTA 1
guardar la lista completa original en otro arreglo ( no lo he usado por el momento, quizas ni la necesite)   LISTA 2
al momento de darle click pasar las dos listas anteriores y al mismo tiempo el arreglo de checkboxes (HTML/PHP solo pasa los que estan marcados) LISTA 3
crear un nuevo arreglo al comprar la diferencia de LISTA 1 Y LISTA 2, (array_diff), la diferencia entre ellos son los elementos que se han marcado o desmarcado, si la diferencia es un arreglo vacio, no ha habido accion
el nuevo arreglo contiene nuevos elementos, coger uno por uno e ir a compararlos a la lista que se cargo originalmente LISTA 1, (in_array())
     si no esta en la lista original (de los marcados) es por que se marco (estaba desmarcado originalmente)  eso significa AGREGARLO
    si estaba en la lista original pero no esta en la nueva lista, eso es ELIMINAR.


Problema: carga la lista con algunos marcados, si desmarco uno no funciona aun cuando aparentemente la comparacion de el arreglo original y el "posteado" es valida (aunque no lo registra al comprarlo en array_diff)

Aqui esta el script (esta en ingles por que trabajo en un pais angloparlante)

Gracias por su tiempo, si lo corren entenderan un poquito mejor, gracias de ante mano !!!!!


Código: [Seleccionar]

<?php
if(isset(
$_POST['submit'])):
$posted_list $_POST['parent'];   //La lista que ha sido manipulada en la pagina en si
$entire_list $_POST['entire_list'];   // Lista de todos los elementos, quizas ni la necesite a no ser que quiera validar rangos
$checked_list $_POST['checked_list'];   // Esta lista es la que se paso como hidden y contiene todos los elementos marcados (checked) al cargar la pagina (en produccion viene de una base de datos)

echo '<p>Entire List</p>';
echo '<pre>';
print_r($entire_list);
echo '</pre>';

echo "<p>Checked List(Original)</p>";
echo '<pre>';
print_r($checked_list);
echo '</pre>';

echo "<p>Posted List</p>";
echo '<pre>';
print_r($posted_list);
echo '</pre>';

#Let the fun begins
$cmp_array array_diff($posted_list,$checked_list);
echo '<pre>';
print_r($cmp_array);
echo '</pre>';

echo '<p>Delete or Add?</p>';
foreach($cmp_array as $value){
if(in_array($value$checked_list)){
#It was in the original list, so delete
echo "<p>To Delete: $value</p>";
}else{
#it was not in the original list, so insert it
echo "<p>To Insert: $value</p>";
}
}




endif;
/*Set some values marked by default*/
$current_checked_list = array(1,3,4,7,5,8);
?>

<html><head><title></title></head>
<body>
<p>Testing Checkbox States</p>
<form method="post" action="<?=$_SERVER['PHP_SELF'];?>">
<ul>
<?php
$checked='';
for($i=0;$i<10;$i++){
if(in_array($i,$current_checked_list)) { 
$checked=' checked="checked"';
echo '<input type="hidden" name="checked_list['.$i.']" value="'.$i.'">';
}
echo '<li><input type="checkbox" name="parent['.$i.']" value="'$i '"'$checked.'>'.$i.'</li>';
echo '<input type="hidden" name="entire_list['.$i.']" value="'.$i.'">';
$checked='';
}

?>

</ul>
<input type="submit" name="submit" value="Submit"/>
</form>

</body>
</html>


 
« Última Modificación: marzo 20, 2013, 10:18:50 pm por MalOrion »