Übersetzungen dieser Seite:
 

Dies ist eine alte Version des Dokuments!


Antworten in einer Folgefrage anzeigen

Mittels Platzhaltern ist es möglich, eine geschlossene oder offene Antwort des Teilnehmers an anderer Stelle im Fragebogen anzuzeigen (auch als „Piping“ bezeichnet).

Beispiel: Der Teilnehmer wählt zu Beginn des Fragebogens aus, welches Online-Netzwerk er persönlich am häufigsten verwendet. In späteren Fragen soll dann der Names des Netzwerks (z.B. „diaspora*“) in Frage- und Itemtexten erscheinen (z.B. „Wie häufig nutzt du diaspora* an einem üblichen Werktag?“)

Hinweis: Falls Sie in einer Folgefrage nur bestimmte Skalenitems oder Auswahloptionen in Abhängigkeit von den Antworten des Teilnehmers anzeigen möchten, lesen Sie bitte Items in eine andere Frage übernehmen.

Hinweis: Falls Sie bisher noch nicht mit Filtern und PHP-Code gearbeitet haben, lesen Sie vorab bitte die Kapitel Einführung in PHP-Code und Problemlösung bei Filterfragen.

Offene Textantwort verwenden

Der Teilnehmer hat auf Seite 2 in einem offenen Texteingabefeld (Kennung TX01_01) den Namen eines Fernsehmoderators genannt. Mittels Antwortprüfung wurde sichergestellt, dass der Teilnehmer auch etwas eingetragen hat. Der angegebene Name soll nun in weiteren Fragetexten oder Skalenitems verwendet werden.

Zunächst wird mit replace() ein Platzhalter für den Namen vorbereitet, z.B. %moderator. Dazu platzieren Sie auf einer Fragebogen-Seite nach der Texteingabefrage (z.B. im Beispiel auf Seite 3 oder später) folgenden PHP-Code:

replace('%moderator%', 'TX01_01', 'response');

Dieser Platzhalter kann nun an beliebiger Stelle im Fragebogen verwendet werden – natürlich erst ab dort, wo er mittels PHP-Code vorbereitet wurde. So könnte der Fragetext einer Frage auf Seite 3 etwa lauten:

Bitte beurteilen Sie <strong>%moderator%</strong> in Hinblick auf die folgenden Eigenschaften.

Hinweis: Es ist mittels replace() nicht möglich, die Eingabe des Teilnehmers direkt auf derselben Fragebogenseite anzuzeigen. Dafür ist JavaScript erforderlich.

Hinweis: Um die korrekte Funktion zu testen, müssen Sie den Fragebogen von Beginn an starten – oder zumindest ab der Seite mit der offenen Texteingabe, wo der Name abgefragt wird (im Beispiel Seite 2).

Tipp: Ist ein Platzhalter erst einmal vorbereitet, behält er seine Gültigkeit auch auf späteren Seiten im Fragebogen. Es ist nicht erforderlich, den PHP-Code auf jeder Seite zu wiederholen.

Tipp: Mit dem oben beschriebenen PHP-Code können auch geschlossene Antworten (z.B. aus einer Auswahlfrage) in Folgefragen übernommen werden.

Tipp: Alternativ kann die Angabe des Teilnehmers mittels value() ausgelesen werden und anschließend an replace() übergeben werden.

$name = value('TX01_01');
replace('%moderator%', $name);

Geschlossene Antworten verwenden

Die Verwendung geschlossener Antworten funktioniert genauso, wie bei offenen Antworten.

Das folgende Beispiel geht davon aus, dass der Teilnehmer in Auswahlfrage SN01 das Onlinenetzwerk ausgewählt hat, das er am häufigsten verwendet. Folgender PHP-Code (platziert auf der folgenden Seite oder später) sorgt dafür, dass der Platzhalter %sns% anschließend immer durch den Namen des ausgewählten Netzwerks ersetzt wird.

replace('%sns%', 'SN01', 'response');

Würde man die Antwort auf SN01 mittels value() auslesen, bekommt man zunächst den numerischen Antwort-Code. Möchte man den Text der Antwortoption zur weiteren Verarbeitung auslesen, kann man entweder den Befehl getItemtext() verwenden – oder wesentlich einfacher – bei value() als zweiten Parameter 'label' angeben.

$antwort = value('SN01', 'label');
html('<h1>'.$antwort.'</h1>');

Eine Sonderrolle nehmen Mehrfachauswahl-Fragen ein. Hier kann man entweder die einzelnen Auswahloptionen betrachten (jede wird durch eine eigene Variable repräsentiert, vgl. Variablen-Übersicht) oder die gesamte Frage.

  • Der Befehl value('MA01') angewendet auf die Mehrfachauswahl MA01 liefert nicht (!) den Code der ersten ausgewählte Option, sondern die Anzahl der ausgewählten (nicht-exklusiven) Optionen.
  • Der Befehl value('MA01', 'label') liefert eine Komma-getrennte Liste der ausgewählten Optionen. Gleiches gilt für die Verwendung von replace('%platzhalter%', 'MA01', 'response').

Sonstiges-Eingabefelder

Verwendet man eine Auswahlfrage mit einer offenen Residualkategorie „Sonstiges: ___“, dann funktioniert replace('%sns%', 'SN01', 'response') weiterhin. Wählt der Teilnehmer eine der vorgegeben Auswahloptionen, wird der Platzhalter durch diese ersetzt. Wählt er eine Auswahloption mit offenen Eingabefeld, so wird der Platzhalter durch die Texteingabe des Teilnehmer ersetzt.

replace('%sns%', 'SN01', 'response');

Die Funktion value() ist ein wenig strenger. value('SN01', 'label') liefert den Text „Sonstiges:“. Gibt man hingegen als dritten Parameter 'free' an (value('SN01', 'free')), so erhält man entweder die ausgewählte Option oder – falls eine Option mit offenen Eingabefeld gewählt wurde – die offene Eingabe des Teilnehmers.

Mehrere offene Antworten übernehmen

Dem Teilnehmer wird eine Frage vom Typ „Offene Texteingabe“ („TX01“) oder „Offene Nennungen“ („TX02“) angezeigt. Die Frage erlaubt bis zu 10 Antworten. Nun sollen in einer Folgefrage (z.B. Mehrfachauswahl, Rangordnung, Skala) die Antworten als Items bzw. Optionen angezeigt werden.

Die Schwierigkeit in diesem Beispiel besteht darin, dass der Teilnehmer evtl. nur einen Teil der Eingabefelder ausfüllt. Die Folgefrage darf also nur die entsprechenden Items/Optionen anzeigen. Außerdem wäre es müßig, 10-mal redirect() zu schreiben. Eine FOR-Schleife erledigt die Wiederholung.

Damit es mit der Folgefrage (z.B. „FF01“) funktioniert, müssen Sie diese wie folgt anlegen: Die Frage muss genauso viele Items/Optionen haben, wie Texteingaben möglich sind (im Beispiel 10). Und als Texte für die Items/Optionen werden Platzhalter verwendet, z.B. %text1% bis %text10%.

%text1%
%text2%
%text3%
%text4%
%text5%
%text6%
%text7%
%text8%
%text9%
%text10%

Tipp: Sie können neben dem Platzhalter natürlich noch weiteren Text verwenden, z.B. „Bewertung %text1%“.

Der folgende PHP-Code liest mittels value() alle 10 möglichen Eingabefelder aus, überprüft, ob etwas eingetragen wurde, bereitet die Platzhalter %text1% bis %text10% vor und zeigt die Frage FF01 mit den passenden Items/Optionen an.

Wichtig: Der PHP-Code für „Offene Texteingabe“ und „Offene Nennungen“ unterscheidet sich geringfügig in Zeile 4, weil die Variablen nach einem anderen Schema benannt werden („TX01_01“ vs. „TX02x01“).

Offene TexteingabeOffene Nennungen
$frage = 'TX01';
$items = array();
for ($i=1; $i<=10; $i++) {
  $itemID = $frage.'_'.sprintf('%02d', $i);
  $antwort = value($itemID);
  if (trim($antwort) != '') {
    replace('%text'.$i.'%', $antwort);
    $items[] = $i;
  }
}
// Folgefrage anzeigen
if (count($items) > 0) {
  question('FF01', $items);
}
$frage = 'TX02';
$items = array();
for ($i=1; $i<=10; $i++) {
  $itemID = $frage.'x'.sprintf('%02d', $i);
  $antwort = value($itemID);
  if (trim($antwort) != '') {
    replace('%text'.$i.'%', $antwort);
    $items[] = $i;
  }
}
// Folgefrage anzeigen
if (count($items) > 0) {
  question('FF01', $items);
}

Zur Erklärung des PHP-Codes: Der IF-Filter am Ende sorgt dafür, dass die Folgefrage übersprungen wird, wenn der Teilnehmer gar kein Eingabefeld ausgefüllt hat. Die Funktion trim() entfernt Leerzeichen am Anfang und Ende des eingegebenen Textes, sodass ein paar Leerzeichen im Textfeld nicht als gültige Antwort interpretiert werden. Die Funktion sprintf() mit dem Parameter '%02d' sorgt dafür, dass eine Zahl zweistellig mit führender Null angezeigt wird (also z.B. 01 statt nur 1).

Hinweis: Sollte der PHP-Code nicht das gewünschte Ergebnis liefern, sei nochmals auf das Kapitel Problemlösung bei Filterfragen verwiesen.

de/create/transfer-responses.1532188158.txt.gz · Zuletzt geändert: 21.07.2018 17:49 von ncruz
 
Falls nicht anders bezeichnet, ist der Inhalt dieses Wikis unter der folgenden Lizenz veröffentlicht: CC Attribution-Share Alike 4.0 International
Driven by DokuWiki