This PHP application automatically generates a responsive web app on top of your relational database. The app allows users to
- Create and edit records via web forms, taking into account foreign keys and other constraints
- View stored records along with related records from other tables
- Browse, search, and filter records in tables
- Query the database, visualize the results, and share the visualizations. Currenty the engine offers various visualizations like tables, bar charts, leaflet maps, sankeys, timelines, graphs/networks, social network analysis, geomaps and others
Developers may add custom functionality and extensions to the engine through hook functions in plugins, and admins may exploit an extensive array of settings controlling the engine.
- Webserver running PHP (lowest tested version is 5.3)
- Database server (currently working only with PostgreSQL -- lowest tested version is 9.2; experimental support for MySQL)
- A database
-
Clone this repository into any folder that is served by your webserver.
-
Run
npm install
in this folder. -
Since this repository contains the app engine only, you need to create another folder that will serve as the actual app folder
-
In the app folder, create a PHP file that serves as the main entry point of the app (typically
index.php
). This file is very simple: it must include a definition of the constantENGINE_PATH
, which shall define the relative path to app engine folder. The other line in this file is the inclusion ofengine.php
from the app engine folder. You can also define the language by definingDBWEBGEN_LANG
(currently Englishen
and Germande
are available).Note: if required, you may use
ENGINE_PATH_LOCAL
to define the relative or absolute local file system path to the engine folder, which is used for including.php
files; theENGINE_PATH
is used to point to files in<script>
or<link>
tags, so those must be resolveable by the web server.The typical index file would then look like this:
<?php define('ENGINE_PATH', '../dbWebGen/'); define('DBWEBGEN_LANG', 'de'); include ENGINE_PATH . 'engine.php'; ?>
-
Direct your web browser to the app folder. Upon first visit, a setup wizward will allow you to specify all app settings, which will be stored in a file called
settings.php
. If you encounter any issues or somehow misconfigure your app, you can also manually edit thesettings.php
file with explanations provided in settings.template.php
An example app using this engine can be seen in the dbWebGen-demo repository
- Fully localized in English and German; other languages can be added easily
- Access control via users table in database, custom authentication functions, or static user arrays
- Paginated, searchable, sortable viewing of table contents
- Viewing full details of single records
- Single-page or tabbed record editing forms
- Inline creation and editing of records referenced via foreign keys
- Conditional display and labeling of record fields in editing forms
- Grouped field display in editing forms (e.g. when date components are stored in separate columns)
- Hyperlinked display of records linked via foreign keys
- Record merging wizard
- Global and table-local search, allowing custom search transformations (e.g. removing diacritics, unaccenting, etc.)
- Custom menus, pages, and plugins with access to dbWebGen global objects, settings, and variables
- Input controls for most important field types, e.g. dropdown boxes, date pickers, geomap pickers, boolean toggles, text boxes, file uploads
- Custom JavaScript form validation
The major limitation currently is that the table settings for composite primary keys (e.g. in N:M-tables where each primary key part is a foreign key) currently only support a maximum of two primary key columns per table. If a composite primary key in some table in your DB consists of more than two columns, the remedy would be to create an artificial single-column primary key with auto-increment value for such tables.
Below are some screenshots from a database app that uses dbWebGen to allow users to work with historic documents from 19th century Oman. Click any thumbnail to view at full resolution.
This code is licensed under the MIT license. See the LICENSE file.