Показать сообщение отдельно
  #18 (permalink)  
Старый 08.02.2018, 09:38
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Сообщение от xlebosolniy
Проверяется несколько пунктов, которые должны быть обязательные, если содержат ошибки или не заполнены- возврат.
Где это? if (!empty($name)) {$msg =$msg."\nИмя: ".$name;} - это что-ли проверка? Пробел переданный полем уже не является пустым значением. Если так проверять данные извне, я могу вам гарантировать, что превращу ваш домен в рассадник спама.

$post = array_map('trim', $_POST);


Только после этого можно проверить пусто ли значение $post['name']. А в поле адреса не должно быть лишнего. И формирование самой отправки никуда не годится. Например тему сообщения нужно кодировать, на нее не распространяется заголовок указывающий кодировку. Читайте, в интернете об этом столько написано, что читать и не перечитать.

У вас форма отдается клиенту на другой странице, и страница form.php в случае ошибки должна возвращать форму. Из этого следует, что форму удобно иметь в виде подключаемого шаблона и с учетом заполнения. То есть, в html шаблоне формы должны быть php вставки:

<input type="text" class="form-control" name="name" value="<?=htmlspecialchars($name)?>" placeholder="Контактное лицо" required>


и т.д. При подавлении вывода предупреждений (а на севере это должно быть так), на первой странице при подключении шаблона формы php-переменные будут раны null. А на странице form.php они определены и при ошибках, и подключении формы для возврата пользователю, поля форы будут заполнены данными введенными пользователем.

Логика кода:

if(@mail($sendto, $subject, $msg, $headers)) {

echo "<script>alert('Заявка успешно отправлена. Ожидайте звонка в указанное Вами время.'); location.href='index.html';</script>";

} else {
echo "<center><img src='images/ne-otpravleno.png'></center>";
}

вообще не понятна, вернее тут полное отсутствие логики. Никаких собачек для подавления функции mail не нужно, эта функция не отправляет почту, она только отдает сформированное отправление sendmail, и возвращает только true/false, в зависимости от того принял ли sendmail почту для отправки или нет.

Весь этот код заменим на:

header('location:/index.php#openModal');


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

Если у вас нет перенаправления, то структура кода, логика ее, у вас неверна.

Последний раз редактировалось laimas, 08.02.2018 в 10:55.
Ответить с цитированием