WebsiteBaker Support (2.12.x) > Modules
Benutzerspezifische Evaluierung in mpform
bbs2:
Hallo,
ich habe die Version 1.3.28 von mpform installiert.
Seit dieser Installation funktionieren die von mir in die file evalform.php eingefügten Evaluierungen nicht mehr.
Dies funktionierte seit ca. 10 Jahren. Zueltzt war die Version 1.3.24 installiert. Auf meiner Testseite mit
Version 1.3.24 gibt es hierbei keien Probleme.
Hier 2 Beispiele zu den Einfügungen, wobei die Standardvorgabe im Eingabefeld lautet: "Bitte auswählen"
Wird keine Auswahl getroffen, wird dies abgefangen und eine Fehlermeldung ausgegeben. Die Felder sind
Pflichteingabefelde r.
if($field_id == 3608) {
$v = substr($_POST['field3608'][0],0,3);
if ($v == "Bit") {
$err_txt[$field_id] = "Bitte wählen Sie die Religionszugehörigk eit aus";//$LANG['frontend']['date_error'];
$fer[]=$field_id;
}
}
if ($field_id == 11) {
$v = substr($_POST['field11'][0],0,3);
if ($v == "Bit") {
$err_txt[$field_id] = "Bitte wählen Sie männlich oder weiblich aus ";//$LANG['frontend']['date_error'];
$fer[]=$field_id;
}
}
Viele Grüße
Heinz
Martin Hecht:
Hallo Heinz,
Das liegt daran, dass die Pflichtfelder inzwischen als solche mit dem required Attribut gekennzeichnet werden und der Browser selbst die Evaluierung vornimmt, sofern er es unterstützt. Bisher musste das Formular bei jeder fehlenden Eingabe erneut vom Server geladen werden. Das hat einige Nutzer gestört und so kam die Anfrage, ob man das nicht umstellen könnte.
Für deinen Anwendungsfall könntest Du einfach mal probehalber die Felder nicht als Pflichtfeld markieren, dann müsste meines Erachtens dein bisheriger Code wieder funktionieren.
Wenn das funktioniert, fehlt nur noch der Stern, der das Feld als Pflichtfeld markiert. Den könnte man über den {TEMPLATE} Plazhalter einfügen. In der Feldschleife. Wenn du diesen Platzhalter vor oder nach {REQUIRED} in die Feldschleife aufnimmst, bekommen die Felder im Backend ein zusätzliches Eingebefeld für diesen Platzhalter. Um den Stern der Pflichtefelder nachzuahmen gibst du dort bei den Feldern, die die Markierung bekommen sollen <span class="mpform_required required">*</span> ein.
Viele Grüße,
Martin
bbs2:
Vielen Dank Martin,
ich habe 2 Pflichtfelder testweise als freiwillig deklariert. Dennoch werden meine benutzerdefinierten Evaluierungen nicht
durchlaufen. Die beiden Felder mit ID = 8 (Geburtstag) und ID = 11 (Geschlecht) werden also auch so nicht benutzerdefiniert
evaluiert.
Siehe neue Version unter https://bbsiikl.de/pages/anmeldung/bs-anmeldung.php
Siehe Funktion unter 1.3.24 unter http://test.bbsiikl.de/pages/anmeldung/bs-anmeldung.php
Insgesamt habe ich (schon immer seit der Nutzung von mpform) solche Evaluierungen von Zeile 604 bis 1116 in der
evalform.php. Die benutzerdefinierten Evaluierungen sind für fehlerreduzierte Anmeldungen an unserer Schule wichtig
und haben sich in dem hervorragenden Modul mpform bisher sehr bewährt. Es gibt sicher eine Lösung.
Hier die Evaluierungen für die beiden o.g. Felder. Zudem in der Anlage die evalform.php.
Gibt es evtl. eine Lösung über die privat.php.
// Eingabe Geschlecht
if ($field_id == 11) {
$v = substr($_POST['field11'][0],0,3);
if ($v == "Bit") {
$err_txt[$field_id] = "Bitte wählen Sie männlich oder weiblich aus ";//$LANG['frontend']['date_error'];
$fer[]=$field_id;
}
}
// Eingabe Geburtstag mit Geburtsjahren zwischen 1960 und 2006
if(($field_id == 8) or ($field_id == 307) or ($field_id == 229)){
$v = $post_field;
$pos=strpos($v,".");
$pos2=strpos(substr($v,($pos+1)),".");
$date=substr($v,0,($pos));
$result=preg_match("/^[0-9]+$/",$date,$trashed);
$month=substr($v,($pos+1),($pos2));
$result2=preg_match("/^[0-9]+$/",$month,$trashed);
$year=substr($v,($pos+$pos2+2));
$gebjahr=(int)$year;
global $gebjahr;
$result3=preg_match("/^[0-9]+$/",$year,$trashed);
if((substr_count($v,"."))<>2){
$err_txt[$field_id] = $LANG['frontend']['date_error'];
$fer[]=$field_id;
}
elseif (!($result)){
$err_txt[$field_id] = $LANG['frontend']['date_error'];
$fer[]=$field_id;
}
elseif (($date<=0)OR($date>31)){
$err_txt[$field_id] = $LANG['frontend']['date_error'];
$fer[]=$field_id;
}elseif (($month<=0)OR($month>12)){
$err_txt[$field_id] = $LANG['frontend']['date_error_monat'];
$fer[]=$field_id;
}
elseif (!($result2)){
$err_txt[$field_id] = $LANG['frontend']['date_error_monat'];
$fer[]=$field_id;
}
elseif (!($result3)){
$err_txt[$field_id] = $LANG['frontend']['date_error_jahr'];
$fer[]=$field_id;
}
elseif (($year<1960)OR($year>2006)){
$err_txt[$field_id] = $gebjahr." nicht logisch. Die Jahresangabe muss zwischen 1960 und 2006 liegen."; //$LANG['frontend']['date_error_jahr'];
$fer[]=$field_id;
}
}
Achtung eine weitere Auffälligkeit:
Ich habe aus Versehen nach der Speicherung einer Änderung im Backend nicht den Abbrechen-Button benutzt, sondern
den zurück-Pfeil im Firefox. Ich erhielt dann folgende Meldung:
Sicherheitsverletzu ng!! Zugriff wurde verweigert! (IDKEY) /mnt/web203/c2/45/5705045/htdocs/homepage/modules/mpform/modify_field.php:47
DarkViper:
--- Quote from: bbs2 on March 25, 2019, 01:30:36 PM ---Achtung eine weitere Auffälligkeit:
Ich habe aus Versehen nach der Speicherung einer Änderung im Backend nicht den Abbrechen-Button benutzt, sondern
den zurück-Pfeil im Firefox. Ich erhielt dann folgende Meldung:
Sicherheitsverletzu ng!! Zugriff wurde verweigert! (IDKEY) /mnt/web203/c2/45/5705045/htdocs/homepage/modules/mpform/modify_field.php:47
--- End quote ---
Dieses Verhalten ist völlig korrekt.
FTANS und IDKEYs können jeweils nur ein einziges mal verwendet werden (à la TAN beim Onlinebanking).
Durch die Speicherung wurden beide Elemente benutzt und sind somit verfallen, da bei Browser-Back die Seite ja nicht neu aufgebaut wird (also auch serverseitig keine neue FTAN und IDKEYs erzeugt werden), sondern nur aus dem Browsercache gelesen wird.
Martin Hecht:
Ich dachte die Evaluierungen wären in der private.php in private_function_be fore_email(). Die evalform.php wird beim Update überschrieben. ggf. musst du deine eigenen Anpassungen dort wieder einfügen, aber ich rate davon ab, die Dateien vom Modul zu ändern wo es nicht vorgesehen ist.
Damit der Browser die Daten überhaupt an den Server schickt müssen alle Pflichtfelder entweder ausgefüllt sein oder nicht als Pflichtfeld markiert sein.
Navigation
[0] Message Index
[#] Next page
Go to full version