UPDATE `tablename`
SET `field` = IF(? <> '', ?, `field`)
WHERE ...
Dette underordner jobbet med at kontrollere for tomme poster til MySQL, og feltet bruger sin tidligere værdi i stedet for en tom værdi. Du skal overføre værdien til execute()
to gange for at dette virker. Det gør stort set det samme, som du gør, men uden at skulle gemme værdien i din PHP-session.
Ved at bruge denne tilgang vil din opdateringskode se sådan ud:
/*
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']
));
Din eksisterende kode ville have forhindret brugeren i at indtaste en enkelt 0
på egen hånd, hvilket dette ikke gør - du vil måske også tilføje en check for det.