Отменить почтовые переменные после отправки формы

Есть ли способ сделать это? В принципе, я не хочу, чтобы форма была отправлена ​​снова, если кто-то нажмет обновление после того, как он уже отправил форму один раз. В этом случае браузер запрашивает, вы хотите отправить форму еще раз. Будет ли unset($_POST['username']) какая-нибудь помощь в этом случае?

Сообщение / переадресация / получение – хороший вариант, как уже упоминалось в некоторых плакатах.

Другим способом, который я могу представить, является установка сеанса на странице dostuff.php, чтобы указать, что проводка уже выполнена. Проверяйте этот сеанс var каждый раз, чтобы узнать, загружается ли страница снова из-за обновления страницы.

 <?php session_start(); if(isset($_SESSION['indicator'])) { /* dont do anything because session indicator says that the processing was already done.. you might want to redirect to a new url here.. */ } else { /* first set session indicator so that subsequent process requests will be ignored */ $_SESSION['indicator'] = "processed"; //process the request here.. } ?> 

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

Используйте промежуточную страницу для выполнения операций, а затем перенаправление.

Например:

mypage.php -> страница с формой

dostuff.php -> получает данные формы и выполняет операции, затем перенаправляет на любую другую страницу.

Чтобы сделать перенаправление:
Поместите эту строку в верхнюю часть header("Location: mypage.php"); «dostuff.php»: header("Location: mypage.php");

Проблема, с которой вы столкнулись выше, может (и должна) быть решена с помощью Post / Redirect / Get . Снятие _POST на стороне php было бы неэффективным, так как проблема в том, что это отдельный запрос.

Вам также придется иметь дело с двойным щелчком кнопок отправки. Вы можете решить эту проблему на стороне клиента, отключив отправку формы после нажатия кнопки или помещая случайный токен в форму и сохраняя этот токен в сеансе. Токен будет приниматься только один раз (сеанс отслеживает, был ли токен опубликован).

Используйте этот код

  if(isset($_POST)){ header('location:'.$_SERVER['PHP_SELF']); die(); } 

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

 // First IF if ($_SESSION['dup_comment_body'] == $_POST['comment_body']) { echo 'You already entered that.'; } else { // Second IF if ($_POST['comment_body']) { // Run your query here $_SESSION['dup_comment_body'] = $_POST['comment_body']; header('location:'.$_SERVER['REQUEST_URI'].''); } } 

Первый IF проверяет, соответствует ли значение $_POST последнему, которое они набрали ( $_SESSION ). Если это не то же самое, он запускает следующий IF для проверки, если переменная $_POST не пуста. Внутри последнего IF в нижней части он устанавливает $_SESSION['dup_comment_body'] равным $_POST . Итак, в следующий раз, когда первый IF запускается, и $_POST тот же, они получат сообщение «Вы уже ввели это». Надеюсь это поможет!

Для этого вам нужно использовать шаблон POST / REDIRECT / GET.

Мое решение для этого выполняет мета-обновление, если переменная post установлена, $ _POST не следует за ней после обновления.

 <head> <?php if (isset($_POST['Task'])){ echo' <meta http-equiv="refresh" content="0; url=./ThisFile.php">'; } ?> </head> 

Вместо этого вы можете использовать капчу, такую ​​как Recaptcha, которая не позволяет отправлять сообщения, не делая перехват. Это то, что я использовал, и работает отлично.