Paket JForm: HTML Formulare einfach erstellen &...

Josh

Legendäres Mitglied
Hi alle

Nach wochenlanger Arbeit steht der erste Release von JForm bereit.

Bei JForm handelt es sich um ein Paket für PHP 5, mit welchem sehr einfach objektorientiert HTML-Formulare erzeugt, autom. und manuell serverseitig validiert und ggf. die Benutzereingaben zurückgewiesen werden mit entsprechenden Warntexten.

Die ausgegebenen Formulare basieren auf HTML-Templates und CSS und können einfach und ohne programmierkenntnisse an die eigenen Bedürfnisse angepasst werden.

Dies ist mein erstes Projekt in PHP 5 und ich habe mich bemüht, die Vorteile des objektorientierten Programmierens möglichst auszunützen. Herausgekommen ist eine saubere Klassenvererbungsstruktur, welche viele Möglichkeiten offen lässt, eigene Feldtypen etc. zu erstellen.

Es ist eine Version von JForm für PHP 4.x geplant, nachdem jene für PHP 5 lauffähig ist und sich bewährt hat.

Die aktuelle Version von JForm für PHP 5 verfügt schon über die wichtigsten Features, und eine Dokumentation mit Tutorial ist auch vorhanden für den leichten Einstieg.

Das generierte HTML ist 100% HTML 4 konform laut Tidy vom W3C.

Ich würde mich freuen, wenn der eine oder andere Forenbesucher sich das Paket anschauen und das Tutorial durcharbeiten würde.
smile.gif
Für konstruktive Kritik bin ich sehr offen, und auch Vorschläge sind immer willkommen.

Um euch etwas gluschtig zu machen hier ein Beispielcode für ein mit JForm erstelltes HTML-Formular:
http://phpmywebmin.josh.ch/_uploads/j0sh/t...ial_source.html

Und hier ein Screenshot des Formulars, welches dabei in etwa herauskommt (das Design ist an phpMyAdmin angelehnt):
http://phpmywebmin.josh.ch/_uploads/j0sh/tutorial_form.PNG

Und schliesslich hier noch der Link zu eigentlichen Paket:
http://phpmywebmin.josh.ch/_uploads/j0sh/JForm_v0.1.zip

Ich danke euch im Voraus, dass ihr mich unterstützt. Wenn das Projekt Anklang findet, werde ich es noch viel weiter ausbauen, denn ich denke, damit gehören lästige, manuell erstellte HTML-Formulare und deren Validierung definitiv der Vergangenheit an.
cool.gif


Liebe Grüsse
Josh
 
Wow cool, sieht auch super aus. Ich habe leider derzeit kein PHP5 zur Verfügung, würde sehr gerne testen.

Fragen:
- Was passiert mit den Daten nach dem Abschicken, was habe ich da für Optionen? Z.B. XML Output, DB (mapping?), E-mail etc...
- Gibt es eine Möglichkeit, das Formular auf mehrere Seiten zu verteilen, also nur eine Frage pro Seite?
- Kann ich Felder von Benutzereingaben abhängig machen? (Bsp: Haben Sie Kinder? Ja -> wieviele? Nein -> Nächste Frage)

Gruss Sandro
 
Danke für das nette Feedback!
smile.gif


Ich überlege mir, das Projekt sofort schon in ein PHP 4 kompatibles Paket um zu formen... wäre irgendwie sinnvoller, wenn ich es als Open Source herausgeben möchte.
Sonst installier dir doch kurz XAMPP, da gehst du kein Risiko ein und es ist ratzeputz wieder deinstalliert.

QUOTE - Was passiert mit den Daten nach dem Abschicken, was habe ich da für Optionen? Z.B. XML Output, DB (mapping?), E-mail etc...


Die Daten werden ganz normal per POST übergeben. Weitere Optionen wie die von dir genannten sind geplant... Weitere Ideen dazu? Was meinst du mit DB (mapping)?


QUOTE - Gibt es eine Möglichkeit, das Formular auf mehrere Seiten zu verteilen, also nur eine Frage pro Seite?


Dazu bin ich mir ein Konzept am überlegen, in der Art, dass die Daten der einzelnen Schritte zwischengespeichert und jederzeit abgerufen werden können innerhalb des Eingabeprozesses.


QUOTE - Kann ich Felder von Benutzereingaben abhängig machen? (Bsp: Haben Sie Kinder? Ja -> wieviele? Nein -> Nächste Frage)


Meinst du damit, dass per JavaScript z.B. Elemente ausgegraut werden o.ä.? Oder dass ein mehrseitiges Formular abhängig von den Eingaben der früheren Seiten gemacht werden kann?
Von JavaScript halte ich nicht sehr viel, das kommt höchstens irgendwann als Zusatz hinzu. Aber die zweite Variante wäre sicherlich eine Überlegung wert.

Ach ja, noch was: ich plane, dass JForm automatisch Formulare für angegebene Datenbanktabellen erstellen kann. Das hat aber noch niedere Priorität.

Danke nochmals und Gruss
smile.gif

Josh
 
So, habe stundenlang an der Konvertierung zu einem PHP 4.x fähigen Paket gearbeitet, zwischendurch einen Bug in PHP gefunden und mich mit Referenzen unter PHP 4 abgemüht - doch nun ist die PHP 4.x fähige Version fertig! In naher Zukunft werde ich nur an ihr arbeiten und ggf. später eine PHP 5 Version erstellen (sollte dies aus irgendeinem Grunde sinnvoll sein).

Aktuelle Änderungen:
  • Werte von Passwortfeldern werden nicht mehr automatisch ausgefüllt beim erneuten Laden des Formulars zum Schutz von sensitiven Eingaben
  • Bei Auswahlfeldern kann eine Mindest- und Höchstzahl Selektionen definiert werden (setSelectionMinimum(...) bzw. setSelectionMaximum(...))
  • Die exakte Breite des Formulars (Pixel oder Prozent) kann gesetzt werden (setWidth(...))
  • Required Status kann global auf Formebene und Gruppenebene gesetzt werden und vererbt sich, wenn Child nicht explizit über einen eigenen Status verfügt (setRequired(...)).
  • Für Eingabefelder können verbotene Eingabewerte definiert werden (setNotAllowedValues(...) bzw. addNotAllowedValue())
Download der Version 0.2:
http://phpmywebmin.josh.ch/_uploads/j0sh/JForm/jform0.2.zip

Wer Lust hat, kann das Beispiel aus dem beigelegten Tutorial online testen:
http://www.josh.ch/tests/jform/tutorial_code.php

Viel Spass beim Testen und ich freue mich über Feedback!
smile.gif

Josh
 
So, nach einer Woche Ferien in Italien melde ich mich hiermit zurück. Bin etwas enttäuscht, dass scheinbar niemand mein Package getestet hat... werde wohl in grösseren PHP-Foren auf mich aufmerksam machen müssen.

Grüsse
Josh
 
QUOTE (Josh @ Sa 16.7.2005, 19:54) Bin etwas enttäuscht, dass scheinbar niemand mein Package getestet hat... werde wohl in grösseren PHP-Foren auf mich aufmerksam machen müssen.

Nach dem screenshot sieht es so aus, als ob das Formular vom Design nicht wesentlich verändert werden könnte.
Gleiches gilt für den Code:
z.B.
// Manuelle Gültigkeitsüberprüfungen
$usernames = array("JohnDoe","henry_miller","donald999","Daisy-Duck"); // Schon vorhandene Benutzernamen


würde sicherlich mit einer mysql-Abfrage gekoppelt.

Bei meinem letzten Formular brauchte ich zwei Benutzernamen, die einmalig sein müssen, da mit dem einen eine subdomain generiert wird,
während der andere nur zum Einloggen gebraucht wird.

Also müsste man den code anpassen und wenn der sowieso angepasst werden muss, dann kann ich ihn auch gleich selbst schreiben oder einen bereits vorhanden Code nochmal benutzen.

Sehr gut finde ich Deine Struktur!!!

WF ist qualitativ ziemlich niveauvoll, weil die meisten aktiven User ziemlich gut mit ihren Programmiergewohnheiten fahren und etliche Scripte auf Lager halten. Jetzt auf Dein JForm umzusatteln, bringt dann nur Unruhe. Vielleich täusche ich mich auch und JForm wird gerade von den einigen der vielen Thread Leser getestet. Selbst habe ich zum Testen keine Zeit und möchte auch mal in Urlaub. Schliesslich ist Sommer. Ich denke, Du hast sicher mehr Erfolg in Foren, wo mehr Anfänger Fragen stellen.
 
Hi Tümmel und vielen Dank für die Antwort.

QUOTE Nach dem screenshot sieht es so aus, als ob das Formular vom Design nicht wesentlich verändert werden könnte.


Schau dir mal den Quellcode vom JForm Beispiel an, da siehst du, dass das Layout auf normalen Tabellen basiert, welche fast zu 100% durch CSS formatiert werden. Da das komplette Layout auf Templates basiert, kann es relativ einfach angepasst werden; allerdings sind keine komplexen einmaligen Layouts möglich (ich überlege mir z.Z. aber, wie man dies realisieren könnte).


QUOTE Bei meinem letzten Formular brauchte ich zwei Benutzernamen, die einmalig sein müssen, da mit dem einen eine subdomain generiert wird,
während der andere nur zum Einloggen gebraucht wird.

Also müsste man den code anpassen und wenn der sowieso angepasst werden muss, dann kann ich ihn auch gleich selbst schreiben oder einen bereits vorhanden Code nochmal benutzen.


Bei JForm geht es darum, die häufigsten Eingabeüberprüfungen so einfach wie möglich automatisch ablaufen zu lassen, also z.B. per regulärem Ausdruck oder dem Überprüfen auf NULL Eingaben. Alle speziellen Überprüfungen (komplizierte Business Rules etc.) müssen aber natürlich nach wie vor manuell geschehen. JForm ist dabei insofern hilfreich, dass man sich als Programmierer überhaupt nicht darum kümmern muss, wie die Fehlermeldungen ausgegeben werden sollen und wie & wann das gültige Formular weitergeschickt werden soll, denn das findet alles automatisch statt. Der Programmierer muss nun also einfach nur noch dafür sorgen, dass die manuellen Überprüfungen geschrieben werden.


QUOTE WF ist qualitativ ziemlich niveauvoll, weil die meisten aktiven User ziemlich gut mit ihren Programmiergewohnheiten fahren und etliche Scripte auf Lager halten. Jetzt auf Dein JForm umzusatteln, bringt dann nur Unruhe.


Vielleicht hätte ich erwähnen sollen, dass JForm weniger für den "normalen" Webmaster gedacht ist, welcher "normale" Webs erstellt. Es ist eher gedacht für Programmierer, die Programme auf Scriptbasis erstellen, welche viele Benutzereingaben erfordern.
Schau dir mein Testprojekt Lizenzen Manager für KMUs an, dann weisst du, was ich meine.


QUOTE Selbst habe ich zum Testen keine Zeit und möchte auch mal in Urlaub. Schliesslich ist Sommer.


Dann nix wie raus jetzt an die Sonne! Ich habe mir in Italien 2-3 hübsche Sonnenbrände eingefangen und muss mir nun etwas Ruhe vor der Hitze gönnen.
smile.gif
 
Trotz mässigem Feedback sei auch hier darauf verwiesen, dass erneut eine neue Version von JForm erschienen ist.

Es wurden einige kleine Bugs gefixt und ich habe eine komplette PHPDoc API Dokumentation hinzugefügt. Weiter habe ich die Dokumentation ins Englische umgeschrieben. Weiter wurde die Codegrundstruktur, welche für die Auswertung eines Formulars benötigt wird, erheblich vereinfacht.

http://phpmywebmin.josh.ch/_uploads/j0sh/JForm/jform0.3.zip
 
Erneut ist eine neue Version von JForm erschienen. Neben einigen Bugfixes können nun sehr einfach mehrseitige Formulare (Wizards / Assistenten) erstellt werden, welche dynamisch auf die Benutzereingaben reagieren können.

Beispiel:
Haben Sie Kinder?
- Ja => Wieviele?
- Nein => Weiter

In einem ausführlichen Tutorial wird dieses Feature umfassend beschrieben.

http://phpmywebmin.josh.ch/_uploads/j0sh/JForm/jform0.4.zip

Würde mich nach wie vor sehr über Feedback freuen, denn mit diesem neuen Feature wird das Handling von Formularen erneut ein grosses Stück einfacher.

Beste Grüsse
smile.gif

Josh
 
Hallo Josh

Ich habe gestern angefangen in der Dokumentation zu lesen, da ist mir ein Gedanke gekommen:
Kannst du nicht ein Formular erstellen, mit welchem man den Code für die Formulare generieren kann (Also ein Formular-Formular)? Sollte doch mit diesem Script möglich sein oder? Dann wäre das ein Online Formulargenerator, bei dem man keine Zeile Code schreiben müsste...

Werde meine Gedanken zum neusten Release asap. posten, bin dran...

Gruss Sandro
 
QUOTE (Sandro Feuillet @ Mi 3.8.2005, 13:45) Kannst du nicht ein Formular erstellen, mit welchem man den Code für die Formulare generieren kann (Also ein Formular-Formular)? Sollte doch mit diesem Script möglich sein oder? Dann wäre das ein Online Formulargenerator, bei dem man keine Zeile Code schreiben müsste...

Diesen Gedanken habe ich auch schon gefasst, und er scheint mir sehr sinnvoll zu sein.
smile.gif
Ich habe den Punkt schon vor einigen Tagen auf meine ToDo Liste gesetzt; allerdings haben andere Features momentan noch höhere Priorität.
Sobald sich JForm aber bewährt hat und feststeht, dass sich nichts Grundlegendes mehr verändern wird, wäre ein solcher Formulargenerator natürlich genial.
smile.gif


Grüsse
Josh
 
Ich wollte das Teil testen, und dazu die Demoformulare anschauen, da kam diese Meldung:

QUOTE
Warning: parse(PatTemplate/patTemplate.php): failed to open stream: No such file or directory in /www/htdocs/neuser/jform/JForm.php on line 416

Fatal error: parse(): Failed opening required 'PatTemplate/patTemplate.php' (include_path='.:/usr/bin/PEAR:..:/www/htdocs/neuser/jform') in /www/htdocs/neuser/jform/JForm.php on line 416



Was mach ich falsch, das File ist vorhanden...

Gruss Sandro
 
Schau dir mal den Quelltext der Datei im Ordner JForm/docs/codes/ an, da habe ich die include paths anpassen müssen. Vielleicht habe ich etwas falsch gemacht oder übersehen?
 
QUOTE (madox @ Do 4.8.2005, 11:57) Konkurrenz:
http://formwizard.andreas-demmer.de/logik/

Huch, tatsächlich! Sieht auch ganz gut aus, das Ding! Ich habe es mir kurz angeschaut und ausprobiert, und Folgendes ist mir dabei aufgefallen (ich mach jetzt etwas Schleichwerbung für mein JForm
tongue.gif
):

- Läuft nur unter PHP 5
- Basiert nicht auf Templates, es sind nur sehr einfache Änderungen am Layout möglich
- Selektierte Checkboxen / Radiobuttons müssen manuell auf den vom Benutzer eingegebenen Wert gesetzt werden, wenn das Formular aufgrund von Fehlern erneut angezeigt wird
- Soweit ich das sehe können keine manuellen Überprüfungen nach der automatischen Überprüfung vorgenommen werden

Nichtsdestotrotz sicher ein hübsches Paket, um einfache Formulare erstellen zu können, die grundlegende Eingabeüberprüfungen ermöglichen (dementsprechend auch sehr schlank).

Es gibt noch mehr solche Formulargeneratoren, z.B. patForms von php-tools.de, dessen bin ich mir wohl bewusst.
Was JForm aber von diesen Produkten unterscheiden soll, ist die hohe Anpassungsfähigkeit, welche mittels Templates (ironischerweise patTemplate von eben php-tools.de
tongue.gif
), eigenen Feldtypen, zusätzlicher manueller Überprüfung, benutzereingabeabhängiger mehrseitiger Formulare etc. erreicht wird.
Weiter soll JForm viele nützliche Tools von mir gespendet bekommen, etwa den DatabaseMapper, welcher eine Formularstruktur automatisch aufgrund einer angegebenen Datenbanktabelle erstellt (funktioniert grundlegend schon für MySQL, erste Implementation für nächstes Release geplant), diverse Exportier- und Importierfunktionen (XML, Serialisierung), Formulargenerator (nach Sandro's Beschreibung oben) etc. Für möglichst viele alltägliche Probleme, welche mit Formularen im PHP-Umfeld entstehen, soll ein automatisierendes Tool zur Verfügung stehen.

Für weitere Ideen und Wünsche bin ich natürlich immer offen.
smile.gif


Zu guter Letzt setze ich grossen Wert auf gute Dokumentation und ausführliche Tutorials. Zu jedem grossen Feature schreibe ich sowohl die PHPDoc API als auch Tutorials mit vielen Screenshots, um den Einstieg in JForm möglichst angenehm und zeitsparend zu gestalten. Denn da ich mich möglichst an die PEAR Konventionen und die aus Java bekannte und unter Profis weitverbreitete Syntaxformatierung halte, sollte erfahrenen Programmierern die Funktionsweise von JForm schon aus dem Code heraus gut begreifbar sein.
 
QUOTE
- Soweit ich das sehe können keine manuellen Überprüfungen nach der automatischen Überprüfung vorgenommen werden



Man kann auch mit eigenen Funktionen Checks machen soweit ich weiss, und natürlich auch mit RegExpressions.


QUOTE
- Basiert nicht auf Templates, es sind nur sehr einfache Änderungen am Layout möglich


Man kann mit CSS schon sehr viel anstellen
smile.gif
. Das Standard-Layout sieht meiner Meinung nach angenehmer und professioneller aus als deins.
 
ein Formular Generator aus einer Tabelle wäre schon sehr nützlich.

was mir beim kurzen lesen deiner Dokumentation aufgefallen ist: Da ich das ganze nicht auf einen Webserver geladen habe, sondern erstmal lesen möchte hat die Doku nicht so schön ausgesehen mit dem Teil:

CODE
<?php

$titel = 'x';
include('header.php');

?>



Beispiele sind schon gut und dafür brauch ich auch PHP was ja irgendwie klar ist. Aber um die Doku zu lesen möchte ich nicht gleich alles Hochladen oder in ein PHP fähiges Verzeichnis verschieben und die Datei dann auch noch über meinen Localhost etc. aufrufen.


Ausserdem fänd ich es persönlich besser die Bemerkungen zu einem Formularpunkt wie Username direkt darunter zu schreiben und nicht nochmal eine extra Zeile in die Tabelle dafür einfügen. Da sich über Geschmack aber streiten lässt... ;-)

@ madox Design lässt sich ja anpassen das ist ja das schöne +g+

Was mir bei beiden Formularen gerade noch aufgefallen ist:
Wenn ein Radio-Typ-Feld optional ist sollte es nicht vorausgewählt sein. Und es sollte eine Möglichkeit geben es wieder auf leer zu stellen, so dass es auch wirklich optional ist. ich komme aus der Auswahl nämlich nicht wieder raus. oder es ist sogar schon etwas vorgewählt.
 
QUOTE Man kann auch mit eigenen Funktionen Checks machen soweit ich weiss, und natürlich auch mit RegExpressions.

Soweit, so gut, das kann JForm auch. Doch weiter kann nach der automatischen Validierung jedes Feld manuell noch angesprochen werden, und wenn nötig mit Fehlermeldungen versehen werden. Dadurch lassen sich auch sehr individuelle und komplexe Überprüfungen, die man "irgendwie irgendwoher zusammenwursteln muss", problemlos mit JForm verbinden.


QUOTE Man kann mit CSS schon sehr viel anstellen. Das Standard-Layout sieht meiner Meinung nach angenehmer und professioneller aus als deins.

Glaubst du, JForm verwende kein CSS?
blink.gif
Nein, Spass beiseite. Beim Layout habe ich mich an phpMyWebmin angelehnt, da ich kein Designer bin und mir langes Rumpröbeln an einem Standardlayout ersparen wollte.
Schau dir den Quellcode an - das ist fast 100% des Layouts in CSS festgelegt, praktisch keine manuellen Formatierungen in HTML.


QUOTE Beispiele sind schon gut und dafür brauch ich auch PHP was ja irgendwie klar ist. Aber um die Doku zu lesen möchte ich nicht gleich alles Hochladen oder in ein PHP fähiges Verzeichnis verschieben und die Datei dann auch noch über meinen Localhost etc. aufrufen.

Ich bin mir dieses Problems bewusst und will eigentlich auch eine reine HTML-Doku machen, doch momentan wo sich noch Vieles ändert und ich die PHP-Snippets in den Tutorials per <?php highlight_string('...') ?> highlighte gibt es kaum eine andere Möglichkeit. Sobald sich aber die Tutorials bewährt haben und keine Änderungen mehr nötig sind, werde ich das beim Release natürlich alles als HTML-Doku beifügen.


QUOTE Ausserdem fänd ich es persönlich besser die Bemerkungen zu einem Formularpunkt wie Username direkt darunter zu schreiben und nicht nochmal eine extra Zeile in die Tabelle dafür einfügen. Da sich über Geschmack aber streiten lässt... ;-)

-> Templates. Ganz einfach.
tongue.gif



QUOTE Wenn ein Radio-Typ-Feld optional ist sollte es nicht vorausgewählt sein. Und es sollte eine Möglichkeit geben es wieder auf leer zu stellen, so dass es auch wirklich optional ist. ich komme aus der Auswahl nämlich nicht wieder raus. oder es ist sogar schon etwas vorgewählt.

Dieses Problem steht auf meiner ToDo Liste ganz oben. Werde ich sicher beim nächsten Release bereinigt haben.
Gerade das Problem mit dem "deselektieren" von Radiobuttons ist ein sehr allgemeines Problem in HTML. Da haben sich meiner Meinung nach die Browserhersteller zu weniger überlegt - zumindest per erneutem Klick auf einen angewählten Radiobutton sollte dieser wieder entfernt werden können... :-/

Danke euch beiden für das Feedback. Das ist sehr wertvoll für mich.
smile.gif
 
QUOTE <?php

$titel = 'x';
include('header.php');

?>

Manuel, wo genau hast du das gesehen?
 
Zurück
Oben