UPDATE `tablename`
SET `field` = IF(? <> '', ?, `field`)
WHERE ...
Това замества задачата за проверка за празни записи в MySQL и полето използва предишната си стойност вместо празна стойност. Трябва да предадете стойността в execute()
два пъти, за да работи това. По същество той прави същото като вие, но без да се налага да съхранява стойността във вашата PHP сесия.
Използвайки този подход, вашият код за актуализиране ще изглежда така:
/*
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']
));
Вашият съществуващ код би попречил на потребителя да въведе един единствен 0
самостоятелно, което няма да стане - може да искате да добавите проверка и за това.