К основному контенту

SQLite Admin: Веб-интерфейс для работы с базой данных SQLite3

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

Использование

После входа в систему появится интерфейс, в котором можно:

  • выбрать таблицу;

  • добавить новую запись, заполнив форму над соответствующими колонками;

  • редактировать записи, кликнув по ним;

  • удалять записи с помощью кнопки ❌.

Пример кода

<?php
session_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 прямо из браузера. Он прост в установке и использовании, а также предоставляет все необходимые функции для управления данными. Попробуйте его прямо сейчас!

Комментарии

Популярные сообщения из этого блога

Как создать свой первый сайт: пошаговое руководство

Создание собственного сайта — это важный шаг для бизнеса, блога или личного проекта. В этом руководстве мы рассмотрим два основных сценария: Использование онлайн-конструкторов (например, Tilda, Wix, WordPress.com) Разработка сайта на своём сервере с различным стеком технологий Мы разберём, какой вариант лучше в различных ситуациях, какие навыки необходимы, и когда стоит обратиться к специалисту. Сценарий 1: Создание сайта на онлайн-конструкторе Преимущества онлайн-конструкторов Простота и удобство: не требуются знания программирования Быстрое развертывание: можно запустить сайт за несколько часов Встроенные шаблоны и модули: адаптивный дизайн, формы, анимации, интеграции Хостинг и домен: всё включено в платформу, не нужно настраивать сервер Поддержка и безопасность: автоматические обновления и защита данных Недостатки Ограниченные возможности кастомизации Зависимость от платформы (может быть сложно перенести сайт) Платные тарифы для расширенного функционала Когда ...

Как часто обновляется индекс в поисковых системах и как определить время визита робота на мой домен?

 Частота обновления индекса в поисковых системах зависит от нескольких факторов: Популярность и авторитет сайта – крупные и авторитетные сайты индексируются чаще. Частота обновления контента – если сайт регулярно обновляется, поисковый робот будет заходить чаще. Скорость загрузки и оптимизация – хорошо оптимизированные сайты индексируются быстрее. Внутренние и внешние ссылки – если на сайт часто ссылаются, это увеличивает частоту обхода роботом. Как определить, когда робот приходит на сайт? Логи сервера В логах веб-сервера (например, Apache, Nginx) можно найти запросы от ботов Googlebot, YandexBot и других. Пример команды для анализа логов: grep "Googlebot" /var/log/nginx/access.log Google Search Console В разделе Статистика сканирования можно увидеть, как часто Googlebot заходит на сайт. robots.txt и Sitemap Можно указать частоту обновления в файле sitemap.xml , но это рекомендация, а не гарантия. В robots.txt можно задать Crawl-delay , но Google его не учитывает (тол...

Что такое HTML, CSS и JavaScript? Обзор основных технологий

Современные веб-сайты и веб-приложения создаются с использованием трёх ключевых технологий: HTML, CSS и JavaScript . Эти языки программирования и разметки формируют основу Интернета, позволяя создавать структурированные, стильные и интерактивные веб-страницы. 1. HTML (HyperText Markup Language) HTML (язык гипертекстовой разметки) — это скелет веб-страницы. Он определяет её структуру и содержимое с помощью тегов. Каждый элемент на странице — заголовки, абзацы, изображения, таблицы и ссылки — создаётся с использованием HTML-кода. 🔹 Пример HTML-кода: <!DOCTYPE html> <html> <head> <title>Моя первая страница</title> </head> <body> <h1>Привет, мир!</h1> <p>Это мой первый веб-сайт.</p> </body> </html> 📌 Ключевые теги HTML: <h1> – <h6> — заголовки <p> — абзац <img> — изображение <a> — ссылка <div> и <span> — контейнеры для элементов 2. CSS ...