Избегать повторной отправки форм на php-страницах

Есть ли способ избежать обработки форм при обновлении php-страниц? Я хотел бы предотвратить повторную отправку форм при обновлении ссылок на php-файлы с функцией insert в них. Например, я обрабатываю ряд заметок, написанных пользователями в верхней части каждой страницы для новой заметки. Кроме очевидного создания отдельного php-файла с функцией заголовка есть ли другой способ сделать это?

Solutions Collecting From Web of "Избегать повторной отправки форм на php-страницах"

Используйте шаблон Post-Redirect-Get .

  1. Принять запрос на отправку
  2. Обработка данных
  3. Выдать ответ перенаправления
  4. Принять запрос Get
  5. Выдать ответ 200

Если вам нужно отобразить данные из представленных материалов, укажите идентификатор строки или аналогичный в (например) строку запроса URL-адреса, на который вы перенаправляете.

Лучшим способом было бы сделать header("location: form.php"); вызов после обработки формы. Это перенаправит вас обратно на страницу формы, и если вы обновите, браузер не будет повторно отправлять данные формы.

Кроме того, вы можете проверить, были ли вы уже обработаны полученные данные, но это все равно даст вам предупреждающее сообщение о том, что вы собираетесь повторно отправить данные.

Вы можете сделать то и другое, на всякий случай кто-то использует кнопку «Назад» и случайно нажимает «Отправить» еще раз.

Просто установите флажок, когда вы обрабатываете форму в первый раз, чтобы вы могли проверить ее и позже прекратить переработку. Переменная сеанса или файл cookie будут работать нормально.

Вы можете поместить nonce на страницу, которая разрешена только один раз, так что если вы видите, что в нее входит тот же самый nonce, вы не вставляете эту страницу.

Я перенаправляю пользователей на новую страницу после обработки формы.

Форма представляет собой POST-запрос для do-something.php . Я проверяю входные данные, и если он проверяет, обрабатываю ли я данные и выполняю перенаправление на do-something.php?somethingdone . Таким образом, пользователь может нажать F5 без повторной отправки запроса POST.