В интернете уже полно статей по созданию форм обратной связи или формы - заказать обратный звонок. Однако в этом уроке я бы хотел выложить свою версию popup окна написанную ЯRIK'ом - моим хорошим другом и отличным программистом - версию popup окна. Весь функционал появления формы будет написан на jquery. А обработчик данных будем писать на PHP + будем записывать данные в базу MySQL? для сбора данных. В общем приступим!
Для начала давайте напишем html форму и украсим все css. Код с формой я вставляю в конец документа перед тегом
:
Action формы - путь к php файлу на сервере в папке php/order.php Позже разберем за что отвечает этот файл. А пока давайте приведем внешний вид формы в порядок:
Комментировать код CSS я не буду, в нем и так все понятно ;-) Перейдем лучше к самому интересному: jQuery
// ========================================================================= contact_form
$(function() {
//Функция проверяет заполнено ли поле с телефоном
function formValide() {
var str = $('#contact_form input[name=tel]').val();
str = jQuery.trim(str);
if(str.length < 5){
alert ('Введите телефон');
return false;
}
return true;
}
//при нажатии на кнопку button нужной формы запускаем функцию обработки данных
$('#contact_form .button').live('click', function() {
if (formValide()) {
//если форма прошла проверку, выводим блок с текстом ожидания
$('#contact_form').before('
Оформление заявки. Подождите...
');
$('#contact_form').hide();
//берем путь php обработчика
order_url = $('#contact_form').attr('action');
//посылаем асинхронный запрос на сервер и передаем все данные формы
$.post(order_url,{
name: $('#contact_form input[name=name]').val(),
tel: $('#contact_form input[name=tel]').val(),
email: $('#contact_form input[name=email]').val(),
message: $('#contact_form textarea[name=message]').val(),
send: "1"
}, function(data) {
//выводим возврашаемый сервером код html вместо содержимого формы
$('#contact_form').html(data);
$('#contact_form').show();
$('#contact_form_info').remove();
}, "html");
}
return false;
});
});
// ========================================================================= go_order
$(function() {
//фкнкция вызова формы обратной связи
$('#callback').click(function(){
//появление окна обратной связи
$('#popup').fadeIn();
//добавляем к окну иконку закрытия
$('#popup').append('');
//расчитываем высоту и ширину всплывающего окна что бы вывести окно прямо по центру экрана
q_width = $('#popup').outerWidth()/-2;
q_height = $('#popup').outerHeight()/-2;
$('#popup').css({
'margin-left': q_width,
'margin-top': q_height
});
//выводим затемение страницы и делаем полупрозрачным
$('body').append('');
$('#fade').css({'filter' : 'alpha(opacity=40)'}).fadeIn();
return false;
});
//функция закрытия окна
$('#popup_close, #fade').live('click', function() {
$('#fade').fadeOut(function() {
$('#fade').remove();
$('#popup_close').remove();
$('#popup').fadeOut();
});
});
});
И так, я постарался максимально подробно расписать код обработчика вызова формы.
По нажатию на кнопку с id="callback" запускается функция javascript отображения всплывающего окна.
Добавляется кнопка закрытия окна и задний полупрозрачный фон для эффекта.
Обязательное поле для заполнения в данном примере только одно - номер телефона.
По нажатию на кнопку заказать - выполняется проверка : заполнено ли поле номер телефона. Если меньше 5 символов или одни пробелы, alert выводит ошибку: введите телефон. Вместо alerta можно использовать более приемлемый метод валидации. Мы прикрутим такой в статье создания всплывающей формы для codeigniter. За основу будет браться этот урок.
После проверки данных. Мы заменяем форму в окне на текст предварительной обработки.
Посылаем методом post запрос к файлу обработчику order.php на сервере
В качестве передаваемых данных обрабатываем все поля нашей формы
При положительном ответе выводим возвращаемую сервером информацию и выводим html код в всплывающем окне, об успешной отправке или ошибке.
Заявке присвоен номер Z".$Nzakaz.". Наш менеджер свяжется с вами в ближайшее время.
";
}
else {
echo "
Ошибка! Попробуйте еще раз.
";
}
Что мы делаем:
Выставляем кодировку страницы UTF-8
Убираем вывод ошибок
Проверяем были ли переданы данные скрипту методом POST. Если нет то выводим для всплывающего окна текст с ошибкой
Обрабатываем все переданные данные, да бы избежать вредоносного кода и взлома формы.
Генерируем случайный номер заказа
Формируем сообщение
Функцией mail отправляем письмо на почту.
Выводим сообщение об успешной отправки письма. Текст будет выводится в нашем окошке
Вот в принципе и все на сегодня. Как всегда прикрепляю архив с исходниками В архиве в папке php есть файл с обработкой формы и добавления данных в базу. Скрипт проверенный и рабочий. Используем его очень давно. Как писал выше, для фреймворка codeigniter - есть весьма серьездно доработанные функции для формы обратной связи. Пишите комментарии, если что не понятно. Спасибо.
Подскажите как в эту форму добавить выпадающий список работающий на переключателе switch. Чтобы при отправке формы у клиента была возможность выбрать инфо из выпадающего списка.
Василий, вы имеете ввиду выпадающий список для формы < select >< option >?
Очень просто. Добавляете в форму тег < select > - подробнее можно почитать здесь.
Что бы передать значение скрипту PHP - нужно добавить следующую строчку с отправкой данных метододм post(jquery строка №24):
select: $('#contact_form select[name="your_select_input"]').val()
После - уже в обработчике php - можно получить значение выбранное из списка вот так:
$select = substr(htmlspecialchars(trim($_POST['select'])), 0, 300);
И все.
Добрый день. Статью - как использовать reCaptcha от google еще не написал, так что пока легче всего будет найти уже готовый вариант в интернете.
Но в двух словах: выводим блок <div class="g-recaptcha" data-sitekey="site_key"></div>, предоставленный google - в вашей форме.
Код сгенерирует скрытое поле с именем g-recaptcha-response. Дальше в обработчике php мы проверяем валидность данного кода обращаясь к серверу google - передавая методом GET параметры: секретный ключ, IP адрес пользователя и данные с формы с скрытого поля.
То есть:
$re = $_POST['g-recaptcha-response']
$google_url=https://www.google.com/recaptcha/api/siteverify
$secret=ваш секретный ключ
$ip=$_SERVER['REMOTE_ADDR']
$url=$google_url."?secret=".$secret."&response=".$re."&remoteip=".$ip;
Полученные данные json декодируем и проверяем значения ответа. Если все впорядке - продолжаем работу скрипта.
Что добавить в код jquery -написал в личку в вк, т.к. много изменений. Если еще кому будет необходим код с изменениями - пишите. Обновим статью;)
Добрый день!
Спасибо большое за данный пост. Попробовала создать форму из разных источников, везде выходило кривовато, а иногда вообще не получалось. Ваша форма встроилась без усилий. Спасибо.
Подскажите, пожалуйста, какие изменения надо внеси в код (какие и где), чтобы форму одного и того же вида можно было вызывать с разных кнопок на одной странице.
Спасибо за скрипт. Данная форма обратного звонка была у меня на сайте, все работало, на сегодня скрипт не отправляет на почту сообщения по неизвестной причине, поэтому прошу отписать по какой на эл почту либо в комментариев, спасибо
Подскажите как закрыть окно, у меня jquery 2.1.4
Открытие работает отлично, а вот закрытие никак
//функция закрытия окна
$('#popup_close, #fade').on('click', function() {
$('#fade').fadeOut(function() {
$('#fade').remove();
$('#popup_close').remove();
$('#popup').fadeOut();
});
});
Для тех, кто только набрел на тему, на текущий момент проблема решается таким образом:
//функция закрытия окна
$(document).on("click","#popup_close, #fade",function() {
$('#fade').fadeOut(function() {
$('#fade').remove();
$('#popup_close').remove();
$('#popup').fadeOut();});
});
Приветствую! Спасибо за скрипт. Но почему то не срабатывает по нажатию на Заказать звонок. Уже и на компе проверил - всё окей. На сайте (Вордпресс) - никак. Просто появляется # в урл и экран поднимается вверх.
Подскажите, в чем может быть проблема?
Подскажите какие столбцы должно содержать поле 'order' в БД? Скрипт сробатывает но писем не приходит... Подскажите пожалуйста, как подправить это дело? Скрипт классный, нравится очень! Хотелось бы использовать его...
у кого-то кроме меня еще не работает функция закрытия окна
//функция закрытия окна
$('#popupclose, #fade').on('click', function() {
$('#fade').fadeOut(function() {
$('#fade').remove();
$('#popupclose').remove();
$('#popup').fadeOut();
});
});
В чем причина ?
“Я запустил этот сайт что бы поделиться опытом с такими же разработчиками как и я сам. Буду выкладывать в блоге только нужные и полезные статьи. Вы тоже можете предложить и выложить интересный материал для сайта.”
ПОЛЯКОВ.CO.UAВЕБ-РАЗРАБОТКА // ИНТЕРЕСНЫЕ ПУБЛИКАЦИИ
Владимир
Есть бесплатный скрипт обратного звонка, вот ссылка http://consultant-web.ru/callme/