Вывод в HTML-таблице на Web-странице результатов запроса в базу данных SQL

Для считывания данных из базы данных и вывода их на Web-странице РНР-сценарий должен выполнить три операции. Во-первых, сценарий должен установить соединение с СУБД с помощью вызова встроенной функции соединения с базой данных, например, функции mysql_connect(), которая позволяет установить соединение с СУБД MySQL. Во-вторых, сценарий должен по установленному соединению с СУБД отправить запрос с помощью встроенной функции отправки SQL-запроса, например, функции mysql_query(), которая позволяет PHP-сценарию передавать на выполнение СУБД операторы SQL. В-третьих, после помещения СУБД результатов запроса в выходной буфер Web-сервера сценарий должен считать данные из буфера и вывести их на Web-странице. Например, при работе с MySQL сценарий может использовать встроенную функцию mysql_fetch_array(), которая считывает строку результатов SQL-запроса из буфера СУБД и помещает значения столбцов строки в массив элементов. Затем, сценарий может выполнить оператор echo или вызывать функцию print() для вывода значений полей таблицы базы данных на Web-страницу.

Предположим, например, что используется СУБД MySQL и в HTML-таблице на Web-странице необходимо вывести данные из SQL-таблицы с именем «Продукты», содержащейся в базе данных «Товары». Прежде всего, нужно выполнить вызов функции mysql_connect() следующего вида:

 

$link = mysql_connect($db_host, $db_user, $db_pass);

 

$db_host содержит строку "localhost" (если сервер MySQL находится на том же компьютере, что и Web-сервер) или строку с IP-адресом компьютера, где находится сервер MySQL, с которым необходимо установить соединение. (Для получения IP-адреса сервера MySQL нужно связаться с Internet-провайдером.) Остальные два аргумента, $db_user и $db_pass, содержат имя пользователя и пароль, необходимые функции mysql_connect() для установки соединения с СУБД MySQL. При работе с СУБД MySQL с аргументами, установленными по умолчанию, войти в базу данных можно с именем пользователя $db_user="root" и паролем $db_pass="password".

Инструкция с функцией mysql_connect() присваивает переменной $link идентификатор соединения с СУБД или значение false, если попытка установить соединение не удалась. Поскольку время от времени случаются ошибки, с помощью оператора if нужно проверить значение переменной $link, и в случае необходимости выведите на экран сообщение об ошибке. Если попытка установки соединения завершается успешно, для выбора базы данных с таблицами, данные которых будут считываться в запросе, можно воспользоваться вызовом функции, приведенным в следующем примере:

 

if (!mysql_select_db($db_name, $link)

{

// Инструкции, обрабатывающие случай неудавшейся попытки

// использования базы данных

}

else

{

// Обработка после успешной установки соединения и выбора

// базы данных

}

 

Сервер MySQL, как правило, поддерживает несколько баз данных, поэтому нужно выбрать базу данных, содержащую нужные таблицы. В приведенном примере $db_name содержит строку "Товары", a $link — идентификатор соединения с базой данных, возвращенный функцией mysql_connect(). Как и ранее, необходимо проверить данные, возвращаемые PHP-функцией (в данном примере функцией mysql_select_db()), чтобы убедиться, что выбор базы данных был выполнен успешно. Функция mysql_select_db() возвращает true при успешном выборе базы данных и false — в противном случае.

После успешной установки соединения с СУБД MySQL и выбора базы данных для выполнения запроса нужно вызвать функцию mysql_query(), как показано в следующем примере:

 

$result = mysql_query($query, $link);

 

В приведенном примере, в котором считывается содержимое таблицы products, аргумент $query содержит SQL-команду:

 

SELECT * FROM Продукты ORDER BY название

 

Как и ранее, параметр $link содержит идентификатор соединения с базой данных, возвращенный успешно выполненной функцией mysql_connect(), вызов которой находится в начале сценария. Функция mysql_query() возвращает false (если СУБД по какой-то причине не смогла выполнить переданный ей SQL-оператор) или указатель на место, куда СУБД поместила результаты выполнения запроса.

Для считывания результатов запроса (т. е. строк данных, которые запрос выбрал из таблицы products) нужно несколько раз вызвать функцию mysql_fetch_array() для считывания всех строк результатов запроса и сохранения их в массиве. Затем нужно вывести данные из массива на Web-страницу. Например, следующий сценарий извлекает количество полей (возвращенных в результатах запроса), их имена и типы, и выводит значения столбцов, содержащихся в результатах запроса, в виде HTML-таблицы, которую сценарий создает на Web-странице:

 

// Определить количество полей, возвращенных в результате запроса

$fields = mysql_num_f ields ($result);

// Начать определение HTML-таблицы

echo "<center><table border='1' cellpadding='5'>" ;

// Вывести на экран названия столбцов в виде заголовков

// HTML-таблицы

echo "<tr>";

for ($i = 0 ; $i < $fields; $i++)

{

echo "<th>" . mysql_field_name($result, $i) . "</th>";

$fieldType[$i] =mysql_field_type($result,$i) ;

}

echo "</tr>";

// Вывести в HTML-таблице результаты запроса

while ($array = mysql_fetch_array ($result))

{

echo "<tr>";

for ($i = 0; $i < $fields; $i ++)

{

if ($fieldType[$i] <> "string")

echo "<td align='right'>";

else

echo "<td align='left'>" ;

echo "$array[$i]</td>";

}

echo "</tr>";

}

echo "</table></center>";

 

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

Задание

 

Создать базу данных в программе Devart dbForge Studio for MySQL в соответствии с вариантом задания (табл. 1). Написать программу на языке PHP, которая считывает данные из этой базы и отображает их в виде таблицы (рис.1).

 

Программа должна быть сохранена в файле “d:\server\www\index.php”. База данных должна находиться в директории “d:\server\mysql\data”. Запускать программу из браузера, введя URL-адрес” http://localhost”.

Рис. 1 – Результат работы программы

 

 

Таблица 1 – Варианты заданий

Вариант Задание
Паспортный стол. Таблица должна обладать следующими реквизитами. - № паспорта (обязательное поле); - ФИО (обязательное поле); - Дата рождения (обязательное поле); - Дата выдачи паспорта (обязательное поле); - адрес; - телефон.
Автосалон. Таблица должна обладать следующими реквизитами. - Фирма-производитель (обязательное поле); - модель машины (обязательное поле); - объем двигателя; - текущая стоимость; - признак наличия в продаже;
Библиотека. - Инвентарный номер книги (обязательное поле); - Автор (обязательное поле); - Название (обязательное поле); - Стоимость (обязательное поле); - Жанр; - Дата поступления в библиотечный фонд.
Автовокзал. - Номер рейса (обязательное поле); - Пункт отправления (обязательное поле); - Пункт прибытия (обязательное поле); - Время прибытия на данную станцию (обязательное поле); - Время отправления (обязательное поле);
Животные заповедника - Название животного (обязательное поле); - Численность; - Занесено ли в красную книгу (обязательное поле); - Средняя продолжительность жизни;
Видеотека - Название фильма (обязательное поле); - Режиссер (обязательное поле); - Год выпуска; - Жанр; - Краткое описание;
ЖЭК - № ЖЭКа (обязательное поле); - Начальник (обязательное поле); - Численность персонала; - Кол-во обслуживаемых квартир (обязательное поле); - Кол-во ремонтных бригад;
Предметы в ВУЗе - Название (обязательное поле); - Лектор (обязательное поле); - Кафедра; - Количество часов (обязательное поле); - Признак экзамен или зачет;
Прайс-лист - Категория (обязательное поле) (напр., материнская плата, процессор и т.д.); - Код товара (обязательное поле); - Фирма-производитель (обязательное поле); - Название товара (обязательное поле); - Цена (обязательное поле); - Признак наличия в продаже(обязательное поле);
Меню - Название блюда (обязательное поле); - Вес/объем блюда (обязательное поле); - Цена (обязательное поле); - Время приготовления; - Наличие в данный момент (обязательное поле);