Задать вопрос
@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
}

Серверной части как вы понимаете у меня нет. Возможно ли написать эту серверную часть, чтобы данных с формы обратной связи приходили на определённую почту и кто сможет помочь?
  • Вопрос задан
  • 310 просмотров
Подписаться 2 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 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 - это какая-то шаблонная функция.

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

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

Похожие вопросы