[ Наглядно о непонятном ] – Как работает серверный вызов в 1С
В этой статье мы покажем, как взаимодействуют клиентская и серверная части платформы и какие есть особенности в использовании директив компиляции.
Это будет полезно начинающим разработчикам и тем, у кого есть пробелы в области клиент-серверного взаимодействия – всё объясним «на пальцах» 🙂
Клиент-серверная архитектура заложена в платформе изначально – со времен «1С:Предприятие 8.0».
Однако при разработке на 8.0 и 8.1 о разделении кода на клиентскую и серверную часть можно было не заботиться, поскольку на клиенте (на толстом клиенте) был доступен тот же функционал, что и на сервере.
Всё изменилось с выходом платформы «1С:Предприятие 8.2», когда появился тонкий клиент. Теперь на клиенте доступен один функционал, на сервере – другой. Клиент и сервер «общаются» между собой с помощью серверного вызова.
Конечно, это усложнило процесс разработки, но с другой стороны – можно создавать более оптимальные (быстрые) решения, поскольку все сложные задачи выполняются на сервере.
Немного базовой теории
Перед тем, как перейти к содержательной части, договоримся о некоторых ограничениях:
Далее, освежим в памяти немного теории.
Директивы, в имени которых упоминается «Клиент», устанавливают ограничение на обращение к базе данных.
Процедуры или функции, написанные под директивой «Без контекста», не имеют доступа к контексту (данным) формы. Исходя из этой информации, легко представить ограничения директив по доступу к данным в виде следующей таблицы:
Директива | Данные формы | База данных |
&НаКлиенте | + | – |
&НаСервере | + | + |
&НаСервереБезКонтекста | – | + |
&НаКлиентеНаСервереБезКонтекста | – | – |
Опережая вопрос «Для чего же директива с самым длинным названием, если она ограничивает и использование контекста форм, и обращения к базе данных?», напомню: любая процедура и функция поддерживает обработку информации, переданной в неё в качестве параметров.
Отсюда делаем вывод: у методов, описанных под директивой «&НаКлиентеНаСервереБезКонтекста», единственным источником данных являются эти самые переданные параметры.
Не стоит забывать и про доступность вызова одних процедур и функций из других. Для этого стоит запомнить, что можно вызывать только те процедуры и функции, которые находятся под одноимённой (с родительским методом) директивой или под директивой, находящейся ниже (чем у родительского метода) согласно списку:
То есть из метода, описанного под директивой «&НаКлиенте», можно вызывать процедуры и функции, описанные под любой директивой. А вот «из-под» директивы «&НаСервереБезКонтекста» можно вызывать только то, что описано под директивой «&НаСервереБезКонтекста» или «&НаКлиентеНаСервереБезКонтекста».
Теперь про серверный вызов
Серверный вызов – это передача какой-то информации с клиентской части «1С:Предприятие 8» на серверную часть с целью вернуть обратно некий набор данных.
Самый первый серверный вызов инициализируется в момент начала сеанса работы 1С. То есть когда пользователь выполняет вход в информационную базу:
«Оу! При чём тут Библиотека?!» – спросите Вы.
Обратите внимание, что доступ к базе данных есть только на серверной части, а соединение между клиентом и сервером имеет ограниченную пропускную способность. Это и неудивительно – ведь соединение между клиентской и серверной частью может быть установлено даже по нестабильному низкоскоростному каналу связи (например, посредством мобильного интернета).
Кроме этого, передача данных между клиентом и сервером возможна только посредством серверного вызова.
Но, для того чтобы перейти к основной теме данной статьи, необходимо сначала разобраться – где будет выполняться программный код, написанный под определенными директивами. То есть на какой части приложения «1С:Предприятие 8» будут доступны процедуры и функции, описанные под директивами «&НаКлиенте», «&НаСервере», «&НаСервереБезКонтекста» и «&НаКлиентеНаСервереБезКонтекста»:
Видим, что на стороне клиента у нас будут доступны процедуры и функции, написанные под двумя директивами из четырёх, а на стороне сервера – под тремя из четырёх.
Сразу возникают вопросы: «Зачем такое многообразие и чем оно полезно?», «Как метод, описанный под директивой «&НаКлиентеНаСервереБезКонтекста» может выполняться и на клиенте, и на сервере?».
Сейчас мы постараемся понять особенности работы системы при использовании директив и почему необходимо уметь правильно использовать каждую из существующих директив компиляции.
И в этом нам помогут наши новые друзья, знакомьтесь!
Итак, давайте рассмотрим несколько особенностей работы программного кода в «1С:Предприятие 8», написанного под разными директивами.
Действие 1. Открытие пользователем формы с данными.
Действие 2. Получение из открытой Пользователем формы дополнительных данных из Базы данных.
Получение этих данных может быть описано под двумя директивами – «&НаСервере» и «&НаСервереБезКонтекста». Рассмотрим оба случая.
Явление 1. Директива «&НаСервере»
После выполнения метода на сервере, весь этот «пакет» транспортируется обратно. Таким образом, форма со всеми элементами и данными дважды проходит через самое узкое место системы.
Явление 2. Директива «&НаСервереБезКонтекста»
Таким образом, серверный вызов не несёт лишней нагрузки, и для передачи данных между клиентом и сервером потребуется меньше ресурсов.
Из примеров видно, что далеко не всегда оправдано указание директивы компиляции «&НаСервере» с точки зрения использования контекста (данных) формы на сервере.
Если возможно решить возникшую задачу путём отправки на сервер только определённого набора данных, то надо эту возможность использовать и описывать метод под директивой «&НаСервереБезКонтекста». Это позволит уменьшить нагрузку на серверный вызов, а также не занимать сервер обработкой и хранением ненужной в текущий момент информации.
До этого момента при каждом изменении свойства «Видимость» происходил серверный вызов, как при использовании директивы «&НаСервере».
Но использование директивы «&НаСервереБезКонтекста» не является панацеей. Помимо нагрузки на серверный вызов, всегда необходимо задумываться ещё над одним параметром.
Действие 3. Обработка данных табличной части формы с получением дополнительной информации из Базы данных.
Явление 1. Построчная обработка табличной части на стороне клиента с организацией серверного вызова для получения дополнительной информации из базы данных.
Мы уже знаем – лучше использовать директиву «&НаСервереБезКонтекста».
Явление 2. Предварительная обработка табличной части на стороне клиента с целью подготовки требуемых к обработке на сервере данных и «упаковки» их в набор параметров. Затем передача этого набора на сервер для получения дополнительной информации из базы данных.
Используем всё ту же директиву «&НаСервереБезКонтекста».
Большое количество текущих серверных вызовов может свидетельствовать о неоптимальном программном коде.
Избегайте создания серверных вызовов внутри цикла. Подготовьте набор параметров и единожды выполните его передачу для обработки на сервер. Если предполагается сложная обработка большого количества данных формы – передайте её полностью на сервер (при помощи директивы «&НаСервере») и выполните все действия на стороне сервера.
С директивой «&НаСервереБезКонтекста» вроде бы разобрались. Она нужна для того, чтобы уменьшить объем информации, передаваемой в рамках одного серверного вызова. Дополнительно разобрались с количеством текущих серверных вызовов – необходимо стремиться к их минимизации.
Давайте теперь попробуем разобраться, для чего нужна директива «&НаКлиентеНаСервереБезКонтекста».
Действие 4. Выполнение обработки данных.
Когда предполагается выполнение одной и той же обработки данных из нескольких участков программного кода, разумно этот код поместить в самостоятельную процедуру или функцию. Остаётся только решить, под какой директивой её написать.
Та-дам!
Для копирования у нас есть ксерокс. Но куда его поставить? На сторону клиента или сервера? Под какой директивой его разместить?
Как было озвучено ранее – любая процедура и функция поддерживает обработку информации, переданной в неё в качестве параметров.
Давайте для начала попробуем разместить копировальный аппарат на стороне клиента. Для этого описываем процедуру или функцию «Ксерокс» под директивой «&НаКлиенте». Тогда процесс клиентской части в любой момент сможет без проблем обратиться к ней и все действия будут выполнены в соответствии с программным кодом.
Но что произойдёт, если потребность в копировании возникнет на стороне сервера? Например, для подготовки данных, передаваемых на сторону клиента, потребуется сделать копию? Напомню – процесс серверной части не имеет возможности самостоятельно инициировать клиентские вызовы.
Получается, что использовать директиву «&НаКлиенте» неправильно, а директиву «&НаСервере», как мы изучили ранее – нежелательно. Давайте посмотрим поведение системы при использовании директивы «&НаСервереБезКонтекста».
Вроде бы результат достигнут – и с сервера, и с клиента доступно копирование. Но для того, чтобы получить копию данных, используемых на клиенте, приходится делать серверный вызов. А это опять ведет к лишней нагрузке на соединение и временным затратам.
Избавиться от излишней передачи на сервер при сохранении возможности копирования на клиенте и на сервере можно при помощи директивы «&НаКлиентеНаСервереБезКонтекста».
Не углубляясь в детали, отметим, что метод, описанный под данной директивой управления, создаётся в двух копиях – и на стороне клиента, и на стороне сервера. Это позволяет выполнить необходимые действия там, где появилась потребность в них (клиент/сервер), без лишних серверных вызовов.
С точки зрения выполнения программы результат будет одинаков. Но объяснение «почему так не надо делать» – это уже совершенно другая тема…
Вместо заключения
В данной статье мы на наглядных примерах рассмотрели влияние различных директив компиляции на такое явление системы «1С:Предприятие 8», как серверный вызов. Как видно, основная причина для выбора правильной директивы – производительность транспортировки данных между клиентской и серверной частью.
Придерживайтесь при разработке следующих правил:
Учитывайте потребность в доступности тех или иных видов данных, обоснованность передачи управления и не стесняйтесь при необходимости дробить процедуры и функции. И будет Вашему серверному вызову всегда легко, а Вы от пользователей Вашей программы получите «молчаливую благодарность»!
Программист Иван при доработке 1С на своём предприятии сделал ошибку в выборе директивы компиляции. Из-за неё длительность одного из серверных вызовов была больше возможной на полсекунды.
Пользователей, применяющих этот функционал, – 25 человек, и каждый из них за рабочий день в среднем совершает 110 таких операций. Всего впустую за рабочий месяц потрачено 28875 секунд (21 рабочий день * 25 человек * 110 операций * 0,5 секунды) = 8,02 часов.
Иван, каково тебе осознавать, что за месяц ты задолжал своему предприятию целый рабочий день?
Об авторе
Автор статьи – Павел Ванин
Соединение с сервером и создание базы данных
Н. Ю. Хабибулина
Технологии создания Интернет-приложений
(методические указания к выполнению лабораторной работы 7)
для бакалавров направления подготовки 220400.62 – Управление в технических системах
Оглавление
ЛАБОРАТОРНАЯ РАБОТА № 7. 3
Теоретическая часть. 3
1 Соединение с сервером и создание базы данных. 3
2 Создание таблицы.. 6
3 Отправка данных. 9
4 Извлечение данных. 12
Практическое задание. 15
ЛАБОРАТОРНАЯ РАБОТА № 7
Приемы работы с базами данных посредством PHP.
— изучение основных конструкций языка PHP, используемых для работы с базами данных.
Теоретическая часть
В качестве СУБД используется MySQL.
Она адаптирована для большинства платформ. Возможно, она не такая мощная, как другие SQL-сервера, однако обладает замечательной скоростью и достаточной функциональностью для выполнения большинства задач. Для серверов UNIX система MySQL, как правило, бесплатна, что делает ее самой распространенной СУБД для создания Web-приложений. Если вы работаете на сервере провайдера, узнайте, какую СУБД вам могут предложить (часто за отдельную плату). Если вы работаете на своем сервере, подумайте об установке MySQL (см. www.MySOL.com или другой сайт, откуда можно загрузить это программное обеспечение).
Систему MySQL можно загрузить с сайта MySQL (www.MvSQL.com). Здесь также содержится документация по установке и использованию данного программного обеспечения, а также даются сведения по лицензированию этого продукта.
Базы данных создаются, обновляются и просматриваются с помощью языка SQL (языка структурированных запросов). В SQL удивительно мало команд, за что его одновременно и хвалят, и ругают. Он был задуман таким образом, чтобы на нем писали, как на английском языке. Поэтому иногда приходится поломать голову, чтобы создать из ограниченного числа имеющихся команд сложные инструкции. Помните, что использование языка SQL в Web-приложении увеличивает возможность возникновения ошибок. Фактически появляется еще один язык программирования. Поэтому тщательно проверяйте свою работу с базой данных.
Разработаем простую базу данных, куда будут записываться данные, поступающие от пользователя по каналам обратной связи. Представленного здесь материала будет достаточно, чтобы вы смогли начать работать самостоятельно.
Соединение с сервером и создание базы данных
Сначала необходимо соединиться с сервером БД. В нашем случае это сервер MySQL. Затем это соединение будет использоваться как точка доступа для последующих команд. Синтаксис MySQL для соединения с сервером следующий:
Связь устанавливается с помощью трех аргументов: «host»,»user»,»password».
«host» — имя сервера, которое почти всегда обозначается как «localhost».
«user» — имя пользователя и «password» — пароль. Два последних параметра определяют ваши права доступа к БД.
Права доступа к базе данных — вопрос еще более сложный, чем права доступа к файлам. Необходимо понимать, что разные категории пользователей имеют разные права доступа. Например, администратор СУБД может создавать новые и удалять старые базы данных, а администратор нижнего уровня может только создавать и модифицировать таблицы в одной единственной БД. Обычно пользователю разрешено только читать информацию из таблиц, но не модифицировать их.
Новая база данных создается с помощью следующего SQL-запроса:
‘CREATE DATABASE db1’
После завершения работы с СУБД рекомендуется отключить соединение:
Создадим новую базу данных, что потребует наличия у вас прав администратора. В нашем случае, при использовании пакета «Денвер», вы выступаете как пользователь, так и администратор одновременно.
Подсоединение к MySQL и создание базы данных
1. Откройте текстовый редактор и создайте новый РНР-документ следующего содержания.
2. Создание базы данных
17. echo «База db1 успешно создана\n»;
21. mysql_close ($Link);
Строки с № 1 по № 4 содержат стандартный HTML-заголовок.
Строки с № 5 по № 10 открывают PHP — раздел сценария и задают переменные базы данных.
Присвоив эти значения переменным, позже вы сможете легко изменить сценарий для работы с другими базами. Пробелы в имени базы данных не используются, как и в именах переменных и функций. В качестве имени пользователя используем стандартного пользователя root, у которого нет пароля. В качестве имени создаваемой базы данных используем db1.
Строка № 11 устанавливает связь с базой данных.
Этой строкой сценария будет устанавливаться связь с СУБД MySQL на сервере с помощью имени хоста, имени пользователя и пароля. Если введенное имя пользователя или пароль не соответствуют определенным в базе данных, в момент выполнения сценария вы получите сообщение об ошибке.
Строки с № 12 по № 20 создают новую базу данных и распечатывают сообщения о результате своих действий.
Когда база данных создана, вы получаете соответствующее сообщение об этом. Если по какой-то причине база данных создана не была, вы увидите несколько сообщений об ошибках MySQL. Среди этих сообщений обязательно будет присутствовать строка — «База данных не может быть создана!».
Строки с № 21 по № 24 отключают связь с сервером MySQL, закрывают PHP-раздел и HTML-документ.
Необязательно закрывать сеанс связи с MySQL, так как это будет сделано автоматически сразу же после завершения выполнения сценария. Но рекомендуется все-таки быть последовательным и осуществить этот шаг.
2. Сохраните сценарий под именем «CreateDB.php», загрузите его на сервер и протестируйте в браузере. В результате выполнения сценария должно появиться сообщение, приведённое на рисунке 11.6.
Таким образом, создание новой базы данных состоит из трех этапов: соединение с сервером, использование SQL-запроса на создание БД и закрытие соединения. При этом целесообразно задавать параметры базы данных — хост, имя пользователя, пароль и имя базы данных — как переменные. В этом случае позже их легко можно изменить.
Для проверки создания базы данных можно открыть MySQL посредством phpMyASdmin и посмотреть:
1. Запустите браузер и наберите в нем адрес: «http://localhost». В открывшемся окне выберите ссылку » http://localhost/Tools/phpMyAdmin».
2. В следующем окне выберите ссылку «Базы данных». В появившемся окне увидите перечень существующих баз данных. Среди них и должна быть база данных db1, созданная предыдущим скриптом. В настоящий момент база данных пустая. Займемся созданием таблиц базы данных.
Создание таблицы
После создания исходной базы данных можно приступить к генерированию отдельных таблиц в ней. БД может содержать много таблиц, каждая из которых состоит из столбцов и строк.
Создадим простую таблицу, где будут храниться некоторые данные. Для этого используем язык SQL. Составить SQL-запрос и обратиться с ним к базе данных можно следующим образом:
$Query=»текст запроса в формате SQL»;
Так как SQL похож на обычный английский язык, запрос на создание базы данных будет выглядеть так:
Каждому столбцу, отделенному от других запятыми, необходимо присвоить имя и тип. Типичные типы — TEXT (текст) и INT (целое число). Теория реляционных БД требует, чтобы первый столбец создавался как первичный ключ, которыймог быоднозначно идентифицировать всю строку. Поэтому запрос на создание таблицы должен быть таким:
$Query=»CREATE table New Table(id INT PRIMARY KEY, information TEXT)»;
Более подробные сведения о SQL содержатся на сайте MySQL.
Однако предоставленной здесь информации вполне достаточно для выполнения основных задач при работе с базами данных.
В этом разделе создадим таблицу, в которой будут храниться данные о имени пользователя, его фамилии и электронном адресе. В следующем разделе этой главы мы напишем сценарий, который будет вставлять отправленные из HTML-формы материалы в созданную здесь таблицу.
Создание новой таблицы
1. Откройте текстовый редактор и создайте новый РНР-документ следующего содержания.
3. Создание таблицы
Строки с № 1 по № 4 создают стандартный HTML-заголовок.
Строки с № 5 по № 11 открывают PHP-раздел сценария и задают переменные для доступа к базе данных.
Обратите внимание на то, что к списку из предыдущего листинга мы добавили еще одну переменную — «$TableName». Она будет содержать имя таблицы с данными.
Так как мы собираемся хранить информацию о пользователях, назовем нашу таблицу «Feedback» (обратная связь). Обратите внимание также на то, что в MySQL имена таблиц и столбцов являются регистрозависимыми.
Строка № 12 устанавливает связь с сервером.
Строка № 13 выбирает и инициализирует необходимую базу данных для работы.
Строка № 14 создаёт запрос. Проанализируем эту строку по частям.
Первый столбец в таблице называется «id». Это будет целое число без знака. Запись «INT UNSIGNED» означает, что целое число может быть только положительным. Слова «NOT NULL» указывают, что данный столбец не может иметь пустое значение. При добавлении новой строки значения автоматически увеличиваются на единицу («AUTO_INCREMENT») и исполняют функцию первичного ключа.
Следующие четыре столбца будут текстовыми: первый содержит имя, второй — фамилию, третий — адрес электронной почты, четвертый — комментарии.
Строки с № 15 по № 19 содержат запрос к базе данных и вывод соответствующих сообщений о результатах его выполнения.
Если запрос выполнен успешно (значение условной конструкции истинно), вы должны увидеть сообщение «Запрос успешно выполнен». Если таблица не была создана в результате ошибки в SQL, то результат будет — «Запрос не был выполнен!» и сообщение об ошибке, в результате которой запрос не был выполнен.
Строки с № 20 по № 23 закрывают соединение с сервером MySQL, PHP-раздел и HTML-документ.
2. Сохраните сценарий под именем «CreateTable.php», загрузите его на сервер и протестируйте в браузере.
Если попробуете еще раз запустить данный скрипт, то на экране должно появиться следующее сообщение, говорящее о том, что такая таблица уже была создана:
Необязательно писать SQL-запросы, периодически используя заглавные буквы, как в приведенном примере. Но такой стиль помогает легко отличать SQL от имен таблиц и столбцов. Имена таблиц и столбцов являются регистрозависимыми, а SQL-команды в основном нет.
Для проверки работоспособности данного скрипта зайдите в phpMyASdmin и нажмите на db1 в закладке Базы данных. Должно появиться следующее окно, отображающее, что в базе данных создана таблица Freedback:
Отправка данных
Процесс добавления информации в таблицу похож на создание таблицы: используется та же самая функция, а вот SQL-запрос будет иметь другой вид.
Чтобы наглядно показать, как это работает, используем HTML-форму, в которую пользователь вводит имя, фамилию, адрес электронной почты и комментарии. PHP-сценарий, обрабатывающий форму, поместит полученную информацию в базу данных.
Ввод данных в БД из HTML-формы
1. Откройте текстовый редактор и создайте новый HTML-документ следующего содержания.
Строки с № 1 по № 4 создают стандартный HTML-зaгoлoвoк.
Строка № 6 создаёт форму.
Строки с № 7 по № 10 создают четыре текстовых поля.
Вы можете сделать форму более эстетичной, чем эта, но не забудьте записать имена переменных ввода — они потребуются в PHP-сценарии, который будет обрабатывать эту форму.
Строка № 11 добавляет кнопку «Ввести».
Строки с № 12 по № 14 закрывают форму и HTML-страницу.
2. Сохраните страницу под именем «form.html» и загрузите ее на Web-сервер.
Очень важно помнить названия полей ввода в HTML-формах, чтобы можно было сослаться на них в РНР-сценарии.
Напишем сценарий «HandleForm6.php», который берет сгенерированные формой данные и помещает их в базу данных.
3. Создайте новый PHP-документ в текстовом редакторе следующего содержания.
3. Добавление данных в базу данных
Строки с № 5 по № 11 открывают PHP-раздел страницы и удаляют лишние пробелы из полей ввода данных, сохраняет данные с формы в определенных переменных.
Строки с № 13 по № 17 задают переменные для доступа в базу данных.
Строка № 18 осуществляет соединение с сервером MySQL.
Строка № 19 выбирает и инициализирует необходимую базу данных для работы.
Затем перечисляются пять значений — по одному для каждого столбца. Каждое из этих значений взято в одинарные скобки и отделено от последующего запятой.
Так как столбцу «id» был задан автоматический инкремент, то можно использовать в качестве значения число «0». Это значение недопустимо для данного поля, поэтому оно будет автоматически исправлено, а у столбца «id» появится следующий порядковый номер.
Строка № 21 позволяет упростить отладку запроса, путём дублирования сообщения в браузере.
Если при работе с базой возникли какие-либо трудности, прежде всего проверьте логику и правильность написания запроса. Вряд ли вы захотите, чтобы пользователь видел запрос, но этот прием можно с успехом использовать на этапе отладки программы.
Строки с № 22 по № 26 создают условную конструкцию, которая выполняет определенные действия, исходя из результатов запроса. Все функции обращения к БД, кроме действий собственно с данными, выдают значение «истина» при успешном выполнении и «ложь» во всех остальных случаях.
Строки с № 27 по № 30 закрывают сеанс связи с сервером MySQL, PHP-раздел и HTML-документ.
4. Сохраните сценарий под именем «HandleForm6.php», загрузите его на сервер в один каталог с файлом «form.html» и протестируйте обе страницы в браузере.
Инструкция запроса на добавление информации в базу данных достаточно проста. Однако не забывайте, что количество значений в скобках должно соответствовать числу столбцов в таблице.
Если вы хотите проверять инструкции SQL так, чтобы пользователь явно не видел их, добавьте в вашу страницу следующую строку кода:
Теперь запрос будет выглядеть как HTML-комментарий, который можно просмотреть, открыв исходный текст.
Открыв в phpMyASdmin таблицу Freedback (нажав на имени таблицы среди списка таблиц), можно увидеть добавившуюся запись в таблицу:
Извлечение данных
Данные из базы можно прочитать с помощью простого запроса:
Символ звездочка «*», используемый в данной строке, эквивалентен понятию «всё», то есть требуется выбрать всё из столбца «$TableName». Этой короткой инструкции часто вполне достаточно для извлечения данных.
Однако запрос можно ограничить, указав только часть полей, например:
Этот запрос дает задание извлечь информацию только из этих двух столбцов — имени и комментариев.
Другой способ ограничить запрос — написать следующую инструкцию:
Здесь запрашиваем информацию из всех столбцов, но только из тех строк, где в столбце с указанием имени имеется значение Сергей.
Основное отличие извлечения данных от записи их в базу состоит в том, что запрос необходимо обрабатывать по-другому. Целесообразно присваивать результаты запроса переменной:
Как сказал бы непрофессионал, этой переменной теперь известен результат запроса. Для извлечения информации необходимо поместить переменную «$Result» в цикл, последовательно пройдя по всем строкам полученного результата запроса.
Каждая итерация цикла будет превращать следующую строку информации из запроса (сохраненную в переменной «$Result») в массив с названием «$Row».
Этот процесс будет продолжаться, пока не останется больше строк с информацией. Лучший способ понять данную систему — написать сценарий, который считывает информацию из таблицы «Feedback». Предварительно необходимо заполнить таблицу данными с помощью формы «form.html».
Извлечение данных из таблицы
1. Создайте новый PHP-документ в текстовом редакторе следующего содержания.
3. Извлечение данных из БД
30. ALIGN=TOP>$Row[EmailAddress] \n»);
32. VALIGN=TOP>$Row[Comments] \n»);
35. mysql_close ($Link);
Строки с № 1 по № 4 создают стандартный HTML-заголовок.
Строки с № 5 по № 11 открывают PHP-раздел страницы и задают переменные для доступа в базу данных.
Строки с № 12 по № 15 создают соединение с сервером базы данных, открывают базу данных, определяют и выполняют запрос.
Этот запрос прост и полезен. Как было упомянуто выше, его результаты будут сохранены в переменной, которую позже поместим в цикл.
Строки с № 16 по № 22 создают HTML-таблицу для выведения на экран результатов запроса.
Так как извлекаем информацию из таблицы и выводим ее на экран в виде кода HTML, то целесообразно их так же представить в виде HTML-таблицы. Тогда страница будет выглядеть наглядно и аккуратно.
Строка № 24 создаёт цикл, извлекающий строки из базы данных, пока они не кончатся.
Цикл помещает в переменную «$Row» массив, состоящий из первой строки таблицы в переменной «$Result». Затем исполняются соответствующие команды. При обращении к строке «mysql_fetch_array ($Result)» на очередном проходе цикла переменная «$Row» получает следующую строку. Цикл функционирует, пока не останется строк с информацией.
Строки с № 25 по № 34 выводят на экран информацию из базы данных в виде HTML-таблицы.
Так как была использована функция «mysql_fetch_array()», то можно обращаться к каждому отдельному столбцу в извлеченной из базы данных строке точно так же, как к массиву. Ключи массива — названия столбцов таблицы — являются именем, фамилией, адресом электронной почты и комментариями. Названия полей даются на английском языке и с обязательным соблюдением регистра букв.
Строки с № 33 по № 34 закрывают строку HTML-таблицы и цикл «while».
Еще раз подчеркнем, что этот цикл получает строку данных из таблицы БД, присваивает ее массиву «$Row», затем печатает строку HTML-таблицы.
Строки с № 35 по № 39 отключают от сервера MySQL, закрывают HTML-таблицу, РНР-раздел и саму HTML-страницу.
2. Сохраните сценарий под именем «DisplayDB.php», загрузите его на сервер и протестируйте в браузере.
Как видно из приведённого листинга, SQL-запрос на извлечение всех данных из таблицы очень прост, но чтобы получить все данные, необходимо создать цикл.
С помощью РНР можно извлекать данные из БД и создавать динамические Web-страницы, что невозможно сделать только средствами HTML.
Практическое задание
Используя теоретическую часть, отобразите в Вашем документе все выше изложенные методы:
1) создайте две таблицы базы данных. В данных таблицах можно хранить любую информацию, соответствующую тематике ваших страничек. Если затрудняетесь определить тематику баз данных, создайте две таблицы – Мои родственники и мои друзья;
2) реализуйте различные виды запросов к данным таблицам (минимум по 5 на каждую таблицу). Среди запросов должны быть такие, чтобы данные вводились пользователем.