- •Технология организации баз данных и знаний
- •Методические указания к выполнению лабораторных работ
- •Методические указания к выполнению лабораторных работ
- •Предисловие
- •Библиографический список
- •Лабораторная работа № 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. Создание и удаление баз данных
- •Содержание
Задание 4. Специфика имени пользователя. Lab6_0_3.Php
В 80% случаев вышеприведенная задача усложняется на практике, надо либо расширить набор символов, что делается простым добавлением символов в символьный класс, либо ужесточаются условия. Например, ставится условие, что имя пользователя может состоять как из букв латинского алфавита, так и из цифр, но первый символ имени пользователя должен быть обязательно буквой латинского алфавита!
Дописываем регулярное выражение: ^[a-zA-Z][a-zA-Z0-9]*$
Как известно, символьный класс описывает только один символ. Наша задача как раз в том и состоит, чтобы описать один символ (первый): [a-zA-Z] тут два интервала, описывают первый символ и дают понять, что никаких цифр в первом символе проверяемой строки быть не может.
В предыдущем примере явно следовало, что регистрационное имя пользователя должно быть длинной минимум в один символ. Мы уже описали первый символ строки, но он может быть и единственным, после него может быть сколько угодно символов, либо может их вообще не быть, но регулярное выражение совпадет только тогда, когда все последующие символы будут удовлетворять условию, что они являются либо буквами латинского алфавита, либо цифрами. [a-zA-Z0-9]. Первый обязательный символ описан, остальные символы не обязательны, поэтому меняем квантификатор с '+' на '*', Ставим символы начала и конца строки: ^[a-zA-Z][a-zA-Z0-9]*$
Если в листинге программы 42-ю строку (рис. 3.53)
заменить на (файл Lab6_0_3.php):
то на ввод информации (рис. 3.58) получим следующую реакцию (рис. 3.59).
Рис. 3.58. Заполненная форма. Программа Lab6_0_3.php.
Рис. 3.59. Результат работы программы Lab6_0_3.php.
Задание 5. Специфика имени пользователя с помощью JavaScript. Lab6_0_4.Php
Пример использования JavaScript (файл Lab6_0_4.php).
Ниже (рис. 3.60) представлен HTML код самой формы:
<form onsubmit="return checkmail(this.email.value)" action="#" method="post">
<input id="email" name="email" />
<input type="submit" value="Отправить" />
</form>
Рис. 3.60. Код для формы Lab6_0_4.php.
И код функции на JavaScript, которая и проверяет email.
<script language="javascript" type="text/javascript">
function checkmail(value) {
reg = /[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?/;
if (!value.match(reg)) {alert("Пожалуйста, введите свой настоящий e-mail");
document.getElementById('email').value=""; return false; }
}
</script>
Рис. 3.61. Код функции на JavaScript для проверки email (Lab6_0_4.php).
В принципе, если не хотите вникать в суть дела, можете просто скопирвать код, всё будет работать). Напоминаем, что в Интернете существует огромное количество открытых кодов для проверки Email адресов и их надо использовать , а не придумывать свои коды.
Рис. 3.62. Пример Lab6_0_4.php при неправильном указании Email адреса в форме ввода.
Проверка на корректность адреса электронной почты
<?php
function check_email($email) {
if (preg_match("%^[A-Za-z0-9](([_\.\-]?[a-zA-Z0-9]+)*)@([A-Za-z0-9]+)(([\.\-]?[a-zA-Z0-9]+)*)\.([A-Za-z])+$%", $email)) {
return true;
}
return false;
}
?>
Задание 6. Проверка правильности ввода URL. Lab6_1.php.
Проверка правильности ввода URL является достаточно сложной задачей. Построить универсальное регулярное выражение, которое соответствовало всем URL, очень не просто.
При построении регулярного выражения будем исходить из того, что URL имеет следующий формат:
http://хост/путь
Простейшим вариантом проверки, не позволяющим посетителю ошибаться при наборе URL, но в то же время не предотвращающий неверный формат, является:
"#http://[^]*\.html?#i"
Данное выражение учитывает только URL расширения файла html либо htm, для обобщения на другие файлы следует расширить регулярное выражение до:
"#http://[^]*\.(html?|php|pl|cgi)#i"
Уточняя регулярное выражение, разместим за префиксом http:// регулярное выражение для хоста — [-a-z0-9_.]+. Структура пути может быть более разнообразной. Для него необходимо использовать выражение вида:
[-a-z0-9_:@&?=+,.!/~*'%$]*
Объединяя все в одно регулярное выражение, получаем следующее:
"#http://[-a-z0-9_.]+[-a-z0-9_:@&?=+,.!/~*'%$]*\.(html?|php|pl|cgi)#i"
На рис. 3.63 приведена форма с полем URL адреса.
Рис. 3.63. Пример Lab6_1.php при неправильном указании URL адреса в форме ввода.
Как видно из рис. 3.63, при таком вводе обработчик зафиксирует ошибку, которая может быть представлена рис. 3.64.
Рис. 3.64. Реакция Lab6_1.php при неправильном указании URL адреса в форме ввода на рис. 3.63.
Исходный листинг Lab6_1.php приведен ниже на рис. 3.65.
<!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>Lab6_1 Регулярные выражения</title>
</head>
<h2> Регулярные выражения для URL </h2>
<h3 align="left"><font color=RED>(файл Lab6_1.php)<font color=BLUE> </h3>
<body
TEXT=BLUE
LINK=RED
VLINK=BLUE ALINK=PINK>
<?PHP
if (!isset($_POST[Submit]))
{
//echo "Кнопку Submit=OK еще не нажимали <br>";
print("<form action=\"Lab6_1.php\" method=POST>");
print("<table> <tr><td> Ваше Имя </td>");
print("<td><input type=text name=\"FirstName\" size=20></td></tr>");
print("<tr><td>Ваша Фамилия</td>");
print("<td><input type=text name=\"LastName\" size=20></td></tr>");
print("<tr><td>URL</td>");
print("<td><input type=text name=\"Url\" size=40></td></tr></table>");
print("<input type=submit name=\"Submit\" value=\"OK\"> ");
print("<input type=reset name=\"Reset\" value=\"Cancel\">");
print("</form>");
}
else
{
$Url_adress=$_POST['Url'];
//echo "Указан адрес $Url_adress ";
if (strlen($Url_adress)<8)
{echo "Указанный адрес $Url_adress менее 8-и символов";//
exit;//завершение выполнения PHP сценария
}
//Единственным обязательным признаком в URL:
//url это обязательно две группы символов, разделенных точкой.
//Больше ничего обязательного для URL нет.
//Например, google.com или supersait.ru
if(preg_match('#^[-a-z0-9]+(\.[-a-z0-9]+)*(\.[a-z]+)(|\/|\/([a-z0-9-_\(\)!\&\#\.\/\~]+(\.[a-z0-9\_\-]+)?(\?([a-zа-я0-9-_\%]*|([a-z0-9_-]+=[a-zа-я0-9-_\%\&]*)+))?(\#[a-z0-9]*)?)?)$#i', $Url_adress))
{
// URL верен. Например, ORD.com.ru
//Внимание! Это выражение не проверяет на наличие "http://"
}
else
{
// URL НЕ верен
echo "Возможный Url Ord.com.ru или www.ord.com.ru <br>";
exit("Указанный адрес $Url_adress <font color=\"red\">НЕ верен</font><br>");
}
if(!preg_match("#http://[-a-z0-9_.]+[-a-z0-9_:@&?=+,.!/~*'%$]*\.(html?|php|pl|cgi|ru)#i", $Url_adress))
{
echo "Указанный адрес $Url_adress допустим <br>";
$Pattern="^(http://)?([^[:space:]]+)([[:alnum:]\.,?%#\-\:;&])$";
if (ereg($Pattern,$Url_adress)):
//ereg - совпадение с регулярным выражением.
//Ищет в строке Url_adress совпадения с регулярным
//выражением, данным в шаблоне pattern.
//
$Replace="<a href=\"http://\\2\\3\" target=\"_self\">\\2\\3</a>";
$Url_adress=eregi_replace($Pattern, $Replace, $Url_adress);
//Функция eregi_replace ищет регулярное выражение Pattern
//в строке Url_adress и заменяет его строкой Replace.
//функция не чувстительна к регистру
print("Ваша подача документа по URL адресу - $Url_adress - может быть осуществлена!");
//Например. Ваша подача документа по URL адресу -
// www.ord.com.ru - может быть осуществлена!
else:
print("URL не точен");
endif;
}
//exit("Неверный формат URL");
}
?>
</body>
</html>
Рис. 3.65. Листинг Lab6_1.php с проверкой URL.
Если пользователь введет правильную информацию рис. 3.66, то вывод в браузере показан на рис. 3.67.
Рис. 3.66. Форма Lab6_1.php с проверкой URL.
Рис. 3.67. Форма Lab6_1.php с проверкой URL.
Задание 7. Проверка правильности ввода из списка. Lab6_2.php.
Пусть необходимо разработать форму (рис. 3.68)
Рис. 3.68. Форма Lab6_2.php.
Для указания способа связи использован следующий список (рис. 3.69)
Рис. 3.69. Форма Lab6_2.php списком значений.
Форма выводится с помощью листинга представленного на рис. 3.70 (файл Lab6_2.php), а обработка события производится в файле Lab6_3.php (листинг программы показан на рис. 3.71).
Файле Lab6_3.php в свою очередь содержит внутренний обработчик событий представленный в файле Lab6_4.php (рис. 3.72).
Листинг программы Lab6_2.php представлен ниже.
Рис. 3.70. Листинг Lab6_2.php с списком значений.
Как указано в строке
обработчик нажатия кнопки “OK”, находится в отдельном файле с именем Lab6_3.php.
В качестве способа связи по умолчанию предлагается использовать “Телефон”.
Естественно пользователь может указать один из видов связей, что должно быть учтено в обработчике Lab6_3.php (рис. 3.71).
Рис. 3.71. Листинг обработчика Lab6_3.php.
Обратите внимание, что в листинге программы Lab6_3.php (рис. 3.71) Html код должен помещаться после PHP кода, иначе функция
будет выдавать предупреждение о присутствии информации перед PHP кодом.
Кроме того текст программы Lab6_3.php, в свою очередь содержит обработчик Lab6_4.php (листинг представлен на рис. 3.72) для возможности обработки ошибок при вводе значений в поле связи (рис. 3.73).
Рис. 3.72. Листинг обработчика Lab6_4.php.
Пусть пользователь ввел информацию в форму, показанную на рис. 3.69.
Тогда в обработчике Lab6_3.php (через глобальный массив $_POST) будут доступны переменные:
Так как значения переменных $FirstName и $LastName непусты и равны соответственно $FirstName =’Иван’, $LastName= ‘Иванов’, то будет построена форма (рис. 3.73) с помощью операторов ниже приведенных операторов (полный текст см. рис. 3.71):
и тело формы закрывается операторами
На основании указанных операторов на экран будет выведено:
Рис. 3.73. Содержание формы сгенерированное обработчиком Lab6_3.php.
Если пользователь введет в форму (рис. 3.73) информацию, показанную на рис. 3.74 и нажмет кнопку , то обработчикLab6_4.php, указанный в теле Lab6_3.php
получит информацию через $_POST, которая показана на рис. 3.75.
Рис. 3.74. Содержание формы (рис. 3.73) после указания Email.
Рис. 3.75. Результат работы обработчика (рис. 3.72) по нажатию рис. 3.74.
Рассмотрим ситуацию когда форма, показанная на рис. 3.69 остается не заполненной и сразу нажимается кнопка (рис. 3.76).
Рис. 3.76. Содержание формы без ввода информации.
В этом случае на экране получим сообщение (рис. 3.77) на основе выполнения условия .
Рис. 3.77. Содержание формы без ввода информации.
Если пользователь вернется на предыдущую страницу и укажет (рис. 3.78)
Рис. 3.78. Содержание формы c информацией.
Нажатие для содержимого рис. 3.78 приведет к результату (рис. 3.79).
Рис. 3.79. Содержание формы (файл Lab6_3.php) c информацией.