Hi! Could we please enable some services and cookies to improve your experience and our website?

PHPize Online / SQLize Online  /  SQLtest Online

A A A
Login    Share code      Blog   FAQ

Online Sandbox for SQL and PHP: Write, Run, Test, and Share SQL Queries and PHP Code

Copy Format Clear

Stuck with a problem? Got Error? Ask AI support!

Copy Clear
Copy Format Clear
<?php session_start(); require_once 'server.php'; require_once 'cart_functions.php'; // Проверка авторизации if (!isset($_SESSION['user_id'])) { header('Location: index.php'); exit; } // Получаем актуальные данные пользователя из базы данных $stmt = $pdo->prepare("SELECT * FROM users WHERE id = ?"); $stmt->execute([$_SESSION['user_id']]); $user = $stmt->fetch(); if (!$user) { session_destroy(); header('Location: index.php'); exit; } // Получаем историю запросов пользователя $stmt = $pdo->prepare("SELECT * FROM questions WHERE id_user = ? ORDER BY created_at DESC"); $stmt->execute([$_SESSION['user_id']]); $questions = $stmt->fetchAll(); // Получаем историю заказов пользователя $stmt = $pdo->prepare(" SELECT o.*, COUNT(oi.id) as items_count FROM orders o LEFT JOIN order_items oi ON o.id = oi.order_id WHERE o.user_id = ? GROUP BY o.id ORDER BY o.order_date DESC "); $stmt->execute([$_SESSION['user_id']]); $orders = $stmt->fetchAll(); // Для каждого заказа получаем товары foreach ($orders as &$order) { $stmt = $pdo->prepare(" SELECT oi.*, p.name, p.image FROM order_items oi JOIN products p ON oi.product_id = p.id WHERE oi.order_id = ? "); $stmt->execute([$order['id']]); $order['items'] = $stmt->fetchAll(); } unset($order); // Убираем ссылку $_SESSION['user'] = $user; ?> <!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/styles.css"> <style> /* Стили для истории заказов */ .orders-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(350px, 1fr)); gap: 20px; margin-top: 20px; } .order-card { background: white; border-radius: 8px; box-shadow: 0 2px 10px rgba(0,0,0,0.1); padding: 20px; border-left: 4px solid #2a5885; } .order-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 15px; flex-wrap: wrap; } .order-title { margin: 0; color: #2a5885; } .order-date { color: #666; font-size: 14px; } .order-status { padding: 3px 8px; border-radius: 4px; font-size: 14px; font-weight: bold; margin-top: 5px; } .order-status.pending { background: #fff3e0; color: #e65100; } .order-status.completed { background: #e8f5e9; color: #2e7d32; } .order-items { margin: 10px 0; } .order-item { display: flex; align-items: center; padding: 8px 0; border-bottom: 1px solid #f0f0f0; } .order-item-image { width: 50px; height: 50px; margin-right: 10px; } .order-item-image img { width: 100%; height: 100%; object-fit: cover; border-radius: 4px; } .order-item-details { flex: 1; } .order-item-name { font-weight: 500; } .order-item-price { min-width: 80px; text-align: right; } .order-footer { margin-top: 15px; padding-top: 10px; border-top: 1px solid #eee; } .order-total { text-align: right; font-weight: bold; } .no-orders { text-align: center; padding: 20px; background: #f9f9f9; border-radius: 8px; grid-column: 1 / -1; } /* Адаптивность */ @media (max-width: 768px) { .orders-grid { grid-template-columns: 1fr; } } </style> </head> <body> <!-- Шапка сайта --> <header> <div class="header-container"> <div class="header-text"> <h1>Гестион</h1> <p>Добро пожаловать на сайт юридической компании "Гестион"!</p> </div> <div class="auth-section"> <?php if (isset($_SESSION['login_error'])) { echo '<div class="error-message">'.$_SESSION['login_error'].'</div>'; unset($_SESSION['login_error']); } if (isset($_SESSION['user'])) { echo '<div class="user-info">'; echo '<div class="user-info-text">'; echo '<div>Вы вошли как:</div>'; echo '<a href="profile.php" class="username-link">'.htmlspecialchars($_SESSION['user']['username']).'</a>'; echo '</div>'; echo '<a href="logout.php" class="logout-link">Выйти</a>'; echo '</div>'; } else { echo '<div class="login-form">'; echo '<form action="login.php" method="post">'; echo '<div class="form-grid">'; echo '<label for="username">Логин:</label>'; echo '<input type="text" id="username" name="login_username" required>'; echo '<label for="password">Пароль:</label>'; echo '<input type="password" id="password" name="login_password" required>'; echo '<button type="submit">Войти</button>'; echo '<button type="button" onclick="location.href=\'registration.php\'">Регистрация</button>'; echo '</div>'; echo '</form>'; echo '</div>'; } ?> </div> </div> <hr> </header> <!-- Меню --> <nav> <ul> <li><a href="index.php">Главная</a></li> <li><a href="catalog.php">Каталог</a></li> <li><a href="contacts.php">Контакты</a></li> <li><a href="profile.php">Личный кабинет</a></li> <li><a href="cart.php" class="cart-link">Корзина</a></li> </ul> </nav> <!-- Основной контент --> <main> <h2 style="text-align: center; width: 100%;">Личный кабинет</h2> <div class="profile-info"> <img src="images/profile.jpg" alt="Портрет пользователя" class="profile-portrait"> <h3>Данные пользователя</h3> <?php if (!empty($user['full_name'])): ?> <p><strong>ФИО:</strong> <?= htmlspecialchars($user['full_name']) ?></p> <?php endif; ?> <p><strong>Email:</strong> <?= htmlspecialchars($user['email']) ?></p> <p><strong>Логин:</strong> <?= htmlspecialchars($user['username']) ?></p> <?php if (!empty($user['created_at'])): ?> <p><strong>Дата регистрации:</strong> <?= htmlspecialchars($user['created_at']) ?></p> <?php endif; ?> </div> <h3 style="text-align: center; margin-top: 40px;">История ваших заказов</h3> <div class="orders-grid"> <?php if (empty($orders)): ?> <div class="no-orders">У вас пока нет завершенных заказов</div> <?php else: ?> <?php foreach ($orders as $order): ?> <div class="order-card"> <div class="order-header"> <h3 class="order-title">Заказ #<?= $order['id'] ?></h3> <div> <span class="order-date"><?= date('d.m.Y H:i', strtotime($order['order_date'])) ?></span> <span class="order-status <?= $order['status'] ?>"> <?= $order['status'] === 'pending' ? 'В обработке' : 'Завершен' ?> </span> </div> </div> <div class="order-items"> <?php foreach ($order['items'] as $item): ?> <div class="order-item"> <div class="order-item-image"> <img src="<?= htmlspecialchars($item['image']) ?>" alt="<?= htmlspecialchars($item['name']) ?>"> </div> <div class="order-item-details"> <div class="order-item-name"><?= htmlspecialchars($item['name']) ?></div> <div><?= $item['quantity'] ?> × <?= number_format($item['price'], 2) ?> ₽</div> </div> <div class="order-item-price"> <?= number_format($item['price'] * $item['quantity'], 2) ?> ₽ </div> </div> <?php endforeach; ?> </div> <div class="order-footer"> <div class="order-total"> <strong>Итого:</strong> <?= number_format($order['total_amount'], 2) ?> ₽ </div> </div> </div> <?php endforeach; ?> <?php endif; ?> </div> <!-- История запросов --> <h3 style="text-align: center; margin-top: 40px;">История ваших обращений</h3> <div class="requests-grid"> <?php if (empty($questions)): ?> <div class="no-requests">У вас пока нет отправленных обращений</div> <?php else: ?> <?php foreach ($questions as $question): ?> <div class="request-card"> <div class="request-header"> <h3 class="request-title"><?= htmlspecialchars($question['topic']) ?></h3> <span class="request-date"><?= date('d.m.Y H:i', strtotime($question['created_at'])) ?></span> </div> <div class="request-meta"> <span class="request-meta-item"> <i>📞</i> <?= htmlspecialchars($question['telephone']) ?> </span> <?php if (!empty($question['department'])): ?> <span class="request-meta-item"> <i>🏢</i> Отдел: <span class="department-badge"> <?php $departments = [ 'legal' => 'Юридический', 'finance' => 'Финансовый', 'support' => 'Техподдержка' ]; echo htmlspecialchars($departments[$question['department']] ?? $question['department']); ?> </span> </span> <?php endif; ?> <?php if (!empty($question['request_type'])): ?> <span class="request-meta-item"> <i>📋</i> Тип: <?php $types = [ 'consultation' => 'Консультация', 'complaint' => 'Жалоба', 'feedback' => 'Отзыв' ]; echo htmlspecialchars($types[$question['request_type']] ?? $question['request_type']); ?> </span> <?php endif; ?> </div> <div class="request-content"> <?= nl2br(htmlspecialchars($question['text'])) ?> </div> <?php if (!empty($question['interests'])): ?> <div class="interests-section"> <h4>Интересуемые услуги:</h4> <div class="interests-list"> <?php $interests = explode(',', $question['interests']); $interestNames = [ 'corporate' => 'Корпоративное право', 'tax' => 'Налоговое право', 'family' => 'Семейное право', 'real_estate' => 'Недвижимость' ]; foreach ($interests as $interest): if (!empty($interest)): ?> <span class="interest-badge"> <?= htmlspecialchars($interestNames[$interest] ?? $interest) ?> </span> <?php endif; endforeach; ?> </div> </div> <?php endif; ?> </div> <?php endforeach; ?> <?php endif; ?> </div> </main> <footer> <hr> <p>&copy; 2023 Гестион. Все права защищены.</p> <p><a href="privacy_policy.html" target="_blank" style="color: white;" download>Политика конфиденциальности</a></p> </footer> </body> </html>
Copy Clear