0 votes
ago in SoSci Survey (dt.) by s295460 (160 points)
edited ago by SoSci Survey

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!

ago by SoSci Survey (355k points)
Zwei Rückfragen dazu:

1) Haben Sie einmal probiert, einfach die Fragen ganz regulär als Pflichtfragen zu definieren?

2) Könnte es sein, dass Sie diesen Teil

if ($itemID && (value($itemID) == '-9' || value($itemID) == '' || value($itemID) == 'NA')) {
    markFail($itemID);
    repeatPage('TX68');
}

eigentlich an die Stelle setzen möchten, wo aktuell noch

question($itemID);

steht?

Please log in or register to answer this question.

Willkommen im Online-Support von SoSci Survey.

Hier bekommen Sie schnelle und fundierte Antworten von anderen Projektleitern und direkt von SoSci Survey.

→ Eine Frage stellen


Welcome to the SoSci Survey online support.

Simply ask a question to quickly get answers from other professionals, and directly from SoSci Survey.

→ Ask a Question

...