getConnection(); // Получаем параметры фильтрации $category_id = $_GET['category'] ?? 0; $search = $_GET['search'] ?? ''; $min_price = $_GET['min_price'] ?? 0; $max_price = $_GET['max_price'] ?? 1000000; $colors = isset($_GET['colors']) ? (array)$_GET['colors'] : []; $materials = isset($_GET['materials']) ? (array)$_GET['materials'] : []; $show_all = isset($_GET['show_all']) && $_GET['show_all'] == '1'; // Проверяем уведомления $success_message = $_GET['success'] ?? ''; $error_message = $_GET['error'] ?? ''; try { // Получаем информацию о пользователе $user_id = $_SESSION['user_id'] ?? 0; $userStmt = $db->prepare("SELECT * FROM users WHERE user_id = ?"); $userStmt->execute([$user_id]); $user = $userStmt->fetch(); $isAdmin = isset($_SESSION['isAdmin']) && $_SESSION['isAdmin'] === true; $userEmail = $_SESSION['user_email'] ?? ''; $fullName = $_SESSION['full_name'] ?? $userEmail; $loginTime = $_SESSION['login_time'] ?? time(); // Получаем категории (ИСПРАВЛЕНО: убрано дублирование fetchAll) try { $categoriesStmt = $db->prepare(" SELECT * FROM categories WHERE is_active = TRUE ORDER BY sort_order, name "); $categoriesStmt->execute(); $categories = $categoriesStmt->fetchAll(); } catch (PDOException $e) { $categories = []; error_log("Ошибка получения категорий: " . $e->getMessage()); } // Получаем подкатегории для текущей категории (если выбрана) $subcategories = []; if ($category_id > 0) { $subStmt = $db->prepare(" SELECT * FROM subcategories WHERE category_id = ? AND is_active = TRUE ORDER BY sort_order, name "); $subStmt->execute([$category_id]); $subcategories = $subStmt->fetchAll(); } // Проверяем наличие столбцов color и material в таблице products $checkColumns = $db->query(" SELECT column_name FROM information_schema.columns WHERE table_name = 'products' AND column_name IN ('color', 'material') "); $existingColumns = $checkColumns->fetchAll(PDO::FETCH_COLUMN); $hasColorColumn = in_array('color', $existingColumns); $hasMaterialColumn = in_array('material', $existingColumns); // Получаем доступные цвета из базы данных (если столбец существует) $availableColors = []; if ($hasColorColumn) { $colorsStmt = $db->query(" SELECT DISTINCT color FROM products WHERE color IS NOT NULL AND color != '' AND is_available = TRUE ORDER BY color "); $availableColors = $colorsStmt->fetchAll(PDO::FETCH_COLUMN); } // Получаем доступные материалы из базы данных (если столбец существует) $availableMaterials = []; if ($hasMaterialColumn) { $materialsStmt = $db->query(" SELECT DISTINCT material FROM products WHERE material IS NOT NULL AND material != '' AND is_available = TRUE ORDER BY material "); $availableMaterials = $materialsStmt->fetchAll(PDO::FETCH_COLUMN); } // Получаем ВСЕ товары ИЗ БАЗЫ ДАННЫХ с фильтрами $sql = "SELECT p.*, c.name as category_name FROM products p LEFT JOIN categories c ON p.category_id = c.category_id WHERE 1=1"; $params = []; $hasFilters = false; // Фильтрация по доступности (если не админ и не показываем все) if (!$show_all && !$isAdmin) { $sql .= " AND p.is_available = TRUE"; } // Фильтрация по категории if ($category_id > 0) { $sql .= " AND p.category_id = ?"; $params[] = $category_id; $hasFilters = true; } // Фильтрация по цене if ($min_price > 0 || $max_price < 1000000) { $sql .= " AND p.price BETWEEN ? AND ?"; $params[] = $min_price; $params[] = $max_price; $hasFilters = true; } // Фильтрация по цвету if ($hasColorColumn && !empty($colors)) { $placeholders = implode(',', array_fill(0, count($colors), '?')); $sql .= " AND p.color IN ($placeholders)"; $params = array_merge($params, $colors); $hasFilters = true; } // Фильтрация по материалу if ($hasMaterialColumn && !empty($materials)) { $placeholders = implode(',', array_fill(0, count($materials), '?')); $sql .= " AND p.material IN ($placeholders)"; $params = array_merge($params, $materials); $hasFilters = true; } // Поиск if (!empty($search)) { $sql .= " AND (p.name LIKE ? OR p.description LIKE ?)"; $params[] = "%$search%"; $params[] = "%$search%"; $hasFilters = true; } // Получаем товары из базы данных с фильтрами $sql = "SELECT p.*, c.name as category_name FROM products p LEFT JOIN categories c ON p.category_id = c.category_id WHERE 1=1"; $params = []; // Фильтрация по доступности if (!$show_all && !$isAdmin) { $sql .= " AND p.is_available = TRUE"; } // Фильтрация по категории if ($category_id > 0) { $sql .= " AND p.category_id = ?"; $params[] = $category_id; } // Фильтрация по цене if ($min_price > 0 || $max_price < 1000000) { $sql .= " AND p.price BETWEEN ? AND ?"; $params[] = $min_price; $params[] = $max_price; } // Поиск if (!empty($search)) { $sql .= " AND (p.name LIKE ? OR p.description LIKE ?)"; $params[] = "%$search%"; $params[] = "%$search%"; } $sql .= " ORDER BY p.product_id ASC LIMIT 9"; // Ограничиваем 9 товаров $stmt = $db->prepare($sql); $stmt->execute($params); $filteredProducts = $stmt->fetchAll(); // Оригинальные размеры для первых 9 товаров (ID 1-9) $originalSizes = [ 1 => 'small', // Светильник MINNIGHT 2 => 'large', // Диван MODERN (Кровать MODER) 3 => 'tall align-right', // Торшер MARCIA 4 => 'wide', // Светильник POLET 5 => 'small1', // Стол NORD 6 => 'wide2', // Диван ROYALTY 7 => 'wide3', // Кресло MINIMAL 8 => 'wide2_1', // Стол LONKI 9 => 'full-width' // Диван HEMMINS ]; // Классы для изображений $imgClasses = ['small1', 'wide2', 'wide3', 'wide2_1']; } catch (PDOException $e) { die("Ошибка базы данных: " . $e->getMessage()); } ?> AETERNA - Каталог
Все категории
'Категория успешно добавлена!', 'category_updated' => 'Категория успешно обновлена!', 'category_deleted' => 'Категория успешно удалена!', 'product_added' => 'Товар успешно добавлен!', 'product_updated' => 'Товар успешно обновлен!', 'product_deleted' => 'Товар успешно удален!' ]; echo $messages[$success_message] ?? 'Операция выполнена успешно!'; ?>
Ошибка:

Настройки отображения

Скрыть недоступные товары Показать все товары Недоступные товары отмечены серым цветом
Добро пожаловать, ! Администратор Показаны все товары

Каталог мебели ( товаров)

Результаты поиска по запросу: "" Очистить поиск

Показаны все товары, включая недоступные. Недоступные товары отмечены серым цветом.
['name' => 'Светильник MINNIGHT', 'price' => 7999, 'image' => 'img2/1_2.png', 'size' => 'small'], 2 => ['name' => 'Кровать MODER', 'price' => 45999, 'image' => 'img2/3_3.png', 'size' => 'large'], 3 => ['name' => 'Торшер MARCIA', 'price' => 11999, 'image' => 'img2/2_2.png', 'size' => 'tall align-right'], 4 => ['name' => 'Светильник POLET', 'price' => 5499, 'image' => 'img2/4.jpg', 'size' => 'wide'], 5 => ['name' => 'Стол NORD', 'price' => 23999, 'image' => 'img2/5_5.png', 'size' => 'small1'], 6 => ['name' => 'Диван ROYALTY', 'price' => 78999, 'image' => 'img2/6_6.png', 'size' => 'wide2'], 7 => ['name' => 'Кресло MINIMAL', 'price' => 29999, 'image' => 'img2/7_7.png', 'size' => 'wide3'], 8 => ['name' => 'Стол LONKI', 'price' => 34999, 'image' => 'img2/8_8.png', 'size' => 'wide2_1'], 9 => ['name' => 'Диван HEMMINS', 'price' => 89999, 'image' => 'img2/9_9.png', 'size' => 'full-width'] ]; // Если в базе данных товаров нет, показываем оригинальные if (empty($filteredProducts)) { foreach ($originalProducts as $id => $product): ?>
<?= $product['name'] ?>
<?= htmlspecialchars($product['name']) ?>