0 votes
in FAQs by s268733 (120 points)

Lieber Support-Team,

ich habe eine ähnliche Frage wie in dem Post Antwort aus offener Frage in Folgefrage einsetzen .

Aber ich möchte die offene Texteingabe nicht für darauffolgende Items verwenden, sondern für Folgefragen, in deren Fragetext dann die offene Texteingabe eingesetzt wird.

Ich habe schon viel gelesen und ausprobiert und vermute, dass die Antwort ganz einfach ist, aber ich komme einfach nicht auf die richtige Lösung.

Konkret möchte ich Folgendes erreichen:
Wenn in Frage BU02 (offene Nennung: Stelle 1, Stelle 2, Stelle 3) ein Text eingetragen wird, d.h. eine Antwort erfolgt, sollen auf der nächsten Seite zu jedem Eintrag eine entsprechende Folgefrage erscheinen. Diese Folgefrage soll dann den angegebenen Text in der dazugehörigen Frage ersetzen, z.B. bei Stelle 1 (BU02x01) wird %text1% eingetragen, dann soll eine Folgefrage erscheinen, die lautet: Bitte erläutern Sie nun genauer warum Sie die Stelle %text1% markiert haben. Die Antworten sind dann wieder offene Nennungen.

Für die If-Bedingung habe ich den folgenden php code aus dem Manual (https://www.soscisurvey.de/help/doku.php/de:create:transfer-responses):

$frage = 'BU02';
$items = array();
for ($i=1; $i<=20; $i++) {
  $itemID = id($frage, $i);
  $antwort = value($itemID);
  if (trim($antwort) != '') {
    replace('%text'.$i.'%', $antwort);
    $items[] = $i;
  }
}

Den in der if-Bedingung vorbereiteten %text1% bis %text4% habe ich dann in die jeweilige Frage als Platzhalter eingefügt. Was mir nicht klar ist, ist wie ich die Verbindung zwischen der Texteingabe (also den beantwortetem Item) und der dazugehörigen Frage herstelle. Der php code, den ich für die Wenn-Bedingung gefunden habe ist folgender:

// Folgefrage anzeigen
if (count($items) > 0) {
  question('EM02');
  question('EM03');
  question('EM04');
  question('EM05');
} else {
goToPage ('next'); 
}

Debug-Information:

[Verarbeitung]	Lese Antworten von Seite 7
[Information]	Antwort auf BU02x01 = nininio
[Information]	Keine Antwort für BU02x02
[Information]	Antwort auf BU02x03 = dgdgdgdg
[Information]	Antwort auf BU02x04 = uiopuop
[Information]	Antwort auf BU02x01 = nininio
[Information]	Keine Antwort für BU02x02
[Information]	Antwort auf BU02x03 = dgdgdgdg
[Information]	Antwort auf BU02x04 = uiopuop
[Information]	Antwort auf BU02 = 3
[Information]	Fragen bisher zu 100% vollständig beantwortet
[Verarbeitung]	Erstelle Seite 8 in Fragebogen probe
[Information]	value("BU02x01") = "nininio"
[Information]	value("BU02x02") = ""
[Information]	value("BU02x03") = "dgdgdgdg"
[Information]	value("BU02x04") = "uiopuop"
[Inhalt]	Erstelle Frage EM02
[Inhalt]	Erstelle Frage EM03
[Inhalt]	Erstelle Frage EM04
[Inhalt]	Erstelle Frage BL01
[Inhalt]	Erstelle Frage BL02
[Information]	Folgende Platzhalter sind vorbereitet:
%text1% = (Text) nininio
%text3% = (Text) dgdgdgdg
%text4% = (Text) uiopuop

Die Fragen EM03 wird angezeigt, obwohl beim dazugehörigen Item BU02x02 kein Text eingegeben wird. Der php code kommuniziert also diese Information nicht.

Es wäre toll Hilfe zu bekommen! Herzlichen Dank schon einmal!

1 Answer

0 votes
ago by SoSci Survey (306k points)

Kein Problem - das Grundgerüst finden Sie hier erklärt:
Items in eine andere Frage übernehmen

Sie gehen die möglichen offenen Nennungen einfach durch, und wenn in einer etwas eingetragen ist, dann zeigen Sie die passende Folgefrage an. Am besten starten Sie mit einer Liste, welche die Eingabefelder und Folgefragen zusammenbringt:

$felder = [
    'BU02x01' => 'EM02',
    'BU02x02' => 'EM03',
    'BU02x03' => 'EM04',
    'BU02x04' => 'EM05',
    // u.s.w.
];

Die von Ihnen bereits erfolgreich gebaute Schleife können Sie hier ein wenig abgeändert nun verwenden:

foreach ($felder as $input => $frage) {
  $antwort = value($itemID);
  if (trim($antwort) != '') {
    replace('%text'.$i.'%', $antwort);
    question($frage);
  }
}

Und hier noch ein Profi-Tipp: Sie können in allen Fragen auch denselben Platzhalter, z.B. %text% verwenden, und mit show() arbeiten, um den Platzhalter in jeder Frage individuell zu ersetzen.

foreach ($felder as $input => $frage) {
  $antwort = value($itemID);
  if (trim($antwort) != '') {
    show($frage, ['%text%' => htmlspecialchars($antwort)]);
  }
}

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

...