Форма обратной связи на PHP с отправкой на e-mail. Отдел контроля качества

На этом уроке мы познакомимся с функцией mail () , на примере создания формы обратной связи на PHP с последующей отправкой полученных данных на почту.

Для этого создадим два файла - forma.php и mail.php . В первом файлике будет находиться только форма с полями для ввода пользователем данных. Внутри тега form - кнопка "Отправить" и атрибут action , который ссылается на обработчик - mail.php , именно к нему обращаются данные из формы при нажатии кнопки "Отправить" . В нашем примере данные формы отправляются на веб-страницу с названием «/mail.php» . На этой странице прописан скрипт на PHP , который обрабатывает данные формы:


Данные формы отправляются методом POST (обрабатывается как $ _POST ). $ _POST - это массив переменных, переданных текущему скрипту через метод POST .

Ниже вы видите содержимое файла forma.php , поля которой заполняет сам пользователь на каком-нибудь веб-сайте. Все поля для ввода данных обязательно должны иметь атрибут name , значения мы прописываем сами, исходя из логики.




Форма обратной связи на PHP с отправкой на почту


Форма обратной связи на PHP





Оставьте сообщение:
Ваше имя:



E-mail:

Номер телефона:

Сообщение:

Текстовая область может содержать неограниченное количество символов-->







Так форма визуально выглядет в браузере.

Далее пишем код для файла mail.php . Придумываем сами имена для переменных. В PHP переменная начинается со знака $ , а затем имя переменной. Текстовое значение переменной заключается в кавычки. С помощью переменных на емайл администратора передается содержимое формы, просто подставив в квадратные скобки имя элемента формы - значение name .

Таким образом данные из массива $_POST будут переданы соответствующим переменным и отправлены на почту при помощи функции mail . Давайте заполним нашу форму и нажмем кнопку отправить. Не забудьте указать ваш е-майл. Письмо пришло моментально.

При запуске нового веб-проекта, нет ничего приятнее, чем сразу получить положительные отзывы и благодарность от первых посетителей. К сожалению, владельцы многих веб-сайтов опускают из виду этот факт, и на их сайте достаточно сложно связаться с администрацией.

Сегодня мы расскажем вам о простеньком решении проблемы. Данная форма, используя jQuery, PHP и PHPMailer позволит получать отзывы от посетителей прямо на ваш электронный ящик.

HTML

Давайте начнем с разметки HTML. Таблица стилей включена в начале документа, а исходники javascript находятся в его конце. Это повышает скорость производительности, так как скрипты загружаются последними, в то время, как остальной веб-сайт уже загружен и отображен.

: feedback.html


Quick Feedback Form w/ PHP and jQuery | Tutorialzine Demo


В теле документа мы видим DIV «#feedback». Он фиксированным позиционированием приурочен к правому нижнему углу окошка, что вы сможете увидеть в следующем разделе статьи.

Внутри него находятся 5 цветных пролётов (span). Их ширина составляет по 20% от документа, и они выровнены по левой стороне. Таким образом, они заполонят всю ширину DIV’а #feedback.

И наконец, в контейнере.section, который содержит заголовок и шапку, находится кнопка и поле ввода текста.


CSS

Переходя к редактированию стилей формы, нам нужно сначала сказать кое-что о том, как структурирована таблица стилей. Как вы видите из определений CSS, расположенных ниже, каждое правило начинается с #feedback. Таким образом, мы достигаем CSS-эквивалент namespaces, что облегчает добавление кода в существующий сайт и помогает избежать возможных конфликтов.

: styles.css – Часть 1

#feedback{
background-color:#9db09f;
width:310px;
height:330px;
position:fixed;
bottom:0;
right:120px;
margin-bottom:-270px;
z-index:10000;
}

#feedback .section{
background:url("img/bg.png") repeat-x top left;
border:1px solid #808f81;
border-bottom:none;
padding:10px 25px 25px;
}

#feedback .color{
float:left;
height:4px;
width:20%;
overflow:hidden;
}

#feedback .color-1{ background-color:#d3b112;}
#feedback .color-2{ background-color:#12b6d3;}
#feedback .color-3{ background-color:#8fd317;}
#feedback .color-4{ background-color:#ca57df;}
#feedback .color-5{ background-color:#8ecbe7;}

#feedback h6{
background:url("img/feedback.png") no-repeat;
height:38px;
margin:5px 0 12px;
text-indent:-99999px;
cursor:pointer;
}

#feedback textarea{
background-color:#fff;
border:none;
color:#666666;
font:13px "Lucida Sans",Arial,sans-serif;
height:100px;
padding:10px;
width:236px;

Moz-box-shadow:4px 4px 0 #8a9b8c;
-webkit-box-shadow:4px 4px 0 #8a9b8c;
box-shadow:4px 4px 0 #8a9b8c;
}
Первый элемент, который нам нужно отформатировать – это DIV #feedback. Ему задан фиксированное позиционирование, и он приурочен к окну браузера. Далее идет определение DIV’а.section и пяти цветных пролётов. Эти пролеты (span) отличаются лишь цветом фона, заданным разными классами.

В самом конце у нас идут CSS-правила, которые определяют внешний вид поля ввода текста.

: styles.css – Часть 2

#feedback a.submit{
background:url("img/submit.png") no-repeat;
border:none;
display:block;
height:34px;
margin:20px auto 0;
text-decoration:none;
text-indent:-99999px;
width:91px;
}

#feedback a.submit:hover{
background-position:left bottom;
}

#feedback a.submit.working{
background-position:top right !important;
cursor:default;
}

#feedback .message{
font-family:Corbel,Arial,sans-serif;
color:#5a665b;
text-shadow:1px 1px 0 #b3c2b5;
margin-bottom:20px;
}

#feedback .arrow{
background:url("img/arrows.png") no-repeat;
float:right;
width:23px;
height:18px;
position:relative;
top:10px;
}

#feedback .arrow.down{ background-position:left top;}
#feedback h6:hover .down{ background-position:left bottom;}
#feedback .arrow.up{ background-position:right top;}
#feedback h6:hover .up{ background-position:right bottom;}

#feedback .response{
font-size:21px;
margin-top:70px;
text-align:center;
text-shadow:2px 2px 0 #889889;
color:#FCFCFC;
}
Во второй части таблицы стилей вы можете видеть определение кнопки подтверждения (отправки). Учтите, что у кнопки есть три положения, которые привязаны к одному и тому же фоновому изображению – submit.png, и оно отображено только когда это нужно. Положения: стандартное положение, положение при наведении курсора мыши, а также активное положение «работающее». Когда кнопка находится в рабочем положении, эффект при наведении курсора мыши отключен.


jQuery

У формы обратной связи есть два положения: скрытая и раскрытая. Когда она загружена, по стандарту ее положение установлено на скрытом. Но когда пользователь кликает по заголовку, она раскрывается посредством jQuery. Это реализовано посредством мониторинга событий и запуска простейшей анимации, как вы можете наглядно посмотреть это ниже.

: script.js – Часть 1

$(document).ready(function(){

// The relative URL of the submit.php script.
// You will probably have to change it.
var submitURL = "submit.php";

// Caching the feedback object:
var feedback = $("#feedback");

$("#feedback h6").click(function(){

// We are storing the values of the animated
// properties in a separate object:

Var el = $(this).find(".arrow");

If(el.hasClass("down")){
anim = {
mb: -270,
pt: 10
};
}

// The first animation moves the form up or down, and the second one
// moves the "Feedback" heading, so it fits in the minimized version

Feedback.stop().animate({marginBottom: anim.mb});

Feedback.find(".section").stop().animate({paddingTop:anim.pt},function(){
el.toggleClass("down up");
});
});
Для того, чтобы наш код оставался опрятным, мы передвинули положения if в верх документа, и создали объект anim, который удерживает значения, отвечающие за анимацию. В зависимости от того, есть ли класс «down» на стрелке, мы скрываем или раскрываем форму.

Вторая часть script.js содержит в себе структуру взаимодействия AJAX с submit.php.

: script.js – Часть 2

$("#feedback a.submit").live("click",function(){
var button = $(this);
var textarea = feedback.find("textarea");

// We use the working class not only for styling the submit button,
// but also as kind of a "lock" to prevent multiple submissions.

If(button.hasClass("working") || textarea.val().length return false;
}

// Locking the form and changing the button style:
button.addClass("working");

$.ajax({
url: submitURL,
type: "post",
data: { message: textarea.val()},
complete: function(xhr){

Var text = xhr.responseText;

// This will help users troubleshoot their form:
if(xhr.status == 404){
text = "Your path to submit.php is incorrect.";
}

// Hiding the button and the textarea, after which
// we are showing the received response from submit.php

Button.fadeOut();

Textarea.fadeOut(function(){
var span = $("",{
className: "response",
html: text
})
.hide()
.appendTo(feedback.find(".section"))
.show();
}).val("");
}
});

Return false;
});
});
Здесь мы используем AJAX-метод нижнего уровня jQuery - $.ajax(), посредством которого реализовано взаимодействие с submit.php. Данный метод даёт нам немного больше контроля над соединением, нежели $.get() или $.post().

Одно большое преимущество данного метода заключается в «полноценном» обратном сообщении. Здесь мы определяем соответствие ответа и ошибки 404, которая вежливо сообщает пользователю о том, что следует проверить путь к submitURL.

Теперь давайте продолжим и перейдем к финальной части обучающей статьи – секции PHP

PHP

PHP содержит в себе информацию, пропущенную через AJAX, обрабатывает ее, и отсылает сообщение на ваш электронный ящик.

: submit.php

// Enter your email address below
$emailAddress = "[email protected]";

// Using session to prevent flooding:

session_name("quickFeedback");
session_start();

// If the last form submit was less than 10 seconds ago,
// or the user has already sent 10 messages in the last hour

if($_SESSION["lastSubmit"] && (time() - $_SESSION["lastSubmit"] 10)){
die("Please wait for a few minutes before sending again.");
}

$_SESSION["lastSubmit"] = time();
$_SESSION["submitsLastHour"]++;

require "phpmailer/class.phpmailer.php";

if(ini_get("magic_quotes_gpc")){
// If magic quotes are enabled, strip them
$_POST["message"] = stripslashes($_POST["message"]);
}

if(mb_strlen($_POST["message"],"utf-8") die("Your feedback body is too short.");
}

$msg = nl2br(strip_tags($_POST["message"]));

// Using the PHPMailer class

$mail = new PHPMailer();
$mail->IsMail();

// Adding the receiving email address
$mail->AddAddress($emailAddress);

$mail->Subject = "New Quick Feedback Form Submission";
$mail->MsgHTML($msg);

$mail->AddReplyTo("noreply@".$_SERVER["HTTP_HOST"], "Quick Feedback Form");
$mail->SetFrom("noreply@".$_SERVER["HTTP_HOST"], "Quick Feedback Form");

echo "Thank you!";
Для начала мы воспользуемся управлением сессиями PHP для того, чтобы вычислить, сколько раз пользователь использовал форму за прошедший час. Если пользователь пытается отправить сообщение менее чем через 10 секунд с момента отправки последнего сообщения или отправляет более 10 сообщений в течение часа, то ему будет отображена ошибка.

Сообщения посылаются при помощи класса PHPMailer. Он работает только с PHP5, поэтому нужно, чтобы на сервере была поддержка именно этой версии.

Число методов PHPMailer’а используется для конфигурации выходящих писем. Посредством IsMail() мы сообщаем классу, что следует использовать внутреннюю PHP-функцию mail(). AddAddress() добавляет получаталей (вы можете добавить туда более одного получателя). После добавления объекта в тело документа, мы указываем адрес ответа, и отправляем сообщение.

На этом мы заканчиваем разработку!

В завершение

Вы можете использовать данную форму для сбора отзывов от посетителей. Данной формой вы значительно облегчаете пользователям процесс написания отзывов, а многие пользователи просто не станут писать отзыв, если для этого надо еще куда-то щелкать и куда-то переходить. Вы также без труда можете оформить форму по собственному усмотрению или по шаблону веб-сайта.

Для развития веб проекта очень важно получать обратную связь от посетителей. К сожалению, на многих веб сайтах возможность отправить сообщение разработчикам либо вообще не предоставляется, либо связана с достаточно серьезными трудностями.

Сегодня мы сделаем простое решение данной задачи. Используя jQuery, PHP и класс PHPMailer форма посылает предложение пользователя прямо в ваш почтовый ящик.

HTML

Начнем с разметки HTML. Стили включаются вверху документа, а файлы JavaScript - внизу. Таким образом оптимизируется процесс загрузки страницы, так скрипты грузятся последними, позволяя пользователю увидеть содержание страницы.

demo.html

Форма обратной связи с использованием PHP и jQuery | Демонстрация для сайта сайт Обратная связь

Пожалуйста, включите контактную информацию, если вы хотите получить ответ.

Отправить

Внутри body находится div #feedback . Он размещен внизу справа в окне с помощью фиксированного позиционирования, что будет видно в разделе урока, посвященного CSS.

Внутри данного div размещаются пять цветных элементов span . Каждый из них имеет 20% ширины и смещается влево. Таким образом, они размещаются точно на по всей ширине div #feedback .

Затем следует контейнер .section, который содержит заголовок, область текста и кнопку.

CSS

Перейдем к заданию стилей для формы. Для начала скажем несколько слов о том, из чего состоит структура таблицы стилей. Если взглянуть на определения CSS, представленные ниже, то можно заметить что каждое правило начинается с #feedback . Таким образом организуется подобие пространства имен в CSS, что облегчает добавление кода к существующему веб-сайту без конфликтов.

styles.css - Часть 1

#feedback{ background-color:#9db09f; width:310px; height:330px; position:fixed; bottom:0; right:120px; margin-bottom:-270px; z-index:10000; } #feedback .section{ background:url("img/bg.png") repeat-x top left; border:1px solid #808f81; border-bottom:none; padding:10px 25px 25px; } #feedback .color{ float:left; height:4px; width:20%; overflow:hidden; } #feedback .color-1{ background-color:#d3b112;} #feedback .color-2{ background-color:#12b6d3;} #feedback .color-3{ background-color:#8fd317;} #feedback .color-4{ background-color:#ca57df;} #feedback .color-5{ background-color:#8ecbe7;} #feedback h6{ background:url("img/feedback.png") no-repeat; height:38px; margin:5px 0 12px; text-indent:-99999px; cursor:pointer; } #feedback textarea{ background-color:#fff; border:none; color:#666666; font:13px "Lucida Sans",Arial,sans-serif; height:100px; padding:10px; width:236px; resize:none; outline:none; overflow:auto; -moz-box-shadow:4px 4px 0 #8a9b8c; -webkit-box-shadow:4px 4px 0 #8a9b8c; box-shadow:4px 4px 0 #8a9b8c; }

Первый элемент, для которого задается стиль - это div #feedback . Ему назначается фиксированная позиция и привязка к окну браузера. После него идет определение для div .section и пяти цветных элементов span . Данные элементы отличаются только цветом фона, который назначается отдельно для каждого класса.

В самом низу представленной части CSS файла определяются правила для вывода области текста.

styles.css - Часть 2

#feedback a.submit{ background:url("img/submit.png") no-repeat; border:none; display:block; height:34px; margin:20px auto 0; text-decoration:none; text-indent:-99999px; width:91px; } #feedback a.submit:hover{ background-position:left bottom; } #feedback a.submit.working{ background-position:top right !important; cursor:default; } #feedback .message{ font-family:Corbel,Arial,sans-serif; color:#5a665b; text-shadow:1px 1px 0 #b3c2b5; margin-bottom:20px; } #feedback .arrow{ background:url("img/arrows.png") no-repeat; float:right; width:23px; height:18px; position:relative; top:10px; } #feedback .arrow.down{ background-position:left top;} #feedback h6:hover .down{ background-position:left bottom;} #feedback .arrow.up{ background-position:right top;} #feedback h6:hover .up{ background-position:right bottom;} #feedback .response{ font-size:21px; margin-top:70px; text-align:center; text-shadow:2px 2px 0 #889889; color:#FCFCFC; display:block; }

Во второй части таблицы стилей определяется вид кнопки отправки. Отметим, что существует три состояния кнопки, изображения для которых содержатся в одном файле для фонового рисунка - submit.png . Они выводятся только когда необходимо.

jQuery

Форма обратной связи имеет два состояния - минимизированной и максимальное. При загрузке по умолчанию устанавливается минимизированное состояние внизу справа на экране. А jQuery переводит форму в максимальное состояние, когда пользователь нажимает кнопку мыши на заголовке. Данная функция выполняется с помощью привязки события и выполнения простых анимаций.

script.js - Часть 1

$(document).ready(function(){ // Относительный URL скрипта submit.php. // Вероятно, вам нужно будет его поменять. var submitURL = "submit.php"; // Кэшируем объект feedback: var feedback = $("#feedback"); $("#feedback h6").click(function(){ // Значения свойств анимации хранятся // в отдельном объекте: var anim = { mb: 0, // Поле снизу pt: 25 // Отступ сверху }; var el = $(this).find(".arrow"); if(el.hasClass("down")){ anim = { mb: -270, pt: 10 }; } // Первая анимация перемещает вверх или вниз форму, а вторая перемещает // заголовок, так что он выравнивается по минимизированной версии feedback.stop().animate({marginBottom: anim.mb}); feedback.find(".section").stop().animate({paddingTop:anim.pt},function(){ el.toggleClass("down up"); }); });

Для того, чтобы код был простым и понятным, вверху создается объект anim , который содержит значения для анимации, и размещается оператор if . В зависимости ото существования класса ‘down ‘ на стрелке, мы разворачиваем или сворачиваем форму.

Вторая часть script.js обрабатывает работу с AJAX с submit.php .

script.js - Часть 2

$("#feedback a.submit").live("click",function(){ var button = $(this); var textarea = feedback.find("textarea"); // Мы используем класс working не только для задания стилей для кнопки отправки данных, // но и как своеобразный замок для предотвращения множественных генераций формы. if(button.hasClass("working") || textarea.val().length < 5){ return false; } // Запираем форму и изменяем стиль кнопки: button.addClass("working"); $.ajax({ url: submitURL, type: "post", data: { message: textarea.val()}, complete: function(xhr){ var text = xhr.responseText; // Данная операция помогает пользователю определить ошибку: if(xhr.status == 404){ text = "Путь к скрипту submit.php неверный."; } // Прячем кнопку и область текста, после которой // мы показывали полученный ответ из submit.php button.fadeOut(); textarea.fadeOut(function(){ var span = $("",{ className: "response", html: text }) .hide() .appendTo(feedback.find(".section")) .show(); }).val(""); } }); return false; }); });

Мы используем метод jQuery для AJAX $.ajax() для взаимодействия с submit.php . Данный метод дает немного больше контроля над соединением, чем $.get() и $.post() .

Одним из преимуществ метода является видимость свойств объекта во "всей" возвратной функции. Здесь мы проверяем статус ответа на соответствие ошибке 404 (не найдена страница) , и выводим сообщение пользователю с просьбой проверить путь submitURL .

Теперь пора перейти к завершающей части - PHP.

PHP

PHP обрабатывает данные, переданные с AJAX, проверяет их и посылает e-mail сообщение по заданному адресу.

submit.php

// Здесь нужно ввести свой адрес $emailAddress = "[email protected]"; // Используем сессию, чтобы предотвратить флудинг: session_name("quickFeedback"); session_start(); // Если последняя форма была отправлена меньше 10 секунд назад, // или пользователь уже послал 10 сообщений за последний час if($_SESSION["lastSubmit"] && (time() - $_SESSION["lastSubmit"] < 10 || $_SESSION["submitsLastHour"] > 10)){ die("Пожалуста, подождите несколько минут, прежде чем отправить сообщение снова."); } $_SESSION["lastSubmit"] = time(); $_SESSION["submitsLastHour"]++; require "phpmailer/class.phpmailer.php"; if(ini_get("magic_quotes_gpc")){ $_POST["message"] = stripslashes($_POST["message"]); } if(mb_strlen($_POST["message"],"utf-8") < 5){ die("Ваше сообщение слишком короткое."); } $msg = nl2br(strip_tags($_POST["message"])); // Используем класс PHPMailer $mail = new PHPMailer(); $mail->IsMail(); // Добавляем адрес получателя $mail->AddAddress($emailAddress); $mail->Subject = "Новое письмо из формы обратной связи"; $mail->MsgHTML($msg); $mail->AddReplyTo("noreply@".$_SERVER["HTTP_HOST"], "Форма обратной связи на демо странице"); $mail->SetFrom("noreply@".$_SERVER["HTTP_HOST"], "Форма обратной связи на демо странице"); $mail->Send(); echo "Спасибо!";

Сначала мы используем управление сессиями, чтобы определить, как часто использует пользователь отправку формы в течение последнего часа, а также определяем время, прошедшее с последней отправки. Если с момента последней отправки прошло менее 10 секунд, или пользователь уже посылал более 10 сообщений в течение последнего часа, выводится сообщение об ошибке.

E-mail отправляется с помощью класса PHPMailer . Внимание! Он работает только с PHP5.

Несколько методов PHPMailer используется для конфигурации исходящего e-mail. Метод IsMail() указывает классу использовать внутреннюю функцию PHP mail() . Метод AddAddress() добавляет адрес получателя (вы можете добавить более одного получателя с помощью дополнительных вызовов данного метода). После добавления темы письма и текста указывается адрес для ответов и производится отправка сообщения.

Готово!

Заключение

Вы можете использовать данную форму для организации быстрой обратной связи с посетителем вашего сайта. Очень низкий барьер перед отправкой - нужно просто заполнить текстовове поле и нажать кнопку - создаст отличные условия для того, чтобы посетители ваших страниц начали делиться своими идеями. Скрипт также хорошо структурирован и прост в настройке, что поможет вам с минимальными усилиями использовать его на своем сайте.

В соответствии с Федеральным законом от 27 июля 2006 г. № 152-ФЗ «О персональных данных» я, субъект персональных данных, именуемый в дальнейшем Пользователь, отправляя информацию через формы обратной связи (далее – Формы) на интернет-сайте (далее – Сайт), а также на адреса корпоративной электронный почты Адвокатского бюро «Деловой фарватер», заканчивающиеся на (далее – Корпоративная почта), свободно, в своей воле и в своем интересе, выражаю Адвокатскому бюро «Деловой фарватер» (ОГРН 1167700058679; ИННН 9705068808), располагающемуся по адресу: 109240, г. Москва, улица Гончарная, дом 24, (далее – Оператор), согласие на обработку моих персональных данных (далее – Согласие) на следующих условиях.

1. Моментом принятия Согласия является маркировка соответствующего поля в Форме и нажатие на кнопку отправки Формы на любой странице Сайта, а также нажатие на кнопку отправки электронного письма, содержащего персональные данные Пользователя, на адрес Корпоративной почты Оператора.

2. Обработка персональных данных – любое действие (операция) или совокупность действий (операций), совершаемых с использованием средств автоматизации или без использования таких средств с персональными данными, включая сбор, запись, систематизацию, накопление, хранение, уточнение (обновление, изменение), извлечение, использование, передачу (распространение, предоставление, доступ), обезличивание, блокирование, удаление, уничтожение персональных данных.

3. Обработка персональных данных осуществляется как с использованием средств автоматизации, в том числе в информационно-телекоммуникационных сетях, так и без использования таких средств.

4. Согласие дается на обработку следующих персональных данных Пользователя, указанных Пользователем в Формах, в файлах, прикрепленных к Формам, а также информации, направленной на адреса Корпоративной почты:

    Фамилия, имя, отчество;

    Адрес электронной почты;

    Контактный телефон;

    Возраст;

    Иных персональных данных, указанных Пользователем в Формах или файлах, прикрепленных к Формам.

5. Цели обработки персональных данных:

    Идентификация Пользователя;

    Взаимодействие с Пользователем, в том числе направление уведомлений, запросов и информации, касающихся услуг Оператора, а также обработка запросов и заявок от Пользователя и установление обратной связи Пользователя с Оператором;

    Ответы на запросы Пользователей;

    Обеспечение работы Пользователя с Сайтом Оператора;

    Направление Пользователям аналитических материалов и информирование Пользователей о предстоящих мероприятиях, организуемых Оператором, а также регистрация Пользователей для участия в таких мероприятиях;

    Заключение с Пользователем договоров, в том числе трудовых и договоров на оказание юридических услуг;

    Направление Пользователям справочной и иной маркетинговой информации, посредством направления сообщений на адрес электронной почты, которая была указана Пользователем.

    Предоставление Пользователям консультаций по вопросам, которые касаются оказываемых Оператором услуг, в целях маркетинговой деятельности и поддержки Пользователей, а также в иных целях, которые не противоречат действующему законодательству Российской Федерации и условиям соглашений между Оператором и Пользователями.

6. В ходе обработки персональных данных Оператор вправе осуществлять сбор, запись, систематизацию, накопление, хранение, уточнение (обновление, изменение), извлечение, использование, передачу (распространение, предоставление, доступ), обезличивание, блокирование, удаление, уничтожение персональных данных Пользователя.

7. Оператор принимает необходимые и достаточные организационные и технические меры для защиты персональной информации Пользователей от неправомерного или случайного доступа, уничтожения, изменения, блокирования, копирования, распространения, а также от иных неправомерных действий третьих лиц.

8. Передача персональных данных Пользователя третьим лицам не осуществляется, за исключением правопреемников Оператора при его реорганизации и лиц, осуществляющих обработку персональных данных по поручению Оператора и от его имени. В случае участия Пользователей в мероприятиях, организуемых Оператором, последний вправе раскрыть соответствующие персональные данные Пользователей лицам, участвующим в организации такого мероприятия.

9. Согласие на обработку персональных данных выдается Пользователем на срок, необходимый Оператору для достижения целей обработки персональных данных.

10. Согласие может быть отозвано Пользователем путем направления письменного заявления в адрес Оператора (109240, г. Москва, улица Гончарная, дом 24) или путем направления письменного заявления на следующий адрес Корпоративной электронной почты: .

11. Настоящее Согласие действует все время до момента прекращения обработки персональных данных.

12. Понятия, которые используются в настоящем Согласии, должны трактоваться в соответствии с их определениями, которые даны в Федеральном законе от 27.07.2006 N 152-ФЗ «О персональных данных».

Почти на каждом сайте есть форма обратной связи. И конечно же различных реализаций очень много. В этой статье мы напишем форму обратной связи, в которой будет использоваться HTML5 валидация, всплывающие оповещения со звуком. Ну и конечно сам запрос будет отправляться с помощью ajax. К тому же пример будет предусматривать два варианта обработки запроса: через ajax и обычным POST запросом. В случае POST запроса будут использоваться flash сообщения, основанные на сессии. Подробнее под катом…

Итак, наш проект будет имееть следующую структуру:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 . ├── css │ ├── jquery.jgrowl.css │ ├── main.css │ └── normalize.css ├── images │ └── jgrowl.close.png ├── protected │ ├── bootstrap.php │ ├── flashes.php │ ├── func.php │ └── session.php ├── sounds │ ├── notice.mp3 │ └── notice.ogg ├── feedback.php └── index.php

В файле index.php будет находиться форма обратной связи. После заполнения формы и нажатия пользователем кнопки отправить, будет отправляться ajax запрос на скрипт feedback.php . Который в свою очередь, обработав запрос, будет возвращать результат. Тут есть нюанс. Скрипт проверяет какой пришел запрос и в зависимости от этого, или возвращает результат в виде json или записывает flash сообщение в сессию с последующим перенаправлением обратно на index.php. То есть в случае каких либо ошибок в javascript запрос все равно будет обрабатываться путем простого POST запроса. Да и программист в таком случае имеет гибкий инструмент, который позволяет всегда отказаться от ajax.

Flash сообщения это вид данных в сессии, который стирается после их первого востребования. Является очень удобным инструментом для передачи сообщений между запросами.

Чтобы не усложнять верстку, а также унифицировать извещения для пользователя, в примере используются всплывающие growl сообщения на подобии, что применяются в OSX. Для этого используется хороший jQuery плагин jGrowl , который имеет гибкую систему настройки и стилизации.

Итак, начнем с HTML:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 Форма обратной связи Обратная связь Имя: Адресс эл.почты: Сообщение: Отправить //some code

Как видно из приведенного кода выше. В примере не используется . Просто для таких вещей это вовсе не обязательно. Все равно данные будут проходить валидацию на сервере.

JavaScript :

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 $(document) .ready (function () { buzz.defaults .formats = [ "ogg" , "mp3" ] ; buzz.defaults .preload = true ; if (buzz.isSupported () ) { var noticeSound = new buzz.sound ("sounds/notice" ) ; } $.jGrowl .defaults .position = "top-right" ; $.jGrowl .defaults .closer = false ; $.jGrowl .defaults .beforeOpen = function (e, m, o) { if (noticeSound) noticeSound.play () ; } ; $("form#feedback-form" ) .on ("submit" , function (e) { e.preventDefault () ; $(this ) .ajaxSubmit ({ dataType: "json" , success: function (response) { $.jGrowl (response.message , { theme: response.type } ) ; if (response.type == "success" ) $("form#feedback-form" ) [ 0 ] .reset () ; } , error: function () { $("form#feedback-form" ) .unbind ("submit" ) .submit () ; } } ) } ) ; } ) ;

Код выше предельно понятен. Настройка вывода уведомлений и проигрывания звука. А также реализация работы формы через без перезагрузки страницы при помощи библиотеки ajaxForm .

Теперь преступим к реализации обработки запросов:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 //feedback.php require __DIR__ . "/protected/bootstrap.php" ; if (! IS_POST() ) { stopAndResponseMessage( "error" , "Скрипт принимает только POST запросы!" ) ; } $name = _POST("name" ) ; $email = _POST("email" , false ) ; $message = _POST("message" ) ; if (! $name || ! $email || ! $message ) { stopAndResponseMessage( "error" , "Не все обязательные поля были заполнены!" ) ; } // check captcha and csrf token if (! isEmail($email ) ) { stopAndResponseMessage( "error" , "Адрес эл. почты плохой!" ) ; } if (mb_strlen ($message ) _e($type ) , "message" => _e($message ) ) ) ; exit ; } Flashes:: add (_e($type ) , _e($message ) ) ; stopAndRedirect("index.php" ) ; }

Самое важное место в скрипте это функция stopAndResponseMessage, которая и является гибгим механизмом обработки запроса. Она возвращает json ответ в случае ajax запроса или использует flash сообщения при простом POST запросе. На данном этапе может быть не понятно как реализованы flash сообщения. Но так как статья уже довольно таки большая, разобраться в этом вопросе читателю предстоит самостоятельно. Используя исходные коды конечно же. Все реализованно в файле protected/flashes.php .




Top