UPDATE `tablename`
SET `field` = IF(? <> '', ?, `field`)
WHERE ...
これは、MySQLへの空のエントリをチェックするジョブをサブ化し、フィールドは空の値の代わりに以前の値を使用します。値をexecute()
に渡す必要があります これが機能するために2回。これは基本的にあなたがしているのと同じことをしますが、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
を入力するのを阻止しているでしょう。 それ自体では、これはできません。そのためのチェックも追加することをお勧めします。