Тарифы Услуги Сим-карты

PHP сценарии обработки HTML форм. PHP _SELF в атрибуте формы action

What You"ll Be Creating

В этой инструкции я собираюсь пошагово рассказать о том, как создать рабочую контактную форму, с использованием самого популярного фреймворка для фронт-энда Bootstrap в комбинации с AJAX и PHP. Также здесь мы рассмотрим некоторые дополнительные возможности, как например, некоторые причудливые CSS-анимации с помощью листа стилей animate.css, последующую проверку формы через Javascript и улучшение общего впечатления конечных пользователей с помощью асинхронного контента.

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

Примерная структура файлов и папок

Первым делом, мы создаем корневую директорию и помещаем в нее следующие файлы и папки:

Bootstrap-Form: ├── css/ ├── images/ ├── js/ ├── scripts.js ├── php/ ├── process.php ├── index.html

Нам будет нужно добавить несколько фронт-энд библиотек, которые нам помогут, так что не стесняемся и качаем (или добавляем внешние ссылки на следующие из них:

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

Bootstrap-Form: ├── css/ ├── bootstrap.min.css ├── images/ ├── js/ ├── scripts.js ├── bootstrap.js ├── jquery-1.11.2.min.js ├── php/ ├── process.php ├── index.html

Задание Основ Формы

Открываем index.html, копируем следующую базовую структуру HTML:

Contact form using Bootstrap 3.3.4 " Send me a message

Это наш базовый HTML шаблон, на основе которого мы будем создавать содержимое формы. Вы можете видеть, что мы связали все необходимые файлы CSS и JavaScript (обратите внимание, что для этого конкретного примера нам не нужен bootstrap.js). Мы включили для облегчения работы с медиа запросами в Bootstrap. JavaScript был прописан в нижней части файла, чтобы сначала загрузилась основная часть формы.

Внутри тега body мы включили div с классом col-sm-6 col-sm-offset-3 . Это в основном означает, что на маленьких экранах sm (small) мы хотим отобразить столбец шириной 50% (максимум 12 столбцов). Класс col-sm-offset-3 добавляет отступ слева 25%, создавая таким образом макет, который занимает половину доступного экрана и выровнен по центру. Здесь мы добавили тег h3 , и это начало основы нашей формы. Убедитесь, что вы применили ID к этой форме, чтобы мы могли позднее связать событие jQuery.

Кто не рискует, тот не пьет шампанское

Создавая элементы формы мы можем скопировать/вставить или написать следующий код в тегах :

Name Email Message Submit Message Submitted!

Пользователь будет взаимодействовать со всеми этими полями и кнопками. Родительский div с присвоенным классом row - классический Bootstrap синтаксис, создает строку из элементов col. Столбцы в Bootstrap создают внутренние отступы или интервалы - добавление строки вокруг них приведет к удалению отступов слева и справа и столбцы идеально вписываются в основной контейнер.

Мы создали два столбца с классом col-sm-6 (50%), который мы будем использовать для разделения нашей формы. В первом столбце col-sm-6 мы создали метку и поле для имени, во втором столбце поле для электронной почты. Каждый из них включает метку с соответствующим атрибутом for , ссылающийся на соответствующее поле. Каждый из этих столбцов заключен в класс form-group который семантически группирует метку и поле вместе и также добавляет маленький внешний отступ снизу.

Типографика

Bootstrap позволяет вам использовать классы заголовков H1-H6. Эти классы помогают нам использовать строчные элементы без добавления дополнительных отступов или создания блочных элементов. Мы применили класс H4 к меткам, быстро увеличив их размер и сделав их более понятными.

Класс form-control применяемый к каждому полю ввода, позволяет ему охватывать всю длину контейнера (100%). Он также добавляет различные стили, улучшающие читаемость текста (увеличивая высоту текста, добавляя рамку и т.д.).

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

Призыв к действию

И наконец, мы добавляем кнопку. В Bootstrap имеется несколько классов для разных кнопок с различными цветами и состояниями. Мы решили использовать кнопку "успех" (btn-success), которая по умолчанию имеет зеленый цвет. Кроме того, нам необходимо добавить класс btn для сброса стандартных стилей кнопки (граница, отступы, выравнивание текста, насыщенность шрифта). Мы применили класс btn-lg который увеличивает кнопку и наконец класс pull-right для выравнивания кнопки по правому краю.

После нашей кнопки мы добавили div с идентификатором #msgSubmit и применили следующие классы: " h3 text-center hidden ". h3 создает более крупный заголовок, text-center (как вы уже догадались) делает выравнивание текста по центру, и, наконец, мы установили класс hidden , который устанавливает оба свойства, display в значение none и свойство visibility в значение hidden (display: none; visibility: hidden;).

Добавляем функцию отправки

Как вы можете видеть это в своем браузере, мы создали основу Bootstrap формы. Но пока она абсолютно ничего не делает. Следующим шагом будет создание функции, которая принимает входные данные пользователей и отправляет их асинхронно в наш класс PHP mailer.

Откройте scripts.js и скопируйте следующий код:

$("#contactForm").submit(function(event){ // cancels the form submission event.preventDefault(); submitForm(); });

Этот кусок кода является jQuery фрагментом, который принимает функцию отправки в нашем id #contactForm (как задано ранее). По этой функции мы парсим переменную event , в которой хранится действие отправки формы в функцию. Событие event.preventDefault(); останавливает отправку данных формы, как обычно, чтобы обновить страницу, поскольку не задано действие формы. Наконец, вызывается функция submitForm(); .

submitForm();

Затем мы создадим функцию submitForm(); :

Function submitForm(){ // Initiate Variables With Form Content var name = $("#name").val(); var email = $("#email").val(); var message = $("#message").val(); $.ajax({ type: "POST", url: "php/form-process.php", data: "name=" + name + "&email=" + email + "&message=" + message, success: function(text){ if (text == "success"){ formSuccess(); } } }); } function formSuccess(){ $("#msgSubmit").removeClass("hidden"); }

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

Инициализируем AJAX объект в jQuery и устанавливаем тип запроса post , URL– ссылка на PHP файл, данные которые мы хотим отправить, и при успешной отработке срабатывает функция success. Данные включают все три объединенные переменные с соответствующим идентификатором/меткой. Функция обратного вызова вызывается, когда объект Ajax успешно получает информацию из сценария PHP. Функция сравнивает возвращаемый текст и проверяет, равен ли он строке "success". Если все верно, то запускается функция formSuccess .

Функция formSuccess удаляет класс hidden из div с id #msgSubmit , который мы применили ранее, тем самым показывая текст.

Подключаем PHP функцию mail

Нам осталось написать PHP скрипт для получения данных и отправки нашей информации с помощью встроенной php функции mail. Откройте process.php и добавьте следующий код:

Похоже на фрагмент кода JQuery выше, мы создаем и храним переменные, которые мы хотим использовать. Из функции post мы получаем три input переменные и записываем их значения в такие же переменные PHP. Переменная $EmailTo – заранее определенный email адрес, который указывается в скрипте и отправляется на вашу почту из формы. $Subject – это строка, которая используется в качестве темы письма.

Основа сообщения создается из трех переменных. Сначала указывается от кого сообщение “Name:”, затем добавляется символ перехода на новую строку /n . (новая строка/разрыв строки). Это повторяется и объединяется с переменной $body .

Чтобы окончательно отправить сообщение мы пишем функцию отправки сообщения. В переменную $success мы возвращаем результат отправки, в которую входит: получатель, тема, основной текст и отправитель.

Чтобы инициировать процесс отправки электронной почты, мы можем вызвать его в операторе if . Это также помогает проверить прошло ли всё успешно или нет. Если функция mail вернула значение “true”, скрипт вернет значение “success”, а если false соответственно “invalid”.

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

Идеальный порядок

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

Еще раз, для валидации формы мы будем использовать некоторые инструменты. К ним относятся:

Добавьте их также в проект, как мы делали ранее с Bootstrap и jQuery. Эти инструменты помогут обеспечить обратную связь с пользователем при отправке формы. Существует множество инструментов и фреймворков для проверки форм (включая встроенный HTML5 валидатор), но я использовал «Bootstrap Validator», так как он прекрасно интегрируется с нашей текущей формой.

Теперь структура проекта должна выглядеть примерно так:

Bootstrap-Form: ├── css/ ├── bootstrap.min.css ├── animate.css ├── images/ ├── js/ ├── scripts.js ├── bootstrap.js ├── jquery-1.11.2.min.js ├── validator.min.js ├── php/ ├── process.php ├── index.html

Проверка нашей формы

Начнем с создания валидатора, чтобы проверить форму при нажатии кнопки. Вернемся к файлу scripts.js , нам нужно отредактировать первый кусок кода, который вызывает функцию submitForm() , когда форма отправлена.

Теперь код выглядит так:

$("#contactForm").validator().on("submit", function (event) { if (event.isDefaultPrevented()) { // handle the invalid form... } else { // everything looks good! event.preventDefault(); submitForm(); } });

Этот новый фрагмент кода проверяет, нашел ли Bootstrap Validator какие-то ошибки и остановил процесс. Если это не так, мы продолжим. Нам все равно нужно предотвратить действие по умолчанию (обновление страницы) при успешной отправке формы, поэтому сохраним это.

Теперь, при нажатии на кнопку отправки формы, когда она не заполнена полностью, сработает проверка правильности заполнения формы и поля будут выделены красным цветом, показывая, что нужно вводить, это просто!

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

В каждой form-group под полями ввода необходимо разместить следующий html-код:

Например, вот дополнительный блок div, добавленный к полям Name и E-mail:

Name Email

Теперь при повторной отправке формы, если поля оставлены пустыми, по умолчанию, должно появляться сообщение об ошибке “Please fill in this field.” . Добавив атрибут “data-error” к полю ввода, вы можете добавить пользовательское сообщение об ошибке. Например:

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

Добавляем анимацию

Наша клиентская валидация выглядит очень хорошо; у нас есть изящная подсветка пустых полей красным цветом. Однако было бы неплохо добавить в форму дополнительную анимацию и добавить дополнительные сообщения, позволяющие пользователю знать, что происходит. В настоящее время у нас есть сообщение "Message Submitted!", которое появляется при успешной отправке, но как насчет сообщения об ошибке?

Мы изменим наш код, чтобы он стал более универсальным, изменим успешное сообщение так, чтобы оно принимало и сообщения об ошибках.

Прежде всего, давайте удалим текст “Message Submitted!” из HTML-кода и просто оставим пустой блок div:

Теперь нам необходимо создать новую функцию для обработки статуса сообщения. Добавьте эту функцию в конец сценария scripts.js

Function submitMSG(valid, msg){ var msgClasses; if(valid){ msgClasses = "h3 text-center tada animated text-success"; } else { msgClasses = "h3 text-center text-danger"; } $("#msgSubmit").removeClass().addClass(msgClasses).text(msg); }

Эта функция принимает два аргумента. valid будет булева [логическая] переменная: если это истина тогда показывается успешное сообщение, если ложь то показывается сообщение об ошибке. msg содержит сообщение для отображения в блоке div.

Во-первых, функция проверяет, имеет ли она успех или сообщение об ошибке, проверяя значение valid. В любом случае в переменную записываются необходимые имена CSS классов (нужно еще раз подключить h3 и text-center , так как позже мы удалим их по умолчанию).

Примечание : мы используем некоторые классы animate.css. Класс tada применит анимацию при успешной отправке сообщения.

Наконец, функция удаляет все классы из #msgSubmit (избегайте конфликтующих классов), затем добавляет классы, установленные ранее, а затем добавляет текст сообщения внутри элемента div .

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

SubmitMSG(false, "Did you fill in the form properly?");

При отправке формы с пустыми полями должно появиться сообщение об ошибке “Did you fill in the form properly?"

Последним шагом для этой новой submitMSG функции - это вызвать ее при успешной отправке сообщения. Обновите функцию formSuccess() следующим образом:

$("#contactForm").reset(); submitMSG(true, "Message Submitted!")

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

Встряска

Еще одна анимация, верно? Давайте добавим еще одну анимацию для всей формы при сообщении об ошибке, анимационное "дрожание" должно выглядеть очень хорошо!

Создайте новую функцию сразу после formSuccess() и назовите ее formError()

Function formError(){ $("#contactForm").removeClass().addClass("shake animated").one("webkitAnimationEnd mozAnimationEnd MSAnimationEnd oanimationend animationend", function(){ $(this).removeClass(); }); }

Эта функция использует подход, найденный на демо странице animate.css, который позволяет добавить анимацию к элементу, а затем повторно вызывать/добавлять ее снова и снова. С CSS анимациями связана одна небольшая проблема, если один раз добавить анимацию к элементу и потом удалить стили, а затем добавить их по новой, то анимация не повториться. Эта функция помогает сбросить классы по завершению анимации, а затем позволяет повторно добавить их. Когда пользователь нажимает кнопку "Отправить" в не до конца заполненной форме, мы хотим, чтобы анимация дрожала. И в случае если форма все еще заполнена неправильно, нужно чтобы анимация также срабатывала снова.

Мы можем вызвать эту функцию formError() над функцией submitMSG() . К примеру:

FormError(); submitMSG(false, "Did you fill in the form properly?");

Теперь, когда мы отправляем пустую форму, она будет дрожать, чтобы пользователь знал, что что-то пошло не так.

Дополнительная проверка

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

Откройте наш файл process.php , нам необходимо немного его изменить, добавить проверку на пустоту полей; Если они не пусты, отправляем сообщение обратно на front-end. Мы создадим переменную с именем $errorMSG , в которую будем записывать ошибки, а затем включим дополнительную проверку $_POST .

Этот PHP код проверяет, не пусты ли поля перед записью в соответствующие переменные (заменяет существующий код, устанавливая переменные из $_POST). Если они пустые, мы формируем базовое сообщение для отправки обратно клиенту. Мы можем проверять еще более тщательно, чем просто проверять поля на пустоту (если значение слишком короткое/длинное, то проверяем его регулярными выражениями) в PHP и JavaScript. Однако, ради простоты, мы ограничимся лишь проверкой на пустоту.

Необходимо вернуть сообщение в функцию AJAX, который будет отображаться в браузере. Мы отредактируем условие if , которое мы создали ранее в нижней части файла PHP.

В нашем условии if мы также проверяем не является ли переменная $errorMSG пустой (""), которую мы использовали в переменной $success . В нашем условии else мы включили дальнейшую проверку. Здесь просто проверка, если в переменную $success вернулся результат false, то возвращается “Something went wrong:(“. В противном случае отображаем сообщение, которое было скомпилировано при проверке на наличие пустых значений.

Последний шаг - принять новое сообщение в AJAX и отобразить его в форме. Нам нужно обновить объекта Ajax в файле scripts.js следующим образом:

$.ajax({ type: "POST", url: "php/form-process.php", data: "name=" + name + "&email=" + email + "&message=" + message, success: function(text){ if (text == "success"){ formSuccess(); } else { formError(); submitMSG(false,text); } } });

Мы только что обновили условие else , которое проверяет если text == success . В нашем else мы вызвали функцию formError() , которая активирует анимацию встряхивания, функция submitMSG() отображает текст сообщения из файла PHP. Возвращаемый текст будет либо “Something went wrong:(” , либо данные о пустых полях.

Заключение

Перейдите на Github , чтобы посмотреть на весь код, который мы написали!

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

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

Всем доброго времени суток. На связи Алексей Гулынин. В прошлой статье вы узнали о том, что такое сериализация в php . В данной статье я бы хотел рассказать о том, как работать с формами в PHP . Язык PHP предназначен для программирования web-сценариев, и обработка форм занимает, пожалуй, самое главное место в этом процессе. Сейчас уже и не встретить сайтов, на которых не было бы, к примеру, регистрации или формы обратной связи, или опросника. Форумы, интернет-магазины, добавление комментария, отправка сообщения в социальной сети — всё это обработка данных, помещенных в поля формы. Давайте на примере разберемся, как обрабатывать формы на PHP .
Будем реализовывать простую задачу: необходимо создать 2 поля (имя и фамилия), передать эти данные скрипту action.php , в результате должно выйти приветствие "Добро пожаловать, фамилия имя" . Кто забыл, как создаются формы, и какие там есть поля, можно посмотреть . Создадим файл test.html :

Имя: Фамилия:

Обращаю ваше внимание, что файл action.php (в нашем случае) должен находиться в одной папке с файлом test.html . Тут можно указывать как относительные, так и абсолютные пути. Будьте внимательны, многие ошибки связаны с неправильным указанием пути до скрипта-обработчика формы.

Создадим файл action.php со следующим содержимым:

Если мы сейчас откроем файл test.html , заполним поля формы и нажмём на кнопку, то попадём в файл action.php , где будет выведено сообщение. В данном случае браузер обращается к скрипту action.php и передает ему, через знак "?" все значения атрибутов name , расположенных внутри тегов , разделенных символом & . Обратите внимание, что подставляется вместо $_SERVER .

Нашу задачу мы можем решить, разобрав строку QUERY_STRING с помощью стандартных функций по работе со строками в PHP, но лучше воспользоваться другим механизмом — это использование массива $_REQUEST . Все данные, которые получены из полей формы, PHP помещает в массив $_REQUEST, не зависимо от того, каким способом были переданы данные: POST или GET (узнать можно через $_SERVER["REQUEST_METHOD"] ). Напоминаю чем эти способы отличаются:

Метод GET является открытым, метод POST является закрытым, т.е. они отличаются способом передачи параметров. Пример:

1) Если мы используем метод post: mysite.ru/request.php.
2) Если мы используем метод get: mysite.ru/request.php?myname=»Alex»&surname=»Gulynin».

Также, помимо массива $_REQUEST, PHP создаёт массивы $_GET и $_POST . Давайте теперь реализуем нашу задачу, на основе полученных знаний:

Если мы сейчас заполним форму и нажмём на кнопку, то увидим, что скрипт action.php приветствует нас по фамилии и имени. Всё работает корректно.

Здесь всё хорошо, но если мы изменим название скрипта, то нужно будет вносить изменения в файл test.html . Давайте модифицируем файл action.php, так, чтобы, обращаясь к нему либо выводилась форма, когда мы ничего не отправили, либо приветствие, когда мы нажали кнопку: