Галерея сайту. Урок 6. БД

295

Від автора: у цьому уроці ми почнемо змінювати код галереї для того, щоб вона використовувала в своїй роботі базу даних. З БД галерея стане більш функціональною, зокрема, в БД ми можемо зберігати короткі описи до кожної картинці, які виводяться на звороті картинки. Отже, давайте почнемо.

Галерея сайту. Урок 6. БДГалерея сайту. Урок 6. БД

Насамперед, нам потрібно створити БД. Поки що нам вистачить однієї таблиці, в якій будуть зберігатися номер галереї, до якої відноситься картинка, назва файлу зображення та опис картинки. Запит для створення таблиці буде наступним:

CREATE TABLE IF NOT EXISTS `images` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`img` varchar(255) NOT NULL,
`description` varchar(255) NOT NULL,
PRIMARY KEY (`id`),
KEY `gallery_id` (`gallery_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=11 ;

Далі потрібно заповнити таблицю даними. У додаткових матеріалах ви знайдете файл дампа images.sql, який створить потрібну таблицю з даними.

Йдемо далі. Оскільки в БД у нас є поле з номером галереї картинки, отже, ми повинні в додатку якось отримувати номер запитаної галереї і показувати саме її зображення. Отримувати номер ми будемо з GET-параметри gallery.

В індексному файлі після підключення файлу функцій отримаємо номер галереї:

$gallery = isset($_GET[‘gallery’]) ? (int)$_GET[‘gallery’] : 1;
if($gallery < 1) $gallery = 1;

Тут все просто. Якщо GET-параметр є, тоді візьмемо його, інакше вважаємо, що потрібно показувати картинки галереї №1. Зараз url у нас буде виглядати приблизно так: http://localhost/gallery/?gallery=2. Так ми запитуємо картинки другий галереї. Однак, можна спробувати скоротити url, використовуючи можливості модуля mod_rewrite. Давайте спробуємо зробити ЧПУ адресу виду http://localhost/gallery/2, який буде запитувати картинки другий галереї.

Відкриємо файл .htaccess і додамо в нього наступні рядки:

RewriteEngine On
RewriteRule ^(\d+) index.php?gallery=$1 [QSA]

Перший рядок містить потрібний нам модуль. Друга рядок являє собою правило переписування посилання. Прапор QSA необхідний для роботи пагинации.

Тепер при зверненні з ЧПУ адресою ми будемо бачити потрібну нам сторінку. Ну і якщо ми використовуємо ЧПУ, нам потрібно в функцію пагинации у файлі pagination.php передавати третій параметр, який дасть зрозуміти функції, що робота йде з ЧПУ:

$pagination = pagination($page, $count_pages, $modrew = 1);

Тепер залишилося привести всі посилання в додатку до абсолютного формату, щоб не було проблем з підключенням скриптів, стилів і т. д. Для цього створимо файл config.php, який підключимо перед файлом функцій. Оголосимо у файлі кілька констант і підключимося відразу до БД:

define(“SITE”, “http://localhost/gallery/”);
define(“DBHOST”, “localhost”);
define(“DBUSER”, “root”);
define(“DBPASS”, “”);
define(“DBNAME”, “gallery”);
$db = @mysqli_connect(DBHOST, DBUSER, DBPASS, DBNAME) or die(“Немає підключення до БД”);
mysqli_set_charset($db, “utf8”) or die(“Не встановлена кодування з’єднання”);

У константі SITE ми зберігаємо шлях до програми. Ця константа нам і знадобиться для переписування посилань з відносних на абсолютні. Використовуємо константу в індексному файлі для всіх посилань приблизно так:

Тепер давайте отримаємо з БД картинки запитаної галереї. Для цього в індексному файлі закомментіруем виклик функції get_images() і будемо отримувати результат роботи функції get_images_db():

$images = get_images_db($gallery);

Опишемо функцію у файлі функцій:

/**
* отримання зображень з БД
**/
function get_images_db($gallery){
global $db;
$query = “SELECT id, img, description images FROM WHERE gallery_id = $gallery ORDER BY id ASC”;
$res = mysqli_query($db, $query);
$images = array();
while($row = mysqli_fetch_assoc($res)){
$images[$row[‘id’]] = $row;
}
return $images;
}

В індексному файлі можемо надрукувати масив $images, щоб переконатися, що ми отримуємо картинки потрібної галереї:

print_r($images);

На цьому ми завершимо поточний урок. Удачі і до нових зустрічей!