Liebe alle,
ich habe eine Frage zur Pflichtfeld-Deklaration von dynamisch generierten Fragen.
Der aktuelle Code generiert u.a. auf Basis der Datenbank Variablen je nach Zusammensetzung einer Familie, z. B.:
$key = caseSerial();
$info = false;
if ($key) {
$info = dbGet($key);
}
$anzkinder = 0;
if ($info && isset($info[9])) {
$anzkinder = (int)$info[9];
}
$anzkinder = max(2, min(5, $anzkinder));
$variante = (int) value('BA01');
$anzeltern = 0;
if ($variante === 1) {
$anzeltern = (int) value('EF02');
} elseif ($variante === 2) {
$anzeltern = (int) value('EF01');
}
$anzeltern = max(1, min(5, $anzeltern));
$et = 5;
if ($variante != 1) {
$index = ($et - 1) * 4 + ($anzkinder - 1);
$itemID = 'EG' . str_pad($index, 2, '0', STR_PAD_LEFT);
question($itemID);
}
Ich habe versucht, auf der nächsten Fragebogenseite (unsichtbare Seite, hier liegt nur der Code, um Pflichtfelder zu deklarieren) das jeweilige dynamisch generierte Item als Pflichtfrage zu deklarieren und die Seite bei fehlender Eingabe zu wiederholen:
$key = caseSerial();
$info = false;
if ($key) {
$info = dbGet($key);
}
$anzkinder = 0;
if ($info && isset($info[9])) {
$anzkinder = (int)$info[9];
}
$anzkinder = max(2, min(5, $anzkinder));
$variante = (int) value('BA01');
$anzeltern = 0;
if ($variante === 1) {
$anzeltern = (int) value('EF02');
} elseif ($variante === 2) {
$anzeltern = (int) value('EF01');
}
$anzeltern = max(1, min(5, $anzeltern));
$et = 5;
if ($variante != 1) {
$index = ($et - 1) * 4 + ($anzkinder - 1);
$itemID = 'EG' . str_pad($index, 2, '0', STR_PAD_LEFT);
question($itemID);
}
if ($itemID && (value($itemID) == '-9' || value($itemID) == '' || value($itemID) == 'NA')) {
markFail($itemID);
repeatPage('TX68');
}
Leider funktioniert das nicht ganz wie erwartet. Anders als an anderen Punkten im Fragebogen wird die Seite (33) nicht mit meiner Fehlermeldung 'TX68' wiederholt. Der Fragebogen springt stattdessen zur nächsten sichtbaren Seite (35) und zeigt das unbearbeitete Item der letzten Seite (33) oben auf der neuen Seite (35) ohne Fehlermeldung. Wenn ich das Item weiterhin nicht bearbeite, gibt es natürlich auch keine weitere Fehlermeldung o.ä., d.h. es ist praktisch kein Pflichtfeld.
Wenn ich die Zeile "question($itemID);" entferne (denn in meinen anderen Pflichtfeld-Deklarationen habe ich aufgrund von möglichen Überschreibungen nach Möglichkeit auch nicht damit gearbeitet), springt der Fragebogen nur zur nächsten sichtbaren Seite (35) und es gäbe gar keine Möglichkeit, das Item noch zu bearbeiten.
Auch ein expliziter Aufruf wie "repeatPage('A405', 'TX68')" bzw. "repeatPage('A405')" zeigt keinen Effekt.
Meine Frage ist nun, wo mein Fehler liegt und ob es vielleicht einen anderen Ansatz gibt, um dynamisch generierte Fragen in PHP korrekt als Pflichtfeld zu deklarieren?
Vielen Dank und liebe Grüße!