Запретить/отключить повторную отправку формы php
Довольно часто встречается проблема "повторной отправки формы в php". На самом деле - "отключить повторную отправку формы в php" очень просто! Рассмотрим это с примерами.
Подробно о повторной отправке формы php
- Пример повторной отправки формы
- Убрать повторную отправку формы php Форма для проверки повторной отправки формы
- Отключаем повторную отправку формы php
Скачать - что в архиве?
Пример повторной отправки формы
Давайте разберемся - как происходит повторная отправка формы в php. Для этого нам понадобится такая форма. чтобы мы смогли увидеть в реальности - повторную отправку формы!
<a name="result"></a>
<?
if (trim($_POST["example"])) {
echo "POST запрос был отправлен" . strip_tags($_POST['example']);
}
?>
<form action="#result" method="post">
<input type="text" name="example" value="привет мир">
<input type="submit" value="Нажми на меня" name="submit">
</form>
Разместим выше приведенный код прямо здесь:
Что нужно сделать!?
Нажмите кнопку "Нажми на меня".
После перезагрузки страницы нажмите "F5".
Если вы нажмете "продолжить", то первые данные отправятся второй раз на сервер.
Если речь идет о комментариях, то тут появятся два абсолютно одинаковых комментария...
Как избавиться от "повторной отправки формы!?"
Убрать повторную отправку формы php.
С самого начала давайте обговорим "логику убирания повторной отправки формы", а далее приступим к теории!
Логика отключения повторной отправки формы №1
Обрабатываем post на отдельной странице.
На данную страницу отправляем с помощью action.
У нас есть такая вещь как сессия - это будет контейнером для переноса полученного результата.
Приступим к...
Теория : "убрать повторную отправку формы".
Для того, чтобы отключить повторную отправку формы Вам понадобится:
Тег form.
В тег помещаем action с адресом(это живой пример) :
Чтобы не оправлять бессмысленные "post"-ы, возьмем два типа number - это будет импровизированный калькулятор... соберем форму:
<form action="https://dwweb.ru/__a-data/__all_for_scripts/__examples/html/redirect.php" method="post" class="variant_action">
<input type="number" name="variant_action_1" required>
<input type="number" name="variant_action_2" required>
<input type="submit" value="Отключи повторную отправку" name="variant_action">
</form>
Добавим стили, чтобы наши "input"-ы выглядели чуть поинтереснее.
Вторая страница.
Перейдем ко второй странице(которая в action). На ней расположим:
Проверим стартовала ли сессия - располагаем в самом верху.
Примем два post с использованием strip_tags.
Сложим их(у нас два числа - вы же можете отправлять и принимать любые post-ы).
Помещаем в сессию полученное значение.
Сделаем переадресацию назад на эту страницу.
Если требуется вывести результат в сессии выводим с помощью echo
Далее убиваем сессию.
И да... поставим здесь якорь, чтобы вернуться прямо сюда...
Соберем весь код и помещаем одну часть здесь на странице... вторую часть кода на второй странице...
Пример удаления удаления повторной отправки формы через action
Для того, чтобы "удалить повторную отправку формы через action" - введите :
В первое поле - первое число.
Во второе поле - второе число.
И нажмите кнопку - "Отключи повторную отправку"
Пример формы для отключения повторной отправки формы
В архиве приведенный пример теории:
Файл №1 с формой:
Вторая страница - полностью соответствует описанию
В двух файлах использована теория и практика вывода автоматически определяемого пути.
Скачать здесь.
Отключаем повторную отправку формы php
Чтобы отключить "повторную отправку формы php" нам придется немного изменить код, который мы написали ранее.
Чем отличается выше приведенный код(в предыдущем пункте).
Запускаем сессию:
В условии
Создаем сессию "$_SESSION[example1]" и предаем туда данные из "_POST".
Далее header + refresh - перезагрузка.
+ exit, чтобы программа дальше не пошла.
При перезагрузке проверяем существует ли сессия:
Если да, то передаем данные в переменную $echo1 + сессию уничтожаем
Соберем весь код отмены повторной отправки формы php
Чтобы протестировать отключение запроса на повторную отправку формы, нажмите по ниже идущей кнопке...
Смотри работу скрипта на примере.
В связи с тем, что на данной странице - возникает ошибка "header" - что заголовки были уже отправлены!
Поэтому... нам нужен отдельный пример, который вы уже видели выше - на примере.
Скачать завтра!