0 votes
in SoSci Survey (dt.) by s160429 (210 points)

Guten Tag

ich habe eine Frage, ist es möglich folgendes Beispiel umzusetzen?

  • Fragebogen mit beispielsweise 3 Fragen
  • jeweils Ja/Nein möglichkeit
  • seriennummer und referenz wird erfasst

nun möchte ich gern, dass alle die den Fragebogen ausfüllen
und in der seriennummer den buchstaben A (beispielsweise "A123" ist die Seriennummer) enthalten und die 3. Frage mit "Ja" beantworten auf eine spezifische zweite Seite gelangen, die für A definiert ist.

Bei Nein soll der Befragte auf eine Standardseite wie alle anderen gelangen.

Ich habe bisher nur die Filterfunktion gefunden, die aber fragenspezifisch ist und nicht in Abhängigkeit von Seriennummer oder Referenz ist.

LG und Danke

1 Answer

0 votes
by SoSci Survey (305k points)

Die Seriennummer können Sie über caseSerial() abrufen. Den ersten Buchstaben bekommen Sie mit eckigen Klammern.

$serial = caseSerial();
if ($serial) {
    $char = $serial[0];
} else {
    $char = 'X';
}

Damit können Sie Filtern:

if ((value('AB01') == 1) && ($char == 'A')) {
  // Inhalt A zeigen
} else {
  // Inhalt B zeigen
}

Mehr dazu in der Anleitung zu PHP-Filtern.

Wie Sie sehen, würde ich nicht zu unterschiedlichen Seiten leiten, sondern auf derselben Seite einfach mittels question() unterschiedliche Inhalte anzeigen.

by s160429 (210 points)
edited by s160429
Vielen Dank für die schnelle Antwort.

Wie wäre die Abfrage für mehr als nur eine Ziffer?
z.B. Seriennummer AB123 und ich möchte die ersten beiden oder ersten drei nutzen?

im filter einfach:

if ((value('AB01') == 1) && ($char == 'AB bzw. AB1')) {
  // Inhalt A zeigen
} else {
  // Inhalt B zeigen
}

oder muss ich bei der Abfrage der Seriennummer bereits etwas ändern?
Kenne mich leider nicht wirklich mit php aus, kann es mir aber ein wenig herleiten.

aktuell kriege ich folgende Fehlermeldung:
"Im PHP-Code trat ein Fehler auf.
Fehler im Fragebogen: Die PHP-Variable $char wurde verwendet, in diesem PHP-Code aber noch nicht definiert (sie enthält noch keinen Wert).

PHP-Code

001 namespace s2survey\questionnaire\environment;
002
003 if ((value('ZA08') == 1) && ($char == 'A')) {
004   return 'go:ZW';
005 } elseif ((value('ZA08') == 1)  && ($char == 'WD')) {
006   return 'go:WD';"

wo definiere ich $char? ich habe das nun in "PHP-Funktionen" des Fragebogens ergänzt.
by SoSci Survey (305k points)
> Wie wäre die Abfrage für mehr als nur eine Ziffer?

Dafür könnten Sie die PHP-Funktion substr() verwenden:

$chars = substr(caseSerial(), 0, 3);  // für die ersten drei Zeichen

Zugegeben ... das ist eigentlich auch für einen Buchstaben einfacher als die Lösung mit den eckigen Klammern. Im Filter dann:

if ((value('AB01') == 1) && ($chars == 'AB1')) ...

> aktuell kriege ich folgende Fehlermeldung:

Die Definition der Variable $char oder $chars (entweder der Einzeiler in dieser Antwort oder der längere Code meiner vorigen Antwort) muss im selben PHP-Code stehen wie der anschließende Filter. Die Benennung ist natürlich egal, aber den Singular für drei Zeichen zu verwenden, stieß mir ästhetisch dann doch auf ;)
by s160429 (210 points)
Das hat super funktioniert.
Vielen Dank. Die Lösung scheint in der Tat noch eleganter.

Ich habe noch zwei Fragen bezüglich dem Einblenden von Textbausteinen:

$chars = substr(caseSerial(), 0, 2);
if ((value('AB01') == 1) && ($chars == 'AB')) {
    text('AB');
} elseif ((value('AB01') == 1)  && ($chars == 'CD')) {
    text('CD');
}

folgende Lösung hatte ich als php code auf einer zweiten Seite eingebaut.
Er zeigt aber die bereits angelegten Textbausteine nicht an.

Zweite Frage wäre; ab wann werden die Daten der Fragen übertragen?
erste Seite ist der Fragebogen
zweite Seite ist bisher der Filter
dritte Seite ist die "letzte Seite"

werden die Daten bereits übertragen wenn man den "weiter" knopf auf der ersten Seite klickt? ist es möglich textbausteine auf der letzten Seite zu nutzen (gefiltert durch den php-code oben)

Geht wahrscheinlich nur so, oder? https://www.soscisurvey.de/help/doku.php/de:create:lastpage ?

Vielen Dank!
by SoSci Survey (305k points)
> Er zeigt aber die bereits angelegten Textbausteine nicht an.

Lassen Sie sich mittels debug($chars) einmal anzeigen, ob die Filter überhaupt greifen. Kontrollieren Sie dazu parallel auch die Debug-Information, was für AB01 als Wert ermittelt wird.

> Zweite Frage wäre; ab wann werden die Daten der Fragen übertragen?

Wenn die Befragten auf Seite 1 die Antworten eintragen und dann mit "Weiter" abschicken, kann value() diese Antworten frühestens auf Seite 2 auslesen.

Im Datensatz werden die Angaben ebenfalls mit jedem Klick auf "Weiter" übertragen. Was das ungefähr Ihre Frage? Sonst formulieren Sie sie bitte nochmal anders.

>  ist es möglich textbausteine auf der letzten Seite zu nutzen (gefiltert durch den php-code oben)

Nein, noch nicht. Aber Sie können eine zusätzliche vorletzte Seite einbauen und dort den Weiter-Knopf ausblenden (wie in dem Kapitel beschrieben, das Sie ja bereits verlinkt haben).
by s160429 (210 points)
die seriennummer wurde trotz Eingabe im DebugModus nicht erkannt, im live test hat alles funktioniert.

alles klar, habe ich verstanden. Mit der "falschen" letzten Seite gibts ja nur das Problem mit dem fehlenden "finished" ist aber ok, da "lastpage" ja dennoch ausgelöst wird.

Vielen Dank für die schnelle und kompetente Hilfe.

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

...