Michael Chus 0fc427f11d feat: добавлен функционал выделения всех записей на всех страницах
- Добавлена кнопка "Выделить все на странице" - выделяет записи текущей страницы
- Добавлена кнопка "Выделить все" - выделяет все записи с учетом фильтров (все страницы)
- Добавлена кнопка "Снять выделение" - убирает выделение со всех строк
- Добавлен счетчик выделенных строк в toolbar
- Добавлено предупреждение при выделении большого количества записей
- Оптимизировано удаление выделенных строк (batch delete)
2026-01-21 04:13:11 +03:00
2026-01-21 02:10:12 +03:00
2026-01-21 02:00:04 +03:00
2026-01-21 02:14:43 +03:00

Turbo RFQ - MariaDB simple Web UI

A lightweight PHP web application that provides an Excel-like interface for browsing and editing MariaDB tables.
Users authenticate with their own MariaDB credentials, and the app works with any schema by reading metadata from information_schema.

Note: This README assumes a Linux environment with PHP 8.1+ and MariaDB available.


Features

  • Login with native MariaDB user/password (no separate app users).
  • Side menu with database → table tree.
  • Central Excel-like grid built dynamically from table metadata.
  • Column header filters (per-column search).
  • Server-side pagination.
  • Basic CRUD operations:
    • Insert new rows.
    • Edit existing rows.
    • Delete rows.
  • Generic, schema-agnostic behavior using information_schema.

Tech Stack

  • Backend

    • PHP 8.1+
    • Slim 4 (microframework for routing and middleware)
    • PHP-DI (dependency injection)
    • PDO (MariaDB/MySQL driver)
  • Frontend

    • Vanilla JS
    • Tabulator for interactive data grid (filters, pagination, editing)

Project Structure

project/
  composer.json        # Project metadata and PHP dependencies
  vendor/              # Installed Composer packages (generated)
  public/
    index.php          # Front controller, routes, serves index.html
    index.html         # Basic layout (sidebar + toolbar + grid)
    app.js             # Frontend logic (Tabulator + API calls)
  src/
    Db.php             # PDO factory based on session credentials
    MetaService.php    # Schema/metadata from information_schema
    DataService.php    # Generic SELECT/INSERT/UPDATE/DELETE

Prerequisites

  • PHP 8.1+ with:
    • pdo_mysql extension enabled
    • mbstring, xml (typical for Composer and frameworks)
  • Composer (global installation recommended)
  • Access to a MariaDB server

Example (Debian/Ubuntu):

sudo apt update
sudo apt install php php-cli php-mbstring php-xml php-mysql unzip git

Install Composer globally (simplified example):

php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
php composer-setup.php --install-dir=/usr/local/bin --filename=composer
php -r "unlink('composer-setup.php');"

Installation

  1. Clone or copy the project:
cd /path/to
git clone https://git.mchus.pro/mchus/turborfq.git mariadb-grid
cd mariadb-grid
  1. Install PHP dependencies:
composer install

This reads composer.json and installs Slim, PHP-DI and all required packages into vendor/.


Configuration

By default, Db.php uses:

  • Host: localhost
  • Port: 3306
  • Charset: utf8mb4

If your MariaDB server is different, update the DSN in src/Db.php:

$dsn = 'mysql:host=localhost;port=3306;charset=utf8mb4';

No database name is hardcoded: the app reads available schemas from information_schema and shows only those the connected user can see.


Running the App (Development)

Use PHPs built-in web server and point it to the public directory:

cd /path/to/mariadb-grid
php -S localhost:8080 -t public

Open in your browser:

http://localhost:8080/

The built-in server is intended for development/testing only. For production use, configure a real web server (Nginx/Apache) with public/ as document root and index.php as front controller.


Usage

  1. Open the app in a browser.
  2. In the top login panel:
    • Enter MariaDB username.
    • Enter MariaDB password.
    • Click “Login”.
  3. If the connection succeeds:
    • The left sidebar will show databases and tables as a tree.
  4. Click any table:
    • The central Tabulator grid will load the tables data.
    • Column header filters allow you to filter per column.
    • Pagination is handled server-side.

CRUD operations

  • Insert
    • Click “Insert”.
    • A new row is created (you can extend logic to open an editor or use default values).
  • Update
    • Select a row (click to highlight it).
    • Edit cells directly in the grid.
    • Click “Save row” (or whatever label you use) to send the updated row to the backend.
  • Delete
    • Select one or more rows.
    • Click “Delete”.
    • Confirm the deletion.

Updates and deletes are performed using the tables primary key.
If there is no primary key, it is safer to treat the table as read-only.


How It Works (High Level)

  • On login, the app tests a connection to MariaDB using the supplied credentials and stores them in the session.
  • For all subsequent API requests, PDO is created with these credentials, so MariaDBs own permissions control what the user can see and edit.
  • MetaService queries information_schema to:
    • Build the schema → tables tree.
    • Load column definitions and detect the primary key.
  • DataService builds generic, parameterized SQL statements for:
    • Paginated SELECT (with simple LIKE filters per column).
    • INSERT (skipping auto_increment columns).
    • UPDATE / DELETE by primary key.
  • The frontend (Tabulator) requests data and metadata via JSON and renders an editable grid.

Customization Ideas

  • Map column DATA_TYPE to more specific editors (date picker, number editor, dropdowns).
  • Add sorting synchronization (Tabulator sorters → backend ORDER BY).
  • Add bulk insert/update operations using transactions.
  • Add read-only mode for tables without primary keys.
  • Add simple configuration file for allowed schemas, default page size, etc.

Troubleshooting

  • Blank page or PHP errors
    Make sure display_errors is enabled in development, or check web server error logs.

  • “Not authenticated” / 401 responses
    Ensure you logged in successfully and that your browser accepts cookies (session).

  • Cannot connect to MariaDB

    • Verify host/port in Db.php.
    • Confirm credentials using mysql client or another tool.
    • Check firewall and bind-address on the MariaDB server.
Description
No description provided
Readme Apache-2.0 250 KiB
Languages
PHP 59.7%
JavaScript 33.8%
HTML 6.5%