Доброго времени суток всем! Никак не могу решить следующую проблему. Есть файл index.php, где есть форма, которая добавляет данные в БД. С добавлением всё в порядке, но возникает такая ошибка- после добавления данных в БД, если обновить страницу(при пустой форме), в БД дублируются данные, введённые до этого. Например: я ввожу в форму слово "Форум по PHP", нажимаю на кнопку добавить, происходит добавление "Форум по PHP" в БД, страница обновляется, форма пуста, я нажимаю кнопку обновить, и значение "ФОРУМ по PHP" вновь дублируется в БД. Ниже приложу свой код, где я пытался решить эту проблему с помощью if (isset(var) ) PHP: <?php $connect = mysqli_connect("localhost", "root", "", "diplom"); if (isset($_GET['category'])) { $category = $_GET['category']; $q = mysqli_query($connect, "INSERT INTO categories VALUES (null, '$category')"); } ?> Если нужно, также прикладываю часть HTML кода HTML: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm" crossorigin="anonymous"> <style type="text/css"> </style> <title></title> </head> <body> <div class="container"> <div class="row"> <div class="col-3"> <div id="sidebar-wrapper"> <ul class="sidebar-nav"> <li class="sidebar-brand"><a href="index.php">Главная</a> </li> <li><a href="add_post.php">Добавить запись</a> </li> <li><a href="edit_posts.php">Редактировать записи</a> </li> <li><a href="add_cat.php">Добавить категорию</a> </li> <li><a href="edit_cat.php">Редактировать категории</a> </li> </ul> </div> </div> <div class="col-9"> <form action="add_cat.php"> <div class="row h-100 justify-content-center align-items-center mt-5"> <div class="form-row col-md-3 "> <input type="text" name="category" class="form-control" placeholder="Добавить категорию"> </div> </div> <div class="row h-100 justify-content-center align-items-center mt-4"> <button type="submit" class="btn btn-primary">Добавить</button> </div> </form> </div> </div> </div> <script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js" integrity="sha384-ApNbgh9B+Y1QKtv3Rn7W3mgPxhU9K/ScQsAP7hUibX39j7fakFPskvXusvfa0b4Q" crossorigin="anonymous"></script> <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js" integrity="sha384-JZR6Spejh4U02d8jOt6vLEHfe/JQGiRRSQQxSfFWpi1MquVdAyjUar5+76PVCmYl" crossorigin="anonymous"></script> </body> </html>
После вставки в БД ничего не выводить в браузер, а сделать редирект на ту же страницу PHP: if(!empty($_GET['category'])){ $category = $_GET['category'];// для продакшена так не годится, нужно обезопасить строку $q = mysqli_query($connect, "INSERT INTO categories VALUES (null, '$category')"); header('Location: http://адрес.страницы.с.формой'); }
@Comandante, но в целом замечание правильное, данные перед внесением в бд надо обрабатывать. И дело не только в инъекциях, без эскейпирования можно потерять много данных. Поздновато вы пришли на форум, диплом я так понимаю "горит"? --- Добавлено --- @Comandante, как это вариант редиректа без самого редиректа?
Печально. Или, может, Вы использовали рандомные номера в сессии? Тогда ок. Что-то на этом форуме у меня частый facepalm.