Форма PHP $ _POST истекает при перезагрузке страницы - PullRequest
2 голосов
/ 10 января 2012

У меня есть форма (для A), которая перенаправляет на другую форму (форма B).

Когда пользователь перенаправляется в форму B, если задано значение $ _POST, запускается функция электронной почты. Это проблема б / с, если пользователь перезагружает страницу, это письмо отправляется снова.

Я хотел бы прекратить отправку электронного письма, если страница перезаписана.

Следовательно, я включил поле в форму A, type = hidden со значением = send, и когда электронное письмо (форма B) отправляется, я отменяю это поле, но если я перезаписываю страницу, электронное письмо отправляется в любом случае.

if(isset($_POST['emailtrigger'])){

            emailfunction();        
    unset($_POST['emailtrigger']);


  }

Как я могу указать странице, что после отправки электронного письма, если страница (форма B) перезагружена, пропустить функцию электронной почты?

Спасибо

Ответы [ 3 ]

3 голосов
/ 10 января 2012

Если вы хотите избежать перенаправлений или хотите защитить себя от пользователей, которые нажимают «Назад» и повторно отправляют форму после перенаправления, простым решением было бы добавить скрытое поле со случайным значением, которое генерируется при загрузке формы.После отправки формы просто запишите значение этого поля в данные сеанса.Затем, если пользователь отправляет те же данные формы, вы сравниваете случайное поле и то, что записано в данных сеанса.Если есть это значение - вы не обрабатываете данные формы.

1 голос
/ 10 января 2012

Как только А выполнит свою работу, перейдите к форме B, будет доступна $_POST.

После завершения B выполните

header('location: formConfirm.php');
exit;

. Сценарий formConfirm.php выведет на печатьподтверждающее сообщение, больше ничего.В частности, он не должен обновлять БД или отправлять электронную почту.

В более общем смысле вы можете реализовать универсальный formConfirm.php, который вы всегда используете для представления подтверждений, например, как-то пропуская фактическое сообщение с подтверждением.

1 голос
/ 10 января 2012

Это очевидно делается путем перенаправления на ту же страницу после обработки вашей формы.Таким образом, если ваша форма обрабатывается скриптом form.php, то после отправки электронной почты вы должны выполнить перенаправление:

header('location: form.php');

Это невидимо для пользователей, и после перезагрузки никакие $_POST значения не отправляются снова.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...