Sie haben ja bereits einen Code zitiert, welcher einfach mitzählt, welche (!) Items vorbelegt sind:
$serial = caseSerial();
$data = dbGet($serial);
$texte = [];
if ($data[3] == 'TRUE') {
$texte[1] = $data[2];
}
if ($data[7] == 'TRUE') {
$texte[2] = $data[6];
}
// usw. bis texte[11]
Wenn Sie die Texte "ganz normal" anzeigen möchten, dann verwenden Sie statt preset()
besser Platzhalter:
foreach ($texte as $i => $text) {
replace('%text'.$i.'%', $text);
}
Passend dazu legen Sie z.B. eine Frage vom Typ "Skala (Zwischenwerte beschriftet)" an, welche 11 Items enthält. Der Itemtext lautet %text1%
, %text2%
u.s.w.
Von dieser Frage zeigen Sie jetzt nur die relevanten Items an:
$items = array_keys($texte);
question('SK01', $items);
Und für die offenen Eingabefelder legen Sie eine weitere Frage, diesmal vom Typ "offene Texteingabe" an, ebenfalls mit 11 Items. Der Itemtext ist hier egal. Wenn diese die Kennung SK02 hätte, würden Sie den obigen PHP-Code wir folgt ersetzen:
$items = array_keys($texte);
question('SK01', $items, 'combine=SK02');
Das IF
ist wahrscheinlich nicht erforderlich.
Die Eingabefelder werden in dieser Lösung jetzt erstmal dauerhaft angezeigt. Wenn Sie das noch optimieren wollten, wäre noch ein klein wenig JavaScript erforderlich.