@Drumsid

Удаление из бд через get работает только при двойном клике?

Осваиваю php. Вот тестовый код. Подскажите, пытаюсь удалять из бд данные. Но срабатывает только если два раза нажать на ссылку "удалить". Как сделать чтоб с первого раза удалялось? Не разберусь что то))
<?php 
$connection = new PDO("mysql:host=localhost; dbname=testlogin; charset=utf8;", 'root', '');

if ($_POST['comment']) {
	$newComment = $_POST['comment'];
	$connection->query("INSERT INTO `comments` (`comment`) VALUES ('$newComment');");
	header("Location: " . $_SERVER['REQUEST_URI']);
}

$allComments = $connection->query("SELECT * FROM comments ORDER BY comment DESC");

if ($_GET['del']) {
	$del = $_GET['del'];
	$connection->query("DELETE FROM comments WHERE id = $del");
}

?>
<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>test login</title>
</head>
<body>
	<?php echo $out; ?>
	<form action="" method="post">
		<input type="text" name = "comment" required>
		<input type="submit">
	</form>	
	<?php 
		foreach ($allComments as $comment) {
			 echo "<p><a href='http://testlogin/index.php?del={$comment['id']}'>удалить</a></p><p>" . $comment['comment'] . "</p><hr>";
		}
	 ?>

</body>
</html>
  • Вопрос задан
  • 90 просмотров
Решения вопроса 1
@dimuska139
Backend developer
Вызывай $allComments = $connection->query("SELECT * FROM comments ORDER BY comment DESC"); после секции if ($_GET['del']) {...}, а не до.

А то получается, что ты сначала достаешь из таблицы то, что там есть, записываешь в переменную, а потом удаляешь. В переменной $allComments у тебя удаленная запись остается как бы, потому что удаление происходит после ее инициализации выборкой из таблицы.

Ну а вообще я тебе не советую сырые данные подставлять напрямую в запросы к базе. Это уязвимость - sql-инъекции. См. доку - там примеры есть, как надо.

P.s. данные для подключения к базе тоже не надо хардкодить в скрипте - выноси в конфиг, который пропиши в .gitignore-файле, чтобы он в систему контроля версий не попал. Можно такие секьюрные данные хранить в env-файлах - тебе в этом поможет вот эта библиотека.

P.p.s. старайся не смешивать логику и представление. Посмотри, как это реализовано в известных фреймворках. А то у тебя view (представление) смешано с взаимодействием с БД, что как бы такое себе в плане качества кода.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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