проверка поля имя при регистрации php
Проверка (валидация) форм PHP
В этой главе будет показано, как обрабатывать формы PHP с учетом требований безопасности. Правильная валидация данных формы важна для её защиты от хакеров и спамеров!
Что такое валидация?
Валидация означает проверку данных, вводимых пользователем. В PHP доступны два типа проверки:
Валидация на стороне клиента — проверка выполняется на стороне клиента в веб-браузере.
Валидация на стороне сервера — после отправки данных на сервер их проверка осуществляется на серверной стороне.
Ниже приведена HTML-форма, которая содержит различные поля ввода: обязательные (required) и необязательные текстовые поля, переключатели (радио-кнопки) и кнопку отправки (submit). С этой формой мы будем с вами работать в этой главе. Попробуйте ввести данные:
Некоторые из правил проверки нашей формы:
Поле формы | Правила валидации |
---|---|
Имя | Обязатеьно для заполнения + Должно содержать только буквы и пробелы |
Обязатеьно для заполнения + Требуются символ собачка (@) и точка (.) | |
Веб-сайт | Необязательно для заполнения. Проверяется наличие валидного URL |
Комментарий | Необязательно для заполнения. Многострочное поле ввода (текстовое поле) |
Образование | Обязатеьно для заполнения + Должна быть выбрана хотя бы одна кнопка |
Текстовые поля
Поля для ввода имени, адреса электронной почты и веб-сайта создается с помощью элемента (от англ. input — ввод) с атрибутом type=»text», а поле для комментария применяется элемент
Радио-кнопки
В нашей форме выбор образования осуществляется с помощью элементов типа radio (переключатели), которые используют принцип логического «ИЛИ», позволяя выбрать только одно из нескольких значений: если вы выбираете одно положение, то все остальные становятся неактивными:
Элемент формы (form)
Главным для элемента является атрибут action, который указывает обработчик данных для формы. Обработчик данных — это файл, описывающий, что нужно делать с данными формы. Данные формы отправляются с помощью method = «post»:
$_SERVER [«PHP_SELF»] — это суперглобальная переменная, которая возвращает имя файла текущего выполняемого скрипта-обработчика.
Функция htmlspecialchars() преобразует данные, введенные пользователем, которые могут содержать нежелательные HTML-тэги. Производятся следующие преобразования:
‘&’ (амперсанд) преобразуется в ‘&’
‘ ‘ (знак «больше чем») преобразуется в ‘>’
Эти манипуляции предотвращает использование злоумышленниками кода путем внедрения скрипта (атаки с межсайтовым скриптингом) в формы.
Примечание о безопасности форм PHP
Если Вы используете на странице сайта PHP_SELF, то пользователь может ввести в адресной строке косую черту (/), а затем выполнить несколько команд межсайтового скриптинга (XSS).
Примечание: XSS (англ. Cross-Site Scripting — «межсайтовый скриптинг») — тип атаки на веб-системы, заключающийся во внедрении в выдаваемую веб-системой страницу вредоносного кода (который будет выполнен на компьютере пользователя при открытии им этой страницы) и взаимодействии этого кода с веб-сервером злоумышленника. XSS позволяет злоумышленникам внедрять клиентские скрипты в веб-страницы, просматриваемые другими пользователями..
Предположим, у нас есть следующая форма на странице с именем «send_form.php»:
Теперь, если пользователь вводит обычный URL-адрес в адресной строке, например «http://site_name.com/send_form.php», приведенный выше код будет преобразован в:
Теперь пользователь вводит URL-адрес в адресной строке и после косой черты несколько команд межсайтового скриптинга:
После таких манипуляция приведенный выше код будет переведен на:
PHP Формы — Проверка имени, E-mail и URL
В данной статье, мы рассмотрим возможности PHP проверить, корректно ли в форме указан адрес электронной почты (email), имя пользователя и URL-адрес.
Проверка валидности имени на PHP
Но что если нужно, чтобы имя было ТОЛЬКО на латинице или ТОЛЬКО на кирилице и ограничить длину до 30 символов? Например, для полных имён типа «Максим Максимов-Суханов» или «Maxim Maximov-Sukhanov», естественно только на одном из языков регулярное выражение примет следующий вид (бонусом можно писать украинские имена):
или более строгий вариант выражения без прочих символов и в котором первая буква строки должна быть в верхнем регистре, а все остальные в нижнем:
Примечание: Не забывайте про букву «Ё», которая не входит в диапазон «А-Я» и её нужно указывать отдельно!
Проверка правильности email на PHP
Как известно email состоит из двух основных частей — username@hostname. Локальная часть email-адреса — это то, что перед знаком «@»(ASCII-код 64), а часть после знака — это домен получателя. Локальная часть может иметь длину до 64 символов, а имя домена может содержать не более 253 символов.
Реализуем проверку email разложив её на сосотавляющие, алгоритм которых следует предписаниям стандарта RFC 2822:
Данная регулярка удобна тем, что шаблоны для разных частей формата email-адреса объявляются отдельно. Валидацию пройдут email не только с буквенными именами почтового домена, но и почтовым сервером, представленным в виде ip адреса.
Главный минус этой регулярного выражения в том, что его нужно постоянно корректировать в соответствие изменениям в названиях email-адресов. Например, домены с русскими именами в зоне «.рф» регулярка выше уже не пропустит.
Рекомендуем использовать именно этот способ проверки email-адреса, так как сегодня и в будущем вы будете уверены, что она работает как нужно. Разработчики языка PHP сами внесут нужные корректировки в новых версиях.
Проверка URL-адреса в PHP
Проверка имени, email и URL-адреса в PHP
Объединим все рассмотренные выше все проверки полей ввода в одной форме и напишем следующий код:
Пример
Вы можете попытаться ввести корректные и некорректные данные в представленной выше форме и посмотреть работу, написанного в этом уроке, сценария PHP.
В следующем уроке мы выведем введенные пользователем данные на экран.
php регистрация пользователей, проверка уникальности значений
Делаю регистрацию пользователя для своего сайта, php учу не так давно.
Это функция у меня в отельном файле я ей передаю только значения.
В БД поля логин и mail уникальные, и на сайте я хочу оповещать пользователя о том что если он ввел не уникальное значение, то что именно ему надо исправить логин или mail, подскажите как это можно сделать, у меня был вариант с разбитием запроса на части и потом смотреть что вернет query для каких данных.
Если у кого есть примеры из практики и код, как лучше сегодня делать регистрацию пользователей буду очень благодарен.
2 ответа 2
Чтобы проверить существование пользователя, надо выполнить обычный SELECT запрос. Поэтому сначала научимся как выполнять SELECT запрос правильно.
Чтобы выполнить SELECT запрос с использованием переменных, надо сделать следующее:
В итоге получится такой код:
при таком способе у нас никогда не будет ошибок синтаксиса, не говоря уже об sql инъекциях.
То же самое касается и регистрации пользователя, или выполнения запроса INSERT:
Кроме того, пароль никогда не пишется в БД в открытом виде. Пароль надо хэшировать. Чтобы даже если у нас и угонят БД, то пароли все равно остались неизвестными.
Кроме того, соединяться с БД надо только один раз, и в дальнейшем везде использовать одну и ту же переменную с созданным соединением. Сначала смотрим как правильно подключаться к mysqli
В итоге твой код может выглядеть так:
И дальше же используем эти функции.
Получаем и проверяем данные из формы в PHP
Здравствуйте, уважаемый посетитель!
В предыдущих статьях мы подготовили форму оформления заказа используя инструменты проверки корректности ввода данных на стороне клиента. Для этого сначала использовали встроенные возможности HTML5, а затем для проверки ввода пароля дополнительно создали скрипты JavaScript.
Таким образом мы обеспечили проверку ввода данных без перегрузки страницы и, соответственно, без лишней потери времени для пользователя. А кроме того обеспечили блокировку отправки формы в случае наличия каких либо ошибок.
Однако, только одной такой проверки на стороне клиента будет недостаточно. Требуется также выполнять валидацию формы и на стороне сервера. Это обусловлено в первую очередь соображениями безопасности от действий злоумышленников.
Ведь при желании совсем несложно изменить в браузере загруженный HTML-код веб-страницы сайта с целью отключения в нем проверки данных в форме, предусмотренные языком описания структуры веб-страниц. В данном случае HTML5.
В случае же если на сайте для проверки формы на стороне клиента применены специально созданные скрипты, то не трудно в браузере отключить JavaScript и вводить в поля все, что заблагорассудится. Включая различные теги и другие запрещенные комбинации символов, которые могут нанести серьезный вред работе сайта.
Поэтому, для защиты сайтов от злоумышленников в части, касающейся вводимых данных в формы, и применяется их валидация на стороне сервера.
Существует большое количество разных вариантов проверок форм на серверной стороне. Достаточно для этого в поиске сделать соответствующий запрос. В нашем же случае мы создадим такой инструмент на PHP с использованием универсальной пользовательской функции. Что позволит существенно сократить объем используемого PHP-кода, необходимый для реализации требуемого алгоритма проверки.
Думаю, что представленный здесь вариант валидации формы на стороне сервера будет интересен пользователям. Тем более, что с помощью предложенной функции можно выполнять проверку и обработку данных форм различных вариантов. А при необходимости, можно ее дополнить и другими функциональными возможностями.
Получаем данные от элементов формы в PHP
PHP-код скрипта, предназначенного для получения данных из рассматриваемой нами формы онлайн заказа представлен в следующей таблице.
if (! empty ($_POST[ «righting-button» ])) <
Рис.1 PHP-код для получения данных из формы
Обусловлено это тем, что атрибут «value» в этих элементах также используется и для получения соответствующих значений через созданный ранее JavaScript-скрипт. В котором значения «value» для упрощения определены порядковой последовательностью чисел от 1 до 3.
На скриншоте видно, что выведенные на страницу данные из формы в PHP полностью соответствуют заполненным полям.
Рис.2 Отправка формы при неправильном вводе пароля
После того, как мы получили данные, теперь можно перейти и к решению вопроса валидации.
Создаем универсальную функцию проверки и обработки данных формы
При валидации на стороне сервера в нашем варианте будут предусмотрены следующие проверки и преобразования данных, полученных из формы:
Конечно, при наличии в форме незначительного количества полей, вышеуказанные преобразования можно выполнять отдельно для каждого элемента. В таком случае увеличением объема кода можно пренебречь.
А вот когда их существенное количество, например, в рассматриваемой нами формы онлайн заказа 13 полей, то применять преобразования отдельно для каждого элемента будет совсем нерационально. Ведь такой скрипт будет насыщен большим количеством однотипного кода.
Поэтому, как ранее было отмечено, для проверки данных в PHP при отправке формы на стороне сервера мы будем использовать отдельную функцию.
При таком построение инструмента валидации можно все преобразования сформировать в отдельном блоке, используя для этого пользовательскую функцию. Которая будет вызываться с заданными параметрами, определенными для каждого конкретного поля. Что позволит достаточно оптимально сформировать необходимый PHP-код.
Ниже показан вариант PHP-кода такой универсальной функции с именем «check_symbol», которая может быть использоваться для разных типов полей формы.
//—-Функция проверки и преобразования данных из формы—-
$value = stripslashes ($value);
$value = strip_tags ($value);
$value = htmlspecialchars ($value);
Рис.3 PHP-код универсальной функции валидации данных, полученных из формы
Как видно, в данной функции определено четыре параметра (поз.3) с помощью которых осуществляется передача значений аргументов, а именно:
Если же поле будет заполнено, то с помощью функций trim (поз.8), stripslashes (поз.9), strip_tags (поз.10) и htmlspecialchars (поз.11) поочередно будут выполнены вышеуказанные преобразования данных по удалению ненужных пробелов и символов.
Такая необходимость обусловлена тем, что полученное значение этой переменной будет в дальнейшем использоваться в работе скрипта, расположенного в другой области. И если бы в этой части функции использовать не глобальную, а локальную переменную, то для скрипта эти данные были бы просто не доступны.
Теперь, после того, как мы создали функцию, разместим ее код в отдельном файле с наименованием «functions.php», расположив его в отдельной папке, скажем под именем «php».
А для того, чтобы можно было обращаться к созданной функции, с помощью инструкции «require_once» подключим этот файл, аналогично тому, как мы это делали ранее при подключении функций для работы с базой данных MySQL.
Ниже показан соответствующий PHP-код, который необходимо добавить в начало шаблона главной страницы.
Рис.4 Подключение созданной функции
В итоге необходимая пользовательская функция создана и готова к использованию.
Выполняем валидацию формы на стороне сервера
Как ранее отмечалось, основное преимущество использования универсальной функции, это то, что для валидации данных, полученных из формы, достаточно ее только вызывать определяя для каждого поля заданные параметры.
В этом случае для проверки полей не нужно выполнять каких-либо отдельных преобразований, и соответственно, не потребуется значительного увеличения кода в ранее созданном скрипте, изображенном на рис.1. Так как для этого необходима будет всего лишь одна дополнительная строка для каждого поле.
В следующей таблице показан дополненный PHP-код скрипта, в котором добавлены соответствующие строки для всех имеющихся полей формы онлайн заказа (добавленные строки обозначены светлым фоном).
if (! empty ($_POST[ «righting-button» ])) <
Рис.5 PHP-код получения и валидации данных из формы
Здесь видно, что при вызове пользовательской функции «check_symbol» для каждого поля задаются определенные значения параметров.
Что касается регулярных выражений, то это достаточно обширная тема, достойная отдельного серьезного рассмотрения. Ранее при преобразовании входящих ЧПУ с помощью модуля MOD_REWRITE мы уже касались этого вопроса и использовали большинство включенных в данный скрипт символов регулярных выражений.
Поэтому не будем повторяться, дополнительно отметив лишь применение здесь модификаторов, таких как: «i» для игнорирования регистра, что позволяет указывать в шаблонах лишь только строчные или прописные буквы и «u», необходимый в данном случае для корректности проверки на соответствие букв на кириллице в кодировке UTF-8.
Кроме того, в данном коде PHP для выделения шаблона используются символы специального разделителя «/» (можно также «|», «<", "!" и т.п ), а начало и конец строки обозначены символами "^" и "\z", соответственно.
Ну, а если у кого возникнут какие-либо вопросы по составленным здесь регулярным выражениям, то можно их оставить в комментариях. Постараюсь на них ответить как можно подробнее.
Ранее отмечалось, что в нашем случае проверки и преобразования данных выполняются с помощью функции. Однако, есть исключение. Касается это проверки на идентичность введенных данных при подтверждении пароля.
Дело в том, что указанную проверку необходимо выполнить только один раз, а именно: определить, одинаковы ли данные в полях ввода пароля (первичный ввод и подтверждение). И наверное, будет не логично дополнять такой единичной проверкой алгоритм универсальной функции.
И последнее, на чем здесь необходимо остановиться, это как в случае возникновения каких-либо шибок при отправке формы осуществить вывод соответствующего сообщения в браузере.
И если эта переменная не пустая, то к ее значению добавляется шапка сообщения с текстом «Данные из формы не отправлены. Обнаружены следующие ошибки:» (поз.35). А кроме этого вызывается некий файл «alert.php» (на данный момент такого файла не существует, его нужно создать).
Здесь следует сделать некоторые пояснения. Дело в том, что PHP серверный язык, а вывод на экран пользователя предупреждающего диалогового окна выполняется с использованием клиентского языка JavaScript. Поэтому мы не можем непосредственно при выполнении PHP-скрипта браузеру послать сообщение.
А для того, чтобы решить эту проблему мы перенесем данные о сообщении из PHP в JavaScript. Для этого создадим в корневом каталоге отдельный файл с именем «alert.php» и запишем в него следующий код:
Рис.6 Формирование вывода сообщения в диалоговом окне браузера из переменной PHP
В итоге мы создали на стороне сервера инструмент, с помощью которого при отправке формы данные сначала сохраняются в соответствующих переменных PHP, а затем преобразуются с удалением ненужных символов и проверяются на соответствие заданным критериям заполнения полей. Осталось это только проверить.
Проверяем валидацию на практических примерах
Чтобы иметь возможность практически проверить, работает ли валидация данных из формы на стороне сервера, необходимо на время отключить ранее предусмотренные нами проверки на стороне клиента с использованием встроенных возможностей языка HTML5 и созданных скриптов JavaScript.
Для этого нужно временно удалить в элементах формы все имеющиеся атрибуты «required», определяющие обязательность заполнения полей и «pattern», задающие шаблон соответствия регулярному выражению. А также удалить из тега
Другие статьи сборника «Самописный сайт своими руками»
Валидация полей формы на PHP
Привет, друг. Помимо того, что можно делать проверки полей формы на JavaScript, необходимо так же делать валидацию на стороне сервера и сейчас мы с вами рассмотрим пример валидации на PHP. Проверять будет такие поля, как номер телефона, email, IP адрес, адрес сайта и др. Всего полей будет 7.
Принцип действия такой: Мы делаем проверку для поля через специальные условия и если данные, введенные в это поле не проходят валидацию то под этим полем будем выводить сообщение об ошибке. И так под каждым полем. В случае, когда будут провалидированы все поля, мы отправляем форму с ее очисткой и выводим сообщение об успешной отправке. Саму форму можно посмотреть на демо странице:
Форму я сделал на Bootstrap и выглядит она так:
С 1 по 7 стр. | Функция очистки данных |
С 9 по 15 стр. | Принимаем данные из формы прогоняя их через функцию |
17 стр. | Регулярное выражение для номера телефона в формате РФ |
19 стр. | Регулярное выражение для имени (только рус.) |
20 стр. | Определяем переменную, как массив ошибок |
21 стр. | Специальный флаг. Присвоим ему значение — 0 |
23 стр. | Проверка, если данные пришли методом POST |
С 24 по 27 стр. | Проверка на соответствие регулярному выражению ($name) |
С 28 по 31 стр. | Если поле пустое или больше 10 символов — выводим ошибку |
С 32 по 35 стр. | Фильтр проверки данных на целое число и длину строки | 36 стр. | Проверка поля на пустоту (в коде повторяется) |
С 40 по 43 стр. | Проверка на соответствие регулярному выражению ($phone) |
С 48 по 51 стр. | Фильтр валидации Email |
С 56 по 59 стр. | Фильтр валидации IP |
С 64 по 67 стр. | Фильтр валидации URL |
С 76 по 78 стр. | Если валидация пройдена |
Если валидация всех полей будет пройдена, об этом нам скажет специальный флаг, которому мы в начале установили ноль, то перезагрузим страницу с очисткой формы и добавим к адресу GET-параметр mes и присвоим ему значение success. То есть если 0 — валидация пройдена, если 1 — есть ошибки. И в самом конце с 80 по 82 стр. проверяем, если такой параметр существует, то выводим сообщение об успешной отправке данных. Это один из примеров валидации на PHP и он не единственный верный, но как рабочий вариант вполне пригоден для использования. Через JS и Ajax валидация будет немного по-другому реализована, но общий принцип останется таким же.
Надеюсь, что теперь у вас не возникнет трудностей с валидацией форм на PHP. Пишите ваши комментрии по данной теме.
Читайте также:
День добрый!
А как сделать отправку на сервер кода каждой нажатой клавиши, сразу после её нажатия. Обработка будет проходить на сервере.
Через JS получить код клавиш и отправить методом Ajax.