Файл: Операции производимые с данными (Общая характеристика операций, производимых с данными).pdf

ВУЗ: Не указан

Категория: Курсовая работа

Дисциплина: Не указана

Добавлен: 28.04.2023

Просмотров: 289

Скачиваний: 2

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

режим magic quotes. Если это не выполнено, потребуется применять функцию addslashes[] ко вводимой в базу данных MySQL информации, а к извлекаемым из нее данным - функцию stripslashes[]. Упомянутый режим служит как удобное сокращение [5].

Режим magic quotes можно задействовать для отдельных каталогов с помощью следующих директив файла .htaccess:

php_value magic_quotes_gpc on (для PHP 4), либо php3_magic_quotes_gpc on (для PHP 3).

Для практической реализации БД необходимо создать на сервере MySQL саму базу sto и таблицы, используя язык SQL.

Листинг 1. SQL-код создания базы данных sto с комментариями

/* создаем базу данных sto, если таковая отсутствует */ create database if not exists sto;

/* использовать базу данных sto */ use sto;

/* удалить таблицу admin, если она уже существует в БД */ drop table if exists admin;

/* создать таблицу admin со следующими полями и определить первичный ключ */ CREATE TABLE admin ( username char(16) NOT NULL,

password char(16) NOT NULL,

PRIMARY KEY (username) ) TYPE=MyISAM;

/* добавить в таблицу admin пользователя и пароль */ INSERT INTO admin VALUES ('system','5940bb836c4aa055')

/* удалить таблицу devices, если она уже существует в БД */ drop table if exists devices;

/* создать таблицу devices со следующими полями, определить первичный ключ */ CREATE TABLE devices ( devid int(10) unsigned NOT NULL auto_increment,

typeid int(10) unsigned NOT NULL, firmid int(10) unsigned NOT NULL, devname varchar(50) default NULL, description varchar(255) default NULL, descfile varchar(255) default NULL, PRIMARY KEY (devid) ) TYPE=MyISAM;

/* удалить таблицу firms, если она уже существует в БД */ drop table if exists firms;

/* создать таблицу firms со следующими полями и определить первичный ключ */ CREATE TABLE firms ( firmid int(10) unsigned NOT NULL auto_increment,

firmname varchar(50) NOT NULL, PRIMARY KEY (firmid) ) TYPE=MyISAM;

/* удалить таблицу types, если она уже существует в БД */ drop table if exists types;

/* создать таблицу types со следующими полями и определить первичный ключ */ CREATE TABLE types ( typeid int(10) unsigned NOT NULL auto_increment,

typename char(40) NOT NULL,

PRIMARY KEY (typeid) ) TYPE=MyISAM;

Чтобы создать в системе базу данных, в среде MySQL потребуется выполнить сценарий sto.sql, имея права привилегированного пользователя (root):

mysql -u root -p < sto.sql

(Следует ввести пароль привилегированного пользователя.) Предварительно необходимо изменить пароль пользователя sto (по

умолчанию он имеет значение password).

2.4 Реализация интерактивного каталога

Это приложение содержит три сценария, связанных с каталогами:

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


Титульная страница сайта генерируется через сценарий index.php. Вывод этого сценария показан на рис. 1.

Рис. 1. Титульная страница сайта

Кроме списка типов оборудования и списка производителей окно содержит кнопки входа в меню администратора базы данных («Вход»), поиска по ключевому слову («Поиск»), а также кнопки, открывающие страницы со списком ссылок («Ссылки») и краткой информации о проекте

(«О проекте»). Эти элементы содержатся на каждой странице, открываемой в процессе просмотра содержимого базы данных.

Когда пользователь выполняет щелчок на одном из типов оборудования или производителе, открывается страница, содержащая список устройств выбранного типа или производителя соответственно. За это отвечают сценарии show_typ.php и show_firm.php. Страница, отображающая все устройства фирмы Zelax показана на рис. 2.

Рис. 2. Страница устройств определенного производителя

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

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

Рис. 3. Страница определенного устройства

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

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

На случай отсутствия установленной программы просмотра PDF-файлов предусмотрена гиперссылка, ведущая на официальный сайт фирмы Adobe, где можно скачать Adobe Acrobat Reader бесплатно для любой операционной системы. Эта гиперссылка также присутствует во всех сценариях сайта.

Рис. 4. Страница подробного описания устройства

Рассмотрим сценарии подробнее.

1. Списки типов и производителей оборудования.

Первый сценарий, index.php, выводит списки всех типов и производителей оборудования из базы данных (листинг 6.2).


Листинг 2. Сценарий вывода титульной страницы сайта (index.php)

<?

// файл титульной страницы сайта

// отображает списки типов оборудования, производителей оборудования // подключение файла функций

require_once("sto_fns.php");

do_html_header("Добро пожаловать в базу данных телекоммуникационного оборудования!");

echo "<center><p>Выберите категорию оборудования или производителя оборудования:</p></center>";

echo "<table width = \"80%\" align=center border = 0>";

echo "<tr><td width = \"50%\" VALIGN=top><ul>"; // извлечение типов оборудования из базы данных $typ_array = get_types();

// отображение ссылок на страницы типов оборудования display_types($typ_array);

echo "</td>";

echo "<td VALIGN=top><ul>";

// извлечение производителей оборудования из базы данных $fir_array = get_firms();

// отображение ссылок на страницы производителей оборудования display_firms($fir_array);

echo "</td></tr>";

echo "</table>"; echo "<hr>";

// отобразить футер do_html_footer();

?>

Сценарий начинается с подключения файла sto_fns.php, который содержит все библиотеки функций для данного приложения.

Сценарий включает вызовы функций вывода HTML-содержимого, таких как do_html_header() и do_html_footer() (обе находятся в файле output_fns.php).

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

Ниже показаны наиболее важные части сценария:

// извлечение типов оборудования из базы данных $typ_array = get_types();

// отображение ссылок на страницы типов оборудования display_types($typ_array);

// извлечение производителей оборудования из базы данных $fir_array = get_firms();

// отображение ссылок на страницы производителей оборудования display_firms($fir_array);

Функции get_types(), get_firms(), display_types() и display_firms() содержатся, соответственно, в библиотеках device_fns.php и output_fns.php. Функця get_types() возвращает массив типов оборудования, который затем передается в функцию display_types(). Функция get_firms() работает аналогичным образом. Код функции get_types() приводится в листинге 6.3.

Листинг 3. Функция get_types() из библиотеки output_fns.php извлекает из базы данных типы оборудования

function get_types() {

// запрос к базе данных на список типов устройств $conn = db_connect();

$query = "select typeid, typename from types"; $result = @mysql_query($query);

if (!$result) return false;

$num_typs = @mysql_num_rows($result); if ($num_typs ==0)

return false;

$result = db_result_to_array($result); return $result;

}

Функция осуществляет соединение с базой данных и извлечение списка

всех идентификаторов и наименований типов. Здесь используется ранее созданная функция db_result_to_array() из файла db_fns.php (листинг 6.4). Функция принимает идентификатор результата от MySQL и возвращает массив строк с числовой индексацией, где каждая строка представляет собой ассоциативный массив.


Листинг 4. Функция db_result_to_array() библиотеки db_fns.php преобразуетидентификатор результата MySQL в массив результатов

futrialn db_result_to_array($result) // функция заносит результат в массив {

$res_array = array();

for ($count=0; $row = @mysql_fetch_array($result); $count++) $res_array[$count] = $row;

return $res_array; }

В нашем случае этот массив возвращается в сценарий index.php, где передается в display_types() из библиотеки output_fns.php. Эта функция отображает каждый тип оборудования в виде ссылки на страницу, отображающую список устройств определенного типа. Код функции показан в листинге 5.

Листинг 5. Функция display_types() из библиотеки output_fns.php отображает массив типов в виде списка ссылок на типы оборудования

function display_types($typ_array) {

if (!is_array($typ_array)) {

echo "<center><br>Типов оборудования нет.<br><br></center>"; }

else {

echo "<br><table width = \"80%\" align=center border = 0>";

foreach ($typ_array as $row) {

$url = "show_typ.php?typid=".($row["typeid"]); echo "<tr><td><ul>";

echo "<li><b>";

$title = $row["typename"]; do_html_url($url, $title); echo "</b></td></tr>";

}

echo "</table><br>"; }

}

Функция преобразует каждый тип оборудования базы данных в ссылку.

Все ссылки передаются в следующий сценарий, show_typ.php, но каждая из

них имеет свой параметр, идентификатор типа (typeid). (Это уникальное число, сгенерированное MySQL и применяемое для идентификации типа).

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

2.Список устройств определенного типа оборудования.

Процесс вывода списка устройств определенного типа аналогичен рассмотренному выше. Вывод осуществляет сценарий show_typ.php, показанный в листинге 6.

Листинг 6. Cценарий, отображающий устройства определенного типа

<?

// файл отображает все устройства определенного типа оборудования

// подключение файла функций require_once("sto_fns.php");

$name = get_type_name($typid);

do_html_header($name);

$device_array = get_devices($typid);

display_devices($device_array);

// если авторизован как администратор, то показать ссылки на редактирование if(session_is_registered("admin_user"))

{

display_button("edit_type_form.php?typid=$typid", "edit-category", "Редактировать категорию");

display_button("index.php", "back", "Назад"); }

else

display_button("index.php", "back", "Назад");

// отобразить футер do_html_footer();

?>

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

С использованием функции get_type_name() передаваемый идентификатор типа преобразуется в имя типа оборудования:

$name = get_type_name($typid);

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


Листинг 7. Функция get_type_name() библиотеки device_fns.php

преобразует идентификатор типа в имя типа оборудования

function get_type_name($typid) {

// запрос к базе данных на получение имени типа по его идентификатору $conn = db_connect();

$query = "select typename from types where typeid = $typid"; $result = @mysql_query($query);

if (!$result) return false;

$num_typs = @mysql_num_rows($result); if ($num_typs ==0)

return false;

$result = mysql_result($result, 0, "typename"); return $result;

}

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

$device_array = get_devices($typid);

display_devices($device_array);

Функции get_devices() и display_devices() во многом подобны функциям get_types(), get_firms(), display_firms() и display_types(). Единственное отличие состоит в том, что информация извлекается из таблицы устройств, а не таблицы типов или производителей.

Функция display_devices() предоставляет ссылку на каждое устройство определенного типа или производителя при помощи сценария

show_device.php. Каждая ссылка сопровождается параметром в виде суффикса, который определяет идентификатор конкретного устройства.

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

3. Отображение информации об устройстве.

Сценарий show_device.php принимает идентификатор типа оборудования в качестве параметра, а затем извлекает и отображает сведения о данном устройстве. Код сценария показан в листинге 6.8.

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

$device = get_device_details($devid);

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

display_device_details($device);

Функция display_device_details() выполняет поиск файла изображения

для устройства, который выглядит как images/devid.jpg. Если файл не существует, изображение не выводится.

Листинг 8. Cценарий отображает данные по определенному устройству

<?

// файл отображает данные по определенному устройству

// подключение файла функций require_once("sto_fns.php");

$device = get_device_details($devid); do_html_header(get_firm_name($device["firmid"])." ".$device["devname"]); display_device_details($device);

// установка ссылки на кнопку "назад" $target = "index.php"; if($device["typeid"])

{

$target = "show_typ.php?typid=".$device["typeid"]; }

// если авторизован как администратор, то показать ссылки на редактирование if( check_admin_user() )

{

display_button("edit_device_form.php?devid=$devid", "edit-item", "Редактирование записи");