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';
}