2012-01-16 4 views
1

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

ответ

14

Используйте Post-Redirect-Get Pattern.

  1. принять запрос Публиковать
  2. процесса данные
  3. Issue ответ перенаправлять
  4. Принять запрос Получить
  5. Направить 200 ответ

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

+0

ах узнать что-то новое каждый день :) –

+0

Что вы подразумеваете под присягой получить запрос и выдать ответ 200? –

+0

Браузер выдает запрос с «GET/url/you/redirected/to HTTP/1.1» в нем, и ваш сервер отвечает «HTTP/1.1 200 OK», некоторые другие заголовки и некоторый контент. – Quentin

1

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

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

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

1

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

1

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

1

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

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

Смежные вопросы