sql >> Base de Datos >  >> RDS >> Mysql

Impedir que sql actualice campos en blanco o vacíos desde mi formulario de actualización

UPDATE `tablename`
SET `field` = IF(? <> '', ?, `field`)
WHERE ...

Esto reemplaza el trabajo de verificar si hay entradas vacías en MySQL y el campo usa su valor anterior en lugar de un valor vacío. Debe pasar el valor a execute() dos veces para que esto funcione. Básicamente hace lo mismo que tú, pero sin tener que almacenar el valor en tu sesión de PHP.

Con este enfoque, su código de actualización se vería así:

/*
  This block is no longer necessary
if($_POST['firstname']){ $firstname = $_POST['firstname']; }
else { $firstname = $_SESSION['uname']['firstname']; }

if($_POST['lastname']){ $lastname = $_POST['lastname']; }
else { $lastname = $_SESSION['uname']['lastname']; }

if($_POST['email']){ $email= $_POST['email']; }
else { $email = $_SESSION['uname']['email']; }
*/

$query = "
  UPDATE `users`
  SET
    `firstname` = IF(? <> '', ?, `firstname`),
    `lastname` = IF(? <> '', ?, `lastname`),
    `email` = IF(? <> '', ?, `email`)
  WHERE `id` = ?
";

$results = $condb->prepare($query);

$results->execute(array(
  $_POST['firstname'], $_POST['firstname'],
  $_POST['lastname'], $_POST['lastname'],
  $_POST['email'], $_POST['email'],
  $_SESSION['uname']['id']
));

Su código existente habría impedido que el usuario ingresara un solo 0 por sí solo, lo cual no sucederá; es posible que desee agregar un cheque para eso también.