Пытаюсь доработать форму.
Отправка происходит через
Phpmailer.
У меня так js для формы сделан, что он не привязан к форме, как мне к определенной форме по id привязать?
Или в этом смысла нет, ибо когда я кликаю на кнопку отправить, у меня срабатывает запрос внутри формы, и там далее идет в js.
Как вывести ошибку если поле не заполнено, допустим применять класс к полям которые надо заполнить, чтобы они подсвечивались красным, чтобы не выводить для каждого поля в форме, мол заполните фио, заполните телефон и т.д.
На данный момент у меня ничего не вылезает, если поля пустые, а тупо отправляет и выводит сообщение что все ок.
Сама форма.
<form method="post" id="callback" onsubmit="send(event, 'callback.php')">
<input type="text" name="f_phone" class="f_phone" placeholder="+7 (___) ___-____">
<button type="submit">Перезвонить мне</button>
</form>
js
<script>
function send(event, php) {
event.preventDefault ? event.preventDefault() : event.returnValue = false;
var req = new XMLHttpRequest();
req.open('POST', php, true);
req.onload = function() {
if (req.status >= 200 && req.status < 400) {
json = JSON.parse(this.response);
console.log(json);
if (json.result == "success") {
alert("Сообщение отправлено, в ближайшее время Вам перезвонит менеджер.");
$('#callback')[0].reset(); //чистим заполненные поля в форме
} else {
alert("Ошибка. Сообщение не отправлено, попробуйте повторить действия позднее.");
}
// Если не удалось связаться с php файлом
} else {
alert("Ошибка сервера. Номер: " + req.status);
}
};
// Если не удалось отправить запрос. Стоит блок на хостинге
req.onerror = function() {
alert("Ошибка отправки запроса");
};
req.send(new FormData(event.target));
}
</script>
phpmailer
<?php
require_once __DIR__ . "/vendor/autoload.php";
$f_phone = $_POST['f_phone'];
$textBase = "Номер телефона: " . $f_phone . "";
$textAdmin = "Новый запрос обратного звонка от " . date("Y-m-d H:i:s") . " по времени сервера, данные
" . $textBase . "
";
try {
$text_html = nl2br($textAdmin);
$sPort = 465;
$sSecure = "ssl";
$sUsername = "0000000000";
$sPassword = "00000000000";
$sHost = "smtp.yandex.ru";
$sFromEmail = "0000000000";
$sDomain = "0000000000000";
$mail = new PHPMailer;
$mail->isSMTP();
$mail->SMTPDebug = 0;
$mail->Debugoutput = 'html';
$mail->Host = $sHost;
$mail->Port = $sPort;
$mail->SMTPAuth = true;
$mail->SMTPSecure = $sSecure;
$mail->Username = $sUsername;
$mail->Password = $sPassword;
$mail->setFrom($sFromEmail, $sDomain);
$mail->addAddress('0000000000000'); //сюда отправляем
$mail->Subject = 'Новый запрос звонка на '.$sDomain;
$mail->msgHTML($text_html);
$mail->AltBody = $textAdmin;
$mail->CharSet = "utf-8";
// Проверяем отравленность сообщения
if ($mail->send()) {$result = "success";}
else {$result = "error";}
} catch (Exception $e) {
$result = "error";
$status = "Сообщение не было отправлено. Причина ошибки: {$mail->ErrorInfo}";
}
// Отображение результата
echo json_encode(["result" => $result, "resultfile" => $rfile, "status" => $status]);
?>