Лабораторная работа 10

ИСПОЛЬЗОВАНИЕ ЯЗЫКА PHP ДЛЯ ДОСТУПА К БАЗАМ ДАННЫХ

Цель работы

Ознакомиться с базовыми конструкциями языка PHP с целью написания с их использованием простейших PHP-программ доступа к базам данных.

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

Для выполнения работы необходимо

Язык РНР - это действующий на стороне сервера встраиваемый в HTML язык, имеющий синтаксис, близкий к языку Си. Язык РНР дает возможность вставлять в файлы HTML инструкции языка PHP для создания динамического содержания. Эти инструкции обрабатывает препроцессор-интерпретатор РНР и заменяет их тем содержимым, которое производит этот код. PHP-программа может целиком состоять из конструкций языка PHP, а может быть смесью конструкций языков PHP и HTML. Стандартное расширение файла с PHP-программой - php.

Одним из распространенных применений РНР является работа с базами данных. Для целого ряда баз данных РНР имеет собственную поддержку, а другие доступны через ODBC-функции РНР. При вызове PHP-программы URL-адрес должен содержать номер порта, через который работает PHP:

html://fpm.ami.nstu.ru:81/~pmxxyy/t1.php

К особенностям языка PHP относятся:

Одна из наиболее удобных особенностей PHP - это способность автоматически передавать значения переменных из HTML-форм в переменные PHP. PHP автоматически генерирует набор переменных, имена которых совпадают с именами объектов в HTML-форме и содержащих значения данных объектов. В результате отпадает необходимость в выполнении рутинного преобразования, связанного с разбором последовательности

имя=значение&имя1=значение1&...&имяN=значениеN

Для связи с любой из СУБД РНР в своем наборе имеет ряд функций, которые очень похожи между собой и имеют одинаковую логику работы и аналогичные параметры.

В приведенной ниже таблице представлен минимальный набор функций, необходимых для написания PHP-программ, общающихся с СУБД Informix.

1. int ifx_connect (string database, string user, string password) - cоздать соединение с сервером Informix
. Входные параметры:

Database - имя базы данных;

user - имя пользователя

password - пароль.

. Возвращаемое значение: идентификатор соединения, если соединение прошло успешно, и равен 0 в противном случае.
2. int ifx_query (string query, int link_id, int cursor_type) - выполнить запрос к базе
. Входные параметры:

query - строка SQL-запроса;

link_id - идентификатор соединения;

cursor type - тип курсора

. Возвращаемое значение: значение 1 или 0 в зависимости от успеха выполнения операции.
3. array ifx_fetch_row (int result_id, mixed [position]) - получить строку запроса как массив
. Входные параметры:

result_id - идентификатор результата, возвращенный функцией ifx_query() (только для запросов типа select);

[position] - параметр из списка: "NEXT", "PREVIOUS", "CURRENT", "FIRST", "LAST" или номер.

. Возвращаемое значение: строка таблицы базы данных, возвращаемая как массив.
4. string current (array row) - получить очередное поле из строки таблицы базы данных.
. Входные параметры: array row- строка таблицы базы данных, возвращенная функцией ifx_fetch_row().
. Возвращаемое значение: очередное поле строки таблицы.
5. string next (array row) - получить следующее поле из строки таблицы базы данных.
. Входные параметры: array row - строка таблицы базы данных, возвращенная функцией ifx_fetch_row().
. Возвращаемое значение: следующее поле строки таблицы.
6. int reset( array$row) - перейти в начало строки.
. Входные параметры: array row - строка таблицы базы данных, возвращенная функцией ifx_fetch_row().
. Возвращаемое значение: нулевая позиция строки результата.
7. string key( array$row) - перейти в начало строки.
. Входные параметры: array row - строка таблицы базы данных, возвращенная функцией ifx_fetch_row().
. Возвращаемое значение: имя очередного поля строки результата.
8. int ifx_affected_rows (int result_id) - получить число столбцов, обработанных запросом
. Входные параметры: result_id - результат, возвращенный функцией ifx_query().
. Возвращаемое значение: Возвращается число столбцов, обработанных запросом, ассоциированных с result_id. Для вставок, обновлений и удалений - это реальное количество обработанных столбцов. Для выборок - ожидаемое количество.
9. int ifx_free_result (int result_id) - освободить ресурсы запроса
. Входные параметры: result_id - результат, возвращенный функцией ifx_query().
. Возвращаемое значение: Освобождает ресурсы, занятые запросом с идентификатором результата result_id. Возвращает 0 в случае ошибки.
10. int ifx_close (int [link_identifier]) - закрыть соединение с Informix
. Входные параметры: link_id - идентификатор соединения;
. Возвращаемое значение: закрывает соединение с Informix. Если идентификатор ссылки не указан, предполагается последнее установленное соединение.

Общая схема написания PHP-программы, выполняющей взаимодействие с базой данных, мало отличается от структуры CGI-скрипта, написанного любыми другими средствами, разница состоит лишь в используемых средствах:

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

Последовательность выполнения лабораторной работы

  1. Убедиться в наличии и заполненности базы данных поставщиков, деталей, изделий, поставок.
  2. Разработать и отладить HTML-формы для ввода данных пользователя согласно варианту задания (можно модифицировать HTML-формы из предыдущей лабораторной работы).
  3. Разработать и отладить PHP-программы для обработки данных HTML-форм и доступа к базе данных.
  4. После выполнения лабораторной работы привести базу данных в исходное состояние.

Требования к разрабатываемой программе

Разрабатываемые программы должна удовлетворять следующим требованиям:

Варианты заданий

Вариант 1

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

Вариант 2

  1. Вывести информацию о деталях, поставки которых были осуществлены для указанного изделия.
  2. Изменить цвет самой тяжелой детали на указанный.

Вариант 3

  1. Вывести информацию о поставщиках, которые осуществляли поставки деталей из заданного города в указанный период.
  2. Вставить поставщика с заданными параметрами.

Вариант 4

  1. Вывести информацию о поставщиках, поставивших указанную деталь в заданный период.
  2. Удалить поставщика, выполнившего меньше всего поставок.

Вариант 5

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

Вариант 6

  1. Вывести информацию о деталях, поставки которых были осуществлены для указанного изделия всеми поставщиками.
  2. Увеличить рейтинг поставщика, выполнившего больший суммарный объем поставок, на указанную величину.

Вариант 7

  1. Вывести информацию об изделиях, для которых была поставлена указанная деталь.
  2. Изменить название и город детали с максимальным весом на указанные значения.

Вариант 8

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

Контрольные вопросы

  1. Каким образом вставить конструкции PHP в HTML-документ?
  2. Каким образом обеспечить, чтобы встречающиеся в строке переменные были заменены их значениями?
  3. Каковы правила определения функций в языке PHP?
  4. Каковы особенности передачи значений переменных из HTML-формы в переменные PHP?
  5. Каким образом осуществляется взаимодействие с базами данных в языке PHP?
  6. В чем заключается технология "cookies"?