twofolls95
@twofolls95

Как реализовать частичное редактирование?

Есть рабочая функция, которая изменяет содержимое статьи, как на самом сайте, так и в БД.
Форма простая:
- Заголовок статьи ['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>


Всё работает отлично, но только в том случае, если идёт полное редактирование всей статьи, если пропустить форму с загрузкой файла, и нажать на кнопку редактировать, то скрипт перестанет работать и будет выдана ошибка (которую я сам и прописал:)).
Вопрос, как редактировать только одно поле (допустим заголовок статьи), при этом минуя форму загрузки?
  • Вопрос задан
  • 84 просмотра
Решения вопроса 1
glaphire
@glaphire Куратор тега PHP
PHP developer
Сейчас в коде работа с $_FILES идет хардкодом, значит надо перейти к гибкой загрузке - если $_FILES пуст, то ничего с ним не делать и работать с остальными данными формы, если в нем есть image - то уже работать с файлом
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
anton_reut
@anton_reut
Начинающий веб-разработчик
При редактировании сделать hidden поле и установить ему значение - 1, а при создании поста значение - 0, и при редактировании проверять - если поле hidden = 1 то поле "картинка" может быть пустым и это не вызывает ошибку, просто валидация пропускается, иначе если hidden = 0 то нужно обязательно указать загружаемую картинку. Таким образом при редактировании у тебя скрипт не будет просить картинку.
Тут ветвление скрипта в любом случае получается.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы