twofolls95
@twofolls95

Как решить проблему редактирования значений в таблице?

Набросал форму редактирования записи, в целом работает, но с косяками, вот мой гвн-код:

Список записей(admin.php):
<table class="table">
					<thead>
						<tr>
							<th scope="col">ID</th>
							<th scope="col">Статья</th>
						</tr>
					</thead>
					<tbody>
						<?php foreach($posts as $post) { ?>
							<tr>
								<th scope="row"><?php echo $post['id']; ?></th>
								<td>
									<a href="../../post.php?post_id=<?=$post['id']?>" target="_blank">
										<?php echo $post['title']; ?>
									</a>
									<a href="?delete=<?=$post['id']?>" style="float: right;margin-left: 20px;"><img src="../../images/delete.png" title="Удалить запись"></a>
									<a href="edit.php?post_id=<?=$post['id']?>" style="float: right;" target="_blank"><img src="../../images/edit.png" title="Редактировать запись"></a> 
								</td>
							</tr>
						<?php } ?>
					</tbody>
				</table>


Переход на определённую страницу с формой для редактирования(admin.php):
<a href="edit.php?post_id=<?=$post['id']?>" style="float: right;" target="_blank"><img src="../../images/edit.png" title="Редактировать запись"></a>


Функция редактирования записи:
function edit_post($connect, $post_id){
		$title = $_POST['title'];
		$image = $_POST['image'];
		$text = $_POST['text'];
		$update = "UPDATE posts SET `title` = '$title', `image` = '$image', `text` = '$text' WHERE id = ".$post_id;
		$result = mysqli_query($connect, $update);
		return $result;
}


Форма редактирования записи(edit.php):
<div class="container">
		<div class="row">
			<div class="col-md-12 animated delay-1s fadeIn">
				<div class="card my-4">
					<h5 class="card-header">Редактирование записи</h5>
					<div class="card-body">
						<form method="post">
							<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="text" class="form-control" value="<?php echo $separate_post['image']; ?>" name="image"><br>
								<label for="formGroupExampleInput">Текст записи:</label>
								<textarea class="form-control" rows="3" name="text" placeholder="Текст..."><?php echo $separate_post['text']; ?></textarea>
							</div>
							<button type="submit" class="btn btn-primary" style="float:right;">Редактировать</button>
						</form>
					</div>
				</div>
			</div>
		</div>
	</div>


Когда я перехожу на определенную запись по ID из admin.php, открывается edit.php с формой, где в инпутах стоят значения определённой записи (title, text, image).
При редактировании значений и после нажатия на кнопку "Редактировать", обновление в таблице происходит успешно, но инпуты становятся пустыми, после обновления страницы они заполняются обновлёнными значениями (это первый косяк).
А ещё вылазит предупреждение о повторной отправке формы что вполне типично для форм (чёт редирект не прокатил, может неправильно прописал его...), короче я пока хз как это исправить...

Далее, перейдя к определённой записи (из admin.php) на страницу редактирования (к edit.php)
данные в таблице становятся пустыми(title,text,image), то есть они стираются напрочь.

Где я накосячил?

Заранее спасибо, всех благ! :)
  • Вопрос задан
  • 78 просмотров
Решения вопроса 2
ThunderCat
@ThunderCat Куратор тега PHP
{PHP, MySql, HTML, JS, CSS} developer
После редактирования и субмита формы через пост запрос, на бэке делаете всю обработку данных, а затем редирект на страницу редактирования. Это во первых предотвратит повторную отправку при F5, а во вторых у вас нормально заполнятся поля.
Ответ написан
Комментировать
twofolls95
@twofolls95 Автор вопроса
Я решил проблему, нужно было подправить функцию:
function edit_post($connect, $post_id){
	$post_id = $_GET['post_id'];
	if(isset($_POST['submit'])){
		$title = $_POST['title'];
		$image = $_POST['image'];
		$text = $_POST['text'];
		$update = "UPDATE posts SET `title` = '$title', `image` = '$image', `text` = '$text' WHERE id = ".$post_id;
		$result = mysqli_query($connect, $update);
		header("Location: ". $_SERVER["REQUEST_URI"]);
	}
}
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
irishmann
@irishmann
Научись пользоваться дебаггером
Прикрути JS. При нажатии редактировать, всплывает модальное окно с формой редактирования, кнопка сохранить отправляет AJAX в php-обработчик, который обновляет записи в бд, возвращает результат, JS обрабатывает ответ, и редактирует таблицу и скрывает модальное окно.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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