| | | | |
| |||||||
| Tutorials Hier findest Du Tutorials, welche nach und nach ein fertiges Script ergeben. Sehen, lernen & verstehen! |
|
| | LinkBack (7) | Themen-Optionen | Thema bewerten |
| | |
| Erfahrener Benutzer Registriert seit: 21.05.2008
Beiträge: 9.937
![]() | Hallo, ich würde euch ganz gerne meinen Formular-Generator zeigen. Es war ein Haufen Arbeit, einige Entwürfe hat es gebraucht, bis er jetzt das tut was ich möchte. Wie gewohnt möchte ich euch zunächst zeigen wie er aussieht - mit dem "default"-Template: http://www.antiphpfriend.de/form/test.php Für den Anwender (Code von test.php): PHP-Code: Wie zu sehen ist wird sehr viel call chaining benutzt. Ich habe wirklich großen Gefallen daran gefunden. Beispiel: PHP-Code: Zurück zum Formular: Die Idee war eine Dreiteilung zwecks Caching (daraus wurde leider doch (noch?) nicht): - Form_Controller, der die Struktur und Validierung übernimmt (kein Controller im herkömmlichen Sinne also) - Form_Model, das vom Controller die Struktur empfängt (Feldnamen), aus $_POST, $_GET was auch immer die Daten extrahiert und zurück an den Controller liefert. - Form_View, das die Ausgabe erzeugt, in dem sie den Zustand des Formulars (Validierung, Werte, eigentlich alles) vom Controller erhält. Die Form-Klasse wird darüber-gestülpt, damit sich der Anwender nicht um die Kommunikation dieser drei Komponenten kümmern muss. Zur Formular-Validierung habe ich mich für 3 "Operatoren" entschieden, so richtig glücklich bin ich damit nicht - trotzdem funktioniert es - Filter: Sie werden zuerst ausgeführt: Mit ihnen sind Operationen wie "trim" oder Datums-Transformationen möglich (deutsch -> Unixtimestamp o.ä.) Sie verändern die Eingabe. - Validator: Sie validieren Eingaben, z.B. auf eine E-Mail-Adresse, auf einen numerischen Wert, sie werden nach den Filtern ausgeführt und verändern die Eingabe nicht. - Konsistenzprüfer (Conditionals): Sie sollen die Konsistenz des Formulars sicherstellen. Das heißt es könnten alle Eingaben valide sein und trotzdem ist das Formular nicht konsistent. Das könnte der Fall sein, wenn eine fünfstellige Postleitzahl angegeben ist, jedoch in der Länderauswahl die Schweiz gewählt wurde (die nur 4-stellige PLZ kennt). Conditionals sind Allmächtig, da sie Zugriff auf den Form_Controller haben, der wiederum alle Elemente verwaltet. IsOptional() ist so ein Konsistenzprüfer. Ist die Eingabe valide, gibt er auch TRUE zurück, ist sie es nicht, wird geprüft ob die Eingabe gleich dem Default-Wert ist, wenn ja ist die Eingabe konsistent (da ja optional). Dem Anwender der Form-Klasse stehen also isSent(), isValid(), isConsistent() und isComplete() zur Verfügung. Letztere Methode prüft isSent() && isConsistent(), so dass das Formular auch im Default mit konsistenten Daten gefüllt werden können, z.B. für die Bearbeitung existierender Daten. Der Form_View erzeugt beliebige Ausgaben, für CSS oder XHTML, eine JavaScript-Validierung (1:1 serverseitig-clientseitig) ist in Planung und in einer früheren Version bereits erfolgreich gestetet. Das heißt das Formular würde erst von JavaScript validiert um Serverlast zu schonen. Wenn es als konsistent erachtet würde, würde PHP noch einmal den Test serverseitig durchführen und dann (hoffentlich) das Formular als "completed" erachten. Aber das ist noch die Planung. Der Form_View hat noch eine gewisse Intelligenz um die Templates sinnvoll zu füllen. Es ist allerdings nur eines von vielen Beispielen. Mit Hinsicht auf die kommende JavaScript-Validierung wird das HTML nur minimal verändert, der Großteil der Darstellung soll von CSS übernommen werden. Dazu wurden im HTML CSS-Klassen für <div> Container erzeugt, die die komplette Kontrolle über die Ansicht garantieren sollen. Beispiel: Code: div.form.not-sent div.not-consistent div.message {
color : silver;
}
div.form.sent div.not-consistent div.message {
color : red;
}
div.form div.consistent div.message {
display : none;
}
Eine Fehlermeldung eines nicht konsistentes Element eines nicht verschickten Formulars, wird eingegraut, wurde das Formular bereits verschickt aber ist das Element immernoch nicht konsistent, wird es rot dargestellt. Wenn es konsistent ist, wird die Nachricht garnicht mehr angezeigt. Das aktuelle "default" Template ist momentan nur mit dem Firefox sinnvoll zu betrachten (die verwendeten "display"-Eigenschaften sind offenbar Neuland für den IE). Aber das Template, CSS wie HTML können ja angepasst werden (dafür ist es da). Für die Fehlernachrichten können massig Variablen benutzt werden, einfach mal eine falsche eingeben, dann sollte eine Exception geworfen werden, die die verfügbaren Variablen anzeigt. Zu guter letzt kann mit dem Template "debug" noch gesehen werden, welcher "Zustand" an den Form_View gesendet wird, auf welche Variablen dieser also überhaupt Zugriff hat. Dazu einfach per GET den Parameter debug=1 eingeben. Zur Quellcode-Einsicht: http://www.antiphpfriend.de/form.zip Über Feedback, gut wie schlecht, würde ich mich wirklich freuen! PS: Buggy ist noch das Default-Loading, es ging mal, woran das liegt ist grad ne gute Frage |
| |
| | |
| PHP Code Flüsterer Registriert seit: 21.08.2005 Beiträge: 4682 PHP-Kenntnisse: Fortgeschritten | |
| | |
| Moderator und Wett-König | Hallo Zergling, die Implementierung sieht garnicht nicht schlecht aus. Ich werde mir das am Wochenende genauer ansehen und dir Feedback geben.
__________________ Viele Grüße, Dr.E. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1. Think about software design before you start to write code! 2. Discuss and review it together with experts! 3. Choose good tools (-> Adventure PHP Framework (APF))! 4. Write clean and reusable software only! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
| |
| | |
| Erfahrener Benutzer Registriert seit: 16.07.2005
Beiträge: 1.007
PHP-Kenntnisse: Fortgeschritten ![]() | hi, ohne abwertung deines scripts zerg, aber ich habe mir eigentlich immer sowas vorgestellt> PHP-Code: naja, wenn ichs irgendwann mal umsetze, was ich nicht glaube weil ich doch lieber templates benutze, lass ichs euch wissen... gruß |
| |
| | |
| Erfahrener Benutzer Registriert seit: 21.05.2008
Beiträge: 9.937
![]() | Die variable Parameter-Verarbeitung ist viel komplexer, du brauchst viel mehr Weichen als wenn du call-chaining verwendest. Abgesehen davon instanzierst du bereits vor der Parameter-Übergabe. Die Instanzierung solltest du erst ganz ganz am Schluss machen. Sind so Kleinigkeiten, dessen Schwierigkeiten du erst beim Coden merkst. __toString() ja, gute Idee, aber was unterscheidet dann deinen Entwurf von meinem? Letztlich musst du die gesamte Zeile ausgeben, sonst wäre die Label- ("vorname") und Fehlermeldungs-Information überflüssig. Wenn du etwas zeilenweise ausgibst, musst du aber auch das große ganze im Auge haben, schließlich willst du die Elemente bündig haben. Und dann kannst du das Formular gleich wie ich als Ganzes ausgeben. Du wirst bemerken, ganz so einfach ist ein Formular-Generator nicht und du musst Kompromisse in der API machen. Vielleicht ist das auch der Grund dafür, warum es kaum einen weitverbreiteten Formular-Generator gibt: Jeder hat seine eigenen Vorstellungen von Bedienbarkeit und am Ende muss das Ding flexibel sein und einem Arbeit ersparen. Aber ein Formular ist nunmal ziemlich schnell hingedonnert, die Zeit kann man kaum unterbieten. Darum macht der Einsatz eines Formular-Generators ja nur Sinn, wenn du massig Formulare hast, die am besten alle gleich aussehen sollen. Und genau dafür hab ich meine Klassen ja auch geschrieben. |
| |
| | |
| ¯\_(ツ)_/¯ Registriert seit: 18.06.2008
Beiträge: 8.814
PHP-Kenntnisse: Fortgeschritten ![]() ![]() ![]() ![]() ![]() ![]() ![]() | Also dass ein Formular schnell hingedonnert ist ist ja klar. Aber die Validierung dauert dafür ewig! Deswegen ist eine Klasse die ein Formular generiert und validiert schon ne super Sache. Ich hab mir auch selber eine Klasse geschrieben. Bin zwar noch nicht ganz so zufrieden aber es nimmt mir sehr viel Arbeit ab. Bei mir ist es allerdings so dass ich die Werte für die einzelnen Felder bzw. die Fehlermeldungen als Variable speicher und explizit im Template angeben kann. Also kann ich das Formular immer noch flexibel Designen muss aber nicht mehr auf die Validierung achten.
__________________ ▇█▓▒░◕‿‿◕░▒▓█▇ |
| |
| | ||
| Erfahrener Benutzer Registriert seit: 21.05.2008
Beiträge: 9.937
![]() | Zitat:
Ich denke wir bewegen uns alle in ähnlichen Sphären, ob jetzt dem einen Parameter, dem anderen Funktionsaufrufe lieber sind. Tja geschmackssache. Hier über ein objektives Richtig oder Falsch zu diskutieren macht sicherlich keinen Sinn. | |
| |
|
| Themen-Optionen | |
| Thema bewerten | |
|
|
LinkBacks (?)
LinkBack to this Thread: http://www.php.de/tutorials/45163-php-formular-generator.html | ||||
| Erstellt von | For | Type | Datum | |
| Metacrawler - Die Metasuchmaschine. | This thread | Refback | 30.03.2011 19:15 | |
| Suche PHP Formular mit leich erweiterbaren Feldern - PSD-Tutorials.de | This thread | Refback | 19.01.2011 13:56 | |
| www.webmail.de - Ihr kostenloser und vielseitiger Mailanbieter | This thread | Refback | 25.10.2010 19:53 | |
| Formulare mit Ausgabewert auf Homepage erstellen - Forum - CHIP Online | This thread | Refback | 16.05.2010 19:34 | |
| Metacrawler - Die Metasuchmaschine. | This thread | Refback | 01.02.2010 19:05 | |
| Suche PHP Formular mit leich erweiterbaren Feldern - PSD-Tutorials.de - Forum | This thread | Refback | 11.04.2009 18:32 | |
| Suche: PHP Formular Validierungs Bibliothek - FoN.phoenix | This thread | Refback | 19.02.2009 18:30 | |
Ähnliche Themen | ||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| Formular - Generator - | dh1sbg | Trash | 1 | 01.06.2008 11:56 |
| Smiley Generator | Jay0815 | PHP Tipps 2008 | 3 | 28.12.2007 16:22 |
| Wert aus Textfeld in neues Formular übernehmen (kein Submit) | PsychoEagle | HTML, Usability und Barrierefreiheit | 9 | 02.01.2007 14:51 |
| formular includen | samspa5 | PHP Tipps 2006 | 13 | 18.03.2006 11:37 |
| Datenbank auslesen, in Formular darstellen und �ndern | PHP Tipps 2006 | 8 | 22.02.2006 17:51 | |
| [Erledigt] Formular in Formular | HTML, Usability und Barrierefreiheit | 4 | 19.10.2005 12:18 | |
| leeres Formular | PHP Tipps 2005-2 | 15 | 05.10.2005 16:49 | |
| [Erledigt] Formular testen .... | HTML, Usability und Barrierefreiheit | 7 | 19.09.2005 14:03 | |
| [Erledigt] PHP Formular ~~wichtig~~ | PHP Tipps 2005 | 27 | 29.05.2005 19:38 | |
| Formular --> Ergebnis auf anderer Seite anzeigen | Jojo1 | PHP Tipps 2005 | 58 | 01.02.2005 17:13 |
| [Erledigt] Im Formular user abfragen? | Datenbanken | 3 | 06.01.2005 10:51 | |
| [Erledigt] PHP Formular - Daten an nächsten Schritt weiter geben - Wie? | PHP Tipps 2005 | 14 | 02.01.2005 20:05 | |
| Formular nach UPDATE anzeigen | PHP Tipps 2004-2 | 5 | 22.12.2004 02:06 | |
| [Erledigt] Daten in einem Formular ausgeben und ändern | PHP Tipps 2004-2 | 7 | 07.12.2004 17:22 | |
| [Erledigt] Daten in neuem Formular anzeigen | PHP Tipps 2004 | 6 | 21.07.2004 10:44 | |
| Besucher kamen über folgende Suchanfragen bei Google auf diese Seite |
| php formular generator, php form generator, formular generator php, formulargenerator php, php formular klasse, php formulargenerator, form generator php, formulargenerator, php formular, formular generator, php form builder, php generator, php formular class, formular generator kostenlos, formular php generator, php formular template, ajax formular generator, php form klasse, php klasse formular, php formgenerator |

Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.