Загрузка данных


booking.php
<?php
require_once 'config/database.php';
include 'includes/header.php';

if(!isset($_SESSION['user_id'])) { echo '<div class="alert warn"> Для бронирования <a href="profile.php">войдите</a></div>'; include 'includes/footer.php'; exit; }

$room_id=(int)$_GET['id'];
if(!$room_id) { echo '<div class="alert error"> Ошибка: помещение не выбрано</div>'; include 'includes/footer.php'; exit; }

$room=$pdo->prepare("SELECT * FROM rooms WHERE id=?");
$room->execute([$room_id]);
$room=$room->fetch();
if(!$room) { echo '<div class="alert error">Ошибка: помещение не найдено</div>'; include 'includes/footer.php'; exit; }

$user=$pdo->prepare("SELECT * FROM users WHERE id=?");
$user->execute([$_SESSION['user_id']]);
$user=$user->fetch();

$msg='';
if($_POST && isset($_POST['submit'])) {
    $date=$_POST['date']; $start=$_POST['start']; $end=$_POST['end']; $purpose=trim($_POST['purpose']); $days=(int)$_POST['days'];
    $total=$room['price_per_day']*$days;
    if(empty($date)||empty($start)||empty($end)||empty($purpose)) $msg='<div class="alert error">Заполните все поля</div>';
    elseif($days<1) $msg='<div class="alert error">Дней не менее 1</div>';
    else {
        $book=$pdo->prepare("INSERT INTO bookings (user_id,room_id,booking_date,start_time,end_time,purpose,total_price) VALUES (?,?,?,?,?,?,?)");
        $book->execute([$_SESSION['user_id'],$room_id,$date,$start,$end,$purpose,$total]);
        $msg='<div class="alert success"> Заявка создана! <a href="my-bookings.php">Мои заявки</a> | <a href="rooms.php">Назад</a></div>';
        unset($_POST);
    }
}

$types=['auditorium'=>'Аудитория','coworking'=>'Коворкинг','cinema'=>'Кинозал'];
?>
<h1>Бронирование</h1>
<?=$msg?>

<div style="display:grid;grid-template-columns:1fr 1fr;gap:30px;">
<div style="background:#fff;border-radius:12px;overflow:hidden;box-shadow:0 2px 15px rgba(0,0,0,0.08);">
    <img src="<?=$room['image_url']?>" style="width:100%;height:300px;object-fit:cover;">
    <div style="padding:25px;">
        <div style="display:flex;justify-content:space-between;margin-bottom:15px;">
            <span class="type"><?=$types[$room['type']]??$room['type']?></span>
            <span style="background:#fff3e0;color:#e65100;padding:4px 12px;border-radius:20px;font-size:12px;"> <?=$room['capacity']?> чел.</span>
        </div>
        <h2 style="color:#1a237e;font-size:28px;"><?=htmlspecialchars($room['name'])?></h2>
        <p style="color:#666;line-height:1.8;"><?=nl2br(htmlspecialchars($room['description']))?></p>
        <div style="background:#f5f7fa;border-radius:8px;padding:15px;margin-top:15px;">
            <div style="display:flex;justify-content:space-between;padding:5px 0;border-bottom:1px solid #ddd;"> <b><?=number_format($room['price_per_day'],0)?> ₽/день</b></div>
            <div style="display:flex;justify-content:space-between;padding:5px 0;"> <?=$types[$room['type']]??$room['type']?></div>
        </div>
    </div>
</div>

<div style="background:#fff;border-radius:12px;padding:30px;box-shadow:0 2px 15px rgba(0,0,0,0.08);">
    <h3> Данные пользователя</h3>
    <div style="background:#f5f7fa;border-radius:8px;padding:15px;margin:15px 0;">
        <div style="display:flex;justify-content:space-between;padding:5px 0;border-bottom:1px solid #ddd;">Имя: <b><?=htmlspecialchars($user['full_name'])?></b></div>
        <div style="display:flex;justify-content:space-between;padding:5px 0;border-bottom:1px solid #ddd;">Email: <b><?=htmlspecialchars($user['email'])?></b></div>
        <div style="display:flex;justify-content:space-between;padding:5px 0;">Телефон: <b><?=htmlspecialchars($user['phone']??'Не указан')?></b></div>
    </div>

    <form method="POST">
        <input type="date" name="date" required style="width:100%;padding:10px;margin:5px 0;border:1px solid #ddd;border-radius:6px;box-sizing:border-box;">
        <div style="display:grid;grid-template-columns:1fr 1fr;gap:10px;">
            <input type="time" name="start" required style="padding:10px;border:1px solid #ddd;border-radius:6px;box-sizing:border-box;">
            <input type="time" name="end" required style="padding:10px;border:1px solid #ddd;border-radius:6px;box-sizing:border-box;">
        </div>
        <input type="number" name="days" id="days" value="1" min="1" required style="width:100%;padding:10px;margin:5px 0;border:1px solid #ddd;border-radius:6px;box-sizing:border-box;">
        <textarea name="purpose" rows="3" required style="width:100%;padding:10px;margin:5px 0;border:1px solid #ddd;border-radius:6px;box-sizing:border-box;resize:vertical;" placeholder="Цель мероприятия"></textarea>
        
        <div style="background:#f5f7fa;border-radius:8px;padding:15px;margin:10px 0;">
            <div style="display:flex;justify-content:space-between;padding:5px 0;border-bottom:1px solid #ddd;">Дней: <span id="daysDisplay">1</span></div>
            <div style="display:flex;justify-content:space-between;padding:5px 0;font-size:20px;font-weight:700;">Итого: <span style="color:#2e7d32;" id="totalPrice"><?=number_format($room['price_per_day'],0)?> ₽</span></div>
        </div>
        
        <button type="submit" name="submit" class="btn btn-success" style="width:100%;padding:14px;font-size:16px;"> Отправить заявку</button>
        <div style="text-align:center;margin-top:10px;"><a href="rooms.php" style="color:#1a237e;">← Назад</a></div>
    </form>
</div>
</div>

<script>
document.getElementById('days').oninput=function(){
    let d=parseInt(this.value)||0;
    document.getElementById('daysDisplay').textContent=d;
    document.getElementById('totalPrice').textContent=(d>0?d*<?=$room['price_per_day']?>:0)+' ₽';
};
</script>
<?php include 'includes/footer.php'; ?>

database config.php

<?php
$host = 'localhost';
$dbname = 'conference_rf';
$username = 'root';
$password = '';

try {
    $pdo = new PDO("mysql:host=$host;dbname=$dbname;charset=utf8mb4", $username, $password);
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch(PDOException $e) {
    die("Ошибка подключения: " . $e->getMessage());
}
session_start();

rooms.php
<?php
require_once 'config/database.php';
include 'includes/header.php';

$stmt = $pdo->query("SELECT * FROM rooms ORDER BY id");
$rooms = $stmt->fetchAll(PDO::FETCH_ASSOC);
?>

<h1 style="margin-bottom: 30px;">Все помещения</h1>

<div class="rooms-grid">
    <?php foreach ($rooms as $room): ?>
    <div class="room-card" id="room-<?= $room['id'] ?>">
        <img src="<?= $room['image_url'] ?>" alt="<?= $room['name'] ?>">
        <div class="card-body">
            <span class="type">
                <?php
                $types = ['auditorium' => 'Аудитория', 'coworking' => 'Коворкинг', 'cinema' => 'Кинозал'];
                echo $types[$room['type']] ?? $room['type'];
                ?>
            </span>
            <h3><?= $room['name'] ?></h3>
            <p><?= $room['description'] ?></p>
            <div style="margin:10px 0;color:#666;font-size:14px;">
                Вместимость: <?= $room['capacity'] ?> человек
            </div>
            <div class="price"><?= number_format($room['price_per_day'], 0) ?> ₽/день</div>
            <a href="booking.php?id=<?= $room['id'] ?>" class="btn btn-success">Забронировать</a>
        </div>
    </div>
    <?php endforeach; ?>
</div>

<?php include 'includes/footer.php'; ?>


profile.php
profile.php
<?php
require_once 'config/database.php';
include 'includes/header.php';

if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['register'])) {
    $username = $_POST['username'];
    $email = $_POST['email'];
    $password = password_hash($_POST['password'], PASSWORD_DEFAULT);
    $full_name = $_POST['full_name'];
    $phone = $_POST['phone'] ?? '';
    
    try {
        $stmt = $pdo->prepare("INSERT INTO users (username, email, password, full_name, phone) VALUES (?, ?, ?, ?, ?)");
        $stmt->execute([$username, $email, $password, $full_name, $phone]);

        $user_id = $pdo->lastInsertId();
        $_SESSION['user_id'] = $user_id;
        $_SESSION['username'] = $username;
        $_SESSION['is_admin'] = ($username === 'Admin26');
        
        echo '<div style="background:#e8f5e9;padding:15px;border-radius:8px;margin-bottom:20px;">Регистрация успешна! Вы автоматически вошли в аккаунт.</div>';

        $user_stmt = $pdo->prepare("SELECT * FROM users WHERE id = ?");
        $user_stmt->execute([$user_id]);
        $user_data = $user_stmt->fetch(PDO::FETCH_ASSOC);
        
    } catch (PDOException $e) {
        echo '<div style="background:#ffebee;padding:15px;border-radius:8px;margin-bottom:20px;">❌ Ошибка: такой пользователь или email уже существует</div>';
    }
}

if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['login'])) {
    $username = $_POST['username'];
    $password = $_POST['password'];
    
    $stmt = $pdo->prepare("SELECT * FROM users WHERE username = ? OR email = ?");
    $stmt->execute([$username, $username]);
    $user = $stmt->fetch(PDO::FETCH_ASSOC);
    
    if ($user && password_verify($password, $user['password'])) {
        $_SESSION['user_id'] = $user['id'];
        $_SESSION['username'] = $user['username'];
        $_SESSION['is_admin'] = ($user['username'] === 'Admin26');
        header('Location: profile.php');
        exit;
    } else {
        echo '<div style="background:#ffebee;padding:15px;border-radius:8px;margin-bottom:20px;">❌ Неверный логин или пароль</div>';
    }
}
?>

<?php if (isset($_SESSION['user_id'])): 

    if (!isset($user_data)) {
        $user_stmt = $pdo->prepare("SELECT * FROM users WHERE id = ?");
        $user_stmt->execute([$_SESSION['user_id']]);
        $user_data = $user_stmt->fetch(PDO::FETCH_ASSOC);
    }
?>
    <div style="background:white;padding:30px;border-radius:12px;max-width:500px;margin:0 auto;">
        <h2 style="color:#1a237e;margin-bottom:25px;">Профиль</h2>
        <div style="display:grid;gap:15px;">
            <div style="display:flex;justify-content:space-between;padding:10px 0;border-bottom:1px solid #f0f0f0;">
                <span style="color:#666;">Имя:</span>
                <span style="font-weight:500;"><?= htmlspecialchars($user_data['full_name']) ?></span>
            </div>
            <div style="display:flex;justify-content:space-between;padding:10px 0;border-bottom:1px solid #f0f0f0;">
                <span style="color:#666;">Логин:</span>
                <span style="font-weight:500;"><?= htmlspecialchars($user_data['username']) ?></span>
            </div>
            <div style="display:flex;justify-content:space-between;padding:10px 0;border-bottom:1px solid #f0f0f0;">
                <span style="color:#666;">Email:</span>
                <span style="font-weight:500;"><?= htmlspecialchars($user_data['email']) ?></span>
            </div>
            <div style="display:flex;justify-content:space-between;padding:10px 0;border-bottom:1px solid #f0f0f0;">
                <span style="color:#666;">Телефон:</span>
                <span style="font-weight:500;"><?= htmlspecialchars($user_data['phone'] ?? 'Не указан') ?></span>
            </div>
            <div style="display:flex;justify-content:space-between;padding:10px 0;">
                <span style="color:#666;">Роль:</span>
                <span style="font-weight:500;"><?= $_SESSION['is_admin'] ? 'Администратор' : 'Пользователь' ?></span>
            </div>
        </div>
        <div style="margin-top:25px;display:flex;gap:10px;">
            <a href="logout.php" class="btn btn-danger">Выйти</a>
            <?php if ($_SESSION['is_admin']): ?>
                <a href="admin.php" class="btn">Админ-панель</a>
            <?php endif; ?>
        </div>
    </div>
<?php else: ?>
    <div style="display:grid;grid-template-columns:1fr 1fr;gap:30px;max-width:900px;margin:0 auto;">
        <!-- Вход -->
        <div class="auth-form">
            <h2>Вход</h2>
            <form method="POST">
                <input type="text" name="username" placeholder="Логин или Email" required>
                <input type="password" name="password" placeholder="Пароль" required>
                <button type="submit" name="login" class="btn">Войти</button>
            </form>
        </div>
        
        <div class="auth-form">
            <h2>Регистрация</h2>
            <form method="POST">
                <input type="text" name="username" placeholder="Логин" required>
                <input type="email" name="email" placeholder="Email" required>
                <input type="text" name="full_name" placeholder="Полное имя" required>
                <input type="tel" name="phone" placeholder="Телефон (необязательно)">
                <input type="password" name="password" placeholder="Пароль" required>
                <button type="submit" name="register" class="btn btn-success">Зарегистрироваться</button>
            </form>
        </div>
    </div>
<?php endif; ?>

<?php include 'includes/footer.php'; ?>

my-bookings.php
<?php
require_once 'config/database.php';
include 'includes/header.php';

if (!isset($_SESSION['user_id'])) {
    echo '<div style="background:#fff3e0;padding:20px;border-radius:8px;">⚠️ Пожалуйста, <a href="profile.php">войдите</a> для просмотра заявок</div>';
    include 'includes/footer.php';
    exit;
}

$stmt = $pdo->prepare("
    SELECT b.*, r.name as room_name, r.type 
    FROM bookings b 
    JOIN rooms r ON b.room_id = r.id 
    WHERE b.user_id = ? 
    ORDER BY b.created_at DESC
");
$stmt->execute([$_SESSION['user_id']]);
$bookings = $stmt->fetchAll(PDO::FETCH_ASSOC);
?>

<h1 style="margin-bottom: 30px;">Мои заявки</h1>

<?php if (count($bookings) === 0): ?>
    <div style="background:white;padding:40px;border-radius:12px;text-align:center;">
        <p style="font-size:18px;color:#666;">У вас пока нет заявок</p>
        <a href="rooms.php" class="btn" style="margin-top:20px;">Перейти к помещениям</a>
    </div>
<?php else: ?>
    <div class="bookings-list">
        <?php foreach ($bookings as $booking): ?>
        <div class="booking-item">
            <div>
                <strong><?= $booking['room_name'] ?></strong> (<?= $booking['type'] ?>)<br>
                <small>Дата: <?= date('d.m.Y', strtotime($booking['booking_date'])) ?></small><br>
                <small>Сумма: <?= number_format($booking['total_price'], 0) ?> ₽</small>
            </div>
            <div style="text-align:right;">
                <span class="status status-<?= $booking['status'] ?>">
                    <?php
                    $statuses = ['new' => 'Новая', 'assigned' => 'Мероприятие назначено', 'completed' => 'Мероприятие завершено'];
                    echo $statuses[$booking['status']];
                    ?>
                </span>
            </div>
        </div>
        <?php endforeach; ?>
    </div>
<?php endif; ?>

<?php include 'includes/footer.php'; ?>

logout.php
<?php
session_start();
session_destroy();
header('Location: index.php');
exit;

index.php
<?php
require_once 'config/database.php';
?>
<?php include 'includes/header.php'; ?>

<div class="hero">
    <h1>Конференции.РФ</h1>
    <p>
    </p>
</div>


<div class="slider">
    <?php
    $slides = [
        ['img' => 'https://tse1.mm.bing.net/th/id/OIP.ESWwWDUX3xEVex6qHR_ZvgHaEn?rs=1&pid=ImgDetMain&o=7&rm=3', 'title' => 'Аудитория "Наука"', 'desc' => 'Современное оборудование для научных конференций'],
        ['img' => 'https://picsum.photos/id/20/1200/400', 'title' => 'Коворкинг "Инноватор"', 'desc' => 'Пространство для вдохновения и работы'],
        ['img' => 'https://picsum.photos/id/30/1200/400', 'title' => 'Кинозал "Премиум"', 'desc' => 'Профессиональный кинозал с 3D-проектором']
    ];
    
    foreach ($slides as $index => $slide): ?>
        <div class="slider-slide <?= $index === 0 ? 'active' : '' ?>">
            <img src="<?= $slide['img'] ?>" alt="<?= $slide['title'] ?>">
            <div class="slider-content">
                <h3><?= $slide['title'] ?></h3>
                <p><?= $slide['desc'] ?></p>
            </div>
        </div>
    <?php endforeach; ?>
</div>

<h2 style="margin-bottom: 20px;">Популярные помещения</h2>
<div class="rooms-grid">
    <?php
    $stmt = $pdo->query("SELECT * FROM rooms LIMIT 3");
    while ($room = $stmt->fetch(PDO::FETCH_ASSOC)):
    ?>
    <div class="room-card">
        <img src="<?= $room['image_url'] ?>" alt="<?= $room['name'] ?>">
        <div class="card-body">
            <span class="type"><?= $room['type'] ?></span>
            <h3><?= $room['name'] ?></h3>
            <p><?= substr($room['description'], 0, 80) ?>...</p>
            <div class="price"><?= number_format($room['price_per_day'], 0) ?> ₽/день</div>
            <a href="rooms.php#room-<?= $room['id'] ?>" class="btn">Подробнее</a>
        </div>
    </div>
    <?php endwhile; ?>
</div>

<?php include 'includes/footer.php'; ?>

 admin.php
<?php
require_once 'config/database.php';
include 'includes/header.php';

if (!isset($_SESSION['is_admin']) || !$_SESSION['is_admin']) {
    header('Location: profile.php');
    exit;
}


if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['update_status'])) {
    $booking_id = (int)$_POST['booking_id'];
    $status = $_POST['status'];
    
    $stmt = $pdo->prepare("UPDATE bookings SET status = ? WHERE id = ?");
    $stmt->execute([$status, $booking_id]);
    
    header('Location: admin.php');
    exit;
}

$stmt = $pdo->query("
    SELECT b.*, u.username, u.full_name, r.name as room_name 
    FROM bookings b 
    JOIN users u ON b.user_id = u.id 
    JOIN rooms r ON b.room_id = r.id 
    ORDER BY b.created_at DESC
");
$bookings = $stmt->fetchAll(PDO::FETCH_ASSOC);
?>

<h1 style="margin-bottom: 30px;">Админ-панель</h1>

<div class="admin-panel">
    <h3>Управление заявками</h3>
    <table>
        <thead>
            <tr>
                <th>ID</th>
                <th>Пользователь</th>
                <th>Помещение</th>
                <th>Дата</th>
                <th>Сумма</th>
                <th>Статус</th>
                <th>Действие</th>
            </tr>
        </thead>
        <tbody>
            <?php foreach ($bookings as $booking): ?>
            <tr>
                <td>#<?= $booking['id'] ?></td>
                <td><?= htmlspecialchars($booking['full_name']) ?></td>
                <td><?= $booking['room_name'] ?></td>
                <td><?= date('d.m.Y', strtotime($booking['booking_date'])) ?></td>
                <td><?= number_format($booking['total_price'], 0) ?> ₽</td>
                <td>
                    <span class="status status-<?= $booking['status'] ?>">
                        <?php
                        $statuses = ['new' => 'Новая', 'assigned' => 'Мероприятие назначено', 'completed' => 'Мероприятие завершено'];
                        echo $statuses[$booking['status']];
                        ?>
                    </span>
                </td>
                <td>
                    <form method="POST" style="display:inline;">
                        <input type="hidden" name="booking_id" value="<?= $booking['id'] ?>">
                        <select name="status" class="status-select" data-booking-id="<?= $booking['id'] ?>">
                            <option value="new" <?= $booking['status'] === 'new' ? 'selected' : '' ?>>Новая</option>
                            <option value="assigned" <?= $booking['status'] === 'assigned' ? 'selected' : '' ?>>Мероприятие назначено</option>
                            <option value="completed" <?= $booking['status'] === 'completed' ? 'selected' : '' ?>>Мероприятие завершено</option>
                        </select>
                        <button type="submit" name="update_status" class="btn" style="padding:5px 12px;font-size:12px;">Обновить</button>
                    </form>
                </td>
            </tr>
            <?php endforeach; ?>
        </tbody>
    </table>
</div>

<?php include 'includes/footer.php'; ?> 

js/script.js

document.addEventListener('DOMContentLoaded', function() {
    // Слайдер на главной
    const slides = document.querySelectorAll('.slider-slide');
    let currentSlide = 0;
    
    function showSlide(index) {
        slides.forEach((slide, i) => {
            slide.classList.toggle('active', i === index);
        });
    }
    
    if (slides.length > 0) {
        showSlide(0);
        setInterval(() => {
            currentSlide = (currentSlide + 1) % slides.length;
            showSlide(currentSlide);
        }, 3000);
    }

    const statusSelects = document.querySelectorAll('.status-select');
    statusSelects.forEach(select => {
        select.addEventListener('change', function() {
            const bookingId = this.dataset.bookingId;
            const status = this.value;
            
            fetch('admin.php', {
                method: 'POST',
                headers: {
                    'Content-Type': 'application/x-www-form-urlencoded',
                },
                body: `update_status=true&booking_id=${bookingId}&status=${status}`
            })
            .then(response => response.json())
            .then(data => {
                if (data.success) {
                    location.reload();
                }
            });
        });
    });
    
    // Расчет стоимости при бронировании
    const pricePerDay = document.querySelector('.room-price')?.dataset.price;
    const daysInput = document.getElementById('days');
    const totalPrice = document.getElementById('total-price');
    
    if (daysInput && totalPrice && pricePerDay) {
        daysInput.addEventListener('input', function() {
            const days = parseInt(this.value) || 1;
            totalPrice.textContent = (pricePerDay * days).toFixed(2);
        });
    }
});


includes/footer.php
        </div>
    </main>
    <footer>
        <div class="container">
            <p>Адрес:</p>
            <p>Номер телефона::</p>
        </div>
    </footer>
    <script src="js/script.js"></script>
</body>
</html>

header.php

<!DOCTYPE html>
<html lang="ru">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Конференции.РФ</title>
    <link rel="stylesheet" href="css/style.css">
</head>
<body>
    <header>
        <div class="container">
            <div class="logo">
                <a href="index.php">Конференции.РФ</a>
            </div>
            <nav>
                <a href="index.php">Главная</a>
                <a href="rooms.php">Помещения</a>
                <a href="my-bookings.php">Мои заявки</a>
                <a href="profile.php">Профиль</a>
            </nav>
        </div>
    </header>
    <main>
        <div class="container">


config database.php

<?php
$host = 'localhost';
$dbname = 'conference_rf';
$username = 'root';
$password = '';

try {
    $pdo = new PDO("mysql:host=$host;dbname=$dbname;charset=utf8mb4", $username, $password);
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch(PDOException $e) {
    die("Ошибка подключения: " . $e->getMessage());
}

session_start();

css/style.css
* {
    margin: 0;
    padding: 0;
    box-sizing: border-box;
}

html, body {
    height: 100%;
    font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Arial, sans-serif;
    background: #f5f7fa;
    color: #2c3e50;
    line-height: 1.6;
}

body {
    display: flex;
    flex-direction: column;
    min-height: 100vh;
}

.container {
    max-width: 1200px;
    margin: 0 auto;
    padding: 0 20px;
    width: 100%;
}

/* ===== ШАПКА ===== */
header {
    background: #1a237e;
    color: white;
    padding: 15px 0;
    box-shadow: 0 2px 10px rgba(0,0,0,0.1);
    position: sticky;
    top: 0;
    z-index: 1000;
    width: 100%;
    flex-shrink: 0;
}

header .container {
    display: flex;
    justify-content: space-between;
    align-items: center;
    flex-wrap: wrap;
}

header .logo a {
    color: white;
    text-decoration: none;
    font-size: 24px;
    font-weight: 700;
    white-space: nowrap;
}

header nav {
    display: flex;
    flex-wrap: wrap;
    gap: 5px;
}

header nav a {
    color: rgba(255,255,255,0.9);
    text-decoration: none;
    padding: 8px 16px;
    border-radius: 4px;
    transition: background 0.3s;
    font-size: 15px;
    white-space: nowrap;
}

header nav a:hover {
    background: rgba(255,255,255,0.15);
    color: white;
}

/* ===== ОСНОВНОЙ КОНТЕНТ ===== */
main {
    flex: 1 0 auto;
    padding: 40px 0;
    width: 100%;
}

/* ===== ПОДВАЛ ===== */
footer {
    background: #1a237e;
    color: white;
    padding: 20px 0;
    text-align: center;
    width: 100%;
    flex-shrink: 0;
    margin-top: auto;
}

footer .container {
    padding: 0 20px;
}

/* ===== ОСТАЛЬНЫЕ СТИЛИ ===== */
.hero {
    background: linear-gradient(135deg, #1a237e 0%, #0d47a1 100%);
    color: white;
    padding: 60px;
    border-radius: 12px;
    margin-bottom: 40px;
    text-align: center;
}

.hero h1 {
    font-size: 42px;
    margin-bottom: 15px;
}

.hero p {
    font-size: 18px;
    opacity: 0.9;
    max-width: 600px;
    margin: 0 auto;
}

.slider {
    position: relative;
    height: 400px;
    overflow: hidden;
    border-radius: 12px;
    margin-bottom: 40px;
    background: #e0e0e0;
}

.slider-slide {
    position: absolute;
    width: 100%;
    height: 100%;
    opacity: 0;
    transition: opacity 0.8s;
    display: flex;
    flex-direction: column;
    justify-content: center;
    align-items: center;
    color: white;
    padding: 40px;
}

.slider-slide.active {
    opacity: 1;
}

.slider-slide img {
    width: 100%;
    height: 100%;
    object-fit: cover;
    position: absolute;
    top: 0;
    left: 0;
}

.slider-content {
    position: relative;
    z-index: 2;
    background: rgba(0,0,0,0.6);
    padding: 30px;
    border-radius: 8px;
    text-align: center;
    max-width: 600px;
}

.slider-content h3 {
    font-size: 28px;
    margin-bottom: 10px;
}

.rooms-grid {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
    gap: 25px;
    margin-top: 30px;
}

.room-card {
    background: white;
    border-radius: 12px;
    overflow: hidden;
    box-shadow: 0 2px 15px rgba(0,0,0,0.08);
    transition: transform 0.3s, box-shadow 0.3s;
}

.room-card:hover {
    transform: translateY(-5px);
    box-shadow: 0 5px 25px rgba(0,0,0,0.15);
}

.room-card img {
    width: 100%;
    height: 200px;
    object-fit: cover;
}

.room-card .card-body {
    padding: 20px;
}

.room-card h3 {
    font-size: 20px;
    margin-bottom: 10px;
    color: #1a237e;
}

.room-card .type {
    display: inline-block;
    background: #e8eaf6;
    color: #1a237e;
    padding: 4px 12px;
    border-radius: 20px;
    font-size: 12px;
    margin-bottom: 10px;
}

.room-card .price {
    font-size: 20px;
    font-weight: 700;
    color: #2e7d32;
    margin: 10px 0;
}

.btn {
    display: inline-block;
    padding: 10px 24px;
    background: #1a237e;
    color: white;
    text-decoration: none;
    border-radius: 6px;
    border: none;
    cursor: pointer;
    transition: background 0.3s;
    font-size: 14px;
}

.btn:hover {
    background: #0d47a1;
}

.btn-success {
    background: #2e7d32;
}

.btn-success:hover {
    background: #1b5e20;
}

.btn-danger {
    background: #c62828;
}

.btn-danger:hover {
    background: #b71c1c;
}

.auth-form {
    max-width: 400px;
    margin: 0 auto;
    background: white;
    padding: 40px;
    border-radius: 12px;
    box-shadow: 0 2px 15px rgba(0,0,0,0.1);
}

.auth-form h2 {
    margin-bottom: 25px;
    color: #1a237e;
    text-align: center;
}

.auth-form input {
    width: 100%;
    padding: 12px;
    margin-bottom: 15px;
    border: 1px solid #ddd;
    border-radius: 6px;
    font-size: 14px;
    box-sizing: border-box;
}

.auth-form .btn {
    width: 100%;
    padding: 12px;
    font-size: 16px;
}

.bookings-list {
    background: white;
    border-radius: 12px;
    overflow: hidden;
    box-shadow: 0 2px 15px rgba(0,0,0,0.08);
}

.booking-item {
    padding: 20px;
    border-bottom: 1px solid #f0f0f0;
    display: flex;
    justify-content: space-between;
    align-items: center;
    flex-wrap: wrap;
    gap: 10px;
}

.booking-item:last-child {
    border-bottom: none;
}

.status {
    padding: 4px 12px;
    border-radius: 20px;
    font-size: 12px;
    font-weight: 600;
    display: inline-block;
}

.status-new {
    background: #fff3e0;
    color: #e65100;
}

.status-assigned {
    background: #e3f2fd;
    color: #0d47a1;
}

.status-completed {
    background: #e8f5e9;
    color: #1b5e20;
}

.admin-panel {
    background: white;
    border-radius: 12px;
    padding: 30px;
    box-shadow: 0 2px 15px rgba(0,0,0,0.08);
    overflow-x: auto;
}

.admin-panel table {
    width: 100%;
    border-collapse: collapse;
    min-width: 600px;
}

.admin-panel th {
    background: #f5f7fa;
    padding: 12px;
    text-align: left;
    font-weight: 600;
}

.admin-panel td {
    padding: 12px;
    border-bottom: 1px solid #f0f0f0;
}

.admin-panel select {
    padding: 6px 12px;
    border-radius: 4px;
    border: 1px solid #ddd;
}

/* ===== АДАПТИВ ===== */
@media (max-width: 768px) {
    header .container {
        flex-direction: column;
        gap: 10px;
        align-items: center;
    }
    
    header nav {
        justify-content: center;
    }
    
    header nav a {
        padding: 6px 12px;
        font-size: 14px;
    }
    
    .hero h1 {
        font-size: 28px;
    }
    
    .hero {
        padding: 30px 20px;
    }
    
    .slider {
        height: 300px;
    }
    
    .slider-content {
        padding: 15px;
    }
    
    .slider-content h3 {
        font-size: 20px;
    }
    
    .rooms-grid {
        grid-template-columns: 1fr;
    }
    
    .booking-item {
        flex-direction: column;
        align-items: flex-start;
    }
    
    .auth-form {
        padding: 20px;
        margin: 0 10px;
    }
}

@media (max-width: 480px) {
    header .logo a {
        font-size: 18px;
    }
    
    header nav a {
        font-size: 12px;
        padding: 4px 10px;
    }
    
    .slider {
        height: 250px;
    }
    
    .admin-panel {
        padding: 15px;
    }
}


my-bookings.php
<?php
require_once 'config/database.php';
include 'includes/header.php';

if (!isset($_SESSION['user_id'])) {
    echo '<div style="background:#fff3e0;padding:20px;border-radius:8px;">⚠️ Пожалуйста, <a href="profile.php">войдите</a> для просмотра заявок</div>';
    include 'includes/footer.php';
    exit;
}

$stmt = $pdo->prepare("
    SELECT b.*, r.name as room_name, r.type 
    FROM bookings b 
    JOIN rooms r ON b.room_id = r.id 
    WHERE b.user_id = ? 
    ORDER BY b.created_at DESC
");
$stmt->execute([$_SESSION['user_id']]);
$bookings = $stmt->fetchAll(PDO::FETCH_ASSOC);
?>

<h1 style="margin-bottom: 30px;">Мои заявки</h1>

<?php if (count($bookings) === 0): ?>
    <div style="background:white;padding:40px;border-radius:12px;text-align:center;">
        <p style="font-size:18px;color:#666;">У вас пока нет заявок</p>
        <a href="rooms.php" class="btn" style="margin-top:20px;">Перейти к помещениям</a>
    </div>
<?php else: ?>
    <div class="bookings-list">
        <?php foreach ($bookings as $booking): ?>
        <div class="booking-item">
            <div>
                <strong><?= $booking['room_name'] ?></strong> (<?= $booking['type'] ?>)<br>
                <small>Дата: <?= date('d.m.Y', strtotime($booking['booking_date'])) ?></small><br>
                <small>Сумма: <?= number_format($booking['total_price'], 0) ?> ₽</small>
            </div>
            <div style="text-align:right;">
                <span class="status status-<?= $booking['status'] ?>">
                    <?php
                    $statuses = ['new' => 'Новая', 'assigned' => 'Мероприятие назначено', 'completed' => 'Мероприятие завершено'];
                    echo $statuses[$booking['status']];
                    ?>
                </span>
            </div>
        </div>
        <?php endforeach; ?>
    </div>
<?php endif; ?>

<?php include 'includes/footer.php'; ?>


admin.php
<?php
require_once 'config/database.php';
include 'includes/header.php';

if (!isset($_SESSION['is_admin']) || !$_SESSION['is_admin']) {
    header('Location: profile.php');
    exit;
}


if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['update_status'])) {
    $booking_id = (int)$_POST['booking_id'];
    $status = $_POST['status'];
    
    $stmt = $pdo->prepare("UPDATE bookings SET status = ? WHERE id = ?");
    $stmt->execute([$status, $booking_id]);
    
    header('Location: admin.php');
    exit;
}

$stmt = $pdo->query("
    SELECT b.*, u.username, u.full_name, r.name as room_name 
    FROM bookings b 
    JOIN users u ON b.user_id = u.id 
    JOIN rooms r ON b.room_id = r.id 
    ORDER BY b.created_at DESC
");
$bookings = $stmt->fetchAll(PDO::FETCH_ASSOC);
?>

<h1 style="margin-bottom: 30px;">Админ-панель</h1>

<div class="admin-panel">
    <h3>Управление заявками</h3>
    <table>
        <thead>
            <tr>
                <th>ID</th>
                <th>Пользователь</th>
                <th>Помещение</th>
                <th>Дата</th>
                <th>Сумма</th>
                <th>Статус</th>
                <th>Действие</th>
            </tr>
        </thead>
        <tbody>
            <?php foreach ($bookings as $booking): ?>
            <tr>
                <td>#<?= $booking['id'] ?></td>
                <td><?= htmlspecialchars($booking['full_name']) ?></td>
                <td><?= $booking['room_name'] ?></td>
                <td><?= date('d.m.Y', strtotime($booking['booking_date'])) ?></td>
                <td><?= number_format($booking['total_price'], 0) ?> ₽</td>
                <td>
                    <span class="status status-<?= $booking['status'] ?>">
                        <?php
                        $statuses = ['new' => 'Новая', 'assigned' => 'Мероприятие назначено', 'completed' => 'Мероприятие завершено'];
                        echo $statuses[$booking['status']];
                        ?>
                    </span>
                </td>
                <td>
                    <form method="POST" style="display:inline;">
                        <input type="hidden" name="booking_id" value="<?= $booking['id'] ?>">
                        <select name="status" class="status-select" data-booking-id="<?= $booking['id'] ?>">
                            <option value="new" <?= $booking['status'] === 'new' ? 'selected' : '' ?>>Новая</option>
                            <option value="assigned" <?= $booking['status'] === 'assigned' ? 'selected' : '' ?>>Мероприятие назначено</option>
                            <option value="completed" <?= $booking['status'] === 'completed' ? 'selected' : '' ?>>Мероприятие завершено</option>
                        </select>
                        <button type="submit" name="update_status" class="btn" style="padding:5px 12px;font-size:12px;">Обновить</button>
                    </form>
                </td>
            </tr>
            <?php endforeach; ?>
        </tbody>
    </table>
</div>

<?php include 'includes/footer.php'; ?>