рефераты конспекты курсовые дипломные лекции шпоры

Реферат Курсовая Конспект

Инструментальная среда PHPMYADMIN. Создание баз и таблиц данных

Инструментальная среда PHPMYADMIN. Создание баз и таблиц данных - раздел Программирование, Методические Указания К Выполнению Лабораторных Работ...

Методические указания к выполнению лабораторных работ

Предисловие

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

Студентам разрешается использовать любую современную СУБД, поддерживающую принципы реляционного описания данных и язык SQL.

Основным требованием к выбору СУБД является ее работоспособность на вычислительной технике университета. В качестве рекомендуемой предлагается использовать СУБД MySQL или СУБД ORD. MySQL является собственностью компании Sun Microsystems, осуществляющей разработку и поддержку приложения практически под любой операционной системой. Распространяется под GNU (General Public License) MySQL - является свободно распространяемой системой. ORD коммерческая система, но для студентов кафедры предоставляется бесплатно.

В Интернете указанные системы можно найти по адресам указанным ниже:

http://www.mysql.com/downloads/

http://www.ord.com.ru.

 

Библиографический список

Основной:

1. Веллинг Л., Томсон Л. Разработка Web-приложений с помощью PHP и MySQL. 3-е издание. – М.: Издательский дом “Вильямс”. 2008. – 875 c.

Дополнительный:

2. Копейкин М. В., Спиридонов В. В., Шумова Е. О. Базы данных. Основы SQL реляционных баз данных: Учеб. пособие. – СПб.: СЗТУ, 2006.

– 177 c.

3. Базы данных: Метод. указ. к курсовому проектированию. / Сост.: М.В. Копейкин, В.В. Спиридонов, Е.О. Шумова – СПб.: СЗТУ, 2005. - 172 c.

4. Базы данных: Методический комплекс по курсу и указания к выполнению лабораторных работ. / Сост.: М.В. Копейкин, В.В. Спиридонов, Е.О. Шумова – СПб.: СЗТУ, 2005. - 172 c.– Спб.: СЗТУ. 2004. – 100 с.

Лабораторные работы в среде ORD представлены в [4. Лабораторные работы в среде MySQL представлены ниже.

Лабораторная работа № 1

Тема №1. Инсталляция MySQL и создание локального сервера

Цель работы

Изучение конфигурационных файлов пакета и создание собственного сервера MySQL Server на локальной машине.

Основные технические возможности

Максимальные размеры таблиц

MySQL 3.23+: До 8 миллионов терабайт. (2 ^ 63).

При этом необходимо учитывать тот факт, что размер таблицы в новых версиях ограничен лишь предельным размером файла в файловой системе вашей ОС. Например в NTFS этот размер теоретически может быть до 32 эксабайт.

Производительность

  Чтение 2000000 строк по индексу Секунды Mysql mysql_odbc db2_odbc …   Возможность Версия MySQL Подзапросы …

Описание установки

Состав базового комплекта Денвер: 1. Apache: выполняемые файлы, дистрибутивные и адаптированные конфигурационные файлы.

Порядок выполнения работы

Рис. 1.1. Использование командной строки. и проверьте Вашу машину на возможность ее исполнения.

Содержание отчета

Данная лабораторная работа не содержит текстового отчета, если в качестве целевой СУБД Вы выбрали МуSQL и инсталлировались с помощью Denver.

Если же Вы решили использовать в качестве целевой СУБД, например, PostGresSQL, то все шаги и особенности инсталляции должны быть описаны в таком же порядке как это сделано в данной лабораторной работе.

Внимание! Все отчеты по лабораторным работам предоставляются преподавателю, как в текстовом варианте, так и в электронном виде.

 

Литература: [1], с. 838…860

 

Лабораторная работа № 1

Тема №2. Инструментальная среда PHPMYADMIN

Цель работы

Ознакомление с инструментальной оболочкой конструирования баз и таблиц данных в среде MySQL.

Основные теоретические положения

Любая СУБД реляционного (или другого) типа предоставляет набор утилит для доступа к хранимой информации. В MySQL в качестве инструментальной оболочки обычно используют систему phpMyAdmin или непосредственно используют командную строку OC.

Описание лабораторного макета

Панель управления базой данных MySQL – phpMyAdmin показана на рис. 1.38.

В следующем разделе будут рассмотрены основные моменты работы с утилитой phpmyadmin, позволяющей упростить работу с CУБД MySQL.

Порядок выполнения работы

Прежде чем перейти к изучению утилиты phpmyadmin выполните следующее:

Укажите в адресной строке браузера информацию http://localhost и Вы должны получить следующее окно (рис. 1.30).

Рис. 1.30. Состав окна разработчика Денвер (частично).

Рис. 1.30. Продолжение описания состава окна разработчика Денвер (частично).

Далее необходимо протестировать все пункты для указанных URL адресов указанных на рис. 1.30.

Указания к выполнению работы

Например, при запуске теста: http://localhost/tools/phpmyadmin Вы можете получить следующее сообщение (рис. 1.31).  

Содержание отчета

1. Структурная схема взаимодействия утилит пакета с описанием назначения его основных элементов меню.

 

Рис. 1.38. Окно входа phpMyAdmin

Примечание. Обратите внимание на адрес входа. Он зависит от версии Denwer.

 

Если в поле “Создать новую базу”

 

указать имя новой базы данных, например My_Base, и нажать Enter или кнопку , то система сформирует пустую базу, не содержащую ни одной таблицы (рис. 1.39).

 

Если подобного окна Вы не получите, то проверьте, запущен ли Denwer. Формальным признаком его работы является наличие пиктограммы “пера” в правой нижней части окна OC

.

 

Рис. 1.39. Окно созданной новой базы в phpMyAdmin.

 

Литература: Официальный сайт phpMyAdmin http://phpmyadmin.sourceforge.net/

Лабораторная работа № 2

Тема №1. Создание баз и таблиц данных

Цель работы

Получение практических навыков работы в инструментальной среде СУБД.

Основные сведения

Рис. 2.1. Запуск phpMyadmin. Примечание. Овалом здесь и далее указывается область, на которую надо обратить внимание.

Incorrect table definition; There can only be one auto column and it mast be defined as a key

Если Вы правильно укажите характеристики для создаваемой таблицы, и нажмете кнопку “Сохранить” (рис. 2.5), то получите следующее окно (рис. 2.9). … Кнопки типа “Структура”, “Обзор”, “SQL” и т. д. показанные на рис. 9 позволяют… Так, например, кликнув на кнопке “Структура” (рис. 2.9), мы получим окно следующего содержания (рис. 2.10).

Программа работы

Напомним, что первая строка с именем id (рис. 2.11) заполняется автоматически, так как ранее для нее указано ограничение “auto_increment”. При заполнении 2-ой и 3-ей строки в столбце “Функция ” (рис. 2.11) может быть… Поэтому заполнению подлежат только поля строки 2 и 3 в столбце “Значение”, что и показано на рис. 2.13.

Указания к выполнению работы

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

Содержание отчета

1. Описание порядка выполнения производимых действий и перечень используемых программ. Краткая характеристика (назначение, функциональные возможности) каждой программы.

2. Результаты использования SQL команд, диагностических сообщений и созданных баз ив таблиц.

Литература: Официальный сайт phpMyAdmin http://phpmyadmin.sourceforge.net/

 

 

Лабораторная работа № 2

 

Тема №2. Создание пользователей базы данных

Цель работы

Создание пользователей и определение их привилегий.

Основные сведения

 

Программа работы

Шаг 1. Создайте копию из файла index.php в этой же папке с именем index0.php. Шаг 2. Модифицируйте в index.php 3-ю строку (вставили символы 00) и сохраните его. На нижнем рисунке использован…

Проверка моего домена с именем Moy.loc

Шаг 4. Находясь на выделенном файле в Total Commander нажмите клавишу F4 (Редактировать) и Вы должны увидеть полный текст программы, показанный на…   Теперь необходимо модифицировать файл Index.php и вставить в него операторы языка PHP для обращения к хранимой…

Указания к выполнению работы

Рис. 2.32. Предупреждение после модификации кода файла index.php.  

Содержание отчета

1. Результаты тестирования, полученные с помощью диагностических программ.

 

 

Лабораторная работа № 3

Программирование с использованием PHP и MySQL

Цель работы

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

Основные сведения

Тема №1

Создание форм

Цель работы:Получение практических навыков по созданию форм в документах HTML.

 

Тема №2

Передача значений переменным в сценариях PHP. Использование возможностей метода GET без HTML-формы для передачи значений переменных в сценариях PHP

Цель работы:Получение практических навыков по передаче значений переменным в сценариях РНР с использованием формы и с помощью метода GET.

 

Тема №3

Создание формы и РНР-сценария в одном файле

Цель работы:Получение навыков и понимание взаимосвязанной работы формы и ее обработки.

 

Тема №4

Использование чисел. Управляющие структуры For и While

Цель работы:работа с численными данными в форме.

 

Тема №5

Использование управляющей структуры switch

Цель работы:Обучение применению структуры switch.

 

Тема №6

Использование регулярных выражений в сценариях РНР

Цель работы:Получение практических навыков в использовании регулярных выражений при обработке форм.

 

Тема №7

Работа с массивами

Цель работы:Обучение использованию массивов в сценариях PHP.

 

Тема №8

Использование функций в сценариях РНР

Цель работы:Получение навыков по применению функций в PHP при обработке сценариев.

 

Тема №9

Использование файлов для хранения данных в сценариях РНР

Цель работы:Обучение работе с файлами для хранения данных при обработке сценариев.

 

Тема №10

Работа с каталогами

Цель работы:Получение практических навыков по работе с деревом каталогов.

 

Тема №11

Создание панели управления файлами

Цель работы:Получение практических навыков по обработке файлов в сценариях.

Тема №12

Работа с базой через монттор MySQL и PhpMyAdmin.

Цель работы:Изучение команд MySQL для хранения, выборки и обработки данных с использованием монитора MySQL и средств PhpMyAdmin.

 

Тема №13.

Извлечение данных из базы данных

Цель.Практическое использование конструкций SQL.

 

Тема №14.

PHP и MySQL. Доступ к базе данных MySQL из Web с помощью РНР.

Цель работы:Получение практических навыков по связке MySQL и PHP.

Указания к выполнению работы

Исходные темы и данные для тем, студент выбирает самостоятельно, но последние две темы являются обязательными для всех. Число рассмотренных тем в Вашей лабораторной работе №3 не может быть меньше чем 7. В пункте 5 приведены исходные коды и формы, использованные в вышеперечисленных темах. Если в качестве целевой СУБД Вы использовали другую систему – то требования к выбору тем не меняются.

Содержание отчета

1. Исходные тексты программ.

2. Результаты тестирования, полученные с помощью диагностических программ.

Примеры реализации тем

Тема №1. Создание форм

Цель работы:Получение практических навыков по созданию форм в документах HTML.

Задание 1. Разработать HTML-форму с переключателями

вида (рис. 3.1).

 

Рис. 3.1. HTML форма.

 

Исходный код (файл lab1.php) представлен ниже (рис. 3.2.).<!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>Lab1</title></head> <body><body bgcolor=#99CCCC><form method=post action=""> <!--Начало формы--><table><tr><td valign=top>Текстовое поле</td><td><input type=text name="text1" value="Значение text1 не более 255 символов,size=50" size=50></td></tr><tr><td valign=top>Текстовое поле PASSWORD</td><td><input type=password name="pwd" value="Пароль- password"></td></tr><tr><td valign=top>Текстовое поле TEXTAREA</td><td><textarea name="text2" rows=4 cols=30>Текст длина которого может превышать 255 символов. Показывать строк rows=4</textarea></td></td><tr><td valign=top>Переключатели CHECKBOX</td><td><input type=checkbox name="chk1" value="on" checked> Первый<br><input type=checkbox name="chk2" value="on" > Второй<br><input type=checkbox name="chk3" value="on" checked> Третий<br></td></tr><tr><td valign=top>Переключатели RADIO</td><td><input type=radio name="rad" value="on1" checked>Первый<br><input type=radio name="rad" value="on2" >Второй<br><input type=radio name="rad" value="on3" checked>Третий<br></td></tr><tr><td valign=top>List</td><td><select name="sel" size=1><option value="first option">First option</option><option value="second option">Second option</option><option value="none">Нет выбора</option></select></tr><tr><td valign=top>Скрытый орган управления</td><td><input type=hidden name="hid" value="hidden"</td></tr></table><br><input type=submit value="Переслать" /> <!--&nbsp;--><input type=reset value="Reset"></form> <!--Конец формы--> </body></html>

Рис. 3.2. Код HTML формы.

Ниже приводится описание основных конструктивных элементов, использованных при создании формы (рис. 3.1), представленных в коде рис. 3.2.Теги <form> и </form>Теги <form> и </form> задают начало и конец формы. Начинающий форму тег <form> содержит два атрибута: action и method. Атрибут action содержит адрес URL сценария, который должен быть вызван для обработки сценария (на рис. 3.2. обработчик событий не указан action=""). Атрибут method указывает браузеру, какой вид HTTP запроса необходимо использовать для отправки формы; возможны значения POST и GET (на рис. 3.2. указан метод method=post). Главное отличие методов POST и GET заключается в способе передачи информации. В методе GET параметры передаются через адресную строку, т.е. по сути в HTTP-заголовке запроса, в то время как в методе POST параметры передаются через тело HTTP-запроса и никак не отражаются на виде адресной строки.Допустима запись:<form method="post" action="../admin/add.php"> </form>Текстовое поле (text)Позволяет пользователям вводить различную информацию. <input type="Тип" name="Имя поля" size="Размер" maxlength="Макс. количество символов"> При создании обычного текстового поля размером size и максимальной допустимой длины maxlength символов, атрибут type принимает значение text. Если указан параметр value, то поле будет содержать отображать value-текст. При создании поля не забывайте указывать имя поля, т.к. этот атрибут является обязательным.Например:<input type="text" name="txtName" size="10" maxlength="5" value="Текст по умолчанию">Поле для ввода пароля (password)Полностью аналогичен текстовому полю, за исключением того, что символы, набираемые пользователем, не будут отображаться на экране. Например:<input type="password" name="txtName" size="10" maxlength="5"> Многострочное поле ввода текста (textarea)Многострочное поле ввода текста позволяет отправлять не одну строку, а сразу несколько. По умолчанию тег создает пустое поле шириной в 20 символов и состоящее из двух строк. <textarea name="Имя поля" cols="Ширина поля " rows="Число строк">Текст</textarea> Многострочное поле ввода текста начинается с парных тегов <textarea></textarea>. Тэг name задает имя многострочного поля. Также можно указать ширину поля(cols) и число строк(rows). При необходимости можно указать атрибут readonly, который запрещает редактировать, удалять и изменять текст, т.е. текст будет предназначен только для чтения. Если необходимо чтобы текст был изначально отображен в многострочном поле ввода, то его необходимо поместить между тэгами <textarea></textarea>. Например:<textarea name="txtArea" cols="15" rows="10" readonly>Текст, который изначально будет отображен в многострочном поле ввода и который нельзя изменять, т.к. указан атрибут readonly </textarea> Флажок (checkbox)Флажки checkbox предлагают пользователю ряд вариантов, и разрешает выбор нескольких из них.Группа флажков состоит из элементов <input>, имеющих одинаковые атрибуты name и type(checkbox). Если вы хотите, чтобы элемент был отмечен по умолчанию необходимо пометить его как checked. Если элемент выбран, то сценарию поступит строка имя=значение, в противном случае в обработчик формы не придет ничего, т.е. не выбранные флажки вообще никак не проявляют себя в переданном наборе данных.Например:<input name="mycolor" type="checkbox" value="red" checked>Красный(выбран по умолчанию) <input name="mycolor" type="checkbox" value="blue">Синий <input name="mycolor" type="checkbox" value="black">Черный <input name="mycolor" type="checkbox" value="white">БелыйПереключатель(radio)Переключатели radio предлагают пользователю ряд вариантов, но разрешает выбрать только один из них.<input name="Имя переключателя" type="Тип" value="Значение">Переключатель (radio) имеет атрибуты name, type и value. Атрибут name задает имя переключателя, type задает тип radio, а атрибут value задает значение. Если пользователь выберет переключатель, то сценарию будет передана строка имя=значение. При необходимости можно указать параметр checked, который указывает на то, что перключатель будет иметь фокус (т.е. будет отмечен по умолчанию) при загрузке страницы. Переключатели также можно объединять в группы, для этого они должны иметь одно и тоже имя. Например:<input name="mycolor" type="radio" value="white"> Белый <input name="mycolor " type="radio" value="green" checked> Зеленый (выбран по умолчанию) <input name="mycolor " type="radio" value="blue"> Синий <input name="mycolor " type="radio" value="red"> Красный <input name="mycolor " type="radio" value="black"> Черный

 

Скрытое текстовое поле (Скрытый орган управления)

Позволяет передавать сценарию какую то служебную информацию, не отображая её на странице.

<input name="Имя" type="Тип" value="Значение">

 

Скрытое поле начинается с тега <input>, атрибуты которого являются name, type и value. Атрибут name задает имя поля, type определяет тип поля, а атрибут value задает значение поля.

 

Например:

<input name="email" type="hidden" value="spam@nospam.ru">

 

Кнопка отправки данных формы (submit)

Служит для отправки формы сценарию.

<input type="Тип" name="Имя кнопки" value=" текст_на_кнопке ">

 

При создании кнопки для отправки формы необходимо указать 2 атрибута: type=“submit” и value=”Текст кнопки”. Атрибут name необходим, если кнопка не одна, а несколько и все они созданы для разных операций, например кнопки "Сохранить", "Удалить", "Редактировать" и т.д. После нажатия на кнопку сценарию передается строка имя=текст кнопки.

Кнопка отправки данных

 

Кнопка отправки данных инициирует действие, заданное атрибутом action тега <form>. Синтаксис определения:

<input type="submit" value=" текст_на_кнопке">

 

Определение кнопки включает два атрибута:

type -- тип элемента (для кнопки отправки данных -- submit);

value -- текст, по умолчанию отображаемый на кнопке.

 

Кнопка сброса формы (Reset)

Кнопка сброса отменяет все изменения, внесенные в элементы формы.

<input type="Тип" name="Имя кнопки" value="Надпись на кнопке">

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

 

Например:

<input type="reset" name="Reset" value="Очистить форму">

 

<input type="reset" value="текст_на_кнопке">

 

Определение кнопки включает два атрибута:

type -- тип элемента (для кнопки сброса -- reset);

value -- текст, по умолчанию отображаемый на кнопке.

 

Кнопка сброса выглядит точно так же, как и кнопка отправки данных, если не считать того, что на ней обычно выводится слово «Reset» (рис. 3.1).

 

Задание 2: Разработать HTML-форму с методом Post

вида (рис. 3.3).

 

Рис. 3.3. Пример 2 HTML формы.

 

Код Lab1_2.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> Lab1_2</title>

</head>

<body bgcolor=#ffacb3>

<b>Регистрационная страница электронной библиотеки</b>

<p>Заполнив анкету, вы сможете пользоваться нашей электронной библиотекой

<p><form methos="post" action="">

<table>

<tr>

<td>Введите регистрационное имя</td>

<td><input type=text name="text1" value="" ></td>

</tr>

<tr>

<td>Введите пароль</td>

<td><input type=password name="pwd" value=""></td>

</tr>

<tr>

<td>Подтвердите пароль</td>

<td><input type=password name="pwd" value=""></td>

</table>

<p>

Ваш возраст

<input type=radio name="r2" value="on2" >20-30 <input type=radio name="r3" value="on3" >30-50 <input type=radio name="r4" value="on3" >старше 50

Тема №2. Передача значений переменным в сценариях PHP. Использование возможностей метода GET без HTML-формы для передачи значений переменных в сценариях PHP

Цель работы:Получение практических навыков по передаче значений переменным в сценариях РНР с использованием формы и с помощью метода GET.

Задание 1: Разработать приложение с использованием метода GET, в котором:

Создается форма ввода (см. рис. 3.5.) помощью программы Lab2.php (см. рис. 3.6.) для введения пользователем данных:

· Имени;

· Фамилии;

· Адреса электронной почты;

· Текста - комментария.

Введенные данные PHP-сценарий Lab2_result.php получает данные с формы .

· Отображает извлеченные из формы данные в окне браузера.

· Сценарий должен сгенерировать отправку данных в другой PHP-файл, который в свою очередь должен отобразить персональное приветствие пользователю.

Имена использоаванных и взаимосвязанных файлов: Lab2.php (описание и создание формы – рис. 3.6.), Lab2_result.php (обработчик событий для Lab2.php), Lab2_GET.php (использование метода Get)

 

В форму созданную с помощью Lab2.php (описание и создание формы) введите, например следующую информацию (рис. 3.5.)

Рис. 3.5. Форма с обработчиком на кнопке “OK” .

 

Исходный код Lab2.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>Lab2</title>

</head>

 

<body bgcolor=#CCFFFF>

<form action="Lab2_result.php" method="POST">

<!--Lab2_result.php Обработчик для данной HTML формы. -->

<!--В указании имени method надо указывать ковычки !!! -->

<table>

<tr>

<td> Введите Ваше имя: <br></td><!--имя атрибута на экране-->

<td><input type=text name="FName" size=20></td>

</tr>

<tr>

<td>Last Name</td><!--имя атрибута на экране-->

<td><input type=text name="LName" size=20></td>

</tr>

<tr>

<td>E-mail</td><!--имя атрибута на экране-->

<td><input type=text name="Email" size=40></td>

</tr>

<tr>

<td> Примечание </td><!--имя атрибута на экране-->

<td><textarea name="Comments" rows=5 cols=40></textarea></td>

</tr>

</table>

<input type=submit name="Submit" value="OK">&nbsp;

<input type=reset name="Reset" value="Очистить">

<!--Нажатие кнопки name="Submit" с именем value="OK" приведет к вызову обработчика данной формы (к аналогичному действию приведет нажатие Enter на любом из полей). Нажатие кнопки name="Reset" с значением value="Cancel" (Очистить) приведет к уничтожению всех объявленных переменных в форме.

&nbsp - непрерывный пробел

Веб-браузеры обычно игнорируют дополнительные символы пробела, введенные в текст страницы. Для этого используется команда &nbsp. Эта команда создает неделимое пустое пространство между элементами страницы, будь то графика или текст. Следует учитывать тот факт, что использование &nbsp вместо пробела между двумя соседними словами гарантирует, что оба слова не будут разнесены по разным строкам в окне браузера - они будут расположены всегда рядом.

-->

</form>

</body>

</html>

Рис. 3.6. Код создания формы для рис. 3.5. Нажатие , (на выше показанной форме рис. 3.5) приводит к следующему результату в окне браузера (рис. 3.7). Отметьте, что имя программы обработчика в адресной строке будет сформировано автоматически. Рис. 3.7. Результат обработки события после нажатия кнопке “OK” на рис. 3.5.

 

Код программы (Lab2_result.php), который приводит к этому результату приведен ниже (рис. 3.8).

 

Lab2_result.php (обработчик для кнопки “OK”)

<!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>Lab2_обработчик</title>

Информация попадает в обработчик - программа Lab2_result.php

</head>

 

<body bgcolor=#FFFFFF><!--Цвет фона белый-->

<?PHP

print("<br>В обработчике переменные из HTML кода Lab2.php напрямую не доступны! <br>");

print("Имя переменная FName is: $FName <br>");

print("Указана фамилия is: $LName <br>");

print("e-mail is: $Email <br>");

print("Комментарий: $Comments <br>");

 

print("Через массив POST переменные наверняка будут доступны<br>");

 

$FName = $_POST["FName"];

print("Имя FName $FName передано через глобальный POST: $_POST[FName] <br>");

//а как указано ниже - даст ошибку

//print("Имя FName $FName передано через глобальный POST:

//$_POST['FName'] <br>");

 

print("Указана фамилия is: $_POST[LName] <br>");

print("e-mail is: $_POST[Email] <br>");

print("В примечании указано $_POST[Comments] <br>");

 

print("Click <a href=Lab2_GET.php?FName=$FName&LName=$_POST[LName]>here</a> здесь, чтобы посмотреть как работает метод GET");

//После знака '?' перечислены переменные, которые должны быть

//доступны в программе Lab2_GET, которая вызывается по ссылке,

//если пользователь кликнет на слове here, то будет вызвана

//программа Lab2_GET.php с указанными переменными

//Слово here может быть заменено на смысловое русское слово

 

?>

</body>

</html>

Рис. 3.8. Код программы обработки события на кнопке “OK”.

Если выполнить действие

то будет вызвана программа Lab2_GET.php (рис. 3.10.) результат (рис. 3.9) и исходный код, которой приведен ниже.

Рис. 3.9. Результат обработки события по ссылке HERE.

Обратите внимание на содержимое адресной строки при выводе результата.

 

 

 

Код Lab2_GET.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>Lab2_GET</title>

</head>

<body>

<?PHP

//реакция при нажатии на ссылку, см. файл Lab2_GET.php слово Here

$FName = $_GET['FName'];

$LName = $_GET['LName'];

print("<center> Hello из Lab2_GET Имя:'$FName' Фамилия: ' $LName '!!!</center>");

//А так будет ошибка print("<center> Hello из Lab2_GET Имя $FName $Lname !!!</center>");

?>

</body>

</html>

Рис. 3.10. Исходный код программы Lab2_GET.php.

 

В данной лабораторной работе были получены практические навыки по передаче данных в РНР-сценарий с помощью HTML-форм и с помощью метода GET.

 

Тема №3. Создание формы и РНР-сценария в одном файле

Обработка форм Все данные, которые Вы хотите получить из HTML-формы в PHP сценарий… Задание 1: Получение данных из текстового поля

Прим. HTML код на рис. 3.12. показан мелким жирным шрифтом.

Если пользователь введет данные (как показано на рис. 3.11) и нажмет кнопку “OK”, то вновь будет вызвана программа Lab3.php, но в ней сработает ветка

else

{//Вывод введенных данных

и на экран будет выведена следующая информация (рис. 3.13)

 

Рис. 3.13. Результат обработки события “OK” при вводе значений данных как показано на рис. 3.11.

 

Если Пользователь использует (см. рис. 3.13), то будет вызвана программа Lab3_1.php, код которой приведен на рис. 3.14., а результат представлен на рис. 3.15.

 

Программа Lab3_1.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>Lab3_1</title>

</head>

<body>

<?PHP

//реакция при нажатии на ссылку HERE, см. файл Lab3.php

//$FirstName = $_GET['FirstName'];

$Name = $_GET['Name'];

$Name1=$_REQUEST['Name'];

if (isset($Name1)) // проверка переменной Name1 на ее существование

{ echo "Переменная с именем Name1 доступна и равна ".$Name1." Ее тип=".gettype($Name1);}

else

{ echo "Переменная с именем Name1 НЕ доступна через REQUEST";

echo "<br>Ее тип=".gettype($Name1);//опеделение типа переменной

} //конец if-else

 

// echo "<br>Полный адрес к скрипту. Исполняется скрипт - http://".$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI'];

 

echo "<br>Исполняется скрипт-http://".$_SERVER['SERVER_NAME'];

$a=$_SERVER['REQUEST_URI'];

echo "<br>Передали через адресную строку <br>".$a;

echo "<br> Метод ".$_SERVER['REQUEST_METHOD']." также передал ".$Name ; // GET

echo "<br> QUERY_STRING ".$_SERVER['QUERY_STRING'];

echo "<br> PHP_SELF=".$_SERVER['PHP_SELF'];

if (isset($_SERVER['HTTP_REFERER'])) //контроль существования переменной

{

echo "<br>Вы пришли на данную страницу с адреса: ".$_SERVER['HTTP_REFERER'];

$e = $_SERVER['HTTP_REFERER'];//http://localhost/php/Lab3.php

$d = strstr($e, '/php/');

//print "<br> d=".$d; // печатает /php/Lab3.php

$pos = strpos($d, "/php/"); //

$str=substr($d,$pos+5); //вырежет только Lab3.php

 

}

print("<br>Hello из $str - Имя и Фамилия: ' $Name '.Отработала ".$_SERVER['PHP_SELF']);

//print("<center> Hello из $d Имя и Фамилия: ' $Name '!!!</center>");

?>

</body>

</html>

Рис. 3.14. Исходный код программы Lab3_1.php – обработка ссылки.

 

Рамка (fieldset)

Объект fieldset позволяет вам нарисовать рамку вокруг объектов. Имеет закрывающий тэг </fieldset>. Заголовок указывается в тэгах <legend></legend>. Основное назначение объекта – задавание различных стилей оформления.

 

Например:

<fieldset>

<legend>Программное обеспечение (заголовок рамки)</legend>

Текст, который будет помещен внутри рамки.</fieldset>

 

Рис. 3.15. Результат работы программы Lab3_1.php – обработка ссылки.

 

Задание 2. Использование рамок в приложении

Разработать приложение в котором создается форма ввода, испоющая рамку (см. рис. 3.16.).

Рис. 3.16. Пример формы ввода на экране.

Программа Lab3_2.php (рис. 3.17) подготавливает форму для ввода информации:

· Имени;

· Фамилии;

· Текста - комментария.

Информация указанных данных должна быть охвачена рамкой (fieldset) и выделена цветом отличным от стандартного цвета браузера.

 

Введенные данные обабатываются этим же PHP-сценарием Lab3_2.php (при нажатии кнопки “OK”). В программе показано реализация ограничения, требующего обязательного ввода значения поля Фамилия. Если поле Фамилия будет означено и нажата кнопка “OK” (рис. 3.17),

Рис. 3.17. Пример ввода значения фамилии.

то необходимо вызвать программу Lab3_2.php, в которой необходимо вывести на экран информацию в виде, показанном на рис. 3.18.

 

Рис. 3.18. Пример вывода введенных значений.

 

Исходный код программы, реализующий обработку и вывод информации на экран, показанный на рис. 3.17, 3.18 и 3.20 приведен на рис. 3.19 (мелким шрифтом показан текст относящийся к HTML коду).

 

<!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" />

<!--Обработчик формы в этом же файле Lab3_2.php, method=POST-->

<title>Lab3_2</title>

</head>

<body bgcolor="#f6f6f6" text="#009999" >

<h2>Использование <i><b>bgcolor</b></i> и выделение ссылки цветом</h2><!--Заголовок формы-->

<!--строки текста прижаты по умолчанию, т.е. влево-->

<!--Шрифтовые элементы (font elements) - физическая разметка текста

Шрифтовые элементы это: TT "телетайпный" текст, т.е. текст одного размера

I курсив

B выделение

U подчеркивание

STRIKE зачеркнутый текст

BIG большой шрифт

SMALL малый шрифт

SUB подстрочный текст

SUP надстрочный текст.

<!--<fieldset style="width: 50%" align="right">--> <fieldset style="width: 50%" ><!--Рамка формы--> <legend><b>Ввод исходных данных(заголовок рамки)</b></legend>

Тема №4. Использование чисел. Управляющие структуры

  Задание 1. Разработать приложение с формой для простого калькулятора (см. рис.…

Тема №5. Использование управляющей структуры switch

Задание 1. Разработать приложение с использованием конструкции SWITCH-CASE, в котором создается форма для простого калькулятора (см. рис. 3.30 и…  

Тема № 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.

 

 

Задание 2. Использование функций пользователя для контроля полей формы

Ниже на рис. 3.44 показана форма ввода содержащая поле для ввода Email и в программе рис. 3.45 показано каким образом контролируется ввод информации в указанное поле.

 

Рис. 3.44. Форма ввода для листинга приведенного на рис. 3.45.

 

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

Рис. 3.45. Листинг программы Lab6_0_1.php для формы на рис. 3.44.

 

 

Рис. 3.46. Продолжение листинга программы Lab6_0_1.php для формы на рис. 3.44.

 

В функции пользователя Val_email использованы стандартные функции:

- Функция int strlen( string $st ) определяет длину строки;

- Функция string trim( string $st [, string $charlist] ) удаляет ведущий и концевые символы строки.

 

Если пользователь (в форму на рис. 3.44) введет информацию как показано на рис. 3.47, и нажмет кнопку , то реакция пользовательской функции Val_email показана на рис. 3.48.

Рис. 3.47. Форма с введенной информацией.

 

Обратите внимание, что после нажатия кнопки нижнее сообщение на рис. 3.47 исчезнет.

Рис. 3.48.Сообщение об ошибке сгенерированное пользовательской функцией.

 

Если пользователь исправит ошибку (рис. 3.49 ) и вновь нажмет , то ответ из программы Lab6_0_1.php показан на рис. 3.50.

Рис. 3.49. Исправление в поле Email введенное пользователем.

 

Рис. 3.50. Сообщение о правильности ввода контролируемое функцией val_email().

 

Ответьте на вопрос. Существует ли в реальности такой адрес Email, приведенный на рис, 3.49. ?

 

Задание 3. Проверка ограничений в текстовом поле. Lab6_0_2.php

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

 

Проверку условия приведена внутри кода (рис. 3.51), чтобы было понятно, что и куда писать:

<?php

$user = $_POST['username'];

if(!preg_match("/^[a-zA-Z0-9]+$/", $user)) {

echo "Имя пользователя задано в неправильном формате";

} else {

echo "Имя пользователя задано в правильном формате";

}

?>

Рис. 3.51. Проверка специфичного имени пользователя.

 

Разбирем само регулярное выражение.

 

Так как регистрационное имя пользователя должно состоять из латинских букв, а также цифр, то надо написать символьный класс, который будет удовлетворять этому условию: [a-zA-Z0-9].

В этот символьный класс входит три интервала, первый интервал a-z (все символы от маленькой буквы a до маленькой буквы z), второй интервал A-Z (аналогично, но с большими буквами), третий интервал 0-9 (цифры от 0 до 9). Мы описали только одну букву, из которой может состоять регистрационное имя, но таких букв может быть... а теперь как раз надо ответить на вопрос, сколько таких букв может быть?

Если Ваш ответ будет: “Да сколько угодно”, то вы неправы.

 

Регистрационное имя должно состоять минимум из одной буквы! и это обязательное условие при прохождении регистрации, поэтому надо данный факт описать. Вспоминаем про квантификаторы: [a-zA-Z0-9]+

 

Плюс '+', как раз тот квантификатор, который говорит, что в строковой переменной $user должен быть минимум один символ, который соответствует условию.

 

Далее надо сказать регулярному выражению, что условию должна соответствовать вся строка, от начала до конца, поэтому добавляем в регулярное выражение символ начала строки '^' в начале регулярного выражения и символ конца строки '$' в конец: ^[a-zA-Z0-9]+$

 

Теперь надо объяснить функции preg_match, что строка ^[a-zA-Z0-9]+$ является регулярным выражением, надо поставить ограничители, для этого и ставлится слеш '/':

preg_match("/^[a-zA-Z0-9]+$/",$user)

 

Полный листинг сценария в котором использовано ограничение для вводимого имени приведено на рис. 3.52 (файл Lab6_0_2.php).

Рис. 3.52. Листинг программы Lab6_0_2.php (проверка имени пользователя).

Рис. 3.53. Конец листинга программы Lab6_0_2.php.

 

Ниже на рис. 3.54 приведена форма ввода для листинга программы из рис. 3.52 - 3.53.

 

Рис. 3.54. Заполненная форма. Программа Lab6_0_2.php.

 

Если будет нажата кнопка , то результат показан на рис. 3.55.

 

Рис. 3.55. Результат работы программы Lab6_0_2.php.

 

Если пользователь введет информацию, как показано на рис. 3.56, то результат приведен на рис. 3.57.

 

Рис. 3.56. Заполненная форма. Программа Lab6_0_2.php.

 

В введенном имени присутствуют русские буквы, поэтому реакция будет следующей.

 

Рис. 3.57. Результат работы программы Lab6_0_2.php.

 

Задание 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\">&nbsp;");

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 информацией.

 

Тема №7. Работа с массивами

Массив представляет собой набор переменных, объединенных одним именем. Каждое значение массива идентифицируется индексом, который указывается после… 1<? 2 $i = 1024;

Задание 1. Означивание массива и вывод на экран. Lab7_0.php.

В представленной ниже программе (рис. 3.81) приведены несколько вариантов объявления массива в коде с последующим выводом содержимого массива на экран.

Код Lab7_0.php.

 

Рис. 3.81. Код Lab7_0.php.

 

Результат вывода элементов массивов с помощью кода Lab7_0.php.

Рис. 3.82. Вариант 1. Результат работы кода Lab7_0.php.

 

Отметьте, что втором варианте мы явно не указывали индексы: PHP автоматически присвоил числовые индексы, начиная с нуля.

 

Рис. 3.83. Вариант 2. Результат работы кода Lab7_0.php.

 

Рис. 3.84. Вариант 3. Результат работы кода Lab7_0.php.

 

Записи массив можно перебирать с помощью цикла for. Количество элементов массива возвращает оператор count.

Например, если в тело программы Lab7_0.php добавить строки (рис. 3.85)

 

Рис. 3.85. Модифицированный код Lab7_0.php.

 

Тогда результат будет

Рис. 3.86. Вариант 4. Результат работы кода Lab7_0.php.

 

 

Задание 2. Цикл foreach. Lab7_1.php.

Для перебора элементов массива предусмотрен специальный цикл foreach:

На рис. 3.87 показано использование цикла foreach, а на рис. 3.88 результат.

Рис. 3.87. Использование Foreach для вывода массива. Lab7_1.php

Рис. 3.88. Использование Foreach для вывода массива.

 

Этот цикл работает (рис. 3.87) следующим образом: в порядке появления в коде программы элементов массива $languages, переменным $key и $value присваюваются соответственно индекс и значение очередного элемента, и выполняется тело цикла.

 

Если индексы нас не интересуют, цикл можно записать следующим образом: foreach ($languages as $value).

Т. е. в программе рис. 3.87 произвести следующую замену:

 

 

Тогда вывод на экране будет как показано на рис. 3.89.

Рис. 3.89. Использование Foreach для вывода массива.

 

 

Задание 3. Конструкции list и each. Lab7_2.php.

 

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

 

Допустим, у нас есть массив $lang = array('php', 'perl', 'basic'). Тогда конструкция list($a, $b) = $lang присвоит переменной $a значение 'php', а $b - 'perl'. Соответственно, list($a, $b, $c) = $lang дополнительно присвоит $c = 'basic'.

Если бы в массиве $lang был только один элемент, PHP бы выдал замечание об отсутствии второго элемента массива.

 

А если нас интересуют не только значения, но и индексы? Воспользуемся конструкцией each, которая возвращает пары индекс-значение.

Рис. 3.90. Использование Foreach для вывода массива. Lab7_2.php.

 

На первый взгляд может удивить тот факт, что в строках 19-21 переменным присваиваются разные значения, хотя выражения справа от знака присваивания совершенно одинаковые. Дело в том, что у каждого массива есть скрытый указатель текущего элемента. Изначально он указывает на первый элемент. Конструкция each же продвигает указатель на один элемент вперед.

 

Результат работы кода представленного на рис. 3.90 показан ниже.

 

Рис. 3.91. Использование Foreach для вывода массива. Lab7_2.php.

 

Эта особенностьeach позволяет перебирать массив с помощью обычных циклов while и for. Конечно, ранее рассмотренный цикл foreach удобнее, и стоит предпочесть его, но конструкция с использованием each довольно распространена, и вы можете ее встретить во множестве скриптов в сети.

 

Ниже (рис. 3.92) показан модифицированный код Lab7_2.php, использующий цикл

Рис. 3.93. Использование While для вывода массива. Lab7_2.php.

 

Результат модифицированной программы приведенной на рис. 3.93, соответствует рис. 3.91.

 

После завершения цикла, указатель текущего элемента указывает на конец массива. Если цикл необходимо выполнить несколько раз, указатель надо принудительно сбросить с помощью оператора reset: reset($brows). Этот оператор устанавливает указатель текущего элемента в начало массива.

 

Задание 4. Сортировка массива. Lab7_3.php.

Реализовать ввод названий месяцев и отсортировать их в алфавитном порядке.

Исходный код Lab7_3.php показан на рис. 3.93.

Рис. 3.93. Ввод и сортировка массива . Lab7_3.php.

В результате работы кода представленного на рис. 3.93 получим (рис. 3.94).

 

Рис. 3.94. Форма для ввода элементов массива . Lab7_3.php.

 

Если пользователь заполнит, например, форму (рис. 3.94) информацией вида (рис. 3.95).

 

Рис. 3.95. Форма с информацией . Lab7_3.php.

 

Тогда нажатие кнопки приведет к следующему результату (рис. 3.96).

 

Рис. 3.96. Форма с информацией . Lab7_3.php.

 

Тема №8. Функции в сценариях РНР

  При помощи функций можно создавать компоненты многократного использования,… Данная тема посвящена функциям PHP, их определению и применению на практике. Хотя основное внимание в ней уделяется…

Определение и вызов функций

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

Тело функции

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

Построение компонентов

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

Колонтитул, как и заголовок, обычно остается неизменным. Это не обязательная структура, а лишь рекомендации общей структуры, которая может послужить отправной точкой для курсового проекта.

 

Заголовок

Заголовочный файл (вроде приведенного в листинге 3.121 (Lab8_7_1.php) присутствует практически в каждом из web-сайтов с поддержкой РНР. В этом файле содержится информация, действующая на уровне всего сайта, — например, заголовок, контактные данные и некоторые компоненты кода HTML-страницы.

 

Колонтитул

Колонтитулом (footer) обычно называется информация, расположенная в нижней части страниц сайта, — контактные данные, ссылки и информация об авторских правах. Эту информацию можно разместить в отдельном файле (Lab8_7_3.php) и включать в качестве шаблона так же, как это делается с заголовком.

 

Основная часть

В основной части страницы (Lab8_7_2.php) подключается содержимое заголовка и колонтитула. В сущности, именно основная часть содержит информацию, интересующую посетителей сайта. Рекомендации по поводу конкретной структуры страниц определяются семантикой данных и должны упрощать администрирование страниц.

 

Используя свойства конструкции include(см. тему 8 задание 7) можно построить файл (Lab8_7_0.php, рис. 3.121), содержащий описание составляющих страницы сайта (обычно такой файл на практике получает название Index.php или Index.html).

Как показано на рис. 3.121 файл включает вызов основных компонент головной страницы сайта, которая показана на рис 3.122.

 

Рис. 3.121. Файл Lab8_7_0.php.

 

Рис. 3.122. Изображение на экране первой страницы сайта.

 

Ниже приводятся содержимое файлов использованных при построении страницы.

 

<?php

$site_name = "Мой_Сайт";

$site_email= "wjgnmore@hotrnail.com";

$site_path = "http://localhost/phprecipes";

?>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">

<title>Lab8_7_1 Заголовок </title>

</head>

 

<body bgcolor="#7b8079" text="#ffffff" link="fe7d387" alink="#e7d387" vlink="#e7f0e4">

 

<table width="45%" cellpadding="0" cellspacing="0" border="1">

<tr>

<td valign = "top">

Курсовой проект

</td>

 

<td valign = "top" align="right">

<?

echo ("<h2 align=center>БАЗЫ ДАННЫХ</h2>");

// Вывести текущую дату и время

print date ("F d, h:i a");

?>

 

</td>

</tr>

</table>

</body>

</html>

Рис. 3.123. Содержимое файла Lab8_7_1.php для прорисовки заголовка.

 

С помощью данного файла прорисовывается следующая часть рис. 3.122.

 

Рис. 3.124. Результат Lab8_7_1.php для прорисовки заголовка.

 

Часть рисунка приведенная ниже реализуется с помощью файла Lab8_7_2.php (рис. 3.126).

 

Рис. 3.125. Результат Lab8_7_2.php для прорисовки контента.

 

 

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">

<title>Lab8_7_2 Контент</title>

</head>

 

<body bgcolor="#7b8079" text="#ffffff" link="fe7d387" alink="#e7d387" vlink="#e7f0e4">

<table width = "45%" cellpadding="0" cellspacing="0" border="1">

 

<tr>

<td valign="top" width="25%">

<a href = "<? $site_path; ?>/tutorials.php">Обучение</a><br>

<!--<a href = "http://localhost/php/articles.php">Скрипты

</a> <br>-->

<a href = "<?=$site_path;?>/scripts.php">Таблицы</a><br>

<a href = "<?=$site_path;?>/articles.php">Скрипты</a><br>

<a href = "<?=$site_path;?>/contact.php">Об авторе</a><br>

<!--

По ссылкам пользователь может переходить как на обычные страницы HTML, так и на страницы, содержащие код РНР.

Например:

$link = "date.php";

print "<а href = \"$link\">View today's date</a> <br>\n"

-->

</td>

 

<td valign="top" width="75%">

Добро пожаловать в курсовой проект.

<center><!--Заголовок темы по центру синим цветом -->

<h3><font color="#0000FF">Тема курсового проекта</font></h3>

</center>

<p>Цель курсового проекта:

</td>

</tr>

</table>

</body>

</html>

Рис. 3.126. Содержимое файла Lab8_7_2.php для прорисовки контента.

 

Ниже приводится листинг программы, предназначенный для прорисовки колонтитула (часть 3 на рис. 3.122).

 

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">

<title>Lab8_7_3 Колонтитул</title>

</head>

 

<body bgcolor="#7b8079" text="#ffffff" link="fe7d387" alink="#e7d387" vlink="#e7f0e4">

 

<table width="45%" cellspacing="0" cellpadding="0" border="1">

<tr><td valign="top" align="middle">

 

<? print "Copyright &copy ".date("Y")." $site_name. All Rights Reserved.<br>";?>

 

<a href = "mailto:<?=$site_email;?>">Контакт</a> |

<a href ="<?=$site_path;?>privacy.php">Конфиденциальность</a>

</td></tr>

</table>

 

</body>

</html>

Рис. 3.127. Содержимое файла Lab8_7_3.php для прорисовки колонтитула.

 

Рис. 3.128. Результат Lab8_7_3.php для прорисовки колонтитула.

 

Тема №9. Использование файлов для хранения данных в сценариях РНР

  Задание 1. Разработка интерфейса для загрузки файла. Lab9_0.php. В данной работе необходимо разработать интерфейс для загрузки файлов на ваш Web-сайт с удаленного компьютера.…

Примечание. В тексте (рис. 3 ) используется тег strong.

< strong > текст </ strong > этот тег предназначен для выделения важных слов жирным шрифтом, поисковики воспринимают, как важны слова на странице, и дают таким словам наибольший вес.

Тег <strong> предназначен для акцентирования внимания в тексту для пользователей, чтобы дать возможность выделить наиболее важные слова, как для посетителей, так и поисковых систем.

Тег <b>текст</b> - является тегом физической разметки и делает разметку слов также жирным шрифтом, а тег <strong> — тег логической разметки и дает возможность выделить наиболее важные слова в тексте.

Если же посмотреть текст, браузером, то текст на странице, оформленный тегами <b> и <strong>, будет отмечен по-разному. Но в браузер которыми мы пользуемся, выделения тегами <b> и <strong> будут равнозначными. Но для наибольшей выгоды в выдаче в поисковых системах целесообразно использовать тег <strong>

 

Сохраните созданный файл с именем Lab9_0.php в папке для документов вашего Web-сервера. Запустите свой Web-браузер, в поле ввода Адрес введите,

http://localhost/php/Lab9_0.php и нажмите клавишу Enter.

Браузер загрузит страницу Загрузка файла (Рис. 3.130).

 

Рис. 3.130. HTML форма на экране.

 

На рис. 3.130 Вы видите форму загрузки файла с полем ввода и кнопками Обзор и Загрузить на сервер. В следующем параграфе Вы создадите сценарий для обработки этой формы.

 

Создание сценария загрузки.

Перед началом создания сценария запомните список переменных, которые создаются автоматически после успешной загрузки файла. Основная часть имени… $myfile - значение ссылается на временный файл на Web-сервере. $myfile_name - значение является действительным именем файла, который был загружен. Например, если имя файла было…

Загрузкa файла с помощью формы и сценария

Теперь, когда вы создали форму и сценарий для загрузки файла, проверим, как все это работает.   Запустите свой Web-браузер, в поле ввода Адрес введите

Задание 4. Сохранение пользовательских данных в текстовом файле Lab9_6_0.php

В данном задании создается форма ввода (рис. 3.148) предназначенная для заказа товара.

Рис. 3.148. Форма ввода, реализованная в коде Lab9_6_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>Lab9_6_0 Запись в текстовый</title>

</head>

<body>

<p>Lab9_6_0.php Запись в текстовый файл Lab9_6_1.txt</p>

<h1>Автозапчасти </h1>

<h2>Форма заказа</h2>

<form action="Lab9_6_1.php" method=post>

<table border=0>

<tr bgcolor=#cccccc>

<td width=150>Товар</td>

<td width=15>Количество</td>

</tr>

<tr>

<td>Автопокрышки</td>

<td align=left><input type="text" name="tireqty" size=3 maxlength=3></td>

</tr>

<tr>

<td>Машинное масло</td>

<td align=left><input type="text" name="oilqty" size=3 maxlength=3></td>

</tr>

<tr>

<td>Свечи зажигания</td>

<td align=left><input type="text" name="sparkqty" size=3 maxlength=3></td>

</tr>

<tr>

<td>Адрес доставки</td>

<td align=center><input type="text" name="address" size=40 maxlength=40></td>

</tr>

<tr>

<td colspan=2 align=center><input type=submit value="Отправить заказ"></td>

</tr>

</table>

</form>

</body>

</html>

Рис. 3.149. Код HTML (Lab9_6_0.php) для реализации формы рис. 3.148.

Обработчик формы (как показано в теле кода формы на рис. 3.149) находится в файле Lab9_6_1.php (рис. 3.150).

 

Листинг обработчика. Файл Lab9_6_1.php.

<?php

// создать короткие имена переменных

$tireqty = $_POST['tireqty']; //Автопокрышки

$oilqty = $_POST['oilqty']; //Машинное масло

$sparkqty =$_POST['sparkqty'];//Свечи зажигания

$address = $_POST['address']; //Адрес доставки

$DOCUMENT_ROOT = $_SERVER['DOCUMENT_ROOT'];

//DOCUMENT_ROOT: W:/home/localhost/www

?>

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />

<title>Автозапчасти - Результаты заказа</title>

</head>

<body>

<h1>Автозапчасти Lab9_6_1</h1>

<h2>Результаты заказа</h2>

<?php

$date = date('H:i, jS F');

echo '<p>Заказ обработан в '.$date.'</p>';

if ($oilqty<0 or $oilqty<0 or $sparkqty<0):

echo '<p><font color=\"red\">Заказ не принят!</font></p>';

echo 'Отрицательное число в элементах заказа<br></body></html>';

exit;

endif;

 

echo '<p>Список вашего заказа: </p>';

 

$totalqty = 0;

$totalqty = $tireqty + $oilqty + $sparkqty;

echo 'Заказано товаров: '.$totalqty.'<br />';

 

if( $totalqty == 0):

//{

echo 'Вы ничего не заказали на предыдущей странице!<br />';

exit;

//}

endif;

 

if ( $tireqty>0 )

echo $tireqty.' автопокрышек <br />';

if ( $oilqty>0 )

echo $oilqty.' бутылок с маслом<br />';

if ( $sparkqty>0 )

echo $sparkqty.' свечей зажигания<br />';

 

$totalamount = 0.00;//Итого по заказу

define('TIREPRICE', 100); //стоимость автопокрышеки

define('OILPRICE', 10); //стоимость бутылки с маслом

define('SPARKPRICE', 4);

 

$totalamount = $tireqty * TIREPRICE

+ $oilqty * OILPRICE

+ $sparkqty * SPARKPRICE;

 

$totalamount=number_format($totalamount, 2, '.', ' ');

 

echo '<p>Итого по заказу: '.$totalamount.'</p>';

echo '<p>Адрес доставки: '.$address.'</p>';

 

$outputstring = $date."\t"

.$tireqty." автопокрышек\t"

.$oilqty." бутылок с маслом\t"

.$sparkqty." свечей зажигания\t\$"

.$totalamount."\t".$address."\n";

//В качестве разделителя значений использован символ

//горизонтальной табуляции "\t". В качестве разделителя

//строк использована управляющая последовательность "\n"

 

//открыть файл для добавления

//@$fp = fopen($DOCUMENT_ROOT."/../lab9_6_1.txt", 'ab');

//Верхний fopen откроет правильно, как и следующий оператор

//но путь нахождения файла будет различен.

@$fp = fopen($DOCUMENT_ROOT."/php/lab9_6_1.txt", 'ab');

 

/*

echo 'Lab9_6_1 Открыть файл lab9.txt для добавления Путь='.$DOCUMENT_ROOT."/php/lab9_6_1.txt".' <br>Результат открытия='.$fp.' gettype(fp)='.gettype($fp).' <br />';

//открыть файл lab9_6_1.txt для добавления

//Путь=W:/home/localhost/www/php/lab9_6_1.txt

//Результат открытия=Resource id #3 gettype(fp)=resource

*/

if (!$fp)

{echo '<p><strong>В настоящий момент ваш запрос не может быть обработан.<br>'

'Пожалуйста, попытайтесь позже.</strong></p></body></html>';

exit;}

//запись в файл

fwrite($fp, $outputstring, strlen($outputstring));

fclose($fp);//закрытие файла

echo '<p>Заказ записан в файл (путь): '.$DOCUMENT_ROOT.'/php/lab9_6_1.txt.</p>';

?>

</body>

</html>

Рис. 3.150. Код обработчика Lab9_6_1.php, для реализации формы рис. 3.148.

Если пользователь заполнит форму информацией вида:

Рис. 3.151. Пример заполненной формы.

и использует кнопку , то реакция обработчика Lab9_6_1.php будет следующей (рис. 3.152).

 

Рис. 3.152. Реакция обработчика на ошибочные действия пользователя при заполнении формы.

Если пользователь использует кнопку и приведет форму к виду (рис. 3.153),

Рис. 3.153. Пример заполненной формы.

реакция обработчика, после нажатия кнопки “Отправить заказ” показана на рис. 3.154.

Введенная информация будет записана а текстовый файл функцией

 

fwrite($fp, $outputstring, strlen($outputstring));

 

Этот вызов указывает PHP на необходимость записи строки из переменной $outputstring в файл на который указывает $fp. Третий параметр функции strlen($outputstring) указывает на длину записи, заносимой в файл.

 

Например, состав текстового файла после добавления информации из формы показанной на рис. 3.153, представлен на рис. 3.155.

 

Рис. 3.154. Реакция обработчика на действия пользователя при заполнении формы.

 

 

продожение записи в файле Lab9_6_1.txt

Рис. 3.155. Состав файла Lab9_6_1.txt после заполнения формы.

 

Закрытие файла производится с помощью следующей функции:

 

fclose($fp);//закрытие файла

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

 

 

Тема № 10. Работа с каталогами в сценариях РНР

  Задание 1. Создать каталог и добавить в него файл. Пусть необходимо создать каталог Users1 по пути:

Тема №11. Создание панели управления файлами

Задание 1. Разработать форму и сопутствующее ей приложение для панели управления файлами. Пример формы показан на рис. 3.159, ее обработчик приведен на рис. 3.161 (имя…

Тема № 12. Работа с базой через монттор MySQL и PhpMyAdmin

Цель работы:Изучение команд MySQL для хранения, выборки и обработки данных с использованием монитора MySQL и средств PhpMyAdmin.

Интернет ресурсhttp://www.php.ru/mysql/

Задание 1. Создать базу данных через командную строку

 

Соединиться с сервером MySQL и создать базу данных можно, используя утилиту PhpMyAdmin, или использовать окно монитора MySQL.

В последнем случае можно воспользоваться командным (пакетным) файлом Cmysql.bat, листинг которого приведен ниже (рис. 3.162).

CLS

Rem Cmysql.bat Input in MySQL Запуск с любого диска

Рис. 3.162. Командный файл Cmysql.bat для запуска монитора MySQL.   После запуска Cmysql.bat появится приглашение в MySQL вида:mysql> (рис. 3.163):

Customers

( customerid int unsigned not null auto_increment primary key,

Name char(50) not null,

Address char(100) not null,

City char(30) not null)

  Создание таблицы производится с помощью SQL-команды CREATE TABLE,которая указывается в строке монитора.

CLS

Rem Hmysql.bat Запуск с любого места диска

Рис. 3.175. Состав BAT файла для работы с командной строки Hmysql.bat.   Символ < перед именем файла сценария lab13_00.sql для построения таблиц базы данных Books на рис. 3.175 обозначает…

Примечание. Заметьте в одном и том же SQL-операторе нельзя одновременно применять строчные и прописные буквы.

Следующий пример показывает применение двух команд в одном приглашении.

Рис. 3.187. Окно монитора с информацией о текущем пользователе и текущей дате.

 

Задание 3. Вставка данных в базу данных

 

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

Вставка (добавление) строки в таблицу базы данных производится оператором INSERT.

 

Синтаксис оператора INSERT:

INSERT [INTO] table [(columnl, column2, column3, ...)] VALUES

(value1, value2, value3, . . .) ;

 

Например, чтобы вставить запись в таблицу Customers (Клиенты) базы данных BOOKS, можно набрать:

 

insert into customers values

(NULL, "Иван Иванов", "ул. Марата д.8, кв. 7", "С. Петербург");

 

Как видите, table заменяется реальным именем таблицы, в которую требуется внести данные, a values — необходимыми значениями. Значения в данном примере заключены в двойные кавычки. В MySQL строки в любом случае должны быть помещены в пару одинарных или двойных кавычек. Числа и даты в кавычках не нуждаются.

Если использовать командный файл CmySQL.bat (его содержимое см. на рис. 3.162) в командной строке ( рис. 3.188) Total Commander, то мы войдем в монитор MySQL (рис. 3.189).

 

Рис. 3.188. Вызов монитора MySQL с помощью CmySQL.bat.

 

Рис. 3.189. Приглашение на ввод команды в мониторе MySQL.

 

Указав, что нам необходимо работать с базой books (use books;), вводится команда INSERT с указанием имени таблицы и значениеми элементов вставляемой строки в таблицу.

Рис. 3.190. Использование команды вставки в мониторе MySQL.

 

Посмотреть введенные данные можно непосредственно из монитора, если использовать команду SELECT * FROM customers; (рис. 3.191).

 

Рис. 3.191. Использование команды SELECT (выбор) в мониторе MySQL.

 

Обратите внимание, что на рис. 3.190 столбцу customerid присвоено значение null, а в таблице на рис. 3.191 его значение равно единице. Т.е. система MySQL, анализируя описание таблицы customers находит в столбце customerid описатель auto_increment (см. рис. 3.174), что подразумевает автоматическое формирование значения этого поля – следующее по порядку число последовательности.

 

С оператором INSERT связано несколько интересных моментов.

 

Указанные значения в операторе INSERT into customers values

(NULL, "Иван Иванов", "ул. Марата д.8, кв. 7", "С. Петербург") будут использованы для того, чтобы заполнять столбцы таблицы по порядку указанному при создании таблицы. Если необходимо заполнить только отдельные столбцы, или если вы хотите сами указать их порядок — можно поместить список столбцов в ту часть оператора, которая относится к столбцам.

Например:

 

insert into customers (name, city) values

("Петр Петров", "Выборг");

 

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

 

insert into customers

set name="Иван Иванов",address="ул. Победы",

city="Петербург";

 

Заметите, что, добавляя Петр Петров, столбец customerid просто игнорируется. Когда мы создавали базу данных поле customerid было объявлено первичным ключом для таблицы Customers и было обозначено как AUTOINCREMENT. Это значит, что если вставить строку с нулевым (Null) значением или без значения, MySQL сгенерирует следующее число в автоинкрементной последовательности и вставит его автоматически.

 

Если посмотреть содержимое таблицы Customers используя PhpMyadmin (указав в адресной строке браузера путь http://localhost/tools/phpmyadmin/), и состав таблицы будет как показан на рис. 3.192, то необходимо изменить кодировку (рис. 3.199) при работе в мониторе MySQL.

Рис. 3.192. Таблица при отсутствии команды SET NAMES cp866 при вставке из монитора.

Удалите введенную строку используя средства PhpMyAdmin (рис. 3.194).

Рис. 3.193. Пример использования пиктограммы - удалить для удаления записи из таблицы.

 

Рис. 3.194. Пример реакции оболочки PhpMyAdmin при нажатии .

Если запись будет удалена, то используя кнопку (рис. 3.195)

Рис. 3.195. Окно оболочки PhpMyAdmin после удаления единственной записи в таблице Customers.

 

добавьте запись (рис. 3.196)

Рис. 3.196. Вставка новой записи через PhpMyAdmin.

 

Результат вставки приведен на рис. 3.197.

Рис. 3.197. Результат вставки новой записи через PhpMyAdmin.

 

Если посмотреть таблицу (SELECT * FROM customers) после вставки через PhpMyAdmin в мониторе MySQL, то получим результат (рис. 3.198 12.39).

Рис. 3.198. Результат команды SELECT через монитор MySQL.

 

Чтобы привести результат к нормальному виду необходимо использовать в мониторе команду SET NAMES cp866 (Dos кодировка).

 

Результат использования команды приведен на рис. 3.199, на этом же рисунке указана команда выборки данных.

Рис. 3.199. Результат команды SET NAMES cp866 и SELECT, полученный через монитор MySQL.

 

Далее, если использовать команду INSERT into customers values

(NULL, "Иван Иванов", "ул. Марата д.8, кв. 7", "С. Петербург") в мониторе MySql, получим результат (рис. 3.200).

Рис. 3.200. Вставка второй записи в таблицу Customers через монитор MySQL.

 

Заметьте, что добавленная запись будет отображаться в PhpMyAdmin в необходимой нам кодировке (рис. 3.201).

 

Рис. 3.201. Состав таблицы Customers в окне PhpMyAdmin.

 

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

insert into customers values

(NULL, "Петр Петров", "пр. Мира д.7", "Москва"),

(NULL, "Юлия Вонг", "ул. Шевченко д.1, кв 5", "Киев");

Например, вставка через монитор (рис. 3.202), указанных выше двух записей приведет к результату (рис. 3.203).

 

Рис. 3.202. Вставка двух записей в таблицу Customers через монитор.

 

Указание “;” в приглашении “->” и нажатие Enter даст результат.

Рис. 3.203. Состава таблицы Customers (Клиенты) в окне монитора Mysql.

 

Задание 4. Создание командных файлов и файлов сценариев для вставки данных в базу данных.

 

Прямой ввод информации через монитор достаточно трудоемкая работа, поэтому на практике используются сценарии ввода информации.

Ниже приводится листинг сценария lab13_02.sql (рис. 3.204), выполняющий действия по автоматизации вставки информации в базу данных.

Листинг сценария ввода данных.

Рис. 3.204. Листинг lab13_02.sql ввода данных в таблицу customers базы данных books.

 

Сценарий, показанный на рис. 3.204, можно запустить через MySQL следующим образом (если путь к системе указан в Pach Вашей машины):

> mysql -h localhost -u root –p < lab13_02.sql

 

Однако, при выполнении лабораторных работ в дисплейных классах университета, чаще всего, доступ к системным ресурсам ЭВМ закрыт паролем.

 

Поэтому приходится исполнять ряд вспомогательных действий:

1. Перейти в командный процессор Cmd.exe.

Запустить консоль: Пуск -> Выполнить -> "cmd".

 

2. Указать путь, где находится исполняемый модуль MySQL.exe.

Перейти в каталог c:\webservers\usr\local\Mysql5\bin\ , используя команду OC смены директория: cd.

 

3. Указать параметры входа в Mysql и путь к сценарию Lab13_02Ins.sql.

 

Запустить клиент: mysql -u root –p набрав на клавиатуре строку:

c:\Webservers\usr\local\mysql5\bin\mysql -h localhost -u root -D books -p --character-sets-dir="c:\Webservers\usr\local\mysql5\share\charsets" < C:\WebServers\home\localhost\www\php\Lab13_02Ins.sql

 

Введенная информация в Dos окне имеет плохо читаемый вид:

 

 

4. После ввода указанной строки в шаге 3 и нажатия Enter, подтвердить пароль.

 

5. Правильный ввод пароля выведет следующую информацию на экран в виде как показано на рис. 3.205.

 

Рис. 3.205. Таблица customers базы данных BOOKS.

 

Обратите внимание, что вывод содержимого таблицы на рис. 3.205 осуществляется за счет команды , вставленной в Lab13_02Ins.SQL сценарий, представленный на рис. 3.204. Кроме того, использование команды , позволяет согласовать кодировку с PhpMyadmin.

На рис. 3.206 показано состояние таблицы customers базы данных booksсредствами PhpMyAdmin.

 

Рис. 3.206. Таблица customers базы данных booksв PhpMyAdmin.

 

Сценарий показанный на рис. 3.204 можно поместить в пакетный файл Insmysql.bat, как показано на рис. 3.207. В этом же файле указываются все необходимые данные, которые ранее вводились в окне Cmd.exe. Набрать содержимое файла Insmysql.bat можно в любом текстовом редакторе.

Рис. 3.207. Состав пакетного файла Insmysql.bat.

Заметьте, что содержимое файла, например в Блокноте, будет представлено в виде одной строки (конец строки на рис. 3.208 не виден).

 

Рис. 3.208. Изображение пакетного файла Insmysql.bat в Блокноте.

 

Использовать командный файл Insmysql.bat можно, указав его в командной строке менеджера файлов (например, Total Commander рис. 3.209).

 

Рис. 3.209. Вызов пакетного файла Insmysql.bat.

 

Вызов пакетного файла Insmysql.bat приведет к окну (рис. 3.210), указав в котором пароль, получим сообщение о составе таблицы customers (рис. 3.211).

Рис. 3.210. Этап работы пакетного файла Insmysql.bat.

 

В файле Insmysql.bat (рис. 3.207) использована команда перенаправления , приказывающая вызвать на обработку файл сценарий

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

В файле сценария (рис. 3.204) использована команда

,

которая осуществляет выборку (и вывод на экран в данном случае) всей информации из таблицы customers (рис. 3.211).

Заметьте, что строка с номером 6 (рис. 3.211) соответствует строке с номером 5 на этом же рисунке.

Рис. 3.211. Результат работы пакетного файла Insmysql.bat.

 

Проанализировать информацию, показанную на рис. 3.211, достаточно трудно, т.к. она только промелькнет на экране и окно с ней закроется автоматически. Чтобы увидеть и проанализировать информацию можно воспользоваться средствами PhpMyAdmin или прочитать ее через монитор MySQL.

Однако, если модифицировать файл Insmysql.bat (рис. 3.207) и вставить в нем команду вывода результатов во внешний файл (рис. 3.212), то результат работы (рис. 3.211) становится доступен через любой редактор.

 

Рис. 3.212. Модификация пакетного файла Insmysql.bat.

 

Далее (рис. 3.218) будет показано, как следует модифицировать пакетный файл (рис. 3.212), чтобы имя файла являлось в нем формальным параметром.

 

Ниже приводится листинг сценария lab13_03.sql (рис. 3.215), выполняющий действия по вставке информации в базу данных, схема которой представлена на рис. 3.212 и для удобства продублирована ниже (рис. 3.214).

 

Для продолжения работы очистите таблицу Customers. Для этого перейдите в монитор MySQL (CmySql.bat) и выполните команды USE BOOKS и DELETE FROM customers (рис. 3.213).

 

Рис. 3.213. Использование команды Delete - чистки таблицы базы.

 

Customers (CustomerId, Name, Address, City) - Клиент

Оrders (ОrderId, CustomerId, Аmount, Date) - Заказ

Books (ISBN, Author, Title, Price) - Книга

Оrder_items (ОrderId,ISBN, Quantity ) - Покупка

Рис. 3.214. Схема тестовой базы.

 

Листинг (lab13_03.sql) ввода данных в таблицы базы данных для схемы рис. 3.214.

Use books;

SET NAMES cp1251;

Insert into customers values

(1, "Петр Петров", "пр. Мира д.7", "Москва"),

(2, "Юлия Вонг", "ул. Шевченко д.1, кв 5", "Киев"),

(3, "Ян Дрибас", "пр. Зорь д.5, кв. 12 ", "Минск");

Insert into orders values

(NULL, 3, 69.98, "2009-12-02"),

(NULL, 1, 49.00, "2009-12-15"),

(NULL, 2, 74.98, "2009-12-19"),

(NULL, 3, 24.99, "2010-02-01");

Insert into books values

("0-672", "Люк Морган", "Java 2 для профессионалов", 34.99),

("0-673", "Дж. Даун", "Инсталляция GNU/Linux", 24.99),

("0-674", "В. Дрибас", "Основы баз данных", 24.99),

("0-675", "М. Цаленко", "Алгебра баз данных", 49.99);

Insert into order_items values

(1, "0-672", 2),

(2, "0-675", 1),

(3, "0-675", 1),

(3, "0-674", 1),

(4, "0-673", 3);

SET NAMES cp866;

select * from orders; select * from books; select * from order_items;

Тема № 13. Извлечение данных из базы данных

Цель.Практическое использование конструкций SQL.

Задание 1. Оператор выборки данных SELECT

Оператор SELECT языка SQL извлекает данные из базы данных, выбирая из таблицы строки, которые отвечают заданному критерию поиска.

Основная форма оператора SELECT следующая (полное описание и использование языка SQL приведено в [7], в этой теме будут рассматриваться наиболее употребимые):

 

SELECT items

FROM tables

[ WHERE condition ]

[ GROUP BY group_type ]

[ HAVING wnere_definition ]

[ ORDER BY order_type ]

[ LIMIT Iimit_criteria ] ;

 

Рассмотрим каждую конструкцию, используя схему базы данных представленную на рис. 3.214. Выполнение данной темы предполагает, что MySQL запущен .

 

Простейшим вариантом выборки данных Вы уже неоднократно пользовались, используя конструкцию SELECT * FROM tables (см. например рис. 3.220). Символ “*” использовался для вывода всех столбцов искомой таблицы tables.

Если взамен символа “*” использовать (через запятую) имена столбцов, то в результате подобного запроса Вы получите информацию только по тем столбцам, которые указаны в качестве элементов items.

Например, запрос (поиск):

SELECT name, city FROM customers ;

запрашивает данные столбцов name (имя) и city (город) таблицы Customers: Если воспользоваться монитором MySQL (вызов через пакетный файл CmySql.bat -… Если воспользоваться средствами PhpMyAdmin для реализации этого запроса, то результат будет такой же, но изображение…

Примечание. Обратите внимание, что список далеко не полон, и если понадобится что-нибудь, отсутствующее в нем, обратитесь к руководству по MySQL.

 

Знаки операции сравнения для конструкции WHERE (рис. 3.231):

Операция (терм сравнения) Название (если применимо) Пример Описание
= равенство custumerid = 3 Проверяет, являются ли два значения равными
> больше amount>60.00 Проверяет, больше ли одно значение другого
< меньше amount<60.00 Проверяет, меньше ли одно значение другого
>= больше или равно amount>=60.00 Проверяет, больше или равно одно значение по отношению к другому
<= меньше или равно amount<=60.00 Проверяет, меньше или равно одно значение по отношению к другому
!= или <> не равно quantity !=0 Проверяет, не равны ли два значения. Пробел между ! и = не допустим
IS NOT NULL адрес не равен нулю   Проверяет, имеет ли поле значение
IS NULL адрес равен нулю   Проверяет, не имеет ли поле значения
BETWEEN   величина между 0 и 60.00 Проверяет, значение больше или равно минимальному и меньше или равно максимальному
IN   город содержится Проверяет, содержится ли значение в определенном множестве
NOT IN   город не содержится Проверяет, не содержится ли значение в определенном множестве
LIKE соответствие name like ("%Fred %") Проверяет, отвечает ли зачение образцу, используя простые механизмы соответствия SQL
NOT LIKE соответствие name not like ("%Fred %") Проверяет, не соответствует ли значение образцу
REGEXP регулярное name regexp Проверяет, соответствует ли выражение значение регулярному выражению

Рис. 3.231. Операции сравнения для конструкции WHERE.

 

Три последних строки таблицы относятся к LIKE и REGEXP. Это формы соответствия образцу.

 

Операция LIKE использует простой механизм соответствия SQL. Образец может состоять из обычного текста плюс % (знак процента) для указания совпадения с любым количеством символов и _ (символ подчеркивания) для указания совпадения с одним символом. В MySQL соответствия не чувствительны к регистру. Например, 'Fred %' найдет любое значение, которое начинается с 'fred '.

 

Ключевое слово REGEXP используется для соответствия регулярных выражений. MySQL использует регулярные выражения в стиле POSIX. Вместо REGEXP можно применять и RLIKE, что является синонимом. Регулярные выражения POSIX также применяются и в РНР.

 

Можно проверять несколько критериев сразу, объединяя их операциями AND или OR. Например,

Рис. 3.232. Операции сравнения для конструкции WHERE.

 

Следующий запрос показывает выборку с использованием операции BETWEEN.

Рис. 3.233. Операции сравнения для конструкции WHERE.

 

Запрос на совпадение с операцией LIKE

Рис. 3.234. Операции сравнения для конструкции WHERE.

 

Обратите внимание на следующий запрос:

Рис. 3.235. Результат с пустым ответом.

 

Задание 3. Извлечение данных из нескольких таблиц

Часто для получения ответа от базы данных на заданный вопрос могут потребоваться данные нескольких таблиц. Например, если необходимо узнать, кто из клиентов осуществлял в этом месяце заказы, придется просмотреть таблицы Customers (Клиент) и Orders (Заказ). Если нужно узнать, что конкретно они заказали, нельзя обойти вниманием и таблицу Order_Items (Покупка).

 

Примечание. Эти данные находятся в разных таблицах, поскольку относятся к разным реальным объектам. Это один из принципов хорошей разработки базы данных.

 

Для объединения этой информации в SQL потребуется выполнить операцию, называемую соединением (join). Подразумевается соединение двух и больше таблиц с тем, чтобы сохранялись отношения между данными. Если, например, необходимо посмотреть, какие заказы сделал клиент Ян Дрибас, то сначала потребуется просмотреть таблицу Customers и найти в ней CustomerlD для клиента, после чего — таблицу Orders на предмет заказов, сделанных этим CustomerlD.

 

Хотя на первый взгляд операция соединения достаточно проста, на самом деле это один из наиболее сложных и тонких разделов SQL. В MySQL существует несколько разных типов соединения, каждый из которых предназначен для определенной цели.

 

Простое соединение двух таблиц

Рис. 3.236. Результат запроса с использованием соединения таблиц.  

Соединение трех и более таблиц

  Например, если требуется узнать, кто из клиентов заказал книги по Java,…  

Select customers . name

From customers, orders, order_items, books

and orders.orderid = order_items.orderid and order_items.isbn = books.isbn and books.title like '%Java%';

Select customers.customerid, customers.name, orders.orderid

From customers left join orders

Рис. 3.239. Запрос с левосторонним соединением.   Данный запрос SQL использует объединение по остатку для таблиц Customers и Orders. Его синтаксис в отношении условий…

Select customers.customerid, customers.name

From customers left join orders

Using (customerid)

Where orders.orderid is null;

И вот результат: Рис. 3.244. Результат левостороннего соединения таблиц Customers и Orders с использованием using.

Select customers . name

From customers, orders, order_items, books

where customers.customerid = orders.customerid

and orders.orderid = order_items.orderid

and order_items.isbn = books.isbn

and books.title like '%Java%';

Рис. 3.245. Запрос без использования псевдонимов.

 

Указывая таблицы, в фразе FROM, мы за именем таблицы вставляем конструкцию as, присваивая таблице псевдоним (короткое имя).

Select с.name

From customers as с, orders as о, order_iterns as oi, books as b

where с.customerid = о.customerid

and о.orderid = oi.orderid

and oi.isbn = b.isbn

and b.title like '%Java%' ;

Рис. 3.246. Запрос с использованием псевдонимов.

 

Кроме того, псевдонимы можно давать столбцам, однако к этому мы вернемся после того, как рассмотрим обобщенные функции.

 

Табличные псевдонимы необходимы в случае соединения таблицы с самой собой. А такой подход очень удобен для поиска строк в той же таблице, в которой есть одинаковые значения. Если требуется найти клиентов, живущих в одном городе, скажем, с целью создания читательского клуба, можно присвоить одной и той же таблице Customers два разных псевдонима:

Select sl.name, s2.name, sl.city

From customers as sl, customers as s2

where sl.city = s2.city

and sl.name != s2.name;

Рис. 3.247. Запрос с использованием 2-х псевдонимов на одной таблице.

 

Чтобы раскрыть суть соединения таблицы самой с собой, добавим в таблицу Customers (Клиенты) еще одну запись (рис. 3.248).

Рис. 3.248. Запрос на добавление нового клиента.

 

Далее исполним запрос на самосоединение таблиц:

Рис. 3.249. Список клиентов из одного города.

 

Мы делаем вид, что таблица Customers — это на самом деле две разные таблицы, sl и s2, и выполняем соединение по столбцу City. Второе условие, sl.name != s2.name, необходимо для того, чтобы в результате запроса не выдавалось соответствие клиента самому себе.

 

Резюме по типам соединениий

  Название Описание Декартово произведение Все комбинации всех строк во всех таблицах. В случае… Рис. 3.250. Типы соединеий в MySQL.  

Задание 6. Извлечение данных в определенном порядке

 

Если строки, извлеченные по запросу, должны перечисляться в определенном порядке, для этого используется конструкция ORDER BY оператора SELECT. Эта особенность удобна для представления результатов запроса в удобочитабельном формате.

 

Конструкция ORDER BY применяется для сортировки строк в столбцах, указанных в конструкции SELECT. Например,

Select name, address

From customers

Order by name ;

Рис. 3.251. Сортировка результата с помощью ORDER BY в MySQL.

 

Рис. 3.252. Результат сортировки результата с помощью ORDER BY.

 

Такой запрос представит имена клиентов в алфавитном порядке по именам name.

 

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

 

По умолчанию порядок сортировки идет по возрастанию (от а до z или по возрастанию числовых значений). Это можно указать ключевым словом ASC (от англ, ascending):

Select customerid,address, name

From customers

Order by address asc;

 

Рис. 3.253. Результат сортировки результата с помощью ORDER BY ASC.

 

Изменить порядок сортировки на обратный можно с помощью другого ключевого слова — DESC (от англ, descending):

Select address, name

From customers

Order by address desc;

Рис. 3.254 13.27. Результат сортировки результата с помощью ORDER BY DESC.

 

Сортировать можно и по нескольким столбцам. Вместо названий можно использовать псевдонимы столбцов, и даже их порядковые номера (например, 3 — для третьего столбца в таблице) см. [7].

 

 

Задание 7. Группировка и агрегирование данных

 

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

 

Эти функции агрегирования можно применять как для таблицы в целом, так и для групп данных внутри таблицы.

 

Наиболее часто используемые функции перечислены в таблице показанной на рис. 3.255.

 

Название Описание
AVG (столбец) Средняя величина значений в определенном столбце.
COUNT (элементы) При указании столбца выдается количество числовых ненулевых) значений в этом столбце. Если перед названием столбца вставить слово DISTINCT, выдается только количество конкретных значений в столбце. Если указать COUNT (*) — подсчет строк будет производиться независимо от нулевых значений.
MIN (столбец) Минимальное значение в столбце.
МАХ (столбец) Максимальное значение в столбце.
STD (столбец) Стандартное отклонение значений в столбце.
SUM (столбец) Сумма значений в столбце.

Рис. 3.255. Функции агрегирования в MySQL.

 

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

Select avg (amount)

From orders;

Рис. 3.256. Результат AVG по столбцу amount таблицы orders.

 

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

 

Select customerid, avg (amount)

From orders

Group by customerid;

При использовании конструкции GROUP BY с функцией агрегирования это фактически меняет поведение функции. Вместо того чтобы выдавать среднюю величину… Рис. 3.257. Результат AVG с группировкой по Клиентам.

Select customerid, avg (amount)

From orders

Group by customerid

having avg (amount) > 50;

 

Заметьте, конструкция HAVING обращается к группам. Такой запрос выдаст следующий результат:

Рис. 3.258. Результат AVG с группировкой по HAVING.

 

Выбор количества отображаемый строк

Одна конструкция оператора SELECT, которая может оказаться особенно полезной в Web-приложениях — это конструкция LIMIT. Ее используют для указания, сколько строк результата следует отображать. Необходимы два параметра: номер строки, с которой следует начать, и количество строк.

 

Следующий запрос иллюстрирует применение LIMIT:

Select name, address, city

From customers

Limit 2, 3;

 

Запрос можно интерпретировать так: "Выбрать имена среди клиентов, в результате отобразить три строки, начиная со строки 2". Не забывайте, что нумерация строк начинается с нуля.

Рис. 3.259. Результат применения LIMIT.

 

Это очень удобная конструкция для Web-приложений. Ее принцип точно такой же, как и в случае, когда покупатель листает каталог и хочет видеть на одной странице только 10 пунктов.

Примечание. Обратите внимание, что LIMIT в стандарте ANSI SQL отсутствует, потому его использование приводит к несовместимости кода со многими реляционными СУБД.

 

 

Задание 8. Обновление записей в базе данных (UPDATE)

 

Помимо того, что данные необходимо извлекать из базы данных, их еще необходимо периодически обновлять. Например, иногда требуется повысить цены на книги в базе данных. Это можно сделать, используя оператор UPDATE.

 

Типовая форма этого оператора выглядит так:

 

UPDATE tablename

SET columnl=expressionl, column2=expression2,

[WHERE condition]

[LIMIT number]

 

Основная идея заключается в обновлении таблицы с именем tablename, изменяя каждый указанный столбец column соответствующим выражением expression. Конструкцией WHERE UPDATE можно ограничить до работы с определенными строками, а конструкцией LIMIT обозначить количество строк, которые нужно обновить.

 

Давайте рассмотрим несколько примеров.

Если мы хотим повысить цену всех книг на 10%, можно воспользоваться оператором UPDATE без конструкции WHERE:

Исходное состояние таблицы BOOKS приведено ниже.

Рис. 3.260. Состояние таблицы BOOKS до модификации данных.

 

Update books

set price=price * 1.1;

Рис. 3.261. Состояние таблицы BOOKS после модификации данных.

 

Если же требуется изменить одну строку, скажем, адрес некоторого клиента, можно поступить таким образом:

 

Update customers

where customerid = 4; Так, например, состояние таблицы показанное на рис. 3.248 будет приведено к…  

Alter table customers

Modify name char(35) not null;

 

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

Alter table orders

Add tax float(6,2) after amount;

 

В мониторе результат добавления столбца и состав столбцов таблицы Orders:

Рис. 3.264. Модифицированный состав структуры таблицы Orders.

 

Иногда какой-нибудь столбец может оказаться лишним. Удалим столбец, который мы только что добавили:

 

Alter table orders

Drop tax;

 

Задание 10. Удаление записей, таблиц и базы данных (DELETE)

 

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

 

DELETE FROM table

[WHERE condition] [LIMIT number]

 

Если просто записать

DELETE FROM table;

 

то удаляются все строки в таблице, так что будьте осторожны! Обычно ненужными оказываются какие-то определенные строки и они указываются при помощи конструкции WHERE. Это может случиться, если какая-то книга больше не продается или кто либо из клиентов длительное время ничего не заказывает:

Delete from customers

where customerid=5;

 

Ниже (на рис. 3.265) приводится окно монитора с использованием оператора DELETE и результат его работы.

Рис. 3.265. Состав таблицы Customers после удаления пятой строки.

 

Конструкция LIMIT ограничивает количество удаляемых строк.

 

Удаление таблиц

Для этого используют оператор DROP TABLE.

 

DROP TABLE table;

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

 

Удаление целой базы данных

Удаление базы данных осуществляется оператором - DROP DATABASE:

 

DROP DATABASE database;

 

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

 

Дополнительная информация

В этой теме был рассмотрен обычный SQL, с которым приходится иметь дело при работе с базами данных MySQL.

Если хотите получить дополнительную информацию по SQL, обратитесь к истокам, почитайте о стандартах ANSI SQL, обратившись по адресу: http://www.ansi.org/

 

Дополнительные возможности MySQL по сравнению с ANSI SQL описаны на Web-сайте MySQL: http://www.mysql.com/.

 

Тема № 14. PHP и MySQL. Доступ к базе данных MySQL из Web с помощью РНР

В заданиях данной темы используется база данных BOOKS, схема которой представлена на рис. 3.171, создание таблиц осуществлено с помощью SQL-сценария… В теме рассматриваются следующие вопросы: § Как работает архитектура Web-баз данных

Установка соединения

@ $db = mysql_pconnect($Host, $User, $Password);   Потребуется указать имя узла (Host), на котором размещен сервер MySQL, имя пользователя (User), чтобы войти в него, и…

Выбор базы данных

Работая с MySQL из командной строки (см. предыдущею лабораторную работу), необходимо указывать, какая база данных нужна:

 

Use books;

 

То же самое необходимо и при подключении из Web. Это может сделать РНР-функция

 

В результате будет использоваться база данных с именем BOOKS. Можно также использовать соединение с базой данных, для которого требуется выполнить эту операцию (в нашем случае $db), однако, если его не указать, будет использоваться последнее открытое соединение. Если открытое соединение не существует, оно открывается по умолчанию, как если бы вызывалась mysql_connect().

 

Выполнение запроса к базе данных

   

Получение результатов запроса

  В нашем примере использовались две функции: mysql_num_rows()

Отсоединение от базы данных

При процедурном подходе используется функция: mysqli_free_result($result) ;

Другие интерфейсы PHP-баз данных

РНР поддерживает различные библиотеки, что дает возможность подключаться к огромному количеству баз данных, включая Oracle, Microsoft SQL Server, mSQL и PostgreSQL.

 

В целом принципы подключения и подачи запросов любой из этих баз данных одни и те же. Названия функций могут быть разными, разные базы данных могут иметь разную функциональность, но если вы можете подключиться к MySQL, то другие СУБД вряд ли поставят Вас в безвыходное положение.

Дополнительные темы.

Переменные окружения HTTP

Когда Web-браузер выполняет запрос к Web-серверу, он вместе с запросом посылает еще дополнительный список переменных. Эти переменные называются переменными окружения и могут использоваться для отображения динамического содержимого или авторизации пользователей.

Функция phpinfo () выводит большое количество информации о программном обеспечении Web-сервера, версии РНР, который вы запустили, и об основных переменных окружения HTTP. Чтобы посмотреть эту информацию, выполните следующие действия:

Создайте новый файл с помощью текстового или HTML редактора. Введите строку РНР-кода:

<?

phpinfo();

?>

Сохраните созданный файл с именем phpinfo.php в папке для документов вашего Web-сервера.

Запустите браузер, в поле Адрес (Address) введите

http://localhost/php/phpinfo.php

Настройка сервера

  Если Вы "все сделали правильно", но Ваш код неработоспособен, или…  

Коротко о правах на файлы

В *nix-подобных операционных системах каждой папке, файлу, ссылке выставлены соответствие права доступа. Они могут выглядеть как rwx-rw-r- или же…   Доступность файла или каталога зависят от идентификатора пользователя и идентификатора группы, в которую он входит.…

Содержание

Методические указания к выполнению лабораторных работ. 3

Предисловие. 3

Библиографический список. 3

Лабораторная работа № 1. 4

Тема №1. Инсталляция MySQL и создание локального сервера. 4

Тема №2. Инструментальная среда PHPMYADMIN.. 20

Лабораторная работа № 2. 27

Тема №1. Создание баз и таблиц данных. 27

Тема №2. Создание пользователей базы данных. 41

Лабораторная работа № 3. 53

Программирование с использованием PHP и MySQL.. 53

Тема №1. Создание форм.. 55

Задание 1. Разработать HTML-форму с переключателями. 55

Задание 2: Разработать HTML-форму с методом Post 61

Тема №2. Передача значений переменным в сценариях PHP. Использование возможностей метода GET без HTML-формы для передачи значений переменных в сценариях PHP. 64

Задание 1: Разработать приложение с использованием метода GET. 64

Тема №3. Создание формы и РНР-сценария в одном файле. 69

Задание 1: Получение данных из текстового поля. 69

Задание 2. Использование рамок в приложении. 75

Задание 3. Разработать приложение с использьзованием только HTML.. 81

Тема №4. Использование чисел. Управляющие структуры.. 86

Задание 1. Разработать приложение с формой для простого калькулятора. 86

Тема №5. Использование управляющей структуры switch. 90

Задание 1. Разработать приложение с использованием конструкции SWITCH-CASE.. 90

Задание 2. Разработать сценарий обрабочика кнопки OK с использованием Switch. 94

Тема № 6. Использование регулярных выражений в сценариях РНР. 95

Задание 1. Вывод информации о ошибочно заполненных полях формы.. 96

Задание 2. Использование функций пользователя для контроля полей формы.. 100

Задание 3. Проверка ограничений в текстовом поле. Lab6_0_2.php. 106

Задание 4. Специфика имени пользователя. Lab6_0_3.php. 111

Задание 5. Специфика имени пользователя с помощью JavaScript. Lab6_0_4.php. 112

Задание 6. Проверка правильности ввода URL. Lab6_1.php. 114

Задание 7. Проверка правильности ввода из списка. Lab6_2.php. 118

Тема №7. Работа с массивами. 126

Задание 1. Означивание массива и вывод на экран. Lab7_0.php. 128

Задание 2. Цикл foreach. Lab7_1.php. 129

Задание 3. Конструкции list и each. Lab7_2.php. 131

Задание 4. Сортировка массива. Lab7_3.php. 133

Тема №8. Функции в сценариях РНР. 136

Задание 1. Вложенные функции. Lab8_0_0.php. 138

Задание 2. Объявление функций внутри других функций. Lab8_0.php. 139

Задание 3. Возврат значений функцией. Lab8_1.php. 141

Задание 4. Возврат нескольких значений функцией. Lab8_2.php. 142

Задание 5. Возвращение функцией нескольких величин. Lab8_3.php. 144

Задание 6. Рекурсивные функции . Lab8_4.php. 145

Задание 7. Функции-переменные. Lab8_5.php. 146

Задание 8. Построение библиотек функций. Lab8_6_0.php. 147

Задание 9. Построение шаблона сайта. Lab8_7_0.php. 149

Тема №9. Использование файлов для хранения данных в сценариях РНР. 155

Задание 1. Разработка интерфейса для загрузки файла. Lab9_0.php. 155

Задание 2. Автоматическая отправка данных по электронной почте. Lab9_4.php. 162

Задание 3. Сохранение пользовательских данных в текстовом файле Lab9_5.php. 167

Задание 4. Сохранение пользовательских данных в текстовом файле Lab9_6_0.php. 173

Тема № 10. Работа с каталогами в сценариях РНР. 179

Задание 1. Создать каталог и добавить в него файл. 179

Тема №11. Создание панели управления файлами. 184

Задание 1. Разработать форму и сопутствующее ей приложение для панели управления файлами. 184

Тема № 12. Работа с базой через монттор MySQL и PhpMyAdmin. 188

Задание 1. Создать базу данных через командную строку. 188

Задание 2. Создание таблиц базы данных через командную строку. 194

Задание 3. Вставка данных в базу данных. 201

Задание 4. Создание командных файлов и файлов сценариев для вставки данных в базу данных. 208

Тема № 13. Извлечение данных из базы данных. 219

Задание 1. Оператор выборки данных SELECT. 219

Задание 2. Извлечение данных по определенному критерию.. 221

Задание 3. Извлечение данных из нескольких таблиц. 224

Задание 4. Поиск несоответствующих строк. 227

Задание 5. Использование псевдонимов имен таблиц (AS) 230

Задание 6. Извлечение данных в определенном порядке. 232

Задание 7. Группировка и агрегирование данных. 234

Задание 8. Обновление записей в базе данных (UPDATE) 237

Задание 9. Изменение таблиц после создания (ALTER TABLE) 239

Задание 10. Удаление записей, таблиц и базы данных (DELETE) 241

Тема № 14. PHP и MySQL. Доступ к базе данных MySQL из Web с помощью РНР. 243

Задание 1. Изучение работы архитектуры Web-баз данных. 243

Задание 2. Проверка и фильтрация данных, исходящих от пользователя. Использование объектно-ориентированного синтаксиса PHP. 250

Задание 3. Внесение новой информации в базу данных. Проверка и фильтрация данных, исходящих от администратора. 260

Задание 4. Создание и удаление баз данных. 272

 

– Конец работы –

Используемые теги: Инструментальная, среда, PHPMYADMIN, Создание, баз, таблиц, данных0.084

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

Что будем делать с полученным материалом:

Если этот материал оказался полезным для Вас, Вы можете сохранить его на свою страничку в социальных сетях:

Еще рефераты, курсовые, дипломные работы на эту тему:

КУРС ЛЕКЦИЙ ПО ИНФОРМАТИКЕ Тема: Базы данных, Банки Данных, Системы Управления Базами Данных — СУБД
ГОУ ВПО ВОЛОГОДСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ Факультет промышленного менеджмента...

Общее понятие о базах данных. Основные понятия систем управления базами данных. Модели данных. 10
Сетевые технологии обработки данных Компоненты вычислительных сетей... Принципы организации и основные топологии вычислительных сетей Принципы... Сетевой сервис и сетевые стандарты Средства использования сетевых сервисов...

Использование электронной таблицы как базы данных. Сортировка и фильтрация данных в Microsoft Excel 97
Существуют ограничения, накладываемые на структуру базы данных: • первый ряд базы данных должен содержать неповторяющиеся имена полей; • остальные… Сортировка - это упорядочение данных по возрастанию или по убыванию. Проще… Это средство отображает подмножество данных, не перемещая и не сортируя данные. При фильтрации базы отображаются…

Лекция № 3. Таблицы. Типы данных и свойства полей. Создание и заполнение таблиц
Цели... Изучить таблицы и типы данных полей...

Реляционные Базы Данных. SQL - стандартный язык реляционных баз данных
В компьютере, например, можно хранить фамилии и адреса друзей или клиентов. Один из типов баз данных - это документы, набранные с помощью текстовых… Другой тип - файлы электронных таблиц, объединяемые в группы по характеру их использования.

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

Текстовый процессор Word. Работа с таблицами и диаграммами. Использование и создание графических объектов. Создание новых форм для ввода данных
Практическое занятие Текстовый процессор Word Работа с таблицами и диаграммами Использование и создание графических объектов Создание новых... Таблицы всегда были неотъемлемым атрибутом печатной научно технической документации Они используются для более...

Создание и описание базы данных "СТУДЕНТЫ"
Также должнасуществовать возможность печати отчетов не выходя из Базы данных.Интерфейсом взаимодействия с базой данных должна служить удобная… В ней кнопки должны соответствоватьвыполняемым функциям.3. Основанием… А в случае трудоемкостивосстановления первоначального вида реко мендуется перезаписать резервную копиюпрограммы с…

Создание базы данных геореференсированных фотографических изображений почв в on-line доступе
Второй заключается в работе с данными дистанционного зондирования, которые позволяют результаты, полученные при точечных наблюдениях, распространить… Взаимодействие этих двух подходов достигается следующим образом. Благодаря… После того, как найдены соответствия, рассчитываются стохастические многопараметрические связи почвенных свойств и…

Разработка и создание базы данных "Продовольственные товары"
Такая система должна: • обеспечивать получение общих и/или детализированных отчетов по итогам работы; • позволять легко определять тенденции… Современные СУБД в основном являются приложениями Windows, так как данная… Общепринятыми, также, являются технологи, позволяющие использовать возможности других приложений, например, текстовых…

0.033
Хотите получать на электронную почту самые свежие новости?
Education Insider Sample
Подпишитесь на Нашу рассылку
Наша политика приватности обеспечивает 100% безопасность и анонимность Ваших E-Mail
Реклама
Соответствующий теме материал
  • Похожее
  • По категориям
  • По работам