SQLite3 Web Admin Panel - управление данными в файловой базе SQLite
SQLite3 — это популярная легковесная база данных, которая часто используется в небольших проектах, мобильных приложениях и для хранения локальных данных. Однако управление SQLite через командную строку или сторонние программы может быть неудобным. Поэтому мы представляем SQLite Admin — удобный веб-интерфейс на PHP, который позволяет просматривать, редактировать и управлять данными в базе SQLite3 прямо из браузера.
Возможности скрипта
SQLite Admin обладает следующими функциями:
Просмотр списка таблиц в базе данных.
Отображение структуры выбранной таблицы (имена колонок, типы данных, первичные ключи).
Автоматическое создание формы для добавления записей в соответствии со структурой таблицы.
Редактирование существующих записей.
Удаление записей:
Если у таблицы есть первичный ключ, удаление происходит по нему.
Если первичного ключа нет, удаление выполняется по всем колонкам.
Аутентификация через логин и пароль для защиты данных.
Полная поддержка запросов SQLite3.
Установка и настройка
1. Скачивание репозитория
Клонируйте проект с GitHub:
git clone https://github.com/partonen/sqlite-admin.git
cd sqlite-admin
2. Подготовка базы данных
Убедитесь, что в корневой директории находится файл database.sqlite
. Если его нет, создайте новый файл SQLite:
touch database.sqlite
Дайте веб-серверу права на запись в базу данных:
chmod 666 database.sqlite
3. Настройка логина и пароля
Откройте файл sql.admin.php
и измените учетные данные:
const USERNAME = 'admin';
const PASSWORD = 'password';
4. Запуск сервера
Если у вас установлен PHP, вы можете запустить встроенный сервер командой:
php -S localhost:8000
После этого откройте браузер и перейдите по адресу:
http://localhost:8000/sql.admin.php
Использование
После входа в систему появится интерфейс, в котором можно:
выбрать таблицу;
добавить новую запись, заполнив форму над соответствующими колонками;
редактировать записи, кликнув по ним;
удалять записи с помощью кнопки ❌.
Пример кода
<?phpsession_start();// Настройки входаconst USERNAME = 'pm-admin';const PASSWORD = 'Dandavat2025';const DB_FILE = 'muse-throttle-db.sqlite3';// Проверка входаif (!isset($_SESSION['logged_in'])) {if ($_SERVER['REQUEST_METHOD'] === 'POST' && $_POST['username'] === USERNAME && $_POST['password'] === PASSWORD) {$_SESSION['logged_in'] = true;} else {echo '<form method="post" style="text-align:center; margin-top:100px;">';echo '<h2>Вход</h2><input type="text" name="username" placeholder="Логин"><br>';echo '<input type="password" name="password" placeholder="Пароль"><br>';echo '<button type="submit">Войти</button></form>';exit();}}$db = new SQLite3(DB_FILE);// Получаем список таблиц$tables = [];$res = $db->query("SELECT name FROM sqlite_master WHERE type='table' AND name NOT LIKE 'sqlite_%'");while ($row = $res->fetchArray(SQLITE3_ASSOC)) {$tables[] = $row['name'];}// Выбор активной таблицы$table = $_GET['table'] ?? ($tables[0] ?? '');$table_structure = [];if ($table) {// Получаем структуру таблицы$columns_res = $db->query("PRAGMA table_info($table)");$columns = [];$primary_key = null;while ($col = $columns_res->fetchArray(SQLITE3_ASSOC)) {$columns[] = $col['name'];$table_structure[] = $col;if ($col['pk']) {$primary_key = $col['name']; // Запоминаем имя поля с основным ключом}}// Обработка действий с записямиif (isset($_POST['save'])) {$values = [];foreach ($columns as $col) {// Не добавляем поле с основным ключом в массив значенийif ($col !== $primary_key) {$values[$col] = $_POST[$col] ?? '';}}if (!empty($_POST['id'])) {$set = implode(", ", array_map(fn($col) => "$col = :$col", array_keys($values)));$stmt = $db->prepare("UPDATE $table SET $set WHERE id = :id");$stmt->bindValue(':id', $_POST['id'], SQLITE3_INTEGER);} else {$cols = implode(", ", array_keys($values));$vals = implode(", ", array_map(fn($col) => ":$col", array_keys($values)));$stmt = $db->prepare("INSERT INTO $table ($cols) VALUES ($vals)");}foreach ($values as $col => $val) {$stmt->bindValue(":$col", $val, SQLITE3_TEXT);}$stmt->execute();} elseif (isset($_POST['delete'])) {$delete_params = [];// Если есть первичный ключ, удаляем по немуif ($primary_key) {$stmt = $db->prepare("DELETE FROM $table WHERE $primary_key = :$primary_key");$stmt->bindValue(":$primary_key", $_POST[$primary_key], SQLITE3_TEXT);} else {// Если первичного ключа нет, то удаляем по всем колонкам$conditions = [];foreach ($columns as $col) {$conditions[] = "$col = :$col";$delete_params[":$col"] = $_POST[$col];}$where_clause = implode(' AND ', $conditions);$stmt = $db->prepare("DELETE FROM $table WHERE $where_clause");foreach ($delete_params as $param => $value) {$stmt->bindValue($param, $value, SQLITE3_TEXT);}}$stmt->execute();}// Получаем данные$rows = $db->query("SELECT * FROM $table");}?><!DOCTYPE html><html><head><meta charset="UTF-8"><title>SQLite3 Админка</title><style>body { font-family: Arial, sans-serif; text-align: center; }table { margin: auto; width: 80%; border-collapse: collapse; }th, td { padding: 10px; border: 1px solid #ddd; cursor: pointer; }input, button { margin: 5px; padding: 10px; }.logout { position: absolute; top: 10px; right: 10px; }</style></head><body><a class="logout" href="?logout=1">Выйти</a><h2>Выбор таблицы</h2><form method="get"><select name="table" onchange="this.form.submit()"><?php foreach ($tables as $tbl): ?><option value="<?= $tbl ?>" <?= $tbl === $table ? 'selected' : '' ?>><?= $tbl ?></option><?php endforeach; ?></select></form><?php if ($table): ?><h2>Управление таблицей "<?= $table ?>"</h2><h3>Структура таблицы</h3><table><tr><th>Имя</th><th>Тип</th><th>Основной ключ</th></tr><?php foreach ($table_structure as $col): ?><tr><td><?= $col['name'] ?></td><td><?= $col['type'] ?></td><td><?= $col['pk'] ? '✔' : '' ?></td></tr><?php endforeach; ?></table><h3>Добавить запись в таблицу "<?= $table ?>"</h3><form method="post"><table style="margin:auto; width: 80%; text-align: left;"><tr><?php foreach ($columns as $col): ?><?php if ($col === $primary_key) continue; ?><th><?= ucfirst($col) ?>:</th><?php endforeach; ?></tr><tr><?php foreach ($table_structure as $col): ?><?php if ($col['pk']) continue; // Пропускаем основное поле ?><td><?php$field_type = $col['type'];if (strpos($field_type, 'TEXT') !== false) {echo "<input type='text' name='{$col['name']}' required><br>";} elseif (strpos($field_type, 'INTEGER') !== false) {echo "<input type='number' name='{$col['name']}' required><br>";} else {echo "<input type='text' name='{$col['name']}' required><br>";}?></td><?php endforeach; ?></tr></table><button type="submit" name="save">Добавить</button></form><table><tr><?php foreach ($columns as $col): ?><th><?= $col ?></th><?php endforeach; ?><th>Действия</th></tr><?php while ($row = $rows->fetchArray(SQLITE3_ASSOC)): ?><tr><?php foreach ($columns as $col): ?><td><?= htmlspecialchars($row[$col]) ?></td><?php endforeach; ?><td><form method="post" style="display:inline;"><?php foreach ($columns as $col): ?><input type="hidden" name="<?= $col ?>" value="<?= htmlspecialchars($row[$col]) ?>"><?php endforeach; ?><button type="submit" name="delete" onclick="return confirm('Удалить запись?')">❌</button></form></td></tr><?php endwhile; ?></table><?php endif; ?></body></html>
Безопасность
Пароль хранится в коде в открытом виде, что не рекомендуется для продакшена.
Рекомендуется использовать
.htaccess
для защиты доступа к скрипту.
Лицензия и исходный код
Проект распространяется под лицензией MIT. Исходный код доступен на GitHub:
🔗 GitHub Repository
SQLite Admin — это удобный и легковесный инструмент для работы с базой SQLite прямо из браузера. Он прост в установке и использовании, а также предоставляет все необходимые функции для управления данными. Попробуйте его прямо сейчас!
Комментарии
Отправить комментарий