Проектирование БД, построение динамически генерируемых страниц сайта на основе информации, содержащейся в БД

База данных для сайта магазин одежды будет состоять из двух таблиц. Первая из них будет хранить всю информацию о страницах сайта, вторая – о пользователях, которым разрешен доступ в администраторскую часть[1].

Создавать таблицы будем при помощи панели PHPMyAdmin 2.6.1. Для этого:

1) Вводим в адресной строке браузера следующий адрес: http://localhost/Tools/phpMyAdmin/;

2) Создаем новую базу данных с названием интернет магазин одежды (Рис 3.3)

Рис. 3.3 Создание новой базы данных

 

3) Должно появится сообщение «БД interteach была создана». Далее, на вкладке SQL (Рис 3.4):

 

Рис. 3.4 Выполнение запроса создания таблиц

 

и делаем следующий запрос (листинг 8):

 

Листинг 8. SQL запрос для создания таблиц

CREATE TABLE `settings` (

`id` int(2) NOT NULL auto_increment,

`title` varchar(255) NOT NULL,

`text` text NOT NULL,

`parent` int(2) NOT NULL,

PRIMARY KEY (`id`)

) ENGINE=MyISAM AUTO_INCREMENT=12 DEFAULT CHARSET=cp1251 AUTO_INCREMENT=12 ;

 

INSERT INTO `settings` VALUES (2, 'Образование за рубежом', 'Страница "Образование за рубежом" в данный момент находится на стадии разработки. Просим принять свои извинения за причиненные неудобства', 0);

INSERT INTO `settings` VALUES (3, 'Языковые курсы', 'Страница "Языковые курсы" в данный момент находится на стадии разработки. Просим принять свои извинения за причиненные неудобства.', 0);

INSERT INTO `settings` VALUES (4, 'Каникулярные программы', 'Страница "Каникулярные программы" в данный момент находится на стадии разработки. Просим принять свои извинения за причиненные неудобства.', 0);

INSERT INTO `settings` VALUES (5, 'Обменные программы', '<p>Страница "Обменные программы" в данный момент находится на стадии разработки. Просим принять свои извинения за причиненные неудобства.</p>', 0);

INSERT INTO `settings` VALUES (6, 'Молодежные программы', '<p>Страница "Молодежные программы" в данный момент времени находится на стадии разработки. Просим принять свои извинения за причиненные неудобства.</p>', 0);

INSERT INTO `settings` VALUES (7, 'Стажировки', '<p>Страница "Стажировки" в данный момент времени находится на стадии разработки. Просим принять свои извинения за причиненные неудобства.</p>', 0);

INSERT INTO `settings` VALUES (8, 'Трудоустройство', '<p>Страница "Трудоустройство" в данный момент времени находится на стадии разработки. Просим принять свои извинения за причиненные неудобства.</p>', 0);

INSERT INTO `settings` VALUES (1, 'Главная', '<p><span class="style-main">Агентство «InterTeach» </span>предлагает свои услуги по языковой подготовке специалистов вашей фирмы <strong>в городе Экибастузе :</strong>\r\n<ul>\r\n<li>курсы английского и казахского языков в группах и индивидуально, с выездом на место или с предоставлением аудиторий; </li>\r\n<li>занятия проводят преподаватели высшей категории, имеющие сертификаты, опыт преподавания для работников различных сфер;</li>\r\n<li>обучение проводится с использованием специальной учебной литературы ведущих мировых издательств, аудио и видеоматериалов, словарей;</li>\r\n<li>для ваших работников будет представлен курс англ./ каз. языков с учетом специфики деятельности вашего предприятия (коммуникации);</li>\r\n<li>для развития навыков разговорной речи <span class="style-main">встреча с носителями языка</span> 2 раза в неделю. </li>\r\n</ul>\r\n</p><p>Для получения дополнительной информации заполните форму справа.</p>\r\n', 0);

 

CREATE TABLE `userlist` (

`id` int(3) NOT NULL auto_increment,

`user` varchar(50) NOT NULL,

`pass` varchar(50) NOT NULL,

PRIMARY KEY (`id`)

) ENGINE=MyISAM AUTO_INCREMENT=2 DEFAULT CHARSET=cp1251 AUTO_INCREMENT=2 ;

 

INSERT INTO `userlist` VALUES (1, 'eiti1994', 'kafedrais');

 

4) Идем во вкладку Структура и, если все прошло успешно, видим следующее (Рис 3.5)

Рис. 3.5 Структура БД

 

5) Переходим на главную страницу PHPMyADMIN и идем в раздел «Привелегии». Здесь мы должны создать нового пользователя для нашей базы данных (Рис 3.6)

Рис. 3.6 Добавление нового пользователя

 

6) Теперь приступим к созданию динамически генерируемых страниц. Их будет две – index.php и view.php. Сраница index.php будет отвечать за вывод главной страницы, view.php – за вывод всех остальных. Таким образом наш сайт будет состоять из 2 страниц.

7) Создадим в папке blocks еще один файл php и дадим ему имя bd.php. Этот файл будет отвечать за подключение к нашей уже созданной базе данных Interteach. Помещаем в него следующий код (листинг 9):

Листинг 9. Соединение с базой данных

<?php $db = mysql_connect ("localhost","admin","819g12hiez");

mysql_select_db ("interteach",$db);?>

 

Функция mysql_connect устанавливает соединение с сервером server MySQL и возвращает дескриптор соединения с базой данных, по которому все другие функции, принимающие этот дескриптор в качестве аргумента, будут однозначно определять выбранную базу данных. Вторым и третьим аргументами этой функции являются имя пользователя username и его пароль password соответственно. Использование функции mysql_select_db эквивалентно вызову команды USE в SQL-запросе, т. е. функция mysql_select_db выбирает базу данных для дальнейшей работы, и все последующие SQL-запросы применяются к выбранной базе данных. Функция принимает в качестве аргументов название выбираемой базы данных и дескриптор соединения

 

8) Открываем в программе Dreamweaver страничку index.php. Сейчас она выглядит как на листинге. С учетом того, что у нас появилась база данных, модифицируем ее следующим образом (листинг 10):

Листинг 10. Динамически генерируемая страница

<?php include ("blocks/bd.php");/*Соединяемся с базой данных*/

$result = mysql_query ("SELECT title, text FROM settings WHERE id='1'",$db);

 

if (!result){

echo "<p>Запрос на выборку данных из базы не прошел. Напишите об этом администратору.<br>

<strong>Код ошибки:</strong>

</p>";

exit(mysql_error());}

if (mysql_num_rows($result)>0){

$myrow = mysql_fetch_array ($result);}

else{

echo "<p>Информация по запросу не может быть извлечена. В таблице нет записей</p>";

exit();}

?>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<title>Агентство Interteach - <?php echo $myrow ['title']; ?></title>

<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">

<link rel="stylesheet" type="text/css" href="cssverticalmenu.css" />

<script type="text/javascript" src="cssverticalmenu.js">

</script>

<link rel="stylesheet" type="text/css" href="style.css" />

</head>

<body>

<div id="container">

<!--Подключаем шапку сайта-->

<?php include ("blocks/header.php");?>

<div id="wrapper">

<div id="content">

<h2>Добро пожаловать!</h2>

<div id="topicwhite">

<?php echo $myrow ['text']; ?>

</div>

</div>

</div>

<!--Подключаем форму-->

<?php include ("blocks/form.php");?>

<!--Подключаем блок рекламы-->

<?php include ("blocks/reklama.php");?>

<!--Подключаем "подвал" сайта-->

<?php include ("blocks/footer.php");?>

</div>

</body>

</html>

 

Функция mysql_query применяется для отправки серверу SQL-запросов. Функция mysql_fetch_array возвращает значения полей в виде ассоциативного массива, в качестве аргумента принимает дескриптор запроса возвращаемый функцией mysql_query.

9) Перед тем, как приступить к реализации страницы view.php, подправим файл navigation.php, учитывая что все необходимые данные хранятся в базе данных (листинг 11)

Листинг 11. Вывод рубрик в цикле

<?php

include ("blocks/bd.php");/*Соединяемся с базой данных*/

$result2 = mysql_query ("SELECT * FROM settings WHERE parent='0' ORDER BY id",$db);

$myrow2 = mysql_fetch_array ($result2);

?>

<div id="navigation">

<ul id="verticalmenu" class="glossymenu">

<?php

do

{

printf ("<li><a href='view.php?id=%s'>%s</a>", $myrow2['id'],$myrow2['title']);

$d=$myrow2['id'];

$result3 = mysql_query ("SELECT * FROM settings WHERE parent=\"$d\"",$db);

$myrow3 = mysql_fetch_array ($result3);

$c=mysql_num_rows($result3);

if ($c!='0')

{

echo "<ul>";

do

{

printf ("<li><a href='view.php?id=%s'>%s</a></li>", $myrow3['id'],$myrow3['title']);

}

while ($myrow3 = mysql_fetch_array ($result3));

echo "</ul></li>";

}

else {echo "</li>";}

}

while ($myrow2 = mysql_fetch_array ($result2));

?>

</ul></div>

 

10) Таким образом, переменная id передается на страницу view.php через глобальную переменную $_GET['id']. Тогда страница view.php будет сформирована следующим образом (листинг 12):

 

Листинг 12. Старница view.php

<?php include ("blocks/bd.php");/*Соединяемся с базой данных*/

if (isset($_GET['id'])) {$id=$_GET['id'];}

$result = mysql_query ("SELECT title, text FROM settings WHERE id='$id'",$db);

$myrow = mysql_fetch_array ($result);

?>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<title>Агентство Interteach - <?php echo $myrow ['title']; ?></title>

<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">

<link rel="stylesheet" type="text/css" href="cssverticalmenu.css" />

<script type="text/javascript" src="cssverticalmenu.js">

</script>

<link rel="stylesheet" type="text/css" href="style.css" />

</head>

<body>

<div id="container">

<!--Подключаем шапку сайта-->

<?php include ("blocks/header.php");?>

<div id="wrapper">

<div id="content">

<h2><?php echo $myrow ['title']; ?></h2>

<div id="topicwhite">

<?php echo $myrow ['text']; ?>

</div>

</div>

</div>

<!--Подключаем форму-->

<?php include ("blocks/form.php");?>

<!--Подключаем блок рекламы-->

<?php include ("blocks/reklama.php");?>

<!--Подключаем "подвал" сайта-->

<?php include ("blocks/footer.php");?>

</div>

</body>

</html>