Как отменить добавление из таблицы записи при обновлении страницы?
При обновлении, данные из таблицы вновь забиваются. Сколько раз обновляю, столько новых строц и создает система.
Помогите товарищи, как исправить?
<?php
$mysqli=new mysqli('localhost', 'root', '', 'kinomonstr');
if (mysqli_connect_error()) {
printf("Соединение не установлено", mysqli_connect_error());
exit();
}
$name = $_POST['name'];
$author = $_POST['author'];
$query = "INSERT INTO `muzik`(`id`, `name`, `author`) VALUES (null,'$name','$author')";
$mysqli->query($query);
$query=$mysqli->query('SELECT name, author FROM muzik');
while ($row=mysqli_fetch_assoc($query)) {
echo $row['name']." ".$row['author'].'<br>';
}
$mysqli->close();
?>
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<form action="" method="post">
<input type="text" name="name" placeholder="Название">
<input type="text" name="author" placeholder="Автор">
<input type="submit" value="отправить">
</form>
</body>
</html>
5 ответов
Все работает, на ругается на ввод переменных. Что не так?
Notice: Undefined index: name in C:\xampp\htdocs\kinomonstr\player.php on line 16
Notice: Undefined index: author in C:\xampp\htdocs\kinomonstr\player.php on line 17
$name = $_POST['name'];
$author = $_POST['author'];
if(isset($_POST['name']) && isset($_POST['author'])) {
$query = "INSERT INTO `muzik`(`id`, `name`, `author`) VALUES (null,'$name','$author')";
if($mysqli->query($query)) {
header("Location: " . $_SERVER['REQUEST_URI']);
exit();
}
}
Получилось, это помогло
$nameFilter = htmlspecialchars($_POST ['name'], ENT_QUOTES, 'UTF-8');
$authorFilter = htmlspecialchars($_POST ['author'], ENT_QUOTES, 'UTF-8');
$name = $nameFilter;
$author = $authorFilter;
Но черт подери, такой оргомный код, для такой простой манипуляции. Как будто код придумали специально, чтобы дольше писать и не бывать дома. Ну серьезно)))
Нужно поставить проверку на POST данные типа такого:
if(isset($_POST['name']) && isset($_POST['author'])) {
// Тут код insert в базу
$query = "INSERT INTO.....
// После insert идет проверка, сработал ли инсерт и если да, делать редирект, чтобы при перезагрузке страницы каждый раз не вставлялись данные
if($mysqli->query($query)) {
header("Location: " . $_SERVER['REQUEST_URI']);
exit();
}
}
Тут есть готовый код вместе с дампом базы данных (без редиректа, про которую я писал):
https://fructcode.com/ru/qa/php-mysql-domasnee-zadanie-57-uroka-tgukud/
У тебя написано так:
$name = $_POST['name'];
$author = $_POST['author'];
А переменные нужно писать без POST, просто с "", как в коде по ссылке, которую я скидывал выше:
$name = "";
$author = "";
Просто код скопируй:
https://fructcode.com/ru/qa/php-mysql-domasnee-zadanie-57-uroka-tgukud/
На самом деле все логично, htmlspecialchars функция для фильтрации данных ввода из формы, чтобы сайт был более защищенным от хакеров, а проверка на POST данные, чтобы insert каждый раз не срабатывал, когда загружается страница.
Сюда еще много чего полезного можно добавить, типа функции trim, чтобы обрезала введенные пробелы в форму, типа ПРОБЕЛПРОБЕЛПРОБЕЛимя или проверку на уникальность данных, если к примеру данные в базе должны содержать какие-то уникальные позиции, типа ISBN у книг, чтобы перед insert делал проверку.