Как избежать перенаправления страницы Reload Resend-Data с помощью PHP

Я относительно новичок в PHP, поэтому приношу свои извинения, если ответ тривиален. Лол

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

После того, как пользователь отправит форму и отправлено письмо, файл генерирует сообщение «Спасибо».

Если пользователь перезагружает страницу «Спасибо», им предлагается «Повторно отправить данные формы», поэтому я задаю этот вопрос.

Мой вопрос: как мне избежать приглашения повторно отправить данные формы и сохранить весь мой код (включая данные «Спасибо») в одном файле?

EDIT: Я видел, как люди использовали заголовки (Location:), но я не думаю, что это сработает, если я хочу сохранить весь свой код в одном файле.

Вы можете перенаправить на другой запрос.

header("Location: ?page=thankyou"); 

Затем вам даже не нужно проверять, были ли отправлены данные POST. Просто покажите страницу благодарности, если страница равна благодарности.

Это сработало для меня, оно может быть помещено где угодно в html-файл, а не только как функция header ():

 <?php if (!empty($_POST)){ ?> <script type="text/javascript"> window.location = window.location.href; </script> <?php } ?> 

Я поместил его в файл prevent_resend.php, а затем включил его после завершения обработки postdata.

 // ... save data from $_POST to DB include('prevent_resend.php'); // ... do some other stuff в // ... save data from $_POST to DB include('prevent_resend.php'); // ... do some other stuff 

Вы можете использовать javascript, чтобы опубликовать форму и показать сообщение благодарности. Таким образом, браузер никогда не покидает страницу.

Даже с заголовком («Место: xxx»); вы можете перенаправить его на ту же страницу и либо установить параметр url, либо переменную сеанса, чтобы отличать то, что должно быть показано.

Хотя я задаю ваше требование о том, чтобы весь код в одном файле (почему вы не могли его разделить и использовать require_once для включения кода общей библиотеки?), Метод header('Location:') остается в силе. Просто выполните:

 header('Location: http://www.example.com/path/to/my-one-file-of-code.php?thankyou=1'); 

Затем в вашем файле вы можете:

 if (isset($_GET['thankyou']) && $_GET['thankyou']) { // Do whatever it is you do to thank the visitor. } 

Это сработало для меня:

 header("Location: #");