Actualizar datos de una tabla.

Resumen.

Una vez que ya tenemos registros en nuestra base de datos, lo siguiente será modificar estos, los motivos para ello pueden ser muchos, desde un apellido con un error ortográfico, haber cambiado el número de teléfono, cambiar una clave…, las opciones son muchísimas. De esta tarea tan fundamental como cotidiana nos ocuparemos en este artículo presentando dos opciones entre las múltiples posibles.

Artículo.

Como ya hemos dicho, modificar datos en nuestras tablas es una constante, es una tarea muy simple, pero debemos tener unas cosas en cuenta que no podemos pasar por alto o tendremos resultados muy desagradables.

En cada registro de nuestras tablas, si es que están bien construidas, debe haber de manera inexcusable al menos una clave primaria y también podemos tener una o mas claves únicas. Las modificaciones (actualización o ediciones) de nuestros datos las haremos teniendo en cuenta estas claves por regla general. Y digo por regla general, por que a veces puede darse el caso que tengamos que editar mas de un registro de manera simultanea, pero eso lo comentaremos en otro momento.

En nuestra tabla de registro de usuarios tenemos una clave primaria que es “id_usuar”, este campo es perfecto para actualizar datos tan sensibles como por ejemplo el relacionado con un cambio de clave. También lo podemos hacer a través de una clave única, como “email”. Esto lo haremos de la siguiente forma:

$email = 'perico@dominio.com';
$new_clave = 'ghF8k3b';

$_EDITAR_SQL = " UPDATE $tb1 SET clave = '$new_clave' WHERE email = '$email' ";
mysqli_query($Conex_BD, $_EDITAR_SQL);


Expliquemos esta consulta. La cláusula UPDATE indica a MySQL que vamos a modificar un dato en una cierta tabla, en nuestro caso, la contenida en la variable $tb1, SET nos indica que campos vamos a modificar, en este caso, el campo “clave” tomará el valor de la variable $new_clave. Y todo esto ocurrirá en el registro donde el campo “email” toma el valor de la variable $email. Si quisiéramos modificar mas de un campo solo tendríamos que separarlos por coma (,).

clave = '$new_clave', ip = '$ip', campo3 = '$var3'…


¿Qué ocurriría si en la actualización no usásemos una clave única o primaria?

En el caso de cambiar la clave, por ejemplo, si el campo que eligiéramos fuera el sexo, con valor 2, es decir, mujer

WHERE sexo = '2'


a todas las mujeres se les asignaría la misma clave, lo cual no es nada deseable, como el lector ya puede imaginar. En otros casos, como un catalogo online, por ejemplo, si podríamos actualizar así la disponibilidad de unos artículos. Por ejemplo, podríamos poner como disponibles todos los artículos relacionados con la lluvia, como paraguas e impermeables en Galicia, y no disponibles en Andalucía.

Por tanto, tengamos siempre presente que vamos a hacer, y en función de ello, tomemos las decisiones oportunas en términos de programación, no es solo pensar en actualizar, también debemos pensar qué vamos a actualizar.

La consulta de actualización de clave, dado que es una consulta única, que solo afectará a un registro se puede mejorar su eficiencia agregando la cláusula LIMIT.

"UPDATE $tb1 SET clave = '$new_clave' WHERE email = '$email' LIMIT 1";


Con lo que, una vez se ejecute esta actualización, la consulta no seguirá buscando nuevos registros para actualizar. Pero si lo que vamos a actualizar es la disponibilidad de un conjunto de artículo en una u otra provincia, el LIMIT deberá ser omitido, ya que afectaría a más de un registro.

¿Y esto es todo? Pues no. La actualización de datos debe estar mínimamente protegida, lo cual lo podemos hacer de diferentes formas. La mas sencilla, un condicional que permita o no la ejecución del código salvo que se cumpla una condición. Por ejemplo:

<?php
// Comprobacion elemental de la validez de un dato
$email = 'emma@dominio.com';
$new_clave = 'Ckh43Gd2';

if(strlen($email) > 5){
$Conex_BD = ConectaBD();

$_EDITAR_SQL = " UPDATE $tb1 SET clave = '$new_clave' WHERE email = '$email' LIMIT 1 ";
mysqli_query($Conex_BD, $_EDITAR_SQL);

DesconectaBD($Conex_BD);

echo '<p>Clave actualizada con exito.</p>';
}else{
echo '<p>No se ha actualizado la clave.</p>';
}
?>


Este condicional, mediante la función strlen() cuenta el número de caracteres, y como ninguna dirección de e-mail va a tener menos de 6 caracteres, solo lo ejecutamos cuando el número de caracteres del e-mail sea de 6 o mas caracteres.

Pero aunque este método es válido, no es ideal, lo mas lógico seria comprobar si el dato existe en la tabla, y si existe, proceder a su validación (aunque esto en teoría debería haberse echo al guardarlo) y validar el dato que nos indica el registro a actualizar, lo que podemos hacer con una función de validación de la siguiente manera:

<?php
// Actualizar un dato en una tabla MySQL
include('archivos/func_conexionBD.php');
include('archivos/funcion_validar.php');

$email = 'emma@dominio.com';
$expr_mail = '/(^[a-z0-9._-]{2,40})+(@[a-z0-9._-]{4,30})+\.[a-z]{2,5}$/i';

$valida_mail = Validar_Datos($email,$expr_mail);

$new_clave = 'Ckh43Gd2';

$Conex_BD = ConectaBD();

$Verifica_Dato = "SELECT * FROM $tb1 WHERE email = '$email'";
$Verif_Dato = mysqli_query($Conex_BD, $Verifica_Dato);
$N_Dato = mysqli_num_rows($Verif_Dato);

if($N_Dato == 1) {
// Existe el dato
if(isset($valida_mail)){
// Email valido
$_EDITAR_SQL = " UPDATE $tb1 SET clave = '$new_clave' WHERE email = '$email' LIMIT 1 ";
mysqli_query($Conex_BD, $_EDITAR_SQL);

echo '<p>Clave actualizada con exito.</p>';
}else{
// Email NO valido
echo '<p>Clave NO actualizada.</p>';
}
} else {
// No exite el dato
echo "El dato <b>$email</b> NO existe.";
}
DesconectaBD($Conex_BD);
?>


Y con esto, ya tenemos lo fundamental para actualizar datos de forma adecuada y segura. Por supuesto, los datos que entran para la actualización, también deben ser validados, no olvidemos que los formularios son un agujero de seguridad en toda página Web, lo que hace que la validación sea imprescindible.
Tags: Edición || actualización || UPDATE || SET || condicional || validación

Comentarios.

Sin comentarios, publica el tuyo.