Есть несколько проблем с вашим кодом:
Вы используете библиотеку mysqli
, которая делает вас уязвимым для атак SQL инъекций. Чтобы предотвратить это, вы должны использовать подготовленные операторы и параметризованные запросы .
С одной стороны, вы ищете $_POST['featured_image']
:
if (isset($_POST['featured_image']))
А через несколько строк вы просматриваете $FILES['featured_image']
:
// Get image name
$featured_image = $_FILES['featured_image']['name'];
Кроме того, эта функция, кажется, полагается на третий массив, параметр с именем $request_values
:
function updatePost($request_values)
Это действительно сбивает с толку и, возможно, является ошибкой.
Но это касается вашей реальной проблемы: когда вы создаете переменную $featured_image
пусто, ваш оператор SQL обновляет столбец пустым:
$query = "UPDATE posts SET title='$title', slug='$post_slug', views=0, image='$featured_image', body='$body', published=$published, updated_at=now() WHERE id=$post_id";
Чтобы обновить столбец image
только тогда, когда $featured_image
не является пустым, вы можете условно включить image='$featured_image'
в ваш $query
:
$query = "UPDATE posts SET title='$title', slug='$post_slug', views=0, " . ( strlen($featured_image) ? "image='$featured_image', " : '' ) . "body='$body', published=$published, updated_at=now() WHERE id=$post_id";
В любом случае вам действительно нужно изменить свой код, чтобы использовать что-то вроде библиотеки PDO вместе с параметризованными запросами для предотвращения SQL атак внедрения.