Как отменить добавление из таблицы записи при обновлении страницы?

0

При обновлении, данные из таблицы вновь забиваются. Сколько раз обновляю, столько новых строц и создает система.

Помогите товарищи, как исправить?

<?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>
php
mysql

5 ответов

0

Все работает, на ругается на ввод переменных. Что не так?

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();
}

}

0

Получилось, это помогло

$nameFilter = htmlspecialchars($_POST ['name'], ENT_QUOTES, 'UTF-8');
$authorFilter = htmlspecialchars($_POST ['author'], ENT_QUOTES, 'UTF-8');
$name = $nameFilter;
$author = $authorFilter;

Но черт подери, такой оргомный код, для такой простой манипуляции. Как будто код придумали специально, чтобы дольше писать и не бывать дома. Ну серьезно)))

0

Нужно поставить проверку на 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/

0

У тебя написано так:

$name = $_POST['name'];
$author = $_POST['author'];

А переменные нужно писать без POST, просто с "", как в коде по ссылке, которую я скидывал выше:

$name = "";
$author = "";

Просто код скопируй:

https://fructcode.com/ru/qa/php-mysql-domasnee-zadanie-57-uroka-tgukud/

0

На самом деле все логично, htmlspecialchars функция для фильтрации данных ввода из формы, чтобы сайт был более защищенным от хакеров, а проверка на POST данные, чтобы insert каждый раз не срабатывал, когда загружается страница.

Сюда еще много чего полезного можно добавить, типа функции trim, чтобы обрезала введенные пробелы в форму, типа ПРОБЕЛПРОБЕЛПРОБЕЛимя или проверку на уникальность данных, если к примеру данные в базе должны содержать какие-то уникальные позиции, типа ISBN у книг, чтобы перед insert делал проверку.

Sign up or Log in to write an answer