Создание сайтов в Мариуполе, ДНР. Проверка формы с помощью PHP

 
 

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

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

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

Вы можете найти код этой статьи на GitHub.

HTML-форма

Первоначально загруженная форма

Давайте создадим HTML-форму. Цель бланка — фиктивная компания «Мир фруктов «провела фруктовый опрос своих клиентов. Форма фиксирует три вещи:

Данные пользователя (имя, адрес и адрес электронной почты)

Предпочтения пользователя в потреблении фруктов (количество фруктов, которые они съедают в день, и их любимые фрукты)

Если пользователь хочет получить бесплатную брошюру

Текстовые поля

Поля имени, адреса и электронной почты будут закодированы с помощью таких элементов labelи input:

 

 

 

 

 

 

 

 

 

 

 

 

Элементы ввода HTML имеют несколько атрибутов. Параметр определяет typeих textкак однострочные поля ввода, принимающие текст. Атрибут nameиспользуется для указания имени поля и используется для доступа к элементу во время обработки PHP. Атрибут ID связывает ввод с соответствующей меткой (через forатрибут метки), что делает форму более доступной.

Радио-кнопки

Радиокнопка хранит, сколько фруктов пользователь съедает в день.

 

0

 

 

1

 

 

2

 

 

More than 2

 

Параметр typeдля radioотображает ввод в виде переключателя. Обратите внимание, что каждой кнопке присвоено одно и то же имя. Это рассматривает переключатели как группу, позволяя пользователю выбрать 0, 1 или 2. valueАтрибут различается для каждой кнопки, предоставляя разные значения, из которых пользователь может выбирать. Поскольку здесь входные данные заключены в метки, атрибуты forи idне нужны.

Выберите список

Элемент select хранит выбранные пользователем любимые фрукты:

 

 

 

 

Атрибут nameпредставляет собой массив (определяемый квадратными скобками после имени), поскольку допускается множественный выбор (благодаря наличию multipleатрибута). Без multipleатрибута можно было бы выбрать только один вариант.

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

Флажок

 

 

 

 

Элемент флажка используется, чтобы позволить пользователю выбрать, нужна ли ему брошюра или нет. Его значение будет установлено на «Да», если флажок установлен. В противном случае для него фактически будет установлено значение «Нет».

Кнопка отправки

 

 

 

 

И последнее, но не менее важное — это кнопка «Отправить «. Значение его valueэлемента отображается как текст кнопки. Нажав на нее, вы отправите форму.

Элемент формы

<form method="POST"

action="

Далее идет formэлемент. Хотя HTML-формы поддерживают ряд атрибутов, необходимо установить только два атрибута: actionи method. methodопределяет способ отправки содержимого формы. actionопределяет, куда отправляется содержимое формы при отправке формы.

Значение actionозначает POST, что содержимое формы отправляется как часть тела HTTP-запроса. Значения можно получить в PHP через $_POSTsuperglobal. Альтернативой этому POSTявляется GET, который передает значения формы как часть URL-адреса. Значения, отправленные с помощью GET, можно получить в PHP через метод $_GETsuperglobal.

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

В приведенном выше примере actionустанавливается в результате передачи значения $_SERVER[«PHP_SELF"], которое является именем текущего исполняемого скрипта, в htmlspecialchars () метод PHP. Этот метод используется для преобразования определенных символов HTML в имена их объектов HTML. например, >будет преобразован в >.

Это делает две вещи:

Это предотвращает поломку формы, если пользователь отправляет HTML-разметку.

Это средство защиты от атак XSS (Cross-Site Scripting), которые злоумышленники будут использовать, чтобы попытаться использовать уязвимости в веб-приложениях. Чтобы узнать о других распространенных уязвимостях, ознакомьтесь с OWASP Top 10.

Примечание: в реальном приложении вы, вероятно, будете использовать не htmlspecialcharsтолько очистку ввода формы, например, стороннюю библиотеку, например laminas-filter.

Использование $_SERVER["PHP_SELF"]предпочтительнее простого жесткого кодирования местоположения, если вы хотите, чтобы ваша форма отправлялась обратно в тот же скрипт, который ее сгенерировал, поскольку вам не придется обновлять код, если вы измените имя скрипта.

Прежде чем мы закончим обсуждение форм, вот три вещи, которые следует помнить при работе с HTML-формами:

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

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

Для дополнительной доступности стоит изучить fieldsetэлемент для группировки элементов формы.

Обработка формы

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

Пустая форма загружается при первой загрузке страницы.

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

Проверка содержимого формы

При отправке формы следующие записи будут сохранены в $_POSTмассиве (или $_GETмассиве в зависимости от methodатрибута формы). Значения в левом столбце берутся из nameатрибута элемента управления, и я также отметил, является ли поле обязательным для целей проверки.

Поле Тип Обязательный или необязательный

название однозначная переменная обязательное

адрес однозначная переменная обязательное

Эл. адрес однозначная переменная обязательное

сколько однозначная переменная обязательный — необходимо выбрать один

избранноеФрукты множество обязательный — необходимо выбрать один

брошюра однозначная переменная необязательный

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

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

не являются ли определенные поля длиннее определенной длины

Соответствует ли адрес электронной почты спецификации адреса электронной почты

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

Для этого вы, скорее всего, воспользуетесь сторонней библиотекой, такой как laminas-validator или компонент проверки Symfony

. Однако это выходит за рамки данной статьи.

Давайте посмотрим на PHP, необходимый для проверки формы, которая размещается в верхней части страницы перед HTML для формы:

<? php

$errors = [];

$fields = ['name’, 'address’, 'email’, 'howMany’, 'favoriteFruit’, 'brochure’];

$optionalFields = ['brochure’];

$values = [];

if ($_SERVER["REQUEST_METHOD»] == «POST») {

foreach ($fields as $field) {

if (empty ($_POST[$field]) &&! in_array ($field, $optionalFields)) {

$errors[] = $field;

} else {

$values[$field] = $_POST[$field];

}

}

Код инициализирует три массива:

$errors: изначально пусто, здесь хранятся поля формы, которые не прошли проверку

$fields: здесь хранятся все имена полей для обработки

$optionalFields: здесь хранятся необязательные имена полей.

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

После этого он проверяет, был ли установлен метод, используемый для отправки формы POST. Если это так, он перебирает значения в массиве и проверяет, $_POSTсодержит ли суперглобальный объект соответствующее имя поля. Если это так, и поле имеет значение, поле и его значение сохраняются в $valuesмассиве. Однако если поле пусто и его нет в $optionalFieldsмассиве, оно добавляется в $errorsмассив.

В этом примере мы проверяем $_POSTмассив, потому что для метода формы задано значение POST. Если methodбыло установлено значение GET, код будет обновлен для проверки $_GETсуперглобального значения.

После проверки отправки на наличие ошибок код довольно примитивным образом выводит значения, отправленные пользователем, если ошибок не было зафиксировано:

if (empty ($errors)) {

foreach ($fields as $field) {

if ($field === «favoriteFruit») {

printf («%s:%s
», $field, var_export ($_POST[$field], TRUE));

} else {

printf («%s:%s
», $field, $_POST[$field]) ;

}

};

exit;

}

}

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

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

<input type="text"

name="name"

value="">

htmlspecialchars () используется здесь по той же причине, что и ранее PHP_SELF— для защиты от XSS-атак. Затем после поля ввода будет добавлен следующий HTML-код для отображения сообщения об ошибке, если значение не было указано:

<? php if (in_array ('name’, $errors)):? >

Missing

<? php endif;? >

Форма отправлена, но с ошибками

Использование класса errorобеспечивает хук для стилизации сообщения об ошибке с помощью CSS:

.error {

color: #FF0000;

}

Расширение юзабилити формы

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

<input type="radio" name="howMany"

<? php if (isset ($howMany) && $howMany == «zero») echo «checked»;? >

value="zero"> 0

<input type="radio" name="howMany"

<? php if (isset ($howMany) && $howMany == «one») echo «checked»;? >

value="one"> 1

<input type="radio" name="howMany"

<? php if (isset ($howMany) && $howMany == «two») echo «checked»;? >

value="two"> 2

<input type="radio" name="howMany"

<? php if (isset ($howMany) && $howMany == «twoplus») echo «checked»;? >

value="twoplus"> More than 2

Добавлен код для проверки того, определена ли переменная, связанная с переключателем, в разделе проверки. Если это так, checkedвыводится как часть HTML элемента.

Теперь обратимся к меню выбора. На самом деле лучше реструктурировать код как цикл, чем слепо добавлять код для проверки каждого параметра вручную. Цикл может генерировать HTML для опций на лету, и в него может быть включена проверка того, выбрана ли опция или нет:

Если вы еще не знакомы с циклами PHP, вы можете прочитать статью «Learning Loops «.

Обратите внимание, что разница здесь заключается в использовании атрибута selected: используются радиокнопки checked, а selectиспользуются опции selected. Это всего лишь одно из тех незначительных несоответствий, с которыми нам приходится жить.

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

форма отправлена ​​пользователем

введенные пользователем данные не содержат ошибок

Резюме

Проверка необходима, особенно если вы собираетесь сохранять отправленные данные в базе данных или в каком-либо другом постоянном хранилище. При проверке стоит помнить старую поговорку GIGO (Мусор на входе, мусор на выходе), и вы не ошибетесь.

Из этой статьи вы узнали четыре вещи:

как создать базовую форму HTML

как проверить форму с помощью PHP

как повторно отобразить ввод пользователя

как отображать сообщения об ошибках

3D-печать5GABC-анализAndroidAppleAppStoreAsusCall-центрChatGPTCRMDellDNSDrupalExcelFacebookFMCGGoogleHuaweiInstagramiPhoneLinkedInLinuxMagentoMicrosoftNvidiaOpenCartPlayStationPOS материалPPC-специалистRuTubeSamsungSEO-услугиSMMSnapchatSonyStarlinkTikTokTwitterUbuntuUp-saleViasatVPNWhatsAppWindowsWordPressXiaomiYouTubeZoomАвдеевкаАктивные продажиАкцияАлександровск ЛНРАлмазнаяАлчевскАмвросиевкаАнализ конкурентовАнализ продажАнтимерчандайзингАнтрацитАртемовскАртемовск ЛНРАссортиментная политикаБелгородБелицкоеБелозерскоеБердянскБизнес-идеи (стартапы)БрендБрянкаБукингВахрушевоВендорВидеоВикипедияВирусная рекламаВирусный маркетингВладивостокВнутренние продажиВнутренний маркетингВолгоградВолновахаВоронежГорловкаГорнякГорскоеДебальцевоДебиторкаДебиторская задолженностьДезинтермедитацияДзержинскДивизионная система управленияДизайнДимитровДирект-маркетингДисконтДистрибьюторДистрибьюцияДобропольеДокучаевскДоменДружковкаЕкатеринбургЕнакиевоЖдановкаЗапорожьеЗимогорьеЗолотоеЗоринскЗугрэсИжевскИловайскИрминоКазаньКалининградКировскКировскоеКомсомольскоеКонстантиновкаКонтент-маркетингКонтент-планКопирайтингКраматорскКрасноармейскКрасногоровкаКраснодарКраснодонКраснопартизанскКрасный ЛиманКрасный ЛучКременнаяКураховоКурскЛисичанскЛуганскЛутугиноМакеевкаМариупольМаркетингМаркетинговая информацияМаркетинговые исследованияМаркетинговый каналМаркетинг услугМаркетологМарьинкаМедиаМелекиноМелитопольМенеджментМерчандайзерМерчандайзингМиусинскМолодогвардейскМоскваМоспиноНижний НовгородНиколаевНиколаевкаНишевой маркетингНовоазовскНовогродовкаНоводружескНовосибирскНумерическая дистрибьюцияОдессаОмскОтдел маркетингаПартизанский маркетингПервомайскПеревальскПетровскоеПлата за кликПоисковая оптимизацияПопаснаяПравило ПаретоПривольеПрогнозирование продажПродвижение сайтов в ДонецкеПроизводство видеоПромоПромоушнПрямой маркетингРабота для маркетологаРабота для студентаРазработка приложенийРаспродажаРегиональные продажиРекламаРеклама на асфальтеРемаркетингРетро-бонусРибейтРитейлРовенькиРодинскоеРостов-на-ДонуРубежноеСамараСанкт-ПетербургСаратовСватовоСвердловскСветлодарскСвятогорскСевастопольСеверодонецкСеверскСедовоСейлз промоушнСелидовоСимферопольСинергияСколковоСлавянскСнежноеСоздание сайтов в ДонецкеСоледарСоциальные сетиСочиСтаробельскСтаробешевоСтахановСтимулирование сбытаСуходольскСчастьеТелемаркетингТельмановоТираспольТорговый представительТорезТрейд маркетингТрейд промоушнТюменьУглегорскУгледарУкраинскХабаровскХарцызскХерсонХостингЦелевая аудиторияЦифровой маркетингЧасов ЯрЧелябинскШахтерскЮжно-СахалинскЮнокоммунаровскЯндексЯсиноватая