Mysql
 sql >> Database >  >> RDS >> Mysql

Impedisci a sql di aggiornare i campi vuoti o vuoti dal mio modulo di aggiornamento

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

Questo subordina il lavoro di controllo delle voci vuote a MySQL e il campo usa il suo valore precedente invece di un valore vuoto. Devi passare il valore in execute() due volte per farlo funzionare. Praticamente fa la stessa cosa che stai facendo tu, ma senza dover memorizzare il valore nella tua sessione PHP.

Usando questo approccio, il tuo codice di aggiornamento sarebbe simile a questo:

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

Il tuo codice esistente avrebbe impedito all'utente di inserire un singolo 0 da solo, cosa che non succederà:potresti voler aggiungere un assegno anche per quello.