Недавно я решил освежить старую идею — интеграцию данных из SourceBans в простой PHP-проект. Год назад я уже писал этот код и выложил его на GitHub, но репозиторий всё это время был в приватном доступе. Пока у меня нет активной базы SourceBans для полноценного демо, но код полностью готов к работе и легко подключается к боевой системе.
🔧 Задача
Цель была простая:
- Подключиться к базе SourceBans.
- Вытащить список активных банов.
- Отобразить их в виде аккуратной таблицы, желательно в тёмной теме.
- Показать оставшееся время бана в формате "часы:минуты".
Это может пригодиться владельцам игровых серверов, которые хотят встроить подобный виджет в сайт сообщества или панель управления.
💻 Исходный код
Вот пример index.php, который подключается к БД, вытаскивает нужные данные и выводит их:
<?php $servername_ban = "localhost"; $username_ban = "root"; $password_ban = ""; $dbname_ban = "demoban"; $conn_ban = new mysqli($servername_ban, $username_ban, $password_ban, $dbname_ban); $conn_ban->set_charset("utf8mb4"); if ($conn_ban->connect_error) { die("Connection to ban database failed: " . $conn_ban->connect_error); } function formatDateTimeFromTimestamp($timestamp) { return date("d.m.Y H:i", $timestamp); } function timeRemaining($endDate) { $now = time(); $diff = $endDate - $now; $hours = floor($diff / 3600); $minutes = floor(($diff % 3600) / 60); return "$hours:$minutes"; } $sql = "SELECT authid AS 'SteamID', name AS 'ник', created AS 'дата бана', ends AS 'дата окончания бана', length AS 'длительность', reason AS 'причина' FROM sb_bans WHERE ends > UNIX_TIMESTAMP() ORDER BY created DESC"; $result = $conn_ban->query($sql); if ($result && $result->num_rows > 0) { echo "<table><tr><th>SteamID</th><th>Ник</th><th>Дата бана</th><th>Дата окончания</th><th>Оставшееся время</th><th>Причина</th></tr>"; while($row = $result->fetch_assoc()) { echo "<tr><td>{$row["SteamID"]}</td><td>{$row["ник"]}</td><td>" . formatDateTimeFromTimestamp($row["дата бана"]) . "</td><td>" . formatDateTimeFromTimestamp($row["дата окончания бана"]) . "</td><td>" . timeRemaining($row["дата окончания бана"]) . "</td><td>{$row["причина"]}</td></tr>"; } echo "</table>"; } else { echo "Нет активных банов или ошибка запроса."; } $conn_ban->close(); ?>
Фронтенд-часть тоже проста и понятна — подключаем CSS и определяем тёмную тему:
<head> <link rel="stylesheet" href="css/style.css"> </head>
И сам файл style.css:
:root { --main-background-color: #44515e; --text-color: #ffffff; --link-color: #4aa0e6; } table { width: 100%; border-collapse: collapse; margin-top: 20px; color: var(--text-color); } th { background-color: var(--main-background-color); color: var(--text-color); font-weight: bold; padding: 10px; text-align: left; } tr:nth-child(odd) { background-color: #333333; } tr:nth-child(even) { background-color: #2d2d2d; } td { padding: 10px; border: 1px solid #444444; }
📌 Что важно учитывать
- Данный скрипт не требует авторизации, он показывает публично активные баны.
- Код рассчитан на работу с базой SourceBans Classic (sb_bans), но легко адаптируется под SourceBans++, если структура схожая.
- Можно улучшить: добавить пагинацию, сделать сортировку по столбцам через JavaScript, реализовать фильтрацию по SteamID или нику.
- Всё написано на чистом PHP + MySQLi, так что подойдёт даже для серверов с минимальной нагрузкой и ресурсами.
❌ Почему сейчас нет демо?
Я бы с радостью выложил работающий пример с живыми данными, но на данный момент у меня нет установленной базы SourceBans — на домашнем сервере всё занято другими задачами (Astra/Ubuntu, мониторинг, веб-сайты и т.д.).
Но как только появится окно — разверну тестовый сервер и покажу live-демо прямо на одном из своих доменов, например, z1z.org или ip-gamers.net.
🧩 Куда двигаться дальше?
Если вам это интересно, то в принципе можно:
- Подключить Steam Web API, чтобы отображать аватарки и ссылки на профили игроков.
- Сортировать и фильтровать таблицу прямо в браузере.
- Перевести проект на AJAX, чтобы обновлять данные без перезагрузки страницы.
- Сделать полноценную панель администрирования с просмотром истории банов.
✅ Заключение
Такой простой, но наглядный скрипт — это хороший способ интегрировать SourceBans в любой сайт. Он легко адаптируется под твои нужды и не требует установки фреймворков. Если ты админ игрового проекта — обязательно попробуй внедрить!
Если тебе нужна помощь с установкой SourceBans или написанием дополнительных модулей — пиши, разберёмся вместе.
Хочешь видеть демо на z1z.org, как только появится база SourceBans? Подпишись на обновления или просто загляни позже 😉
Да, я написал этот пост в стиле ChatGPT.
С чёткой структурой, понятными абзацами, оформлением кода и даже с выводами.
И кто меня осудит за это? 😎
Рекомендуемые комментарии
Комментариев нет
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Создать аккаунт
Зарегистрируйте новый аккаунт в нашем сообществе. Это очень просто!
Регистрация нового пользователяВойти
Уже есть аккаунт? Войти в систему.
Войти