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

0 votes

Lieber Support

Für mein Problem, das ich in einem anderen Thread angesprochen habe, habe ich noch keine Lösung gefunden und entsprechend suche ich einen neuen Weg.
Gibt es die Möglichkeit, bei einem Fragetyp "offene Texteingabe", die Anzahl Eingaben zu zählen? Ich meine damit nicht die Anzahl Wörter o.ä..
In einer offenen Texteingabe sollen die Teilnehmenden 4 Aktivitäten eingeben, was bis jetzt so aussieht:
Aktivität 1:
Aktivität 2:
Aktivität 3:
Aktivität 4:

Dabei sollen sie mind. 1, max. 4 Aktivitäten angeben. Mit welchem Befehl kann gezählt werden, ob 1, 2, 3 oder 4 Aktivitäten angegeben wurden? Ich konnte in den Hilfestellungen und Anleitungen nur Codes für Anzahl Buchstaben etc. finden, nicht aber für das quasi "Anzahl ausgefüllter Zeilen".

Anschlussfrage: Das Ziel danach wäre, je nach Anzahl angegebener Aktivitäten, eine andere Seite anzuzeigen. Ist dies grundsätzlich möglich? Im Sinne eines "Pageorder"-Codes oder "goToPage"-Befehls?

Danke für die Unterstützung

Viele Grüsse

in SoSci Survey (dt.) by s029389 (160 points)

1 Answer

0 votes

Ich sehe gerade, dass Sie die Ergänzung in der anderen Frage als Antwort geschrieben hatten. Deshalb war die Frage auf meiner Liste nicht mehr aufgetaucht.

Gibt es die Möglichkeit, bei einem Fragetyp "offene Texteingabe", die Anzahl Eingaben zu zählen?

Ja, und zwar so, wie in dieser Anleitung beschrieben: Antworten in einer Folgefrage anzeigen (Abschnitt "Mehrere offene Antworten übernehmen"). Wie weit kommen Sie denn mit dieser Anleitung? Und ab wo brauchen Sie nochmal eine weitere Erklärung?

Das Ziel danach wäre, je nach Anzahl angegebener Aktivitäten, eine andere Seite anzuzeigen.

Eine Seite? Mehrere Seiten? Mit einer Frage? oder mit mehreren Fragen? Alles möglich ... bitte spezifizieren Sie, was Sie gerne hätte :)

by SoSci Survey (194k points)
Der Code in der Anleitung für "mehrere offene Antworten übernehmen" funktioniert bei mir nicht. Ich habe den Code kopiert und die aus meiner Sicht nötigen Stellen (TX01, bei mir: "WT"; da wo 1-10 steht, wäre bei mir 1-4; Bezeichnung der Folgefrage FF01 wäre bei mir nicht eine einzelne Frage sondern die Seite "AK1") geändert. Muss ich sonst noch etwas anpassen?

Denn auf einer nächsten Seite (oder falls einfacher: auf mehreren Seiten) nach der offenen Eingabe soll die Eingabe bewertet werden. Die Teilnehmenden geben in einem ersten Schritt mindestens 1, maximal 4 Aktivitäten an (Seite "WT"). Auf der erwähnten nächsten Seite ("AK1"), oder falls einfacher mehrere Seiten, wird jede einzelne der angegebenen Aktivitäten mit 7 Fragen bewertet.
Also Person gibt Aktivität Eishockey und Fussball an (auf der Seite "WT"). Dann soll auf der nächsten Seite ("AK1) einmal erscheinen:
"Ihre erste Aktivität lautete: Eishockey.
Wie sinnvoll ist diese Aktivität? Skala von 1-5
Wie ... diese Aktivität? Skala von 1-5
Was ... diese Aktivität? Skala von 1-5
usw.

Dann soll weiter erscheinen: "Ihre zweite Aktivität lautete: Fussball.
Wie sinnvoll ist diese Aktivität? Skala von 1-5
Wie ... diese Aktivität? Skala von 1-5
Was ... diese Aktivität? Skala von 1-5
usw.
Verstehen Sie, wie ich meine oder brauchen Sie weitere Angaben?

Bzgl. Zählen der Eingabe:
Mit dem Zählen von 1-4 und anschliessend mit setPageOrder wollte ich eine alternative Lösung suchen. Diese würde mir, falls dem möglich wäre, viel einfacher erscheinen. Ich wollte, falls eine Person 1 Aktivität angibt, eine Seite anzeigen wo sie diese Aktivität anhand von 7 Fragen bewerten soll. Wenn sie 2 Aktivitäten angibt, eine Seite anzeigen, wo sie ihre beiden erwähnten Aktivitäten anhand von 7 Fragen bewerten soll. Wenn Sie 3 Aktivitäten angibt, soll sie auf eine Seite geleitet werden, wo sie die 3 Aktivitäten anhand von 7 Fragen bewertet, bei 4 Aktivitäten zur Seite wo sie ihre 4 Aktivitäten anhand von 7 Fragen bewertet. Wäre dies nicht einfacher?

Viele Grüsse und danke
Posten Sie doch bitte mal den Code, den Sie bisher gebastelt haben, dann haben wir eine Grundlage, um uns das genauer anzusehen.

> oder falls einfacher: auf mehreren Seiten

Das können Sie machen wie Sie möchten, Sie müssen nur entscheiden, wie Sie es gerne hätten.

> wird jede einzelne der angegebenen Aktivitäten mit 7 Fragen bewertet.

Vermutlich wäre das auf separaten Seiten übersichtlicher.

Wie sind diese 7 Fragen denn organisiert? Sind es einzelne Fragen oder mehrere Items in einer Frage?

> Mit dem Zählen von 1-4 und anschliessend mit setPageOrder wollte ich eine alternative Lösung suchen.

Auch das kann man machen. Aber ich würde empfehlen, dass Sie sich eine Wunsch-Lösung aussuchen und dann denken wir diese bis zu Ende durch. Wenn wir hier 3 Lösungen parallel entwickeln, wird es unnötig unübersichtlich.
Danke für Ihre Unterstützung.

Mein Code sieht bis jetzt so aus:
$frage = 'IQ01';
$items = array();
for ($i=1; $i<=4; $i++) {
  $itemID = id($frage, $i);
  $antwort = value($itemID);
  if (trim($antwort) != '') {
    replace('%aktivitaet'.$i.'%', $antwort);
    $items[] = $i;
  }
}
if (count($items) > 0) {
  question('AK1', $items);
}

Ich fände verschiedene Seiten ebenfalls übersichtlicher, sodass auf einer Frage die erste Aktivität bewertet wird, dann eine zweite (falls vorhanden und sonst wird dies übersprungen), dann eine dritte (falls vorhanden und sonst wird dies übersprungen) und zuletzt die vierte (falls vorhanden und sonst wird dies übersprungen).

Die 7 Fragen sind einzelne Items. Hier muss aber nicht mit Platzhaltern gearbeitet werden. Einen Platzhalter für die genannte Aktivität benötige ich nur in der Überschrift: "Ihre erste Aktivität lautete: Tischtennis". Untenstehend kommen dann die 7 Fragen mit einer Zustimmungs-Skala von 1-5. Zum Beispiel: Wie genussvoll ist diese Aktivität?

Ich habe keine bevorzugte Lösung und bin einfach froh, wenn Sie mich unterstützen könnten. Vlt. entscheiden Sie, welches einfacher umzusetzen ist?

Viele Grüsse
> Ich fände verschiedene Seiten ebenfalls übersichtlicher,

Gut, dann machen wir das so :)

> Hier muss aber nicht mit Platzhaltern gearbeitet werden.

Dann kann das replace() aus dem PHP-Code entfernt werden.

Vermutlich ist es am einfachsten, wenn Sie Ihre 4 Aktivitäten auf 4 Seiten verteilen, diesen Seiten (und der danach !) eine Seitenkennung geben und diese mal auflisten:

$seitenIDs = [
  1 => 'ak1',
  2 => 'ak2',
  3 => 'ak3',
  4 => 'ak4'
];

Hier habe ich exemplarisch mal die Seitenkennungen ak1 bis ak4 verwendet. Die Seite danach könnten Sie "done" nennen, zum Beispiel.

Ihren Code passen wir nun marginal an, um die passenden Seiten zu speichern:

$frage = 'IQ01';
$seiten = [];
for ($i=1; $i<=4; $i++) {
  $itemID = id($frage, $i);
  $antwort = value($itemID);
  if (trim($antwort) != '') {
    $seiten[] = $seitenIDs[$itemID];
  }
}

setPageOrder($seiten, 'done');

Testen Sie das bitte auch, wenn keine der Aktivitäten ausgewählt wurde. Ich bin nicht 100%ig sicher, ob setPageOrder() damit direkt zurecht kommt.
Herzlichen Dank für Ihre Hilfe bis hierhin!

Jetzt bin ich gerade verwirrt: Wo muss ich den Teil
"$seitenIDs = [  1 => 'ak1',
  2 => 'ak2',
  3 => 'ak3',
  4 => 'ak4'
];
"

einfügen? Kommt dies auch auf die Seite, wo der restliche PHP-Code hingelangt und die jeweiligen Seiten benenne ich einfach entsprechend?

Danke und liebe Grüsse
Dieser Teil definiert eine Variabel $seitenIDs, auf welche Sie dann im weiteren PHP-Code zurückgreifen. Diese Zeilen müssen deshalb im selben PHP-Code-Element wie der restliche Code stehen, und zwar über dem restlichen Code.
Gut, das habe ich so gemacht.
Nun überspringt es aber diese Seiten und geht direkt zur Seite "done".  
Ich habe die Seiten entsprechend (ak1, ak2, ak3 und ak4) bezeichnet.
Bitte ergänzen Sie vor dem setPageOrder() bitte folgende Zeile:

debug($seiten);

Und prüfen Sie anschließend, was in der Debug-Information angezeigt wird (rechts oben: https://www.soscisurvey.de/help/doku.php/de:create:debugging)
Es erscheint die Meldung: "Debug information for $seiten:
Array (no elements at all)"
Bitte posten Sie auch die Debug-Information, die Sie rechts oben aufklappen können. Danke. Nur zur Sicherheit: Der PHP-Code darf nicht aufserselben Seite stehen wie die Frage IQ01 (s. Anleitung zu value()).

Ich empfehle die Platzierung auf einer separaten Seite zwischen IQ01 und ak1.
Danke für den Hinweis. Wenn ich es auf einer separaten Seite eingebe und den PHP-Code von der Seite mit IQ01 lösche, erscheint folgende Fehlermeldung beim durchklicken:
Questionnaire Error (page 20)
For the function setPageOrder() an invalid parameter was specified. This parameter contains a value of type NULL. Parameters may only be strings (texts) or arrays that contain strings.
Questionnaire Error (page 20)
There is an error in the PHP code:
Questionnaire Error: Undefined index: IQ01_01
line: 16

PHP code

013   $itemID = id($frage, $i);
014   $antwort = value($itemID);
015   if (trim($antwort) != '') {
016     $seiten[] = $seitenIDs[$itemID];
017   }
018 }
019
Questionnaire Error: Undefined index: IQ01_02
line: 16

PHP code

013   $itemID = id($frage, $i);
014   $antwort = value($itemID);
015   if (trim($antwort) != '') {
016     $seiten[] = $seitenIDs[$itemID];
017   }
018 }
019

Hier kopiere ich die Debug-Info rein:
[Information]    Interview number 93 is to be continued
[Information]    Questionnaire base from project respondi will be used
[Information]    Retention period on page 19 has been 8 seconds
[Processing]    Reading answers from page 16+17+19
[Information]    Answer to IQ01_01 = 1
[Information]    Answer to IQ01_02 = 2 und
[Information]    Answer missing for IQ01_03
[Information]    Answer missing for IQ01_04
[Information]    67% of the questions have been answered so far
[Processing]    Create page 20 in questionnaire base
[Information]    value("IQ01_01") = 1
[Information]    value("IQ01_02") = "2 und"
[Information]    value("IQ01_03") = ""
[Information]    value("IQ01_04") = ""
debug()    Content: 0, 1


Wäre es Ihnen möglich, uns per Zoom oder Microsoft Teams auszutauschen? Ich kann mir vorstellen, dass wir dann schneller zum Ziel kommen würden.
> Wäre es Ihnen möglich, uns per Zoom oder Microsoft Teams auszutauschen?

Für Sie wäre das schneller. Aber Sie können gerne mal durchrechnen, wie viel Zeit es uns kostet, wenn wir jedem der 15.000 Projekte pro Jahr nur 5 Minuten per Zoom helfen. See the Point?

Wenn Sie schneller vorankommen möchten, dann versuchen Sie bitte als erstes den PHP-Code zu verstehen. Das ist am Anfang nicht trivial, aber wenn man sich ein wenig einarbeitet, auch nicht unlösbar :)

> For the function setPageOrder() an invalid parameter was specified. This parameter contains a value of type NULL.

Gut, darum kümmern wir uns im nächsten Schritt. Nur zur Sicherheit: Sie haben Ihren Test schon auf der Seite mit IQ01 begonnen, ja?

>  Reading answers from page 16+17+19

Sie scheinen da einige Seiten zu haben, die keine Azusgabe erzeugen (Seiten 16, 17 und 19). Das ist u.U. nicht schlimm aber evtl. auch icht ideal. Es sollte einen guten Grund dafür geben.

> [Information]    Answer missing for IQ01_03
> [Information]    Answer missing for IQ01_04

Haben Sie bei Ihrer offenen Texteingabe eine Ausweichoption?

> [Information]    value("IQ01_01") = 1
> [Information]    value("IQ01_02") = "2 und"

Das sieht eigentlich ganz gut aus. Sie hatten in die ersten beiden Textfelder etwas geschrieben, korrekt?

> Questionnaire Error: Undefined index: IQ01_02

Das bezieht sich auf diese Zeile:

> $seiten[] = $seitenIDs[$itemID];

Hier hatte ich die ID falsch gesetzt, korrekt ist nicht $itemID (die komplette Variablen-Kennung), sondern $i, die Zahl die im Array zu Beginn als Index angegeben ist. Also:

> $seiten[] = $seitenIDs[$i];

Ändern Sie außerdem schonmal das Ende und zwar wie folgt:

if (empty($seiten)) {
  setNextPage('done');
} else {
  setPageOrder($seiten, 'done');
}
Natürlich sehe ich den Punkt, ich dachte nur, dass es Ihnen in diesem Fall vielleicht Arbeit abnehmen würde und es für Sie schneller ginge.

>Gut, darum kümmern wir uns im nächsten Schritt. Nur zur Sicherheit: Sie haben Ihren Test schon auf der Seite mit IQ01 begonnen, ja?

Nein, ich habe den Test immer ein paar Seiten vorher begonnen.

> Sie scheinen da einige Seiten zu haben, die keine Azusgabe erzeugen (Seiten 16, 17 und 19). Das ist u.U. nicht schlimm aber evtl. auch icht ideal. Es sollte einen guten Grund dafür geben.

Das stimmt, Seite 16 ist eine Randomisierung / Manipulation. Seite 17 ist der Code für die Randomisierung / Manipulation. Seite 19 ist die Seite mit der Frage zu den Aktivitäten, also die Frage "IQ01". Hier sollte jedoch ein Output entstehen oder nicht? Seite 20 wäre ebenfalls leer bis auf den hier gemeinsam erarbeiteten PHP-Code.

> Haben Sie bei Ihrer offenen Texteingabe eine Ausweichoption?

Nein, es gibt keine Ausweichoption. Ich habe beim Test nur die ersten beiden Aktivitäts-Angaben ausgefüllt, um zu schauen, ob die Abfrage zur (nicht vorhandenen) Aktivität 3 und 4 auch erscheint oder nicht.

> Das sieht eigentlich ganz gut aus. Sie hatten in die ersten beiden Textfelder etwas geschrieben, korrekt?

Das stimmt :- )



--> Nun sieht es schon viel besser aus. Ich habe nochmals getestet, indem ich nochmals 2 Aktivitäten angegeben habe. Es sind im Anschluss nur diese Aktivitäten abgefragt worden.
Es erscheint nun aber auch die Meldung: "For the placeholder %aktivitaet1% neither an input field by prepare_input() has been created nor any content by using replace()."
Dies wiederholt sich für die anderen Aktivitäten (2-4). In der Anleitung habe ich keinen Hinweis auf "prepare_..." gefunden.
> Es erscheint nun aber auch die Meldung: "For the placeholder %aktivitaet1% neither an input field by prepare_input() has been created nor any content by using replace()."

Sie hatten weiter oben geschrieben, dass Sie keine Platzhalter benötigen. Es scheint aber so, als hätten Sie in einer Frage oder einem Item iregndwo den Platzhalter %aktivitaet1% verwendet?

Benötigen Sie den offen eingegebenen Text später irgendwo angezeigt? Dann müssen wir das replace() wieder ergänzen.
> Sie hatten weiter oben geschrieben, dass Sie keine Platzhalter benötigen. Es scheint aber so, als hätten Sie in einer Frage oder einem Item iregndwo den Platzhalter %aktivitaet1% verwendet?

Ach so, dann hatte ich mich missverständlich ausgedrückt: Ich benötige einen Platzhalter oberhalb der Items als Überschrift im Satz: "Ihre erste / zweite / dritte / vierte Aktivität lautete: Fussball, Tennis etc." Aber ich brauche innerhalb der anschliessenden Fragen (Diese Aktivität ist ...; Diese Aktivität macht ...) keine Platzhalter, sondern nur obenstehend über den Fragen, damit man überhaupt weiss, um welche Aktivität es nun geht.
Bitte entschuldigen Sie das Missverständnis.
Kein Problem, bauen Sie die folgende Zeile aus Ihrem ursprünglichen Code (s. oben) einfach wieder ein:

replace('%aktivitaet'.$i.'%', $antwort);
Alles klar, habe ich gemacht.
Es erscheint noch immer die Fehlermeldung, Bezug nehmend auf Seite 19: For the placeholder %aktivitaet1% neither an input field by prepare_input() has been created nor any content by using replace().

Seite 19 ist diejenige, wo die offene Eingabe der 1-4 Aktivitäten stattfindet.
> Seite 19 ist diejenige, wo die offene Eingabe der 1-4 Aktivitäten stattfindet.

Auf dieser Seite sollten Sie den Platzhalter noch nicht im Text verwenden. Bitte sehen Sie einmal nach, wo dieser Text %aktivitaet1% im Fragebogen auftaucht.
Sie haben natürlich Recht: Diesen hatte ich dort noch drin.
Es scheint nun alles zu funktionieren! Vielen Dank für Ihre Unterstützung und Geduld!
...