- •Технология организации баз данных и знаний
- •Методические указания к выполнению лабораторных работ
- •Методические указания к выполнению лабораторных работ
- •Предисловие
- •Библиографический список
- •Лабораторная работа № 1 Тема №1. ИнсталляцияMySqLи создание локального сервера
- •1. Цель работы
- •2. Основные технические возможности
- •3. Описание установки
- •4. Порядок выполнения работы
- •5. Содержание отчета
- •Лабораторная работа № 1
- •6. Содержание отчета
- •Лабораторная работа № 2 Тема №1. Создание баз и таблиц данных
- •1. Цель работы
- •2. Основные сведения
- •3. Программа работы
- •4. Указания к выполнению работы
- •3. Программа работы
- •00 Проверка моего домена с именем Moy.Loc
- •4. Указания к выполнению работы
- •5. Содержание отчета
- •3. Указания к выполнению работы
- •Задание 2: Разработать html-форму с методом Post
- •Тема №2. Передача значений переменным в сценариях php. Использование возможностей метода get без html-формы для передачи значений переменных в сценариях php
- •Тема №3. Создание формы и рнр-сценария в одном файле
- •Задание 1: Получение данных из текстового поля
- •I курсив
- •Тема №4. Использование чисел. Управляющие структуры
- •Тема №5. Использование управляющей структурыswitch
- •Тема № 6. Использование регулярных выражений в сценариях рнр
- •Проверка ошибок
- •Задание 1. Вывод информации о ошибочно заполненных полях формы
- •Задание 2. Использование функций пользователя для контроля полей формы
- •Задание 3. Проверка ограничений в текстовом поле.Lab6_0_2.Php
- •Задание 4. Специфика имени пользователя. Lab6_0_3.Php
- •Задание 5. Специфика имени пользователя с помощью JavaScript. Lab6_0_4.Php
- •Тема №7. Работа с массивами
- •Задание 1. Означивание массива и вывод на экран. Lab7_0.Php.
- •Задание 4. Сортировка массива.Lab7_3.Php.
- •Тема №8. Функции в сценариях рнр
- •Задание 1. Вложенные функции.Lab8_0_0.Php
- •Задание 2. Объявление функций внутри других функций.Lab8_0.Php
- •Задание 3. Возврат значений функцией.Lab8_1.Php
- •Задание 4. Возврат нескольких значений функцией.Lab8_2.Php
- •Задание 5. Возвращение функцией нескольких величин.Lab8_3.Php
- •Задание 6. Рекурсивные функции .Lab8_4.Php
- •Задание 7. Функции-переменные.Lab8_5.Php
- •Задание 8. Построение библиотек функций.Lab8_6_0.Php.
- •Задание 9. Построение шаблона сайта.Lab8_7_0.Php.
- •Тема №9. Использование файлов для хранения данных в сценариях рнр
- •Создание сценария загрузки.
- •Задание 3. Сохранение пользовательских данных в текстовом файлеLab9_5.Php
- •Задание 4. Сохранение пользовательских данных в текстовом файлеLab9_6_0.Php
- •Тема № 10. Работа с каталогами в сценариях рнр
- •Тема №11. Создание панели управления файлами
- •Задание 1. Разработать форму и сопутствующее ей приложение для панели управления файлами.
- •Тема № 12.Работа с базой через монтторMySql и PhpMyAdmin
- •Задание 1. Создать базу данных через командную строку
- •Задание 3. Вставка данных в базу данных
- •Задание 4. Создание командных файлов и файлов сценариев для вставки данных в базу данных.
- •Тема № 13. Извлечение данных из базы данных
- •Задание 1. Оператор выборки данныхSelect
- •Задание 2. Извлечение данных по определенному критерию
- •Задание 3. Извлечение данных из нескольких таблиц
- •Задание 4. Поиск несоответствующих строк
- •Задание 5. Использование псевдонимов имен таблиц (as)
- •Задание 6. Извлечение данных в определенном порядке
- •Задание 7. Группировка и агрегирование данных
- •Задание 8. Обновление записей в базе данных (update)
- •Задание 10. Удаление записей, таблиц и базы данных (delete)
- •Тема № 14.Php и MySql. Доступ к базе данных MySql из Web с помощью рнр
- •Задание 1. Изучение работы архитектуры Web-баз данных
- •Задание 2. Проверка и фильтрация данных, исходящих от пользователя. Использование объектно-ориентированного синтаксисаPhp
- •Задание 3. Внесение новой информации в базу данных. Проверка и фильтрация данных, исходящих от администратора
- •Задание 4. Создание и удаление баз данных
- •Содержание
Тема № 6. Использование регулярных выражений в сценариях рнр
Цель работы: Получение практических навыков в использовании регулярных выражений при обработке форм.
До настоящего момента предполагалось, что пользователь всегда вводит правильные данные и не действует злонамеренно. В данной теме мы усовершенствуем рассмотренные примеры и организуем проверку целостности данных форм. Проверка ошибок не только обеспечивает удаление неполной и неправильной информации, но и обеспечивает более эффективный и удобный интерфейс.
Проверка ошибок
Обработка пользовательских данных дает осмысленный результат лишь в том случае, если данные имеют правильную структуру. Проверить достоверность введенных данных невозможно, однако вы можете проверить их целостность (например, убедиться в том, что адрес электронной почты соответствует стандартному шаблону). Поскольку код PHP выполняется на стороне сервера, вы всегда можете быть уверены в том, что проверка данных формы даст нужный результат (конечно, при условии правильности вашей программы).
При обнаружении ошибки в данных необходимо сообщить об этом пользователю и предложить внести исправления. Существует несколько возможных решений, в том числе простой вывод сообщения об ошибке и предложение альтернативных вариантов (например, если пользователь выбирает имя, которое уже было выбрано другим пользователем). В этом разделе рассматривается процедура проверки и вывода сообщений,
Задание 1. Вывод информации о ошибочно заполненных полях формы
Мы последовательно проверяем все поля формы и убеждаемся в том, что они не остались пустыми. Там, где это возможно, проверяется правильность структуры введенных данных. Если проверка прошла успешно, мы переходим к следующему полю; в противном случае программа выводит сообщение об ошибке, устанавливает флаг, который позднее используется для повторного отображения формы, и переходит к следующему полю. Процедура повторяется до тех пор, пока не будут проверены все поля формы (рис. 3.41, файл Lab6_0.php).
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />
<title></title>
</head>
<body bgcolor="#ffffff" text="#000000" link="#cbda74"
vlink="#808040" alink="#808040">
<? PHP
$name = $_POST['name']; //$name=$_REQUEST['name'];
$seenform=$_POST['seenform'];
$email=$_POST['email'];
// Создать форму
$form = "
<form action=\"Lab6_0.php\" method=\"post\">
<input type=\"hidden\" name=\"seenform\" value=\"z\">
<b>Введите информацию</b><br>
Ваше имя:<br>
<input type=\"text\" name=\"name\" size=\"20\" maxlength=\"20\" value=\"$name\"><br>
Ваш Email:<br>
<input type=\"text\" name=\"email\" size=\"20\" maxlength=\"40\" value=\"$email\"><br>
<input type=\"submit\" value=\"Отправить\">
<br>Lab6_0.php. Обработка ошибок при вводе
<br>неправильного Email производится в этом же файле
</form>";
if ($seenform != "z"): // Заполнялась ли форма ранее?
print "$form"; //echo " Первая прорисовка формы";
else:
// Пользователь заполнил форму. Проверить введенные данные.
//echo " form нарисована $name";
$error_flag = "n"; //признак что ошибок нет
if ($name == ""):
// Убедиться в том, что поле имени содержит информацию
print "<font color=\"red\"> Вы забыли ввести Ваше имя </font><br>";
$error_flag = "y";//признак наличия ошибоки
endif;
// Убедиться в том. что поле адреса содержит информацию
if ($email == ""):
$error_flag = "y";
print "<font color=\"red\">Укажите правильный email address! Он не должен быть пустым.</font><br>";
else:
//Преобразовать все алфавитные символы в адресе электронной почты
//к нижнему регистру
$email = strtolower(trim($email));
endif;
if(!empty($_POST['email']))
{
// Убедиться в правильности синтаксиса адреса электронной почты
//Будем считать, что стандартный адрес электронной почты выглядит так:
// admin@mail.ru
//Адрес состоит из двух частей это:
// admin - имя пользователя.
// mail.ru - домен, доменное имя.
//Их разделяет знак @(собака).
//Имя пользователя - может состоять из букв разного регистра,
//цифр, знаков подчёркивания, точек, минусов.
//Доменное имя - так же может состоять из букв разного
//регистра, цифр, знаков подчёркивания, точек, минусов.
if(preg_match("|^[0-9a-z_]+@[0-9a-z_^\.]+\.[a-z]{2,6}$|i", $_POST['email'])):
echo $_POST['email']. " Email - Правильный.";
$error_flag = "n";
else:
$error_flag = "y";
echo $_POST['email']. " Email - НЕправильный.";
print "<font color=\"red\"> Пример правильного возможного email: admin@mail.ru</font><br>";
endif;
}
else
{ echo "Вы не ввели email."; }
if ($error_flag == "y"):
// Если флаг ошибки $error_flag установлен, то заново отобразить форму.
print "$form";
else: // Обработать данные пользователя
print "<br>Данные введены правильно";
endif;
endif;
?>
</body>
</html>
Рис. 3.41. Проверка данных формы и вывод сообщений об ошибках. Lab6_0.php.
На экране форма будет представлена в виде (рис. 3.42).
Рис. 3.42. Форма ввода для листинга приведенного на рис. 3.41.
Программа в листинге 3.38 убеждается в том, что поля имени и адреса электронной почты не остались пустыми, а также проверяет правильность синтаксиса введенного адреса. Если в результате каких-либо проверок в форме обнаруживаются ошибки, программа выводит соответствующие сообщения и отображает форму заново -- при этом вся введенная ранее информация остается в форме, благодаря чему пользователю будет проще внести исправления.
Отметим, что в функцию preg_match передаются два параметра – шаблон, которому должен соответствовать email адрес и собственно сам адрес, введенный пользователем $_POST['email']
if(preg_match("|^[0-9a-z_]+@[0-9a-z_^\.]+\.[a-z]{2,6}$|i", $_POST['email']))
Шаблон , с которым функция preg_match будет сравнивать email адрес, может выглядеть так:
1. "[0-9a-z_]+@[0-9a-z_^\.]+" - это часть паттерна (шаблона), проверяющая имя пользователя, собаку и домен второго уровня до точки.
2. "\.[a-z]{2,6}" - эта часть проверяет домен первого уровня (ru,com,ua и т.д.).
Объединим всё и получим такой шаблон:
"|[0-9a-z_]+@[0-9a-z_^\.]+\.[a-z]{2,6}|i"
В конце шаблона присутствует модификатор i он сообщает интерпретатору, что поиск проводится без учёта регистра, т.е. могут присутствовать и заглавные буквы и прописные.
Как известно, у адреса две составляющие - имя пользователя и имя домена, которые разделены знаком @. Для проверки разделителя между именем пользователя и именем домена в шаблоне (регулярном выражении) указано +@.
На рис. 3.43 приведен пример вывода сообщения об ошибочных действиях пользователя при заполнении формы на рис. 3.42.
Рис. 3.43. Заполненная форма ввода для листинга приведенного на рис. 3.41.
Подчеркнем, что в первой половине e-mail адреса могут присутствовать только цифры, латинские буквы, точка, тире и знак подчёркивания, причем начианаться адрес должен с буквы. В домене могут быть только цифры, латинские буквы, тире и точки.
Также не забывайте, что электронный ящик может находиться на поддомене xxx@xxx.xxx.com, или даже на домене четвертого, пятого уровня (как вариант, реально эта ситуация крайне редка, но отбрасывать эти адреса не стоит). Поэтому в регулярном выражении не забывайте использовать точку (экранированную "\.") для указания того, что часть адреса после "@" может содержать точку как разделитель доменных имен.
Для проверки доменного имени первого уровня учитываем, что его длина уже составляет не только 2 символа (.ru) или 3 символа (.com), но и 4 символа - .info, и даже 6 символов. Поэтому в шаблоне присутствует выражение:
"\.[a-z]{2,6}$/i"
Проверка осуществляется по этому шаблону с применением функции preg_match():
- Функция bool preg_match( string $expr, string $str [,list &$pockets] ) сопоставляет выражение $expr в строке $str.