Есть рабочая функция, которая изменяет содержимое статьи, как на самом сайте, так и в БД.
Форма простая:
- Заголовок статьи
['title'];
- Форма загрузки изображения к статье
$_FILES['image'];
- Категория статьи
['categories'];
- Текст статьи
['text']
Вот код:
function edit_post($connect, $post_id){
$post_id = $_GET['post_id'];
$types = array('image/gif', 'image/png', 'image/jpeg');
if(isset($_POST['submit'])){
$title = $_POST['title'];
$text = $_POST['text'];
$category = $_POST['category'];
//Путь, куда должно сохраняться загруженное изображение
$path = '../../images/post/';
// Если файл загружен успешно, перемещаем его
// из временной директории в конечную, иначе прекращаем работу скрипта
if(is_uploaded_file($_FILES["image"]["tmp_name"]))
{
//Проверка файла на его тип
if(!in_array($_FILES['image']['type'], $types))
die('Ошибка загрузки файла. Пожалуйста, загружайте изображения только в форматах JPG, PNG, GIF.');
move_uploaded_file($_FILES["image"]["tmp_name"], $path . $_FILES["image"]["name"]);
} else {
die("Ошибка загрузки изображения. Пожалуйста, вернитесь обратно и убедитесь в том, что Вы загрузили изображение.");
}
$image = $_FILES['image']['name'];
$update = "UPDATE posts SET `title` = '$title', `text` = '$text', `image` = 'images/post/$image', `category_id` = '$category' WHERE id = ".$post_id;
$result = mysqli_query($connect, $update);
header("Location: ". $_SERVER["REQUEST_URI"]);
}
}
А это HTML (так, на всякий случай) :
<form method="post" enctype="multipart/form-data">
<div class="form-group">
<label for="formGroupExampleInput">Заголовок записи:</label>
<input type="text" class="form-control" value="<?php echo $separate_post['title']; ?>" name="title"><br>
<label for="formGroupExampleInput">Изображение:</label>
<input type="file" name="image" class="form-control-file"><br>
<label for="formGroupExampleInput">Категория:</label>
<select class="form-control" name="category">
<?php foreach($categories as $category) { ?>
<option><?=$category["id"]?></option>
<?php } ?>
</select><br>
<label for="formGroupExampleInput">Текст записи:</label>
<textarea class="form-control" rows="10" name="text" placeholder="Текст..."><?php echo $separate_post['text']; ?></textarea>
</div>
<button type="submit" name="submit" class="btn btn-primary" style="float:right;">Редактировать</button>
</form>
Всё работает отлично, но только в том случае, если идёт полное редактирование всей статьи, если пропустить форму с загрузкой файла, и нажать на кнопку редактировать, то скрипт перестанет работать и будет выдана ошибка (которую я сам и прописал:)).
Вопрос, как редактировать только одно поле (допустим заголовок статьи), при этом минуя форму загрузки?