У меня есть переменная $ _POST:
Array ( [phone_1] => 3123213 [phone_2] => 432423 [phone_3] => 4234 [phone_4] => 6456456 [phone_5] => 7567576 [phone_6] => )
Теперь у меня есть этот оператор SQL:
UPDATE table_name SET phone_1 = $_POST['phone1'], phone_2 = $_POST['phone2'], phone_3 = $_POST['phone3'], phone_4 = $_POST['phone4'], phone_5 = $_POST['phone5'], phone_6 = $_POST['phone6'] WHERE id=$id
Я хочу добиться динамического построения SQL-запроса на основе переменной $ _POST и включать только те, которые имеют значение post. Таким образом, оператор SQL должен быть:
UPDATE table_name SET phone_1 = $_POST['phone1'], phone_2 = $_POST['phone2'], phone_3 = $_POST['phone3'], phone_4 = $_POST['phone4'], phone_5 = $_POST['phone5']
потому что переменная сообщения phone_6 пуста. И да, имена ключей $ _POST совпадают с именами полей таблицы. ТИА!
вы можете использовать это:
<?php $update = ""; foreach($_POST as $key => $value) { if(!empty($value)) { $update .= $key. "='".$value."',"; } } $update = substr($update,0,-1); $query = "UPDATE table_name SET ".$update." WHERE id=$id"; ?>
$postVar = array_filter($_POST); $update = implode(', ', array_map(function($v, $k) { return $k."='".$v."'"; }, $postVar, array_keys($postVar))); $query = "UPDATE table_name SET ".$update." WHERE id=$id";
это также было бы лучшим подходом, избегая цикла, используя array_map
и array_map
http://php.net/manual/en/function.array-map.php