<?php
require_once __DIR__ . '/mailer/Validator.php';
require_once __DIR__ . '/mailer/ContactMailer.php';
if (!Validator::isAjax() || !Validator::isPost()) {
echo 'Доступ запрещен!';
exit;
}
$name = isset($_POST['name']) ? trim(strip_tags($_POST['name'])) : null;
$phone = isset($_POST['phone']) ? trim(strip_tags($_POST['phone'])) : null;
if (empty($name) || empty($phone)) {
echo 'Все поля обязательны для заполнения.';
exit;
}
if (!Validator::isValidPhone($phone)) {
echo 'Телефон не соответствует формату.';
exit;
}
if (ContactMailer::send($name, $phone)) {
echo htmlspecialchars($name) . ', ваше сообщение успешно отправлено.';
} else {
echo 'Произошла ошибка! Не удалось отправить сообщение.';
}
exit;
jQuery(document).ready(function($) {
// Добавляем маску для поля с номера телефона
$('#phone').mask('+7 (999) 999-99-99');
// Проверяет отмечен ли чекбокс согласия
// с обработкой персональных данных
$('#check').on('click', function() {
if ($("#check").prop("checked")) {
$('#button').attr('disabled', false);
} else {
$('#button').attr('disabled', true);
}
});
// Отправляет данные из формы на сервер и получает ответ
$('#contactForm').on('submit', function(event) {
event.preventDefault();
var form = $('#contactForm'),
button = $('#button'),
answer = $('#answer'),
loader = $('#loader');
$.ajax({
url: 'handler.php',
type: 'POST',
data: form.serialize(),
beforeSend: function() {
answer.empty();
button.attr('disabled', true).css('margin-bottom', '20px');
loader.fadeIn();
},
success: function(result) {
loader.fadeOut(300, function() {
answer.text(result);
});
form.find('.form-control').val(' ');
button.attr('disabled', false);
},
error: function() {
loader.fadeOut(300, function() {
answer.text('Произошла ошибка! Попробуйте позже.');
});
button.attr('disabled', false);
}
});
});
});
<?php
/**
* Validator: класс-хелпер, валидацирует данные пришедшие от пользователя
*/
class Validator
{
/**
* Проверяет валидный ли E-mail, если да, то
* возвращает TRUE, в противном случае FALSE.
* @param string $email
* @return boolean
*/
// public static function isValidEmail($email)
// {
// return filter_var($email, FILTER_VALIDATE_EMAIL);
// }
/**
* Проверяет валидный ли E-mail, если да, то
* возвращает TRUE, в противном случае FALSE.
* @param string $phone
* @return boolean
*/
public static function isValidPhone($phone)
{
return preg_match("#\+7 \(\d{3}\) \d{3}\-\d{2}-\d{2}#", $phone);
}
/**
* Проверяет пришли ли данные POST-запросом, если да,
* то возвращает TRUE, в противном случае FALSE.
* @return boolean
*/
public static function isPost()
{
return $_SERVER['REQUEST_METHOD'] === 'POST';
}
/**
* Проверяет пришли ли данные Ajax-запросом, если да,
* то возвращает TRUE, в противном случае FALSE.
* @return boolean
*/
public static function isAjax()
{
return isset($_SERVER['HTTP_X_REQUESTED_WITH']) && $_SERVER['HTTP_X_REQUESTED_WITH'] === 'XMLHttpRequest';
}
}
<?php
use PHPMailer\PHPMailer\Exception;
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\SMTP;
require_once __DIR__ . '/PHPMailer/src/Exception.php';
require_once __DIR__ . '/PHPMailer/src/PHPMailer.php';
require_once __DIR__ . '/PHPMailer/src/SMTP.php';
/**
* Mailer: класс-хелпер, отправляет почту администратору
*/
class ContactMailer
{
/**
* E-mail отправителя
* @var string
*/
private static $emailFrom = 'send@yandex.ru';
/**
* E-mail получателя
* @var string
*/
private static $emailTo = '';
/**
* Отправляет писмо, если письмо отправлено,
* возвращает TRUE, в противном случае FALSE.
* @param string $name
* @param string $email
* @param string $phone
* @param string $message
* @return boolean
*/
public static function send($name, $phone)
{
// Формируем тело письма
$body = "Имя: " . $name . "\nТелефон: " . $phone . ;
// Создаем объект PHPMailer
$mailer = new PHPMailer();
// Настройки подключения
$mailer->isSMTP();
$mailer->Host = ' smtp.yandex.ru';
$mailer->SMTPAuth = true;
$mailer->Username = self::$emailFrom;
$mailer->Password = 'XXXXXXXX';
$mailer->SMTPSecure = 'ssl';
$mailer->Port = '465';
$mailer->CharSet = 'UTF-8';
$mailer->setFrom(self::$emailFrom, 'Имя отправителя');
$mailer->addAddress(self::$emailTo);
$mailer->isHTML(false);
$mailer->Subject = 'Заполнена форма обратной связи';
$mailer->Body = $body;
if ($mailer->send()) {
return true;
}
return false;
}
}