Das grande Finale mit einem monetären Schönheitsfehler

Ein ausführlicher Tipp von PHP Runner: Wie man mit ein paar Klicks eine schicke Web-Anwendung bastelt.

Microsoft Access war seinerzeit – also 1990 – eine wirklich praktische Software. Selbst ein Noob hat im Selbststudium herausgefunden, wie man eine schöne relationale Datenbank aufsetzt und sie mit Eingabemasken und Auswertungs-Reports versieht. Ich habe damals eine Datenbank für meine Artikel aufgebaut, die ich noch heute in Betrieb habe. Das Projekt hat dreissig Jahre überdauert – und das muss man würdigen.

Doch nun entspricht es nicht mehr den Gepflogenheiten. Ich arbeite längst nicht mehr nur mit meinem Windows-PC, sondern auch mit Mac, mobilen Geräten und Smartphone. Und überhaupt: MDB ist ein proprietäres Format und MS Access ein Silo. Mit den Informationen, die dort drinstecken, kann man nicht so viel anfangen, wie man sicherlich möchte.

Ich bin darum auf die Idee verfallen, die Datenbank ins Web zu bringen. Den ersten Schritt habe ich im Beitrag Ein Zwischenziel ist erreicht! dokumentiert: Dort erkläre ich, wie ich die MDB-Datei in MySQL konvertiert und in meinen Webserver importiert habe. Ich hatte mit einem beträchtlichen Aufwand gerechnet, wurde aber überrascht: Ungefähr nach einer Stunde war alles erledigt.

Doch eben: Eine MySQL-Datenbank auf dem Webserver ist noch nicht sonderlich praktisch. Man kann zwar über phpMyAdmin darauf zugreifen, Daten abfragen und ändern. Doch dieses Werkzeug ist für die Administration, nicht für die tägliche Nutzung gedacht. Für den Alltag möchte man eine schöne, komfortable Weboberfläche haben, über die man suchen, Daten verwendet und ändert.

Selbst in PHP programmieren?

Und an dieser Stelle wird es knifflig: Man kann eine solche Oberfläche von Hand stricken. Mittels PHP ist es beispielsweise keine Hexerei, ein paar Datenfelder abzufragen und aufzulisten. Doch wenn man seine Informationen auch hübsch und benutzerfreundlich darstellen, mit einer Such- und einer Bearbeitungsfunktion ausstatten möchte, dann wird es sehr schnell aufwändig: Dann wird aus einem kleinen Hobbyprojekt eine Lebensaufgabe.

Ich bin darum auf der Suche nach einer Software, die das Verbindungsglied bereitstellt: Nämlich eine einfach zu benutzende Oberfläche für die Datenbank.

Ich habe in meinem Beitrag nach euren Tipps gefragt und auch schon einige erhalten – zum Beispiel den Hinweis, dass ich nach Scaffolding oder CRUD Generator Ausschau halten sollte. Vielen Dank dafür! Ich wusste, dass ich auf euch zählen kann!

Und natürlich werde ich die Tipps ausprobieren und hier auch besprechen, falls ich sie denn so weit kapiere, um mich mit meinem Blogpost nicht zusehr zu blamieren. An dieser Stelle geht es aber erst einmal um jene Software, die ich selbst gefunden habe. Und zu der habe ich eine gute und eine schlechte Nachricht.

Mein erster Versuch: PHP Runner

Die gute Nachricht: Es gibt eine Software, die genau das tut und einem jegliche PHP-Programmierung erspart.

Und so sieht es aus: Die Oberfläche, mit der ich via Browser an meine Datenbank herankomme.

Die schlechte Nachricht:  Sie ist für die ernsthafte Verwendung und nicht für Hobbyprojekte wie meines gedacht. Das macht sich beim Preis bemerkbar. Sie kostet in der Pro-Version 499 US-Dollar und in der Enterprise-Geschmacksrichtung 799 US-Dollar. Das ist ein Klacks für Profis; doch in mein Budget passt es nicht.

Immerhin gibt es eine Testversion, die man während 21 Tagen testen kann. Ich bin gespannt, ob die Webanwendung, die ich für meine Datenbank gebastelt habe,  hinterher noch funktioniert. Falls ja, wäre es eine gute Lösung, vorerst einmal damit zu operieren.

Also, es handelt sich um PHP Runner. Man entwickelt mit dieser Software unter Windows eine Umgebung für seine MySQL-Datenbank, die auf dem Webserver läuft. Das Versprechen des Herstellers lautet, man erhalte professionelle Web-Apps mit wenig oder ganz ohne Programmierung.

Und das ist nicht gelogen: Ich habe daraus innert zwei Stunden eine Anwendung gebastelt, die meine Zwecke zwar nicht erfüllt, die aber besser ist als alles, was ich selbst in drei Wochen schweisstreibender Programmierung selbst hinbekommen hätte. Darum ist das ein guter Tipp – selbst wenn sich die Software für mich nicht als dauerhafte Lösung etablieren sollte.

Das neue Projekt: Mit Vorlage oder blank?

Nach der Installation legt man ein Projekt an.

Man hat diverse Vorlagen zur Auswahl, beispielsweise eine Kalenderdatenbank, eine Knowledge-Base, News oder Kleinanzeigen. Für meine Zwecke eignet sich die leere Datenbank am besten.

Diverse Datenbanken zur Auswahl

Die Datenbanken, die man seinem Projekt zugrunde legen kann.

In einem zweiten Schritt wählt man die Datenbank, die dem Projekt zugrunde liegen soll. Nebst MySQL MariaDB stehen auch Oracle, MS Access, MS SQL und PostgreSQL zur Verfügung.

Man könnte auch eine Excel-Datei, DB2, Infomix, SQLite oder eine ODBC-Datenquelle nutzen. In meinem Fall wähle ich die MySQL-Datenbank, die bereits auf meinem Server läuft.

Für die muss man nun den Zugang (Host, User, Passwort und Port) definieren. Falls der direkte Zugang nicht funktioniert, kann der auch via PHP erfolgen. Dazu definiert man ein Verzeichnis auf dem Webserver, gibt den Link an und richtet einen FTP-Zugang ein. Das funktioniert einwandfrei.

Die Hauptansicht von PHP Runner, mit den Tabellen der Datenbank.

Nun kann man auch schon loslegen: Die Hauptansicht fürs Projekt kommt mir als MS-Access-Nutzer bekannt vor: Ich sehe die Tabellen meiner Datenbank und kann Tabellen, Ansichten, SQL-Views, Reports, Diagramme und Dashboards erzeugen. Und ganz wichtig: Ich kann die relationalen Verbindungen zwischen meinen Tabellen einrichten.

Ich war nämlich so «schlau», die Haupttabelle mit den Artikeln mit zwei separaten Tabellen zu verknüpfen: Die umfasst den Ort der Handlung. Die Datenbank stammt aus jener Zeit, als ich als Freelancer und rasender Lokalreporter unterwegs war. Über dieses Feld konnte ich meine Artikel schön geografisch sortieren.

Mit Designfehlern umgehen

Aus heutiger Sicht ist das völlig überflüssig: Die Tech-Themen, über die ich mich heute auslasse, haben in aller Regel keinen Handlungsort. Ich könnte das Feld problemlos eliminieren. Wenn ich die Datenbank heute aufsetzen würde und eine geografische Komponente nützlich fände, dann würde ich natürlich ein Feld für geografische Koordinaten einbauen. Mit dem liessen sich die Artikel auf einer Google- oder Openstreetmap-Karte verorten.

Die zweite Tabelle umfasst die Zeitungen. Die war seinerzeit ganz praktisch, weil ich für mehrere Auftraggeber arbeiten und in meiner Artikeldatenbank auch gleich die entsprechenden Kontakte hinterlegen konnte. Auch dieser Zweck hat sich überlebt, sodass auch diese Tabelle nicht mehr benötigt wird.

Für den Test von PHP Runner waren sie aber trotzdem praktisch: Ich konnte ausprobieren, wie man mit relationalen Datenbanken verfährt. Das geht ganz einfach: Man klickt die Haupttabelle mit der rechten Maustaste an, wählt Add Relations aus dem Kontextmenü, selektiert die zweite Tabelle und gibt an, über welches Feld sie verknüpft sind. Typischerweise hat die zweite Tabelle einen Schlüssel, der in einem Feld in der ersten Tabelle eingetragen ist. Meine Zeitungen-Tabelle hat eine ID, die in der Artikel-Tabelle eingetragen ist.

Jetzt kann es losgehen!

Diese Vorarbeit reicht schon aus, um eine brauchbare Webanwendung zu generieren: Über den Build-Knopf wird das Projekt erstellt, das man lokal nutzen oder auch gleich via FTP auf den Server hochladen kann. Falls der fehlt, steht auch ein Demo-Account zur Verfügung.

Man darf bei diesem Schritt auch festlegen, ob die Anwendung öffentlich zugänglich oder passwortgeschützt ist. Ich würde meine Artikel schreibgeschützt für die Allgemeinheit zur Verfügung stellen, doch Änderungen sollten mir vorbehalten bleiben. Da ich das auf Anhieb nicht hinkriege, ist die Datenbank vorerst privat.

Kann alles!

Ich gehe aufs Ganze und lade gleich alles auf meinen Server hoch. Und tatsächlich: Es erscheint eine Startseite, auf der die drei Tabellen zur Auswahl stehen. Der Klick auf Artikel führt zu einer Listenansicht, die keine Wünsche offen lässt:

  • Man die Einträge sind nach Nummer sortiert. Man blättert sie in 20-Schritten durch. Es gibt ein Dropdown-Feld, über das man statt zwanzig Einträge aufs Mal auch 10, 50, 100, 500 oder alle auswählt. Am Ende der Seite gibt es Knöpfe zur Navigation, auch um ans Ende der Liste zu springen.
  • Über die Spaltenköpfe lässt sich die Liste nach anderen Kriterien, beispielsweise nach Zeitung oder Titel auf- oder absteigend sortieren.
  • In meiner Artikeldatenbank ist im Feld Inhalt der Volltext abgelegt. Dieser Volltext wird als Auszug angezeigt. Über den Link Mehr erscheint ein Popup mit dem ganzen Volltext.
  • In der zweiten Spalte wird angezeigt, welche Einträge über die relationalen Verbindungen in anderen Tabellen verknüpft sind.
  • Über Checkboxen lassen sich mehrere Einträge auswählen, um sie beispielsweise zu löschen.
  • In der Datensatzanzeige wird der Inhalt des Datensatzes separat angezeigt. Und über das Bleistift-Symbol darf man den Eintrag auch bearbeiten.
  • Über den Knopf Hinzufügen ergänzt man weitere Datenbankeinträge.
  • Und das Suchfeld erlaubt es, nach beliebigen Stichworten zu suchen. Die Suchfunktion wird auch im Inhaltsfeld mit dem Volltext des Artikels fündig.
Diverse Events lassen sich mit eigenem Code bestücken.
Wenn man will, darf man die Ansicht anpassen.

Fazit: Damit kann ich alles tun, was ich tun möchte – und das, obwohl ich noch nicht einmal an den Features für die Reports und für die Anpassung der Datenbankseiten gekratzt habe.

Man darf die Elemente der Web-Applikation auch anpassen, auf Ereignisse reagieren und mit eigenem Code ergänzen. Doch das wäre dann ein Thema für ein Seminar oder für ein Fachbuch, aber nicht für einen Blogpost…

Kritisieren würde ich die wenig übersichtliche Benutzeroberfläche, die viele Funktionen eher versteckt, denn leicht zugänglich macht.

Beitragsbild: Anton Shuvalov, Unsplash-Lizenz

Kommentar verfassen