PHP: Предотвратите обратную / двойную отправку с помощью страницы подтверждения формы. Мой рабочий процесс правильный?

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

Это текущий рабочий процесс:

post.php //User enters info; name, date, etc
->clicks submit
verify.php //This page displays the information the user entered before final submission.
           //No database work done
->clicks final submit
verify_f.php //Inserts data into database, REDIRECTS to verify_redirect.php
verify_redirect.php //Redirects to next page, confirm.php
confirm.php //Final screen. Lets user know that his data was successfully entered

Проблема однажды в confirm.php пользователь может нажать на кнопку "Назад" и включен verify_f.php, страница подтверждения, на которой отображаются все введенные им данные и все, что ему нужно сделать, - это снова нажать кнопку окончательной отправки для двойной записи.

Как это можно исправить?

3 ответа

Решение

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

В verify.phpсгенерируйте одноразовый номер (случайный хеш обычно хорошо подходит для этой простой цели) и добавьте его как скрытое поле формы, отправленное в verify_f.php, Затем в verify_f.phpпроверьте, чтобы одноразовый номер не использовался ранее.

Сохранить всю обработку в том же сценарии.
Вы можете использовать поле формы и условный оператор для управления потоком программы, а именно:

if (isset($_POST['confitm'])) {
  include 'confirm.php';
}
Другие вопросы по тегам