Время вывод echo после отправки формы

140
21 апреля 2018, 17:47

Добрый день, вопрос такой, есть форма отправки сообщения, все работает, единственное смена сообщений с "форма отправки" до "Cообщение успешно отправленно." после нажатия на кнопку "отправить" составляет примерно 5сек. По мне так это долго. Можно как-нибудь ускорить процесс смены вывода echo?

if (!empty($_POST))
{
   $name = htmlspecialchars(stripslashes($_POST['name']));
   $mess = htmlspecialchars(stripslashes($_POST['text']));
   $mail = htmlspecialchars(stripslashes($_POST['email']));
   if(empty($_POST['email']))
   {
      echo "<p>Вы не указали свой E-mail!</p>";
    }
   elseif (!preg_match("/^[0-9a-z_\.]+@[0-9a-z_^\.]+\.[a-z]{2,6}$/i", $mail))
   {
      echo "<p>Вы ввели некорректный E-mail!</p>";
   }
   else
   { 
        $to  = 'email@mail.ru' . ', '; 
        $from = 'email2@mail.ru';
        $subject = "Сообщение с сайта";
        $message = "Имя: ".$name. "\r\nПочта: ".$mail."\r\nСообщение: ".$mess.';';
        $headers = "Content-type:  text/plain; charset=UTF-8 \r\n";
        $headers .= "From: <vmail2@mail.ru>\r\n";
        $result = mail($to, $subject, $message, $headers);
        if ($result){ 
            echo "<p>Cообщение успешно отправлено.</p>";
        }
        else{
            echo "<p>Cообщение не отправлено. Пожалуйста, попробуйте еще раз</p>";
        }
    }
}
Answer 1

Конечно можно. Обработайте запрос пользователя и сохраните сообщение где-нибудь (например в базе данных), после этого сообщите пользователю, что сообщение отправлено. А уведомление на почту отправляйте отдельным скриптом, например, запускающимся по расписанию (cron). То есть каждые пять минут скрипт проверяет нет ли новых сообщений от пользователей и если есть, то рассылает уведомления на почту.

Можно ещё отправлять сообщения js'ом, без перезагрузки страницы. Тогда можно сделать Отправка... -> Отправлено! Пользователи будут довольны даже если ваш сервер немного задумается.

Подробнее

На виртуальных хостингах обычно есть "кнопка" (пункт в меню, раздел настроек) для настройки планировщика cron. Идея в том, чтобы добавить в него регулярный запуск (раз в пять минут, например) вашего скрипта, который будет проверять наличие новых сообщений и отправлять уведомления на почту.

При разработке вам cron не нужен, надо только протестировать команду, которую он будет выполнять.

Как сохранять новые сообщения. Лучше всего в базу данных, например в SQLite или MySQL. Для работы с ними в PHP есть библиотека PDO. Опыт работы с базами данных вам обязательно пригодится, поэтому не поленитесь разобраться как это работает.

После того, как сохранили сообщение в базе, можно сообщить пользователю о успехе отправки (его сообщение теперь не потеряется).

Для радости пользователей запрос на отправку часто отправляется AJAX'ом. То есть, пользователь жмёт кнопку отправить, но вместо стандартного перехода на страницу отправки, запрос выполняется незаметно для пользователя (при этом у него обычно отображается какой-нибудь спиннер "идёт отправка"), а когда запрос отработал текущая страница модифицируется и пользователь видит сообщение об успехе/неудаче.

READ ALSO
Реализация выбора времени в форме html

Реализация выбора времени в форме html

Каким образом можно реализовать подобный datepicker?

194
Сравнение двух рядов чисел

Сравнение двух рядов чисел

В переменных хранятся данные типа 3,5,25,49 Мне нужно найти пересечения в этих списках

152
Chrome считает что jquery хочет меня ограбить

Chrome считает что jquery хочет меня ограбить

Привет!Захожу я в хром и думаю,почему кнопка модального окна не работает а тут ошибка

187