Un pequeño ejemplo.
Tenemos un checkbox el cual posee un
id
y un pseudo-atributo que contiene el identificador del registro que actualizarás en la tabla de la base de datos:
Código HTML:
Ver original<input type = "checkbox" id = "foo" data-id = "<?php echo $id; ?>" />
En el archivo JS que incluyas en el documento HTML, lo tomas y asignas una función que deberá ejecutarse cuando se marque/desmarque el checkbox:
Código Javascript
:
Ver originalvar checkbox = document.getElementById("foo"),
ajax = function(url){
var xhr = window.XMLHttpRequest ?
new XMLHttpRequest() :
new ActiveXObject("Microsoft.XMLHTTP") ||
new ActiveXObject("Msxml2.XMLHTTP");
xhr.open("GET", url, true);
xhr.send(null);
};
checkbox.addEventListener("click", function(){
var estado = this.checked ? 1 : 0, //Si está marcado, asigno 1 a 'estado', si no, 0
id = this.getAttribute("data-id"), //El valor del pseudo-atributo 'data-id'
url = "ejemplo.php?estado=" + estado + "&id=" + id;
ajax(url); //Ejecuto la petición asíncrona, enviando los valores
}, false);
Y en el archivo
ejemplo.php
, actualizas el valor del campo en cuestión en la BD:
Código PHP:
Ver original//Recibo y desinfecto a los datos de posible contenido malicioso
//Actualizo los datos
mysql_query("UPDATE tabla SET estado = {$estado} WHERE id = {$id}");
Y cuando en otra ocasión desees acceder a la página y quieras ver el checkbox con el estado actualizado, simplemente realizas la consulta y haces una evaluación; si el estado es igual a 1, marcas al checkbox.
Código PHP:
Ver original<?php
$query = mysql_query('SELECT * FROM tabla WHERE id = ' . $id);
?>
<input
type = "checkbox"
id = "foo"
data-id = "<?php echo $id; ?>"
<?php if ($row['estado'] == 1) echo 'checked'; ?>
/>
<?php
}
?>
Para este ejemplo utilicé la extensión obsoleta
MySQL, pero lo recomendable es que uses la extensión mejorada
MySQLi o
PDO. No te olvides de colocar el código JS justo antes de la etiqueta
</body>
para que así pueda afectar al DOM.
Saludos