Автор работы: Пользователь скрыл имя, 25 Января 2013 в 07:29, курсовая работа
Задание
Используя MySQL, необходимо создать базу данных для электронного магазина (Web-сервера), торгующего компьютерной техникой.
Для решения поставленной завдачи, используем комплект «Denwer».
Комплект Денвер-2 имеет нечто вроде ядра – так называемый «базовый комплект», занимающий всего около 2 MB. Базовый комплект содержит большинство необходимых для разработки web-страниц программ и утилит:
• сервер Apache; ...
Задание…………………………………………………………………………….2
Введение…………………………………………………………………………..2
Программное обеспечение……………………………………………………….2
Работа с виртуальными хостами…………………………………………………5
Работа с сервером MySQL……………………………………………………….6
Работа с таблицами БД…………………………………………………………...7
Управление данными……………………………………………………………11
Система безопасности MySQL…………………………………………………13
PHP страницы……………………………………………………………………20
Таблица host позволяет задать основные разрешения на межкомпьютерном уровне. При проверке прав доступа MySQL ищет в таблице db соответствие имени пользователя и его машине. Если он находит запись, соответствующую имени пользователя, поле host которой пусто, MySQL обращается к таблице host и использует пересечение обоих прав для определения окончательного права доступа. Если у вас есть группа серверов, которые вы считаете менее защищенными, то вы можете запретить для них все права записи. Если «bob» заходит с одной из таких машин, и его запись в таблице db содержит пустое поле host, ему будет запрещена операция записи, даже если она разрешена ему согласно таблице db.
Таблицы tables_priv и columns_priv. Эти две таблицы, по сути, уточняют данные, имеющиеся в таблице db. Именно, право на всякую операцию сначала проверяется по таблице db, затем по таблице tables_priv , затем по таблице columns_priv. Операция разрешается, если одна из них дает разрешение. С помощью этих таблиц можно сузить область действия разрешений до уровня таблиц и колонок. Управлять этими таблицами можно через команды SQL GRANT и REVOKE.
Последовательность контроля доступа. MySQL осуществляет контроль доступа в два этапа. Первый этап - подключение. При подключении проводятся две проверки. Сначала MySQL проверяет, есть ли в таблице user запись, соответствующая имени пользователя и машины, с которой он подключается. Поиск соответствия основывается на правилах, которые мы обсудили раньше. Если соответствие не найдено, в доступе отказывается. В случае, когда соответствующая запись найдена и имеет непустое поле Password , необходимо ввести правильный пароль. Неправильный пароль приводит к отклонению запроса на подключение.
Если соединение установлено, MySQL переходит к этапу верификации запроса. При этом сделанные вами запросы сопоставляются с вашими правами. Эти права MySQL проверяет по таблицам user, db, host, tables_pnv и columns_priv. Как только найдено соответствие в таблице user с положительным разрешением, команда немедленно выполняется. В противном случае MySQL продолжает поиск в следующих таблицах в указанном порядке:
Если таблица db содержит разрешение, дальнейшая проверка прекращается и выполняется команда. Если нет, то MySQL ищет соответствие в таблице tables_priv . Если это команда SELECT, объединяющая две таблицы, то пользователь должен иметь разрешения для обеих этих таблиц. Если хотя бы одна из записей отказывает в доступе или отсутствует, MySQL точно таким же способом проверяет все колонки в таблице columns_priv.
Изменение прав доступа. MySQL загружает таблицы доступа при запуске сервера. Преимуществом такого подхода по сравнению с динамическим обращением к таблицам является скорость. Отрицательная сторона состоит в том, что изменения, производимые в таблицах доступа MySQL, не сразу начинают действовать. Для того чтобы сервер увидел эти изменения, необходимо выполнить команду mysqladmin reload. Если таблицы изменяются с помощью SQL-команд GRANT или REVOKE, явно перегружать таблицы не требуется.
PhpMyAdmin дает нам возможность управлять пользователями с помощью раздела привилегии:
В разделе привилегии выбираем пункт добавить нового пользователя.
Создаем пользователя Bekshenev с паролем 09111972 и без глобальных прав доступа:
Теперь назначим ему права для выбора, вставки, обновления и удаления данных в базе данных bekand:
Выбираем bekand и нажимаем «Пошел».
Теперь для таблицы bekand назначаем права select, insert, update, delete и нажимаем пошел:
Права для таблицы назначены.
На этом построение самой базы данных для магазина, торгующего компьютерной техникой заканчивается.
PHP страницы.
Далее создадим страничку index.php (эта категории товаров и список товаров в категориях):
<? //главная страница
function showGood($a,$cat) { //рисует таблицу с картинкой
товара $a, его названием, ценой...
//$cat -- сторка, которая пишется вверху таблицы
-- это путь к категории, в которой находится
товар
echo "<center><p><table width=95% border=0 cellspacing=1
cellpadding=2 bgcolor=#E1E6FC>\n";
echo "<tr bgcolor=#D1D9F8>\n<td colspan=3><font
color=#3551C7>".$cat."</font><
echo "<tr bgcolor=#FFFFFF>\n<td rowspan=2 width=1% align=center
valign=top>\n";
//теперь показать фотографию товара
//изображение товара
if ($a[4] && file_exists("goods_pictures/".
echo "<img src=\"goods_pictures/".$a[4]."
else //нет фотографии
echo "<img src=\"images/no_image.jpg\" border=0>\n";
echo "</td>\n";
echo "<td width=80%>\n";
echo "<font class=cat><b>".$a[2]."</b></
if ($a[3]>0) { //писать ссылку на добавление
в корзину, только если цена > 0
$f=2;
echo "</td><td bgcolor=#FFFFFF align=center><a href=\"javascript:open_window(
}
else $f = 1;
echo "<tr bgcolor=#FFFFFF><td colspan=$f><b>Цена:
<font class=cat color=red>";
echo $a[3] ? $a[3]."$" : "n/a";
echo "</font></b></td></tr>\n";
echo "</table></p></center>\n\n";
};
include("head.incl"); //логотип
//основная таблица: здесь список категорий,
товары и т.д.
?>
<table border=0 width=100% cellspacing=5 cellpadding=5>
<tr>
<?
if ($CID || isset($GID)) { // список категорий "сбоку"
echo "<td width=120 valign=top><table border=0 cellspacing=2
width=120>";
//список категорий
processCategories($CID);
echo "</table>";
echo "</td>";
};
?>
<td valign=top width=100%>
<?
if ($CID) { //показать товары выбранной категории
$q = mysql_query("SELECT * FROM Categories WHERE CID=$CID")
or die (mysql_error());
if (!($r = mysql_fetch_row($q))) exit;
echo "<font class=cat><b><u>$r[1]:</u></b>
//теперь показать товары
$q = mysql_query("SELECT * FROM GoodsList WHERE CID=$CID ORDER
BY Price") or die (mysql_error());
$i=0;
$result = array();
while ($row = mysql_fetch_row($q)) {
$result[$i] = $row;
$i++;
};
if (!$i) { //если кол-во товаров в категории
= 0
echo " < нет товаров
>";
}
else { //$i != 0 -- показываем товары в этой категории
for ($i=0; $i<count($result); $i++)
showGood($result[$i],$r[
};
echo "</center>";
}
else { //показать начальную страницу (витрину)
-- некоторый текст + развернутый список
всех категорий
echo "<center><table width=78%>Здравствуйте";
if (isset($log)) echo ", <b>".stripslashes($log)."</b>"
echo "!<br>Добро пожаловать в наш магазин!</table><br>\n";
//категории помещаем в теблицу -- в 2 столбца,
поэтому надо посчитать кол-во корневых
категорий -- половину в один столбец,
//половину -- в другой
$q = mysql_query("SELECT * FROM Categories ORDER BY Name")
or die (mysql_error());
$k=0;
$result = array();
while ($row = mysql_fetch_row($q)) {
$result[$k++] = $row;
};
echo "<table width=80% border=0>\n<tr><td width=50%>";
for ($i=0; $i<$k/2; $i++)
echo "<a href=\"index.php?CID=".$
echo "</td>\n<td valign=top>\n";
for (; $i<$k; $i++)
echo "<a href=\"index.php?CID=".$
echo "</td>\n</tr>\n</table></
};
?>
</td>
</table>
</body>
</html>