Last active
February 5, 2025 07:23
-
-
Save cukun/a4019573403610dbfb61db7140c9e146 to your computer and use it in GitHub Desktop.
вф
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
session_start(); | |
// Проверка авторизации администратора (ВАЖНО) | |
if (!isset($_SESSION['user_id']) || $_SESSION['role'] !== 'admin') { | |
header('Location: login.php'); | |
exit(); | |
} | |
include_once 'db.php'; | |
// --- Функции для получения статистики --- | |
// Функция для получения статистики по каждой услуге | |
function getServiceStats($pdo) { | |
$sql = "SELECT | |
cs.id, | |
cs.service_name, | |
cs.description, | |
cs.price, | |
COUNT(o.service_id) AS order_count, | |
COALESCE(AVG(o.total_amount), 0) AS average_order_value, | |
COALESCE(SUM(o.total_amount), 0) AS total_revenue | |
FROM | |
cleaning_services cs | |
LEFT JOIN | |
orders o ON cs.id = o.service_id | |
GROUP BY | |
cs.id"; | |
$stmt = $pdo->query($sql); | |
return $stmt->fetchAll(); | |
} | |
// Функция для получения общей статистики по пользователям | |
function getUserStats($pdo) { | |
$totalUsers = $pdo->query("SELECT COUNT(*) FROM users")->fetchColumn(); | |
$activeUsers = $pdo->query("SELECT COUNT(*) FROM users WHERE status = 'active'")->fetchColumn(); | |
$blockedUsers = $pdo->query("SELECT COUNT(*) FROM users WHERE status = 'blocked'")->fetchColumn(); | |
$adminUsers = $pdo->query("SELECT COUNT(*) FROM users WHERE role = 'admin'")->fetchColumn(); | |
$regularUsers = $pdo->query("SELECT COUNT(*) FROM users WHERE role = 'user'")->fetchColumn(); | |
return [ | |
'totalUsers' => $totalUsers, | |
'activeUsers' => $activeUsers, | |
'blockedUsers' => $blockedUsers, | |
'adminUsers' => $adminUsers, | |
'regularUsers' => $regularUsers, | |
]; | |
} | |
// --- Получение данных --- | |
$serviceStats = getServiceStats($pdo); | |
$userStats = getUserStats($pdo); | |
// --- Расчет общей выручки --- | |
$totalRevenueAllServices = array_sum(array_column($serviceStats, 'total_revenue')); | |
?> | |
<!DOCTYPE html> | |
<html> | |
<head> | |
<title>Статистика</title> | |
</head> | |
<body> | |
<div class="container"> | |
<h1>Статистика</h1> | |
<a href="admin_panel.php" class="btn">Обратно в панель администратора</a> | |
<h2>Статистика услуг</h2> | |
<div class="service-cards-container"> | |
<?php foreach ($serviceStats as $service): ?> | |
<div class="service-card"> | |
<h3><?= htmlspecialchars($service['service_name']) ?></h3> | |
<p><strong>Описание:</strong> <?= htmlspecialchars($service['description']) ?></p> | |
<p><strong>Цена:</strong> <?= htmlspecialchars($service['price']) ?></p> | |
<p><strong>Количество заказов:</strong> <?= htmlspecialchars($service['order_count']) ?></p> | |
<p><strong>Средний чек:</strong> <?= htmlspecialchars(number_format($service['average_order_value'], 2)) ?> руб.</p> | |
<p><strong>Общая выручка:</strong> <?= htmlspecialchars(number_format($service['total_revenue'], 2)) ?> руб.</p> | |
<?php | |
// Calculate revenue percentage | |
$revenuePercentage = ($totalRevenueAllServices > 0) ? ($service['total_revenue'] / $totalRevenueAllServices) * 100 : 0; | |
?> | |
<p class="revenue-percentage">Доля от общей выручки: <?= htmlspecialchars(number_format($revenuePercentage, 2)) ?>%</p> | |
</div> | |
<?php endforeach; ?> | |
</div> | |
<h2>Статистика пользователей</h2> | |
<div class="user-stats-container"> | |
<div class="user-stat-card"> | |
<h3>Всего пользователей</h3> | |
<p><?= htmlspecialchars($userStats['totalUsers']) ?></p> | |
</div> | |
<div class="user-stat-card"> | |
<h3>Активных пользователей</h3> | |
<p><?= htmlspecialchars($userStats['activeUsers']) ?></p> | |
</div> | |
<div class="user-stat-card"> | |
<h3>Заблокированных пользователей</h3> | |
<p><?= htmlspecialchars($userStats['blockedUsers']) ?></p> | |
</div> | |
<div class="user-stat-card"> | |
<h3>Администраторов</h3> | |
<p><?= htmlspecialchars($userStats['adminUsers']) ?></p> | |
</div> | |
<div class="user-stat-card"> | |
<h3>Обычных пользователей</h3> | |
<p><?= htmlspecialchars($userStats['regularUsers']) ?></p> | |
</div> | |
</div> | |
<div class="navigation"> | |
<a href="users.php">Управление пользователями</a> | |
<a href="logout.php">Выйти</a> | |
</div> | |
</div> | |
</body> | |
</html> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment