Mysql
 sql >> Base de données >  >> RDS >> Mysql

Empêcher sql de mettre à jour les champs vides ou vides de mon formulaire de mise à jour

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

Cela remplace le travail de vérification des entrées vides par MySQL et le champ utilise sa valeur précédente au lieu d'une valeur vide. Vous devez passer la valeur dans execute() deux fois pour que cela fonctionne. Il fait essentiellement la même chose que vous mais sans avoir à stocker la valeur dans votre session PHP.

En utilisant cette approche, votre code de mise à jour ressemblerait à ceci :

/*
  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']
));

Votre code existant aurait empêché l'utilisateur d'entrer un seul 0 par lui-même, ce qui ne sera pas le cas - vous pouvez également ajouter une vérification pour cela.