0 votes
in SoSci Survey (dt.) by s071843 (185 points)
edited by SoSci Survey

Guten Tag,

ich habe mehrere Fragen, bei denen die Befragten nur sie betreffende Variablen aus der Datenbank für Inhalte angezeigt bekommen sollen. In der Frage sollen sie prüfen, ob die angezeigten Daten so korrekt sind.

Es sollte dann folgende Auswahlmöglichkeiten geben (für jede Variable, Pro Befragtem kann die Anzahl der gezeigten Variablen zwischen 1 und 11 variieren):

  • Ja
  • Nein
  • Ich weiß nicht

Bei "Nein" soll zusätzlich ein Textfeld stehen, in dem die Befragten dann Angaben ergänzen können.

Ideal wäre, wenn die Variable immer links angezeigt wird und dann rechts davon die drei Antwortoptionen. Alternativ wäre es auch ok, wenn die Variable in dem Texteingabefeld steht und dann dort direkt geändert wird.

Mit welchem Fragetyp könnte man das umsetzen? Wichtig wäre auch, dass nicht jedem Befragten 11 (z.T. leere) Textfelder angezeigt werden, sondern nur dann eine Anzeige erfolgt, wenn eine Auswahlvariable "wahr" ist. Für den Fragetyp "offene Nennung" habe ich hier bereits einen PHP-Code, aber für andere Fragetypen muss dieser ja wahrscheinlich angepasst werden:

$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]

foreach ($texte as $i => $text) {
  preset(id('P126', $i), $text);
}
if (($data[3] == 'TRUE') || ($data[7] == 'TRUE') || ($data[11] == 'TRUE') || ($data[15] == 'TRUE') || ($data[19] == 'TRUE') || ($data[23] == 'TRUE') || ($data[27] == 'TRUE') || ($data[31] == 'TRUE') || ($data[35] == 'TRUE') || ($data[39] == 'TRUE') || ($data[43] == 'TRUE')){
  question('P126', array_keys($texte));   // earliest results publication
}

1 Answer

+1 vote
by SoSci Survey (302k points)

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.

by s071843 (185 points)
Vielen Dank, funktioniert und ist genau so wie ich es brauche. Die Texteingabefelder müssen nicht erst dann erscheinen, wenn "no" ausgewählt wird.

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

...