Uploaded by Валентин Георгиев

d193f20ab43ba245

advertisement
Технически Университет - Варна
КАТЕДРА
„КОМПЮТЪРНИ НАУКИ И ТЕХНОЛОГИИ”
КУРСОВ ПРОЕКТ
По Бази данни
TEMA: Web базирано приложение „Book catalog”
Разработили:
, Фак. №
ВАРНА,
УВОД
В настоящият курсов проект е представен начина на изграждане на
динамичен web сайт за каталог с книги – “Book catalog”.
Основните задачи, които трябва да бъдат извършени за реализирането на тази
цел са:
- Избор на система за управление на съдържанието
- База данни и програмен скрипт за управление
- Описание на организацията на програмното приложение.
- Инсталация и тестванен на програмното приложение.
Целата на дадената задача е да се изгради сайт в който да могат да се създават,
публикуват и редактират обяви от регистрирани в сайта потребители. WEB
базираната система трябва да бъде разработена на PHP с използване на MySQL
база данни. В резултат на направено проучване беше избран софтуерния
продукт XAMPP – това е свободен инсталационен пакет, който включва в себе
си Apache уеб сървър, MySQL база данни, PHP, FTP server и phpMyAdmin. С
помощта на тази програма може лесно да се симулира сървър.
XAMPP това е свободен инсталационен пакет, който включва в себе си
Apache уеб сървър, MySQL база данни, PHP, FTP server и phpMyAdmin. Тъй
като това е базата, на която се изгражда цялата платформа в тази глава ще
разгледаме защо комбинацията от тези два софтуерни продукта е найподходяща за дадената задача.
XAMPP
е
изключително
лесна
за
инсталиране
дистрибуция
на Apache за Linux и
Windows.
Пакетът
включва
Apache
Web
server, MySQL, PHP, Perl, както и FTP server и phpMyAdmin.С помощта на тази
програма можете лесно и бързо да симулирате сървър на домашния си
компютър без да се налага да инсталирате множество приложения. Също така
няма да се налага да правите сложни конфигурации и настройки като това
приложение ще го направи вместо вас.XAMPP се разпространява с GNU
General Public License и служи за безплатен и лесен за употреба уеб сървър,
който има възможност да борави с динамични страници. В момента XAMPP
има версии за Windows, Linux, Sun Solaris и Mac OS X. Отличава с с много
лесна и бърза инсталация.
Apache HTTP Server е уеб сървър с отворен код за Unix, Windows Novell
NetWare и други платформи. Apache има огромен принос за първоначалното
разрастване на WWW и чрез него работят над 70% от сайтовете (включително
Wikipedia). Счита се от много специалисти за платформа, според която се
разработват и оценяват другите уеб сървъри.Сървърът има възможности за
промяна на съобщенията за грешки, удостоверяване на потребителите,
договаряне на съдържанието (изключително полезно при многоезични
сайтове), proxy възможности, както и поддръжка на CGI и SSI. Има множество
модули за Apache, които позволяват работа на разнообразни скриптове и
осигуряване на динамично съдържание, криптиране, ограничаване и други.
- С постоянното разширяване на уеб програмите и управляваните от
потребители уеб сайтове, стана необходимо да имате начин за съхранение на
подредени в определен ред данни, които могат лесно да бъдат изведени обратно
и манипулирани; нещо, което е невъзможно при статичното съдържание. За да
се осъществи това, трябва да се използва база данни! Базата данни е найпростата форма на събиране в организиран ред, без значение дали е в пълен
кабинет, или в компютърна база данни. Приспособяването на база данни в уеб
сайта позволява съхранението и получаването обратно данни, използвайки
специфични команди. За да съхранявате данни в база данни, първо трябва да
създадете база данни. Тази база данни тогава може да съдържа много таблици
(представете се пълен кабинет, съдържащ много файлове); всяка таблица трябва
да има определени колони, а тези колони са създадени да съхраняват
специфични данни (представете си вход за различни данни). Възможно е да
ограничите това, което може да бъде сложно в тях като бройни данни или
ограничения за използваните знаци например. Когато данните са вкарани в
базата данни, те ще бъдат съхранявани в определена таблица, тогава таблицата
ще се състои от редове и колони като spreadsheet както данните са съхранени и
показани в табличен вид. За дадената задача ще използваме свързана система за
управление на база данни, наречена MySQL. Този open-source софтуер е
достъпен под генералния публичен лиценз GNU, което го прави безплатен!
MySQL може да управлява многобройни бази от данни, които съдържат
многобройни таблици. Нивата на достъп могат да бъдат съгласувани с
различните потребители, за да осигуряват или отменят специфични
привилегии. MySQL използва команди/функции, базирани на SQL (structured
query language). Това ни позволява да използваме ключови думи, за да
определим какви данни искаме да върнем. Тогава MySQL завършва някои
допълнителни особености, за да повиши възможната функционалност.
Предимно ключовите думи са лесни за разбиране и често са свързани с
английска дума или фраза (E.G. SELECT, UPDATE, WHERE).
I.Проектиране на базата данни
1.1.Описание на предметната област.
Настоящият курсов проект има за цел реализирането на динамично Web
приложение с помощта на MySQL база данни за онлайн „Каталог с книги“,
обработване посредством сървърният език за програмиране PHP.
В настоящето приложение потребителите могат да добавят както книги,
така и автори, да правят търсения за книги, справки по автори и жанрове, както
и да пишат коментари за отделните книги. Реализирани са няколко групи
потребители – user(има най-малко права), moderator( има почти същите
привилегии като user, но с някой подобрения) и administrator(с пълен пакет
привилегии).
1.1.1.Описание на таблиците.
- Authors (Автори): полета - author_id* и author_name;
функционалност – Съдържа идентификационния номер и имената на
авторите ;
- Books (Книги): полета –book_id*, book_title,book_genre и year;
функционалност - таблицата включва книгите, който са в каталога,
идентификационния номер, годината на издаване и жанровете от
таблицата genre;
- Users (Потребители): полета – user_id*, name, passwd,access_lvl;
функционалност - това е таблицата с потребителските имена и
паролите на всички потребители, тук имаме и връзка към поле от
таблица access_lvl указващо правата за достъп на конкретния
потребител ;
- comments (Коментари): полета – comment_id*,comment_book_id,
comment_user_id, comment_date; функционалност – таблицата
съдържа коментарите към всяка книга, от кой потребител са написани
и датата на която е поставен коментара;
- Genre (Жанрове): полета – genre_id*, genre_name; функционалност
– таблицата съдържа всички достъпни жанрове в каталога ;
- Books_authors (Книги-потребители): полета book_id, author_id;
функционалност – посредством тази таблица се осъществява връзка
много към много между таблиците books и authors.
- Access_levels(Нива на достъп): полета – access_lvl*, access_name;
функционалност – таблица указваща нивата на потребителски
достъп след влизане в системата.
1.1.2.Връзки между наборите обекти и предметната област
Имаме две връзки са от тип 1 към много.
- Genre – Books: Всяка книга и свой жанр, но всеки отделен жанр
може да бъде начислен към всяка една от книгите.
- Users - Comments: Всеки от потребителите има възможност по всяко
едно време да сложи един и няколко коментара за дадена книга.
Една връзка едно към едно:
- Access_levels – Users: Всеки от регистрираните потребители има
право само на едно ниво на достъп( обикновен user, moderator или
administrator)
Връзки много към много:
- Authors – Books: Връзката много към много между таблиците
Authors и Books се oсъществява посредством таблицата „book_users“.
- User – Books: Тук връзката много към много се осъществява
посредством таблицата Comments, в която се съдържат всички
коментари поставени от потребителите за дадена книга и дата и часа,
в който е поставен коментара.
1.1.3.Схема на връзките
1.1.4.Вероятни въпроси към базата от данни от страна на
потребителя.
Потребители:
-
Регистриран ли е потребителя?
Какви права за достъп има?
Валидни ли са паролата и потребителското име?
Може ли да въвежда книги и автори?
Може ли да пише коментари?
Книги и автори:
-
Валидно ли е името на книгата?
Кога е издадена и какъв жанр е?
Коментари за съответната книга
Каталог по жанрове
Каталог по автори
Има ли коментари
1.2. Концептуална схема на БД (обекти /същност/ - атрибути,
ключове;връзки)
Най-често използваният модел в БД е моделът „Обекти-Връзки”. Такъв е и
моделът, използван в настоящата СУБД. Той има структура, състояща се от:
обекти и връзки. Обектите в повечето случаи образуват набори, като всеки
набор е съвкупност от еднородни елементи, характеризиращи се със свойства,
които се наричат атрибути. Те трябва да са подредени така, че да съдържат един
или няколко ключови атрибута. Чрез ключовите атрибути всеки елемент в БД
се идентифицира уникално. В настоящата БД ключови полета са: ИД на
автор(author_id), ИД на книга(book_id),Ид на жанра (genre_id), Ниво на достъп
(access_lvl, ИД на коментара (comment_id)и ИД на потребителя (user_id).
Връзките служат за показват логическата връзка между обектите. Биват
бинарни и множествени. Видовете бинарни връзки от своя страна са три:
-един към един или 1:1 , при тях всеки обект от единния набор е свързан
само с един обект от другия набор
-много към един или m:1, при тях всеки обект от първия набор е свързан с
един обект от втория набор и всеки обект от последния е свързан с много
обекти от първия набор;
-много към много или m:n, при тях всеки обект от първия набор е свъзан с
много обекти от втория набор и обратно.
3. Анализ на РБД – извод на функционални зависимости
Проектирането е дълъг и сложен процес. Необходимо е КС да се
усъвършенства и подобрява стъпка по стъпка. За целта се използват т.н.
функционални зависимости (ФЗ). Те представляват свойства на отношенията,
пораждащи се върху ограниченията при комплектацията на данните в
кортежите. Т.е. в даден кортеж не всяка комбинация е допустима.
Всяка една качествена БД трябва да се изследва задължително за аномалии.
Съществуват четири основни вида аномалии:




свързани с излишество на данни в таблиците;
аномалии на обновяването на информация в таблиците;
аномалии на включването;
аномалии на изключването;
4. Проверка за нормалност на релациите и нормализация на
същите, ако това е необходимо
За избягване на тези аномалии (проблеми) се прилага т.н. нормализация.
При правилното й прилагане се гарантира отсъствието на аномалии.
Съществуват следните т.н. нормални форми, чрез които се гарантира
освобождаване на отношенията от аномалии:
1-ва нормална форма (1НФ) - едно отношение се намира в тази форма,
ако всички негови атрибути са атомарни (неделими), т.е. стойностите,
които могат да заемат неговите атрибути не могат да се делят на помалки стойности;
2-ра нормална форма (2НФ) – едно отношение е във 2НФ, ако е в 1НФ и
всеки не първичен атрибут изцяло зависи от всеки ключ;
3-та нормална форма (3НФ) – едно отношение се намира в тази форма,
ако е в 1НФ и не съществуват Х*, У, А, такива че:
1. Х*->У;
2. У->А;
3. У->Х*;
Третата нормална е необходимо и достатъчно условие да се твърди, че
едно отношение е свободно от аномалии. Ако всички схеми в една РБД са в
3НФ, то схемата на БД е в 3НФ и е изцяло свободна от аномалии.
След внимателно проведен анализ на схемите в настоящата РБД мога да твърдя,
че те са в 3НФ и следователно РБД като цяло е в 3НФ и е свободна от
аномалии.
II.Създаване на примерни таблици с данни.
2.1. Създаване на таблици.
2.1.1. Таблица “Access_levels”
SQL код за създаване на таблицата :
CREATE TABLE IF NOT EXISTS `access_levels` (
`access_lvl` tinyint(4) NOT NULL AUTO_INCREMENT,
`access_name` varchar(50) NOT NULL,
PRIMARY KEY (`access_lvl`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=4 ;
2.1.2. Таблица „Authors”
SQL код за създаване на таблицата
CREATE TABLE IF NOT EXISTS `authors` (
`author_id` int(11) NOT NULL AUTO_INCREMENT,
`author_name` varchar(250) NOT NULL,
PRIMARY KEY (`author_id`))
ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=14 ;
2.1.3. Таблица „Books”
SQL код за създаване на таблица:
CREATE TABLE IF NOT EXISTS `books` (
`book_id` int(11) NOT NULL AUTO_INCREMENT,
`book_title` varchar(250) NOT NULL,
`book_genre` int(11) NOT NULL,
`year` int(11) NOT NULL,
PRIMARY KEY (`book_id`))
ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=31 ;
2.1.4. Таблица „Books_authors”
SQL код за създаване на таблицата:
CREATE TABLE IF NOT EXISTS `books_authors` (
`book_id` int(11) NOT NULL,
`author_id` int(11) NOT NULL,
KEY `book_id` (`book_id`),
KEY `author_id` (`author_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
2.1.5. Таблица „Comments”
SQL код за създаване на таблицата:
CREATE TABLE IF NOT EXISTS `comments` (
`comment_id` int(11) NOT NULL AUTO_INCREMENT,
`comment_book_id` int(11) NOT NULL,
`comment_user_id` int(11) NOT NULL,
`comment_content` varchar(500) NOT NULL,
`comment_date` datetime NOT NULL,
PRIMARY KEY (`comment_id`))
ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=16 ;
2.1.6. Таблица „Genre”
SQL код за създаване на таблицата:
CREATE TABLE IF NOT EXISTS `genre` (
`genre_id` int(11) NOT NULL AUTO_INCREMENT,
`genre_name` varchar(50) NOT NULL,
PRIMARY KEY (`genre_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=9 ;
2.1.7. Таблица „Users”
SQL код за създаване на таблицата:
CREATE TABLE IF NOT EXISTS `users` (
`user_id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(50) NOT NULL,
`passwd` varchar(50) NOT NULL,
`access_lvl` tinyint(4) NOT NULL DEFAULT '1',
PRIMARY KEY (`user_id`),
UNIQUE KEY `name` (`name`))
ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=25;
2.2. Реализация на програмната система
2.2.1. “Conection.php”- съдържа връзката с базата данни
define('SQL_HOST', 'localhost');
define('SQL_USER', 'root');
define('SQL_PASS', '');
define('SQL_DB', 'books_users');
$connection = mysqli_connect(SQL_HOST, SQL_USER, SQL_PASS, SQL_DB);
if (!$connection) {
echo 'No database connection.';
exit;
}
mysqli_set_charset($connection, 'utf8');
2.2.2. „Functions.php “- Съдържа основни функции за работа с приложение –
основно SELECT, UPDATE и DELETE заявки.
Реализирани функции:
- Добавяне на автори, книги и коментари:
//функция за добавяне на книги
function insertBook($connection, $bookTitle, $authors, $bookYear, $bookGenre,
$messages) {
$sql = "INSERT INTO `books`
VALUES (NULL, '$bookTitle', '$bookGenre','$bookYear')";
- Проверка за коректност на име автор и книга, валидност на
коментар.
- Проверка за съществуващи автори и книги:
//проверка за съществуване на книга
function authorExistById($connection, $authorId, $messages) {
$sql = "SELECT `author_name` FROM `authors`
WHERE `author_name` = '$authorName'"; }
- Функция за извличане на цялостна информация за книга:
function getBookInfo($connection, $bookId, $messages) {
$sql = 'SELECT b.book_id, b.book_title, b.book_genre, b.year,a.author_id,
a.author_name, g.genre_name
FROM `books` AS b
LEFT JOIN `books_authors` AS ba ON b.book_id = ba.book_id
LEFT JOIN `authors` AS a ON a.author_id = ba.author_id
LEFT JOIN genre AS g ON b.book_genre = g.genre_id
WHERE b.book_id = ?';}
- Функция за изтриване на книга и всички връзки в който е
участвала:
function deleteBook($connection, $bookId, $messages) {
//изтриване на книга от books
$sql = "DELETE FROM `books`
WHERE `book_id` = '$bookId'
LIMIT 1";
$query = mysqli_query($connection, $sql);
//изтриване на авторите на съответната книга от таблица books_authors
$sql = "DELETE FROM `books_authors`
WHERE `book_id` = '$bookId'";
$query = mysqli_query($connection, $sql);
//изтриване на коментарите за съответната книга
$sql = "DELETE FROM `comments`
WHERE `comment_book_id` = '$bookId'";
$query = mysqli_query($connection, $sql);
$_SESSION['messages'] = $messages['bookDeleted'];
header('Location: ../index.php');
exit;}
- Функция за търсене по зададени от потребителя заглавие:
function existSearchResults($connection, $bookTitle, $messages) {
$sql = "SELECT `book_title` FROM `books`
WHERE `book_title`
LIKE '%$bookTitle%'";
$query = mysqli_query($connection, $sql);
if (!$query) {
$_SESSION['messages'] = $messages['wrongQueryExecution'];
header('Location: index.php');
exit;
}
$result = $query->num_rows;
if ($result > 0) {
return true;
} else {
return false; }
}
- Функция за търсене на книги по зададен автор:
function getAuthorName($connection, $authorId, $messages) {
$sql = 'SELECT `author_name`
FROM `authors`
WHERE `author_id` = ?';
$stmt = mysqli_prepare($connection, $sql);
if (!$stmt) {
$_SESSION['messages'] = $messages['wrongQueryExecution'];
header('Location: index.php');
exit;
}
mysqli_stmt_bind_param($stmt, 'i', $authorId);
mysqli_stmt_execute($stmt);
$rows = mysqli_stmt_result_metadata($stmt);
while ($field = mysqli_fetch_field($rows)) {
$fields[] = &$row[$field->name];
}
call_user_func_array(array($stmt, 'bind_result'), $fields);
mysqli_stmt_fetch($stmt);
return $row['author_name'];}
- Функции за вход и изход от системата.
- Функции за валидиране на потребителско име и парола.
- Функция за проверка за съществуване на потребител:
function usernameExist($connection, $username) {
$sql = "SELECT * FROM `users`
WHERE `name` = '" . $username . "'";
$query = mysqli_query($connection, $sql);
if (!$query) {
$_SESSION['messages'] = $messages['wrongQueryExecution'];
header('Location: ../index.php');
exit;
}
if ($query->num_rows == 1) {
return true;
} else {
return false;
}}
- Функция за извличане на всички коментари на дадена книга:
function getCommentsByBookId($connection, $bookId, $messages) {
$sql = 'SELECT c.comment_id, c.comment_content, c.comment_user_id,
c.comment_date, u.name
FROM `comments` AS c
LEFT JOIN `users` AS u ON u.user_id = c.comment_user_id
WHERE `comment_book_id` = ?
ORDER BY c.comment_date';
$stmt = mysqli_prepare($connection, $sql);
if (!$stmt) {
$_SESSION['messages'] = $messages['wrongQueryExecution'];
header('Location: index.php');
exit;
}
mysqli_stmt_bind_param($stmt, 'i', $bookId);
mysqli_stmt_execute($stmt);
$rows = mysqli_stmt_result_metadata($stmt);
while ($field = mysqli_fetch_field($rows)) {
$fields[] = &$row[$field->name];
}
call_user_func_array(array($stmt, 'bind_result'), $fields);
$comments = array();
while (mysqli_stmt_fetch($stmt)) {
$comments[$row['comment_id']]['userId'] = $row['comment_user_id'];
$comments[$row['comment_id']]['username'] = $row['name'];
$comments[$row['comment_id']]['commentContent'] =
$row['comment_content'];
$comments[$row['comment_id']]['date'] = $row['comment_date'];
}
return $comments;
}
- Функция за визуалиация на всички коментари на даден
потребител
- Пълна информация за всички потребители
- Функция за изтриване на потребител:
function deleteUser($connection, $id) {
$id = mysqli_real_escape_string($connection, $id);
// Изтриване на коментарите на съответния потребител
$sql = "DELETE FROM `comments`
WHERE `comment_user_id` = '" . $id . "'";
$query = mysqli_query($connection, $sql);
if (!$query) {
$_SESSION['messages'] = $messages['wrongQueryExecution'];
header('Location: ../index.php');
exit;
}
// Изтриване на потребителя
$sql = "DELETE FROM `users`
WHERE `user_id` = '" . $id . "'
LIMIT 1";
$query = mysqli_query($connection, $sql);
if (!$query) {
$_SESSION['messages'] = $messages['wrongQueryExecution'];
header('Location: ../index.php');
exit;}
}
- Промяна на ниво на достъп на зададен потребител:
function changeAccessLevel($connection, $id, $accessLevelId, $messages) {
$id = mysqli_real_escape_string($connection, $id);
$accessLevelId = mysqli_real_escape_string($connection, $accessLevelId);
$sql = "UPDATE `users`
SET `access_lvl` = '" . $accessLevelId . "'
WHERE `user_id` = '" . $id . "'";
$query = mysqli_query($connection, $sql);
if (!$query) {
$_SESSION['messages'] = $messages['wrongQueryExecution'];
header('Location: ../index.php');
exit;
}
$_SESSION['messages'] = $messages['successfullUpdate'];
header('Location: ../administration.php');
exit;
}
2.2.3. “Chek-user.php” съдържа проверка за съответствие на потребител при
влизане в системата. Ако не е наличен препраща към форма за регистрация.
2.2.4. „ Manage-account.php” – съдържа потребителско меню за промяна на
парола. Имаме употребата на UPDATE функция:
if (oldPasswordMath($connection, $oldPassword)) {
$sql = "UPDATE `users`
SET `passwd` = '" . $newPassword . "'
WHERE `user_id` = '" . $_SESSION['userId'] . "'";}
2.2.5. “Manage-add.php” – тук имаме извикване на функции за добавяне на
книги, автори и коментари към базата данни.
2.2.6. „Manage-administrator.php”- извикване на функции за администриране
на потребителите – промяна на нива на достъп и изтриване на потребители.
2.2.7. „Manage-delete.php”- извикване на функция за изтриване на книга.
2.2.8. „ Index.php” – функции за извеждане на всички всички книги, автори,
жанрови и ако потребителя има съответното ниво на достъп moderato или
administrator се извеждат допълнителни функции, които не са достъпни за
обикновен потребител или не регистриран потребител.
$pageTitle = 'Books';
require 'includes/header.php';
// запълване на комбо бокс с имена на автори
if (isset($_GET['author']) && $_GET['author'] != 'all-authors') {
$authorId = (int) $_GET['author'];
$authorId = mysqli_real_escape_string($connection, $authorId);
}
if (!authorExistById($connection, $authorId, $messages)) {
$_SESSION['messages'] = $messages['authorNotExist'];
header('Location: index.php');
exit;
}
//проверка дали зададения автор има книги
if (!authorHasBooks($connection, $authorId, $messages)) {
$_SESSION['messages'] = $messages['authorHasNotBooks'];
header('Location: index.php');
exit;
}
// извеждане на всички книги на съответен автор по ID
$filterByAuthorId = "WHERE authors.author_id = $authorId";
} else {
$filterByAuthorId = '';
}
//вземаме жанр от полето за търсене по жанр
if (isset($_GET['genres']) && $_GET['genres'] != 'all') {
$genreID = (int) $_GET['genres'];
$esc_genre = mysqli_real_escape_string($connection, $genreID);
$filterByGenre = ' books.book_genre = "' . $esc_genre . '" AND';
} else {
$filterByGenre = '';
}
//сортировка по азбучен ред
if (isset($_GET['sort']) && $_GET['sort'] == 'DESC') {
$currentSort = 'DESC';
$nextSort = 'ASC';
} else {
$currentSort = 'ASC';
$nextSort = 'DESC';
}
//извеждане на цялата информация за книга
$sql = "
SELECT books.book_id,books.year, books.book_title,books.book_genre,
authors.author_id, authors.author_name
FROM books
//осъществяване на връзка с таблица books_authors
LEFT JOIN books_authors
ON books.book_id = books_authors.book_id
//връзка с таблица authors
LEFT JOIN authors
ON authors.author_id = books_authors.author_id
// условие за извеждане на книги
WHERE $filterByGenre books.book_title in (
SELECT books.book_title
FROM books
LEFT JOIN books_authors ON books.book_id = books_authors.book_id
LEFT JOIN authors ON authors.author_id = books_authors.author_id
$filterByAuthorId)
ORDER BY books.book_title $currentSort";
$query = mysqli_query($connection, $sql);
if (!$query) {
$_SESSION['messages'] = $messages['wrongQueryExecution'];
header('Location: index.php');
exit;
}
$allInfo = array();
//запълване на масив с информация от заявката
while ($row = $query->fetch_assoc()) {
$allInfo[$row['book_id']]['bookTitle'] = $row['book_title'];
$allInfo[$row['book_id']]['authorInfo'][$row['author_id']]
=$row['author_name'];
$allInfo[$row['book_id']]['BookGenre'] = $row['book_genre'];
$allInfo[$row['book_id']]['BookYear'] = $row['year'];
}
//търсене по жанр и определен автор
if (isset($authorId) && isset($_GET['genre'])) {
$nameGenre = getGenre($connection, $_GET['genre'], $messages);
echo '<h2>Books from "' . getAuthorName($connection, $authorId,
$messages) . '" Genre: "' . $nameGenre['genre_name'] . '"</h2>';
//!!!!!!!!!!
} else {
echo '<h2>All Books</h2>';
}
2.2.9. „Account.php” – съдържа html за промяна на потребителска
информация(парола)
2.2.10. „Add-author.php”- html форма за добавяне на нов автор към таблица
authors и извикване на функцията за добавянена автор.
2.2.11. „Add-book.php”- съдържа html за добавяне на нова книга със
съответните автор/и, жанр и година на издаване, и извикване на функцията за
добавяне на книга.
2.2.12. „ Administration.php”- форма достъпна само за потребители с
администраторски достъп, от която може да се променят правата на останалите
потребители или да бъде изтрит определен потребител.
2.2.13. „ Book.php” – html форма за цялостната информация за книга и от тук
потребителите могат да въвеждат коментари. Извикват се съответе функции.
2.2.14. „ Comments.php” – съдържа html и извикване на функции за извеждане
на коментари от даден потребител“ .
2.2.15. „ Search.php”- извежда пълна информация за търсена заглавия или част
от заглавие.
//SELECT за търсенето на книгата
if (existSearchResults($connection, $bookTitle, $messages)) {
$sql = "
SELECT *
FROM `books` AS bks
//връзка с таблицата books_authors
LEFT JOIN `books_authors` AS bks_aut
ON bks.book_id = bks_aut.book_id
// връзка с таблица authors
LEFT JOIN `authors` AS aut
ON bks_aut.author_id = aut.author_id
//критерия за търсенето
WHERE bks.book_title
LIKE '%$bookTitle%'
ORDER BY bks.book_title ASC";
$query = mysqli_query($connection, $sql);
if (!$query) {
$_SESSION['messages'] = $messages['wrongQueryExecution'];
header('Location: index.php');
exit;
}
while ($row = $query->fetch_assoc()) {
$allInfo[$row['book_id']]['bookTitle'] = $row['book_title'];
$allInfo[$row['book_id']]['authorInfo'][$row['author_id']] =
$row['author_name'];
$allInfo[$row['book_id']]['BookGenre'] = $row['book_genre'];
$allInfo[$row['book_id']]['BookYear'] = $row['year'];}
2.2.16. „sing-up.php” – съдържа html форма за регистрация и извикване на
функции за добавяне на нов потребител.
III. Ръководство за потребителя.
3.1. Начална страница.
Тя съдържа:
- Login форма
- Бутон за препратка за страница за регистрация(ако такава липсва)
- Поле за търсене по заглавие на дадена книга
- Информация за всички налични книги
- Търсене на книги по задаен автор и/или жанр
- Препратки към страници за добавяне на книга и добавяне на автор.
3.2.При влизане в системата като администратор:
- Имаме възможност за изтриване на книга и са налични препратки към
страница за управление на акаунта и за администриране.
- При избор на конкретен автор и жанр системата извлича съответната
информация.
- При търсене на зададено от потребителя име на книга в
полето за търсене имаме:
- При натискане върху името на дадена книга потребителя се препраща
към страница с цялостна информация за книга и възможност за
добавяне на коментари. Добавяне на коментари е възможно само ако
потребителя е регистриран в системата.
- При натискане върху потребител написал коментар се прехвърляме
към страница с всички коментари, написани от съответния
потребител:
Тук се извеждат всички коментари от потребителя, кога са написани и за коя
книга са те.
- При натискане на даден автор потребителя се препраща към страница
с всички налични книги написани от автора.
- Ако потребителя има модераторски или администраторски права най
в дясно срещу всяка книга имаме бутон delete, чрез който може да
бъде изтрита дадената книга.Обикновените потребители или
нерегистрираните нямат тази опция.
- При натискане на полето „ Book“ можем да сортиране книгите по
азбучен ред възходящо или низходящо.
3.3. При натискане на “Add book”потребителя се препраща към
страницата за добавяне на книги:
Тук потребителя има възможност да добави нова книга като сам въвежда името
и гадината на издаване, а избиране на жанр от списък в базата данни и селекция
на един или няколко(със задържане на бутона ctrl от клавиатурата). Ако се
натисне Add се добавя към базата данни, а ако се натисне „Анлуране“ се
изчиства всичко избрано.
3.4.
При натискане на Add Author ни препраща в следващата страница:
Тук имаме препратка към таблица с всички налични автори и поле за
въвеждане на нов. Също и при натискане на полето Authors имаме азбучна
сортировка низходящо или възходящо.
3.5.
Ако потребителя е влязъл в системата със своето потребителско име
ще бъде налично и полето Account, което съдържа форма за промяна
на паролата:
Първо имаме потвърждение на старата парола и въвеждане на нова, с която да
бъде заменена.
3.6.
Ако потребителя е с права на Administrator то ще бъде налична и
връзка към страница за администриране на останалите потребител.
- Тук администраторът има възможност да избере друг потребител за
промени неговите права за достъп(user, moderator или administrator)
или да бъде изтрит.
3.7. При натискане на бутона Logout се излиза от системата и се препраща
отново към началната страница.
IV. Бъдещо развитие на системата:
1) Разширяване и добавяне нови таблици в базата данни:
А)Автор:
- Биография за автора
- Снимка
- Поредици
Б) Потребители:
- Име на потребителя
- Бележки
- Интереси
- Възможност за изпращане на съобщения между потребители
- Снимка
В) Книги:
- Резюме
- Снимка на корицата
- Електронен вариант на книгата
- Възможност за сваляне
- Поредици(ако има такава)
2) Добавяне възможност за редактиране на вече съществуваща книга.
3) Добавяне на съдържание
4) Речник
V. Използване литература:
1.
2.
3.
MySQL и PHP курсове към Телерик.
Издателство Софтпрес – Създаване на Web-страници.
Б.Рачев, Вълкова, С. Арсов, „Бази от данни: проектиране, създаване и
работа в средата на Oracle“, Русе-2002г.
4. Б. Рачев, В. Сгурева, Г. Кунев, „Бази от данни и информационни системи“,
ТУ-Варна
5. OReilly – HTML & XHTML The Definitive Guide – 5th Ed 2002.chm
6. Том Негрино, Дори Смит – “JavaScript за World Wide Web”
7. CSS – O'Reilly – Cascading Style Sheets The Definitive Guide.pdf
8. http://www.apache.org
9. http://www.php.net/
10. http://www.w3schools.com – Ръководство за HTML, CSS, JavaScript и др.
Download