Негодное feedback php. PHP include уязвимость: от теории к практике

В соответствии с Федеральным законом от 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 .

Информация, представленная на этой странице ориентирована в первую очередь для начинающих web-мастеров.

Здравствуйте, друзья, уважаемые посетители моего скромного сайта! Наверняка, многим из Вас, в том числе и начинающим web-мастерам, известно, что такое и для чего нужна ФОС (форма обратной связи).

Традиционная ФОС в самом простом варианте – это когда пользователь заполняет поля формы, расположенной на web-странице, а серверная программа обрабатывает эти данные и пересылает их на почтовый ящик администратора сайта. Но, есть и другие варианты и один из них мы рассмотрим в этом уроке.

Понятно, что при использовании CMS, например бесплатных Joomla и WordPress, вопрос обратной связи можно решить использованием различных расширений или плагинов, но есть альтернативные способы, которые могут быть полезны для любого проекта, построенного как на чистом HTML, PHP, так и использующего движок.

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

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

Ещё стоит сказать, что есть неплохие сервисы создания форм обратной связи, но сейчас речь пойдёт об одной интересной и нетрадиционной ФОС. Главное её отличие от других образцов в том, что она не нуждается в наличии и использовании почтового клиента. Это web-форма и сообщения в ней создаются, отсылаются на web-странице и получаются на web-странице. Иными словами, данная форма работает в пределах сервера вашего сайта, не используя сервер какой-либо электронной почты .

На бесплатном хостинге с PHP недоступен SMTP-сервер, поэтому создать сервис отправки сообщений со страницы сайта по электронной почте на E-mail администратора, не представляется возможным. Предлагаемый комплект ФОС решает эту проблему и предоставляет как отправителям сообщений со страницы сайта, так и его администратору, удобный способ обмена сообщениями.

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

Капля полезной информации

В дальнейшем, чтобы не испытывать сложности в перекодировке файлов, прочтите небольшой «ликбез». Для выполнения перекодировки, например, с windows-1251 на utf-8 необходимо:

  • Открыть все файлы в текстовом редакторе, лучше всего в Notepad++;
  • Удалить записи о старой кодировке, например,
    ;
  • Перекодировать поочерёдно все файлы (Кодировки → преобразовать в utf-8 без BOM);
  • Вставить записи о новой кодировке, например,
    ;
  • Сохранить изменения во всех файлах (файл → сохранить все).
  • В этих действиях важно соблюдать очерёдность выполнения операций, иначе вместо русских слов получите непонятные «кракозябры».

    1. Скачайте нужный архив с материалом и распакуйте в текущую папку на компьютере. В папке feedback Вы увидите папку img с изображениями и файлы формы . Папку feedback закачайте целиком на сервер своего сайта.

    ВНИМАНИЕ! Если файлы загружены на сервер, то необходимо для файла message.txt установить атрибуты: 666 , иначе чтение и запись в файл будут не возможны и сервер выдаст сообщение об ошибке.

    2. В адресную строку своего браузера введите адрес:
    //ваш домен/feedback/feedback.php
    Загрузится страница обратной связи с формой для ввода данных. Можно проверить работу формы, заполнив все поля и отправить сообщение. Сделайте в нужном месте ссылку на эту страницу со своего сайта.

    3. Для проверки сообщений следует ввести в адресной строке браузера адрес:
    //ваш домен/feedback/message.php
    Загрузится страница с заголовком сообщения, с данными и текстом отправленного сообщения. Для удаления всех записей нужно нажать на странице кнопку Удалить все . Сделайте закладку страницы с сообщениями (message.php), чтобы можно было легко открыть её в следующий раз.

    ФОС готова к работе на вашем сайте. Сколько времени ушло у Вас на её установку?

    Вариант №2. Установка ФОС в шаблон сайта.

    Данную форму можно также вставить в шаблон сайта на PHP. Эта задача чуть-чуть сложнее.

    Форма будет выглядеть примерно ТАК , а сообщения можно принимать .


    Файлы в кодировке utf-8, если ваш сайт в иной кодировке - их нужно перекодировать. Это Вы уже сможете сделать сами.

    Страницы feedback.php и send.php имеют для наглядности предварительное оформление, которое в дальнейшем не потребуется ввиду того, что отмеченные необходимые блоки (начало блока → конец блока) в файлах feedback.php и send.php нужно будет скопировать и вставить в шаблоны страниц вашего сайта. Затем эти шаблоны следует переименовать соответственно в feedback.php и send.php . В Главном меню вашего сайта должна присутствовать ссылка на страницу обратной связи feedback.php .

    Не потребуются и файлы header.php, footer.php , который служат для формирования страниц feedback.php и send.php при предварительном тестировании.

    Файлы message.php и deltext.php являются служебными страницами для администратора сайта. Их можно оставить без изменений, либо оформить по своему вкусу.

    Все эти файлы должны находиться в корневом каталоге вместе с файлом message.txt :

    Во избежание неприятностей, перед закачкой файлов в корневую папку сайта, проверьте, нет ли совпадений названий файлов! Если есть - файлы стоит переименовать.

    Если на хостинге с PHP используется сайт, содержащий обычные HTML-страницы, то в шаблон страницы для обратной связи с именем feedback.html следует вставить форму из файла feedback.php . А в шаблон HTML-страницы с именем send.html вставить блок скрипта из соответствующего файла и переименовать страницу в send.php .

    Это всё! Используйте ФОС по максимуму, общайтесь с посетителями, развивайте свой ресурс и всех Вам благ! Не забывайте посещать мой сайт. Ваш Л.М.

    Не секрет, что очень часто приходится как-то общаться с посетителями своего сайта. Разумеется, можно просто дать свой e-mail (как сделал я), а можно предложить и другой способ - это форма обратной связи . Разумеется, здесь потребуется знание PHP . Но чтобы Вам не надо было писать всё с нуля, я предоставляю Вам очень даже хороший скрипт формы обратной связи .

    После скачивания извлекайте архив на Ваш сайт (смотрите, ничего не сотрите у себя). Теперь давайте его настроим. Для этого открываем файл "config.php ". И меняем значения следующих переменных:

  • "mailto " - поставьте вместо "[email protected] " адрес своего почтового ящика.
  • "charset " - поставьте кодировку, хотя если Ваш сайт русскоязычный, то можете оставить "windows-1251 ".
  • "content " - советую оставить "text/plain ", так как вряд ли Ваши посетители будут отправлять Вам сообщения в HTML-формате .
  • Теперь Вы можете запустить файл index.php у скрипта. В результате, перед Вами возникнет форма. Можете её заполнить и отправить письмо.

    Теперь встаёт вопрос: "Как вставить эту форму обратной связи на свой сайт? ". Чтобы это сделать, найдите файл, который отвечает у Вас за страницу обратной связи (пусть это будет "feedback.html "). Сразу измените расширение на php (то есть на "feedback.php "). Скопируйте код из index.php скрипта в файл со страницей обратной связи (feedback.php ). Теперь Вы можете делать всё, что пожелаете нужным между тегами и , только не стирайте то, что Вы вставили из index.php . То что между тегов тоже не трогайте, если точно не знаете, что делаете.

    И, наконец, если Вам не нравится внешний вид формы, то Вы можете его подкорректировать в файле "styling.css ".

    Если у Вас остались какие-либо вопросы, либо происходят какие-то глюки со скриптом (я его не тестировал), то пишите мне на e-mail , чтобы я исправил.

    Чтобы не зависеть от работы чужих скриптов, научитесь их создавать самостоятельно. Этому Вас научит мой Видеокурс "PHP и MySQL с Нуля до Гуру ":

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

    Сегодня мы расскажем вам о простеньком решении проблемы. Данная форма, используя 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() добавляет получаталей (вы можете добавить туда более одного получателя). После добавления объекта в тело документа, мы указываем адрес ответа, и отправляем сообщение.

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

    В завершение

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