Проектирование БД, построение динамически генерируемых страниц сайта на основе информации, содержащейся в БД
База данных для сайта магазин одежды будет состоять из двух таблиц. Первая из них будет хранить всю информацию о страницах сайта, вторая – о пользователях, которым разрешен доступ в администраторскую часть[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>