Я относительно новичок в 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: #");