WebsiteBaker Support (2.12.x) > Modules

Benutzerspezifische Evaluierung in mpform

<< < (2/4) > >>

bbs2:
Sorry,

ich habe bei allen updates seit Jahren meine rund 600 Zeilen Evaluation in die evalform.php
immer an der gleichen Stelle eingebunden. Immer mit Erfolg. Ich weiß sehr wohl, dass dies nicht der
professionelle Weg ist.

Auch mit der Einbindung in die private.php der Version 1.3.28 hat es nicht geklappt bzw. ich mache dabei
fundamentale Fehler. Muss hierzu nicht die field_id an die private Funktion übergeben werden,
damit ein spezifischer Feldinhalt dort evaluiert wird?

Ich bin nun zurückgegangen auf die Version 1.3.24. Alles läuft wieder perfekt. Vielleicht finde ich
noch eine Lösung für 1.3.28.

Zunächst einmal vielen Dank.

Gruß
Heinz

bbs2:
Hallo,

weitere Test haben ergeben, dass in der Version 1.3.28 zuerst alle Pflichtfelder ausgefüllt werden müssen,
wenn auch mit Unsinn. z.B. in meinem Fall mit einem Geburtsdatum von gestern, obwohl ein Schüler unserer
Schule mindestens 14 Jahre alt ist. Die Evalform.php wird also nicht ausgeführt,
solange ein Pflichtfeld nicht mit irgendwas beschrieben ist. Selbst Geburtstage in der Zukunft und die PLZ=00000
werden akzeptiert und nie evaluiert, wenn dies nicht benutzerdefiniert geschieht.

Die Prüfungen auf zulässige Daten gemäß eigenen Validierungen erfolgen erst nach dem Absenden des vollständig
ausgefüllten Formulars. Bisher bekam der User bereits beim ersten Absenden auch eines nicht
vollständig ausgefüllten Formulars aussagekräftige Validierungen und Hilfen durch die Errortexte
(z.B. "Das Geburtsdatum muss zwischen 1960 und 2006 liegen".

Diese Validierung erscheint mir sinnvoller als eine simple Vorabprüfung durch den Browser, der fast jeden Unsinn in den
Pflichteingaben akzeptiert. Der erneute Aufbau des Formulars war hierbei nicht störend und ging sehr schnell.
Ihr könnt dies auf https://bbsiikl.de/pages/anmeldung/bs-anmeldung.php sehen (noch Version 1.3.24) und ein nicht ausgefülltes Formular absenden. Bitte keine fehlerfreie Anmeldung durchführen, da diese dann effektiv in der Schule ankommt.

Was ist sinnvoller??

Gruß
Heinz

dbs:
Warum entweder oder?
Es muss auch möglich sein sofort korrekt zu validieren. Dann halt ohne deinen alten PHP-Code, dafür mit neuerem Javascript.
Ich finde aber die Browservalidierung trotzdem sinnvoll, weil nicht jeder Code suchen, finden und einbauen kann.

bbs2:
Richtig,

das kann aber auch nicht jeder, einschl. mir.
Ich finde diese Diskussion aber gut, fair, hilfreich und sinnvoll.
Zudem gibt es im Forum viele gute und professionelle Geister

Gruß

Heinz

Martin Hecht:
Hallo Heinz,

ja, du hast recht, in der private.php ist die Evaluierung etwas schwieriger. Du müsstest so etwas wie die Feldschleife nachbilden. In $mpform_fields werden die Eingaben übergeben. Über die könntest du iterieren und jeweils die Prüfungen durchführen - und gegen Ende der Funktion die erneute Ausgabe des Formulars aufrufen, so in etwa in der Art:

--- Code: ---        if($fer != array()) {
            // paint form again:
            include_once(WB_PATH .'/modules/mpform/paintform.php');
            paint_form($section_id, $fer, $err_txt, false);
           return FALSE;
       }
      return TRUE;

--- End code ---

Oder wie wäre es, wenn es eine private Funktion gäbe, die $field_id und $post_field übergeben bekommt und einen String für $err_txt[] zurückliefert. Ist der String leer, ist alles Ok, ansonsten wird die $field_id zu $fer[] hinzugefügt sowie der Rückgabewert in $err_txt[] eingefügt?
Damit der Browser halb-ausgefüllte Formulare abschickt, dürfen die Felder nicht als required markiert sein. Sie werden dann zwar auch nicht schon intern von mpform darauf geprüft, ob sie ausgefüllt sind, aber die private Funktion kann ja viel detailliertere Prüfungen vornehmen.

Alternativ könntest du auch mit einer zusätzlichen Code2 Section clientseitig eine detailierte Prüfung der Eingaben umsetzen. Auf die Eingabefelder kannst du mit getElementById zugreifen und EventListener für den EventType input oder change hinterlegen die dann das Property value abfragen und ggf. - im einfachsten Fall mittels alert() - eine Meldung einblednen (aber es gibt im Netz viele Beispiele für deutlich elegantere Popups). 

viele Grüße,
Martin

Navigation

[0] Message Index

[#] Next page

[*] Previous page

Go to full version