Добрый день! Подскажите, пожалуйста, решение такой проблемы. Пользователь заполняет форму, жмет ОТПРАВИТЬ (метод POST), затем скрипт обрабатывает и INSERT'ом вставляет в базу. Но тут косяк: если в браузере нажать "обновить" или F5, то добавляется одна и та же запись. Положил гирьку на F5 и сервак упал от переизбытка чувств (записей). Как избежать повторной отсылки формы? Уже специально очищаю массив $_POST. Вот выдержка из кода Код (Text): function insert_thing(){ if (!empty($_POST)) {INSERT (я тут не расписываю, не в этом суть)} $_POST=array(); } Т.е. вставляю в базу и очищаю $_POST, однако, он ни фига не очищается! And so on and on!
Ты очищаешь POST в предыдущем запуске скрипта. После F5 браузер заново вызывает скрипт и заново пересылает пост запрос. Как вариант при вставке данных выводить сообщение типа "Спасибо, ваш пост добавлен" и перенаправлять в нужное место. Можно и не выводить ничего, а просто сразу перенаправлять.
Редирект - это хорошо! А как быть с кнопками ВПЕРЕД НАЗАД в БРАУЗЕРАХ. Если пользователь нажмет НАЗАД на странице с результатами о добавлении, то значения введенные в inputax никуда не деваются, жмём ДОБАВИТЬ и вуаля - та же самая запись опять идёт в базу, но уже под другим номером. То же и с кнопкой ВПЕРЕД. Ведь при нажатии на эти кнопки не происходит загрузка страницы, следовательно, не отрабатывают никакие скрипты!!! Как отследить такое поведение?
Если это POST запрос, то при нажатии назад/вперёд происходит перезагрузка страницы. А что ты хочешь? Пользователь, если захочет - всё равно напишет ещё раз тоже самое и нажмёт добавить. Захочет - и 100 раз так сделает. Можешь перед добавлением новой записи в б.д. проверять что там уже в базе.
А можно сделать редирект на страницу с помощью POST-запроса? с GET всё понятно: Код (Text): header("Location: add_thing_result.php?res=$res[0]&id=$res[1]);
Ну если заморочиться, то на JavaScript можно сделать авто-submit POST-формы по событию onload, например. Только, мне кажется, ты чё-то не то хочешь сделать.
Блин, уже и кэш запретил, всё равно не помогает! Код (Text): session_cache_limiter('nocache'); Придется действительно проверять инфу перед добавлением в базу.
Там не в сессиях дело. И вообще никак с php не связано. Это браузер запоминает предыдущие значения полей форм и подставляет в них значения. Наверно.
вам ненадо заморачиваться и проверять , повторно ли отправлены данные. После отправки формы на многих сайтах делается редирект на другую страницу с помощью php (header("Location: index.php")), либо если асинхронный запрос - то с помощью javascript (document.location.href="index.php"). Это наиболее простой и быстрый вариант.
Я и так делаю редирект на страницу с результатами, но пользователь-то может нажать в браузере кнопку НАЗАД, а затем опять нажать ОТПРАВИТЬ ФОРМУ, страница опять перенаправиться на страницу с результатами. Будет занесена повторно одна и та же информация. Вопрос, как отследить нажатие кнопок ВПЕРЕД, НАЗАД(В этом случае нет перезагрузки страницы). Редирект не спасет! Как заметил sobachnik, .