Лабораторная работа 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 автоматически генерирует массивы $_POST, $_GET, $_REQUEST и другие, имена элементов которых совпадают с именами объектов в HTML-форме и содержащих значения данных объектов. Массивы эти ассоциативные, т.е. если в форме присутствовала переменная "a", то она будет передана как $_POST["a"], $_GET["a"] или $_REQUEST["a"] соответственно. В результате отпадает необходимость в выполнении рутинного преобразования, связанного с разбором последовательности

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

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

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

1. resource Pg_connect (строка_соединения) - cоздать соединение с сервером PostgreSQL
. Входные параметры:

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

Пример: $dbconn = pg_connect ("host=fpm2 port=5432 dbname=students user=pm2101 password=pass");
. Возвращаемое значение: идентификатор соединения, если соединение прошло успешно, и FALSE в противном случае.
2. resource Pg_query (id_соединения, строка_запроса) - выполнить запрос к базе
. Входные параметры:

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

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

. Возвращаемое значение: Результат в виде ресурса или FALSE
3. array Pg_fetch_row(resource результат_запроса, int номер_строки) - получить строку запроса как нумерованный массив
  array Pg_fetch_assoc (resource результат_запроса, int номер_строки) - получить строку запроса как ассоциативный массив
. Входные параметры:

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

номер_строки - целое число.

. Возвращаемое значение: строка таблицы базы данных, возвращаемая как массив.
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 Pg_affected_rows (resource result_id) - получить число столбцов, обработанных запросом
. Входные параметры: result_id - результат, возвращенный функцией Pg_query().
. Возвращаемое значение: Возвращается число столбцов, обработанных запросом, ассоциированных с result_id. Для вставок, обновлений и удалений - это реальное количество обработанных столбцов. Для выборок - ожидаемое количество.
9. bool pg_free_result (resource result_id) - освободить ресурсы запроса
. Входные параметры: result_id - результат, возвращенный функцией Pg_query().
. Возвращаемое значение: Освобождает ресурсы, занятые запросом с идентификатором результата result_id. Возвращает 0 в случае ошибки.
10. bool pg_close ( resource link_identifier) - закрыть соединение с PostgreSQL
. Входные параметры: link_id - идентификатор соединения;
. Возвращаемое значение:

Общая схема написания 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"?