0 votes
in SoSci Survey (dt.) by s053303 (170 points)
edited by SoSci Survey

Liebes Forum,

ich habe eine Frage bezüglich eines Fragetyps "Texteingabe mit Auswahlempfehlung". Ich möchte die drei Antworten dieses Antworttyps zunächst als Platzhalter in bis zu drei andere Frage übernehmen - dazu verwende ich den folgenden Code:

$frage = 'MN13';
$items = array();
for ($i=1; $i<=3; $i++) {
  $itemID = $frage.'x'.sprintf('%02d', $i);
  $antwort = value($itemID);
  if (trim($antwort) != '') {
    replace('%tv0'.$i.'%', $antwort);
    $items[] = $i;
  }
}

if (count($items) > 0) {
  question('MN22');
}
if (count($items) > 1) {
  question('MN23');
}
if (count($items) > 2) {
  question('MN24');
}

und schliesslich alle Antworten gemeinsam in einer Frage mit dem Platzhalter %tv01%, %tv02%, %tv03% verwenden. Dazu hatte ich ursprünglich diesen Code:

$frage = 'MN13';
$items = array();
for ($i=1; $i<=3; $i++) {
  $itemID = $frage.'x'.sprintf('%02d', $i);
  $antwort = value($itemID);
  if (trim($antwort) != '') {
    replace('%tv0'.$i.'%', $antwort);
    $items[] = $i;
  }
}

if (count($items) > 0) {
  question('MN04', $items);
}

Die Frage war zunächst eine einfache offene Texteingabe (mit max. drei Antwortmöglichkeiten). Durch die Veränderung des Fragetyps funktioniert mein Code nicht mehr und ich komme nicht von alleine darauf, wie man ihn verändern muss, damit es wieder klappt.

Ich bin sehr dankbar für eure Weiterhilfe!

1 Answer

0 votes
by SoSci Survey (327k points)
edited by SoSci Survey

Bitte ergänzen Sie bei der Funktion value() als zweiten Parameter noch ein 'free'. Dann sollte SoSci Survey automatisch eine offene Eingabe oder den Text der vorausgewählten Option verwenden:

$antwort = value($itemID, 'free');

Edit

Wenn man in einer "Texteingabe mit Auswahlempfehlung" mehrere Eingabefelder nutzt, dann werden die Variablen nicht nach dem Schema AB01x01 u.s.w. benannt, sondern ohne führende 0, also z.B. AB01x1. Entsprechend muss die $itemID angepasst werden. Ohnehin bietet sich hier die neuere Funktion id() an, um Fehler zu vermeiden:

$itemID = id($frage, $i);

Nun liefert "free" aber den Text "Keine Antwort", denn der Teilnehmer nichts angegeben hat. Sie müssen also erstmal value() ohne 'free' prüfen und dann nochmal den Text mit 'free' auslesen:

$items = array();
for ($i=1; $i<=3; $i++) {
  $itemID = id($frage, $i);
  $code = value($itemID);
  if ($code > -9) {
    $antwort = value($itemID, 'free');
    replace('%tv0'.$i.'%', $antwort);
    $items[] = $i;
  }
}
by s053303 (170 points)
Vielen Dank für die schnelle Weiterhilfe!

Ich habe es so umgeändert, aber interessanterweise wird immer nur die zweite Auswahl angezeigt.

Im Debug Mode bekomme ich die folgende Meldung:


[Information]    Interview Nummer 96 wird fortgesetzt
[Information]    Der Fragebogen base im Projekt polarisierung_FOSE wird verwendet
[Verarbeitung]    Lese Antworten von Seite 6+7+8
[Information]    Die Verweildauer auf Seite 8 war 12 Sekunden
[Information]    Antwort auf MN64x1 = 11
[Information]    Keine Antwort für MN64s1
[Information]    Antwort auf MN64x2 = 135
[Information]    Keine Antwort für MN64s2
[Information]    Antwort auf MN64x3 = 26
[Information]    Keine Antwort für MN64s3
[Information]    Fragen bisher zu 100% vollständig beantwortet
[Verarbeitung]    Erstelle Fragebogen-Seite Nr. 9
[Information]    value("MN02_01") = 2
[Information]    value("MN64s1") = ""
[Information]    value("MN64x2") = "TF1"
[Information]    value("MN64s2") = ""
[Inhalt]    Erstelle Frage MN60
[Information]    value("MN02_02") = 1
[Information]    Folgende Platzhalter sind vorbereitet:
%tv02% = (Text) TF1

Es werden irgendwie die Antworten der ersten und dritten Auswahl nicht abgespeichert:
("MN64s1") = ""
("MN64x2") = "TF1"
("MN64s2") = ""

Woran könnte das liegen?

Vielen Dank!
by SoSci Survey (327k points)
Die Namen der Variablen stimmen hier nicht: MN64s1 (mit "s" statt mit "x"). Aber das passt ohnehin nicht zu dem Code, den Sie oben gepostet haben. Dort ist value() nämlich in Verbindung mit MN13 ?! Ich denke, die Debug-Information gehört zu einem anderen PHP-Code?
by s053303 (170 points)
Also, der eigentliche Code in meinem Fragebogen lautet:

if (value('MN02_01') == 2) { $frage = 'MN64';
$items = array();
for ($i=1; $i<=3; $i++) {
  $itemID = $frage.'x'.sprintf('%02d', $i);
  $antwort = value($itemID, 'free');
  if (trim($antwort) != '') {
    replace('%tv0'.$i.'%', $antwort);
    $items[] = $i;
  }
 }

// Folgefrage anzeigen
if (count($items) > 0) {
  question('MN60', $items);
 }
}

Was ich nicht verstehe ist, dass es sich ja um die selbe Frage handelt, aus der die Antworten entnommen werden sollen, aber im Debug Modus bekomme ich einmal MN64s_01 und einmal MN64x2 und beim dritten Mal MN64s2 - muss man noch etwas spezifizieren in der Zeile { $frage = 'MN64';
$items = array(); z.B. MN64s oder MN64x?
by SoSci Survey (327k points)
Das war nicht ganz einfach ... es scheiterte an einem winzigen Detail: Die Variablen-Labels sind nicht x01, sondern x1. Alle weiteren Details oben in der geänderten Antwort.
by s053303 (170 points)
Vielen herzlichen Dank! Nun funktioniert alles prima.

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

...