Ваша проблема может быть решена с помощью стандартного логика c flow:
<?php
// deal with user input, if it exists
if( $_POST['email']) {
$error_message = '';
// validate input, build $error_message if errors
// if no error message, send email
if( !$error_message ) {
// send email...
// redirect to next page
header('Location: /path/to/next/page');
die;
}
}
// done with php logic; show view
?>
<html>
<head>
... snip ...
</head>
<body>
... snip ...
<?php if( isset( $error_message )): ?>
<div><?= $error_message ?></div>
<?php endif; ?>
... the rest of your page ...
Что здесь выполнено:
- Отделенные логи c от представления. Это процедурная имитация MVC: сначала обработайте ввод данных пользователем, затем выполните все логики c, чтобы отобразить страницу, и, наконец, выведите вывод. Обратите внимание, что вам почти никогда не нужно использовать команду
print
или echo
. - Часть «контроллер», поскольку она предшествует любому выводу, может свободно использовать команды
header()
и, таким образом, может перенаправлять или отправлять вывод в любом формате (то есть, закодированном json). Это также позволяет использовать шаблоны, такие как PRG (Post-Redirect-Get). Каждое использование POST должно быть либо ответом ajax, либо последующим перенаправлением. Обратите внимание, что успешная отправка приведет к плавному переходу на следующую страницу.
Как показано, однако, есть несколько проблем, которые необходимо преодолеть, если поля не проверяются: все входные данные будут очищены, потому что страница обновилась, и кнопка «Назад» предложит повторить отправку. страницу, если вы попытаетесь go вернуться.
Без использования ajax мало что можно сделать для последней, кроме перенаправления обратно на ту же страницу, передавая пользовательский ввод как GET, или использовать SESSION для удержания пользовательского ввода. Перенаправление - это то, что нужно, но для этого примера я оставлю это простым.
Поскольку неудачная проверка приводит к «провалу» выполнения скрипта до html, мы можем использовать переменные POST, если они есть, для предоставления атрибута значения входных данных:
<div class="col-md-12">
<ul>
<li>
<i class="fa fa-user" aria-hidden="true"></i>
<input placeholder="Full Name *"
type="text"
name="first_name"
value="<?= $_POST['first_name'] ?? '' ?>"
maxlength="50"
size="30"
required
>
</li>
</ul>
</div>
Примечание: просмотр переменных POST, на которые есть ссылки в представлении (html), следует рассматривать как признак того, что это можно сделать лучше!
Это приведет к появлению сообщений об ошибках, а также к предварительному заполнению формы. ,