| Version 12 (modified by , 8 months ago) ( diff ) |
|---|
Приказ на сите книги
Актери
- Најавен корисник
Чекор 1
$genres_filters = $_GET['genres'];
$placeholders = str_repeat('?,', count($genres_filters) - 1) . '?';
$stmt = $conn->prepare("SELECT book.bookid, book.CoverImage, book.Title, book.Genre, book.PublishedYear, author.FirstName, author.LastName
FROM Book
INNER JOIN Book_Author ON Book.BookID = Book_Author.BookID
INNER JOIN Author ON Book_Author.AuthorID = Author.AuthorID
WHERE book.genre IN ($placeholders) AND book.PublishedYear BETWEEN ? AND ?;");
$stmt->execute(array_merge($genres_filters, [$query_from, $query_to]));
- Кодот ги филтрира книгите според избраните жанрови (genres) и опсегот на години на објавување (PublishedYear). Жанровите се добиваат од $_GETgenres и се користат во SQL query-то со IN клаузула, каде што $placeholders ги генерира потребните ? за секој жанр. Query-то ги избира книгите од базата на податоци кои припаѓаат на избраните жанрови и се објавени помеѓу $query_from и $query_to. Резултатите се прикажуваат во HTML делот, каде што секоја книга се прикажува со детали како наслов, жанр, година на објавување, слика на корица и име на авторот. Параметрите се безбедно врзани со array_merge за да се спречи SQL инјекција.'
Чекор 2
$year_query = "SELECT MIN(PublishedYear) as min_year, MAX(PublishedYear) as max_year FROM Book";
$year_stmt = $conn->prepare($year_query);
$year_stmt->execute();
$year_range = $year_stmt->fetch(PDO::FETCH_ASSOC);
$where_conditions = [];
$params = [];
$year_from = isset($_GET['year_from']) ? (int)$_GET['year_from'] : null;
$year_to = isset($_GET['year_to']) ? (int)$_GET['year_to'] : null;
$year_min = $year_range['min_year'];
$year_max = $year_range['max_year'];
$query_from = $year_from;
$query_to = $year_to;
if($year_from === null) {
$query_from = $year_min;
}
if($year_to === null) {
$query_to = $year_max;
}
$stmt = $conn->prepare("SELECT book.bookid, book.CoverImage, book.Title, book.Genre, book.PublishedYear, author.FirstName, author.LastName
FROM Book
INNER JOIN Book_Author ON Book.BookID = Book_Author.BookID
INNER JOIN Author ON Book_Author.AuthorID = Author.AuthorID WHERE book.PublishedYear BETWEEN :year_from AND :year_to;
");
$stmt->bindParam(":year_from", $query_from, PDO::PARAM_STR);
$stmt->bindParam(":year_to", $query_to, PDO::PARAM_STR);
$stmt->execute();
- Овој код прво ја зема минималната и максималната година од табелата Book. Потоа, споредува ги годините од URL-то (year_from и year_to) со минималната и максималната година, и ги поставува вредностите за филтрирање. На крај, ги избира книгите и авторите чија година на издавање е помеѓу овие вредности, користејќи ги BETWEEN и INNER JOIN за да ги поврзе соодветните табели.
Чекор 3
Сортирање на книгите по избор, и селектирање на "Apply Filters"
function sortBooks(books, sortType) {
const sortedBooks = [...books];
switch(sortType) {
case 'name-asc':
sortedBooks.sort((a, b) => a.title.localeCompare(b.title));
break;
case 'name-desc':
sortedBooks.sort((a, b) => b.title.localeCompare(a.title));
break;
case 'year-desc':
sortedBooks.sort((a, b) => b.publishedYear - a.publishedYear);
break;
case 'year-asc':
sortedBooks.sort((a, b) => a.publishedYear - b.publishedYear);
break;
case 'relevance':
default:
break;
}
return sortedBooks;
}
- Оваа функција sortBooks ги сортира книгите според избраниот тип на сортирање (sortType). Ако sortType е 'name-asc', книгите се сортираат по наслов во растечки редослед, а ако е 'name-desc', во опаѓачки редослед. За сортирање по година, 'year-asc' ги подредува од најстара кон најнова, додека 'year-desc' од најнова кон најстара. Ако е избрана опцијата 'relevance' или не е наведен тип, книгите остануваат непроменети.
Чекор 4
Attachments (4)
- BT-11.png (7.0 KB ) - added by 10 months ago.
- BT-12.png (2.3 KB ) - added by 10 months ago.
- BT-13.png (15.8 KB ) - added by 10 months ago.
- BT-14.png (66.7 KB ) - added by 10 months ago.
Download all attachments as: .zip
Note:
See TracWiki
for help on using the wiki.