30-06-2018 10:45

Обработка формы PHP: понятие, инструкция по обработке, правила и методы работы

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

Формы HTML и реальные задачи

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

How dangerous is the new coronavirus?You will be interested:How dangerous is the new coronavirus?

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

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

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

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

В частности, ввод первичного документа - это:

  • наименование;
  • количество;
  • стоимость товара.

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

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

В каждом конкретном случае форма содержит только те элементы, которые подлежат заполнению или изменению.

Пример использования элементов формы

В приведенном примере использовано текстовое поле для ввода имени посетителя, скрытое поле - для ввода пароля, элемент списка и два варианта выбора:

  • один из многих (radio);
  • несколько из многих (checkbox).

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

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

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

PHP код описания формы

Приведенный пример формы описан следующим кодом. Описания CSS не имеют особого значения и не приводятся ниже. Показан только код самой формы. Здесь данные формы PHP отправляет методом POST на страницу 'index.php', на которой расположена сама форма.

Поля имени посетителя и пароля на вход должны заполняться правильно. Возможность ввода ложной информации должна быть исключена изначально. Для этого в коде формы предусмотрено использование изменения цвета символов полей на красный в случае ошибки: echo $cNameTest и echo $cPassTest. Эти переменные определяются в начале HTML-страницы.

Здесь в секции HEAD (1) выполнена вставка операторов, определяющих наличие в массиве $_POST значений полей формы cName и cPass. Затем проверяется правильность ввода нужных значений: функции (2) и (3). Если пользователь ошибся и ввел неправильно имя или пароль, то соответствующие поля формы меняют цвет на красный.

Функции проверки chStrText() и chStrPass() не являются идеальными - это пример. На реальной практике важно не только изменить цвет и показать посетителю его ошибки, но и предпринять адекватные действия.

Следует особо отметить тег input с типом hidden (имя cCode). Обработка данных форм на PHP - это не только видимая или заполняемая информация. Часто в процессе ввода данных необходимо формировать скрытый текст, который имеет значение. В данном случае не важно, что поместит программист в значение cCode; важно, что имеет значение для решения поставленной задачи.

Соотношение HTML и PHP

PHP функционирует на сервере. Как серверный язык, PHP в обработке форм может принимать только «формирующее» участие: программист пишет код создания формы или заполнения ее полей, когда форма описана тегами HTML.

PHP может принимать решающее участие, когда нужно обработать данные, введенные посетителем. Активация работы PHP происходит при обновлении страницы: после заполнения форма отправляет методом POST (иногда, методом GET) данные самой себе. То есть, значение атрибута action тега form равно имени страницы, на которой форма записана.

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

В этом случае разрабатывается три страницы (как вариант). Исходный файл index.php (index.html) содержит форму входа (регистрации). Файл проверки CheckUser.php - это готовая форма на PHP для работы с БД (таблицей пользователей) и только. CheckUser.php только проверяет наличие посетителя, никакого вывода в браузер не делает.

В случае успешного входа загружается основная рабочая страница, и пользователь входит на сайт. В случае проблем: нет такого пользователя или в регистрации отказано, и процесс возвращается обратно на страницу index.php (index.html).

Работа с сервером по AJAX

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

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

В данном случае поставлена задача обеспечить вход с одного браузера разным работникам без перезагрузки ресурса. Ресурс должен работать постоянно, а работники меняются. Использование формы PHP и AJAX - наиболее удобное решение.

Валидация формы HTML

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

Не всегда оправдано использование регулярных выражений, как в примере с функциями chStrTest() и chStrPass(), но всегда оправдано требование точно установить наборы допустимых символов при вводе/изменении полей данных или вероятный набор значений.

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

Выполнять на PHP обработку HTML-формы непосредственно в момент ввода возможно, но это обусловит нагрузку на обмен данными посредством AJAX. Практика и опыт разработки форм позволяет сделать вывод: разумное сочетание возможностей JavaScript (проверка ввода данных в браузере) и возможностей PHP (обработка данных на сервере) - лучшее решение.

Жесткие конструкции и трудоемкость

HTML - это «свод» формальных правил. Описание тегов требует участия таблиц CSS. Описав элементы формы через идентификаторы, можно потерять возможность прямого доступа к полям формы через JavaScript. Используя описание через классы, можно иметь большую свободу. Дать четкие указания практически невозможно, все ситуации уникальны, но осмысление и использование умений и знаний коллег всегда позволяет максимально быстро и эффективно выполнить работу.

Создать динамично формирующуюся форму для ввода данных сложно. Обычно работа с формами на PHP сводится к формализации данных и формированию жесткой конструкции на языке сервера или тегами HTML.

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

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

Всегда только одна форма

У процесса использования форм есть один кардинальный недостаток: «всегда нужно» иметь два варианта одной формы.

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

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

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

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

Правила и методы работы с формой

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

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

Человеческий фактор - это первый критерий. Простота формы и ее обработки - второй существенный аспект. Уникальный код формы в одном экземпляре, рассчитанный на начальный ввод и на исправление допущенных ошибок - третий критерий.

Естественные данные и формальное описание

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

Чем массивнее форма HTML, тем сложнее ее создать, использовать и обработать на PHP. Трудоемкость порой зашкаливает при проектировании форм, а особенно при их изменении, тестировании и развитии.

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



Источник