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
. दर्ज करने से रोक दिया होगा अपने आप, जो ऐसा नहीं करेगा - आप उसके लिए भी एक चेक जोड़ना चाह सकते हैं।