@SpeakLive91

Что нужно включить в серверную часть PHP для формы обратной связи (JS, Ajax)?

Добрый день!
На сайте fooug2hd.plp7.ru -лендинге есть у них своя Ajax форма (вы там её сразу заметите - имя, телефон и отправить заявку).
Ну так вот, я хотел бы себе такую же форму сделать. Что имеется на этом сайте - js(ниже), html(код формы). Недостающий элемент - обработчик PHP.

Кусман JS функции формы обратной связи (валидация данных) - https://pastebin.com/UeXtHCre
В этом куске кода есть Ajax запрос на отправку данных из формы на серверную части:

$.ajax("/app/c", {
type: "POST",
data: JSON.stringify(v),
dataType: "json",
contentType: "application/json",
processData: !1,
success: y,
error: y
}

Серверной части как вы понимаете у меня нет. Возможно ли написать эту серверную часть, чтобы данных с формы обратной связи приходили на определённую почту и кто сможет помочь?
  • Вопрос задан
  • 300 просмотров
Пригласить эксперта
Ответы на вопрос 2
edward_freedom
@edward_freedom
Этого будет достаточно, чтобы решить твой вопрос
php.net/manual/ru/function.mail.php
php.net/manual/ru/reserved.variables.post.php
Ответ написан
@sorokinfil
На стороне клиента данные преобразуются в Json-объект и отправляются по адресу что_за_домен/app/c.
Значит, на стороне сервера должен находиться обработчик, который вызывается при обращении к этому адресу. Если слишком сложно, то просто создаём ajax.php и кидаем в корень сайта. Обращаемся из js так:
$.ajax("/ajax.php", { //...

А вот примерный код в ajax.php
<?
	// Email владельца лендинга, на который придёт форма
	$admin_email = 'admin@example.ru';
	
	// Сразу объявляем массив ответа клиенту
	$response = [];
	$response['status'] = 'during';
	
	// Если передан необходимый Json-объект
	if (isset ($_POST['data']))
	{
		// Преобразуем Json-объект в привычный массив
		$data = json_decode ($_POST['data']);
		
		// Проверяем, есть ли в массиве нужные нам значения
		if
		(
			(isset ($data['name'])) && ($data['name']) &&
			(isset ($data['email'])) && ($data['email']) &&
			(isset ($data['phone'])) && ($data['phone'])
		)
		{
			// Сбор и отправка письма владельцу лендинга (переменная с email'ом задана в начале листинга)
			// Рекомендую установить и использовать PHPMailer вместо стандартной функции mail
			$mail_subject = "Форма обратной связи";
			$mail_message = "Имя: " . $data['name'] . "\r\n";
			$mail_message .= "Email: " . $data['email'] . "\r\n";
			$mail_message .= "Телефон: " . $data['phone'];
			mail ($admin_email, $mail_subject, $mail_message);
			
			// Установка статуса ответа ок и текста для того, чтобы вывести сообщение
			$response['status'] = 'ok';
			$response['message'] = 'Спасибо! Ваша заявка принята.';
		}
		// Если не все поля формы были заполнены или не все дошли до сервера
		else
		{
			$response['status'] = 'error_data_is_not_complete';
		}
	}
	// Если ничего не пришло в переменной $_POST['data']
	else
	{
		$response['status'] = 'error_no_data';
	}
	
	// Вывод (отправка обратно) Json-представления ответа, который легко можно распарсить на стороне клиента
	// Если что-то пошло не так, то в объекте ответа будет status с ошибкой, иначе будет status: ok.
	echo (json_encode ($response));
	exit;
?>


На клиенте строчку с
success: y,
замените на
success: function (data)
{
	try
	{
		// Пробуем распарсить Json-ответ от сервера
		data = $.parseJSON (data);
		if (data['status'] == 'ok')
			alert (data['message']);
		else
			alert (data['status']);
	}
	catch (e)
	{
		// Если ответ не Json, то через alert должна вывестись ошибка, которую вернул php
		alert (data);
	}
},


Как только убедитесь, что ответ приходит и всё ок, возвращайте обратно на клиентской части
success: y,
Чувствую, что y - это какая-то шаблонная функция.

Я код накидал, но не тестировал. Могут встречаться опечатки.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
YCLIENTS Москва
от 200 000 до 350 000 ₽
Ведисофт Екатеринбург
от 25 000 ₽
ИТЦ Аусферр Магнитогорск
от 100 000 до 160 000 ₽
23 апр. 2024, в 19:21
300 руб./за проект
23 апр. 2024, в 19:05
15000 руб./за проект
23 апр. 2024, в 19:01
7000 руб./за проект