Форм при отправке выдаёт ошибку: Доступ запрещен! - (Доступ запрещен )
handler.php
<?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;
$email = isset($_POST['email']) ? trim(strip_tags($_POST['email'])) : null;
$phone = isset($_POST['phone']) ? trim(strip_tags($_POST['phone'])) : null;
$message = isset($_POST['message']) ? trim(strip_tags($_POST['message'])) : null;
if (empty($name) || empty($email) || empty($phone) || empty($message)) {
echo 'Все поля обязательны для заполнения.';
exit;
}
if (!Validator::isValidEmail($email)) {
echo 'E-mail не соответствует формату.';
exit;
}
if (!Validator::isValidPhone($phone)) {
echo 'Телефон не соответствует формату.';
exit;
}
if (ContactMailer::send($name, $email, $phone, $message)) {
echo htmlspecialchars($name) . ', ваше сообщение успешно отправлено.';
} else {
echo 'Произошла ошибка! Не удалось отправить сообщение.';
}
exit;
ContactMailer.php
<?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 = 'Sheyhan1426@gmail.com';
/**
* E-mail получателя
* @var string
*/
private static $emailTo = 'admin@yandex.ru';
/**
* Отправляет писмо, если письмо отправлено,
* возвращает TRUE, в противном случае FALSE.
* @param string $name
* @param string $email
* @param string $phone
* @param string $message
* @return boolean
*/
public static function send($name, $email, $phone, $message)
{
// Формируем тело письма
$body = "Имя: " . $name . "\nE-mail: " . $email . "\nТелефон: " . $phone . "\n\nСообщение:\n" . $message;
// Создаем объект PHPMailer
$mailer = new PHPMailer();
// Настройки подключения
$mailer->isSMTP();
// Устанавливает хост почтового сервера (Mail.ru: smtp.mail.ru, Google: smtp.gmail.com)
$mailer->Host = ' smtp.gmail.com';
// Включает SMTP-авторизацию
$mailer->SMTPAuth = true;
// Логин или E-mail целиком
$mailer->Username = self::$emailFrom;
// Пароль от почтового ящика
$mailer->Password = 'XXXXXXXX';
// Протокол соединения
$mailer->SMTPSecure = 'ssl';
// Порт для исходящаей почты
$mailer->Port = '465';
// Устанавливает кодировку
$mailer->CharSet = 'UTF-8';
// Устанавливает E-mail и имя отправителя
$mailer->setFrom(self::$emailFrom, 'Имя отправителя');
// Добавляет E-mail получателя
$mailer->addAddress(self::$emailTo);
// Настройка HTML-формата
$mailer->isHTML(false);
// Тема письма
$mailer->Subject = 'Заполнена форма обратной связи';
// Основное тело письма
$mailer->Body = $body;
// Отправляет письмо
if ($mailer->send()) {
return true;
}
return false;
}
}
validator.php
<?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';
}
}
main.js
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('.field').val('');
button.attr('disabled', false);
},
error: function() {
loader.fadeOut(300, function() {
answer.text('Произошла ошибка! Попробуйте позже.');
});
button.attr('disabled', false);
}
});
});
});
index.html
<div class="container modal-block">
<h2>Форма обратной связи</h2>
<form id="contactForm" action="handler.php" method="post">
<div class="field-block">
<label for="name">Ваше имя:</label>
<input id="name" class="field" name="name" required type="text" placeholder="Иванов Иван Иванович">
</div>
<div class="field-block">
<label for="email">Ваш E-mail:</label>
<input id="email" class="field" name="email" required type="email" placeholder="ivanov@email.com">
</div>
<div class="field-block">
<label for="phone">Ваш телефон:</label>
<input id="phone" class="field" name="phone" required type="text" placeholder="+7 (800) 000-00-00">
</div>
<div class="field-block">
<label for="message">Текст сообщения:</label>
<textarea id="message" class="field" required name="message" rows="4"></textarea>
</div>
<div class="field-block">
<input id="check" name="check" checked type="checkbox">
<span class="check-text">Я добровольно отправляю свои данные</span>
</div>
<button id="button" class="button" type="submit">Отправить</button>
<div class="result">
<span id="answer"></span>
<span id="loader"><img src="images/loader.gif" alt=""></span>
</div>
</form>
</div>