Skip to content

Instantly share code, notes, and snippets.

@cukun
Last active February 5, 2025 07:23
Show Gist options
  • Save cukun/a4019573403610dbfb61db7140c9e146 to your computer and use it in GitHub Desktop.
Save cukun/a4019573403610dbfb61db7140c9e146 to your computer and use it in GitHub Desktop.
вф
<?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