0 votes
in SoSci Survey (dt.) by s316873 (110 points)

Hallo.
Ich möchte im hinteren Teil meines Fragebogens folgendes Design erstellen.

Es werden randomisiert 7 Audiodateien. Insgesamt 5 Runden
Bei jeder Audiodatei gibt es drei Antwortmöglichkeiten:
Ja: Experiment wird abgeschlossen und zur Endseite geleitet
Nein: Audio wird nicht in die nächste Runde mitgenommen
Vielleicht: Audio wird in die nächste Runde mitgenommen

Sobald keine Audios mehr da sind -> Ende
Wenn zum Ende der 5. Runde noch Audios da sind wird es als Nein gewertet und auch -> Ende

Ich habe bereits erstellt:

Eine Seite -Anfang: Initialisierung
Seite - Runde1: Audio Datei wird angezeigt und die drei Buttons
Seite - Auswertung

Folgende Probleme treten auf:

Das Audio kann nicht abgespielt werden
Sobald man auf einen der drei Buttons drückt wird angezeigt dass meine Variablen nicht mehr definiert sind.

Leider habe ich sehr wenig Programmiererfahrung und bin etwas ratlos PHP und HTML miteinander kommunizieren zu lassen.

Vielleicht hat jemand von euch schon einmal etwas ähnliches gemacht?
Gerne kann ich auch den Code schicken.
Allerdings möchte ich gerne erst wissen, ob das Design wie oben überhaupt möglich ist.

Vielen Dank im Vorraus!

1 Answer

0 votes
by SoSci Survey (345k points)

Ich interpretiere Ihre Farge so, dass Sie die Reihenfolge der 7 Audiodateien rotieren und in jedem Interview alle 7 anzeigen.

Eine erste Herausforderung ist, dass Sie unterschiedliche Antworten zu den Audio-Files sammeln. Das heißt, Sie werden die 7 Fragen jeweils 5-mal brauchen, einmal pro Runde.

Für die Fragen würde ich über eine Skala mit 7 Items nachdenken, von denen Sie jeweils nur eines zeigen, und das in der Darstellungsvariante "Kärtchen". Dann müssen Sie nicht so viele Frage erstellen/verwalten.

Und dann ist es gar nicht so schwer: In Runde 1 müssen Sie sich lediglich um die Rotation kümmern. Ich empfehle hier einen Zufallsgenerator mit den Dateinamen der Audio-Files, das Sie dann via loopPage() abarbeiten.

In Runde 2 kommt dann ein Filter hinzu, welche prüft, ob in Runde 1 die Antwort "ja" oder "vielleicht" für das entsprechende Item ausgewählt wurde. Mittels id() und value() lässt sich das recht elegant auslesen. Aber Sie sollten sich die beiden Befehle und die Anleitung zu PHP-Filtern durchlesen, bevor wir hier weiter ins Detail gehen.

In Runde 3 können Sie den gleichen Filter wieder verwenden, nur, dass Sie hier dann die Antworten aus Runde 2 prüfen. Da werden Sie ein paar Warnungen bekommen, dass eine Variable in Runde 2 nicht (mehr) abgefragt wurde. Ein code:ifany blendet das dann aus. Aber um diese Feinheiten kümmern wir uns, wenn Sie soweit sind :)

by SoSci Survey (345k points)
>  wie ich die abbruchfunktion einbaue.

Das wird nur für das "Ja" notwendig sein (s. oben). Wenn aller erstmal ein "Nein" haben, wird der Filter einfach sehr viele Loop-Wiederholungen und Seiten überspringen.

> Ich hoffe ich kann dann später in der Auswertung sehen bei welchem Audio was eingegeben wird

Deshalb verwenden wir ja die Skala ;) Aber ja, es ist definitiv eine gute Idee, dass Sie sich mit den Daten vertraut machen, die in dem Procedere gespeichert werden. Nutzen Sie dafür auch den Debug-Modus, dann sehen Sie nach jedme Klick auf "Weiter" genau, was in welcher Variable gespeichert wird.
by s316873 (110 points)
ich habe jetzt folgenden Ablauf ab seite 14 (ich wdh das für 5 runden, immer mit neuem RG und RT:

14 zufallsgenerator
15 :
// Zähle von 0 bis 6 (insgesamt 7 Runden)
$i = loopPage(7);

// Lade Code (z. B. speaker2.mp3) und Label (z. B. Herr Birne) aus RG01
$var = id('RG01', $i + 1);
$nummer = value($var);   


$var = id('RG01', $i + 1);
$speakerData = value($var, 'csv');
$audio = $speakerData[0];
$name = $speakerData[1];
html($name);

// Zeige den Audioplayer mit Platzhalterersetzung

show('TX01', ['%audiofile%' => $audio]);

// Zeige nur ein Item aus der Skala (z. B. Zeile 3 in RT02)
question('RT02_' . $i, [$nummer]);

16: Zufallsgenerator2
17:
// Runde zählen (7 Runden insgesamt)
$i = loopPage(7);

// Hole die Zeilennummer (Position in RT02) für diese Runde aus RG04
$var = id('RG04', $i + 1);
$nummer = value($var);  // Zeile aus RT02 und RT04

// Prüfe Antwort aus Runde 1 (RT02) an Position $nummer
$antwortVorher = value(id('RT02', $nummer), 'code');

// Wenn in Runde 1 "Ja" (1) → direkt zum Ende
if ($antwortVorher == 1) {
    goToPage('end');
}

// Wenn in Runde 1 "Nein" (3) → überspringen
if ($antwortVorher == 3) {
    goToPage('next');
}

// Wenn "Vielleicht" → zeige Audio und Frage
if ($antwortVorher == 2) {
    // Audiodaten laden
    $speakerData = value($var, 'csv');
    $audio = $speakerData[0];
    $name = $speakerData[1];

    // Optional: Name anzeigen
    html('<p><strong>' . $name . '</strong></p>');

    // Audio zeigen
    show('TX01', ['%audiofile%' => $audio]);

    // Frage RT06 anzeigen
    question('RT04_' . $i, [$nummer]);
}


wenn ich jetzt in runde 1 vielleicjt drücke und sonst nur nein, dann kommt später die Fehlermeldung :

Fehler im Fragebogen (Seite 17)
Dieses Interview versuchte, auf Seite Nr. 17 (Kennung Runde2) zu springen, die bei der Ausgabe der aktuellen Darstellung bereits verarbeitet wurde. Bitte überprüfen Sie, ob goToPage() eine Schleife erzeugt.


Hier die Debug Infos:

ung]    Lese Antworten von Seite 15
[Information]    Antwort auf RT02_07 = 3
[Information]    Fragen bisher zu 100% vollständig beantwortet
[Verarbeitung]    Erstelle Seite 16 in Fragebogen sociodemographics
[Inhalt]    Erstelle Frage RG04
[Information]    Vom Zufallsgenerator RG04 wurden folgende Codes gezogen: 4, 7, 5, 1, 2, 3, 6
[Information]    Die Seite zeigt keine Inhalte, automatisch weiter mit Seite Nr. 17
[Verarbeitung]    Erstelle Seite 17 in Fragebogen sociodemographics
[Information]    loopPage() wiederholt die Seite 17 nun 7 mal, beginnend mit dem Wert 0
[Information]    value("RG04x01") = 4
[Information]    value("RT02_04") = 3
[Information]    Springe zur nächsten Seite Nr. 17
[Verarbeitung]    Erstelle Seite 17 in Fragebogen sociodemographics
by SoSci Survey (345k points)
Bitte platzieren Sie den Zufallsgenerator nicht auf einer separaten Seite, sondern direkt oben auf der Seite mit dem loopPage().

Möchten Sie die Reihenfolge der Audio-Files eigentlich in jeder Runde neu mischen? Oder werden neue Namen zugeordnet? Wenn nicht, dann würden Sie nämlich immer denselben Zufallsgenerator verwenden.
by s316873 (110 points)
Hallo ich hab es fast geschafft. Ich prüfe jetzt nur noch ja und Nein und gehe bei nein, einfach weiter und dann nach einer zwischenfrage ( möchten Sie Audios nochmal hören oder war Sprecher x nicht dabei?) in eine neue Runde und spiele wieder alle 7 Audios.

Es ist so, dass es bei "Ja" Eingabe funktioniert zur end page zu gehen, auch direkt beim 1. Audio. Allerdings nicht wenn es im 7. loop also wenn man das 7. audio, das letzte in der Runde als ja anklickt. Das kann es nicht speichern und nicht drauf zugreifen. Es geht dann einfach weiter zur nächsten Seite. Irgendwelche Tipps?


Mein code sieht so aus:

// Zähle von 1 bis 7 (sichtbare Runden)
$i = loopPage(1, 7, 1); // Schleife von 1 bis 7

// Lade Code (z. B. speaker2.mp3) und Label (z. B. Herr Birne) aus RG01
$var = id('RG01', $i);

// nummer is id in RT02
$nummer = value($var);   
$speakerData = value($var, 'csv');

// Hol die Audio- und Namensdaten
$audio = $speakerData[0];
$name = $speakerData[1];

html($name);  // Zeige den Namen des Speakers

// Zeige den Audioplayer mit Platzhalterersetzung
show('TX01', ['%audiofile%' => $audio]);

// Zeige nur ein Item aus der Skala (z. B. Zeile 3 in RT02)
question('RT02_' .$i, [$nummer]);

// Prüfe die Antwort aus der vorherigen Runde, wenn $i > 1
if ($i > 1) {

    // Hole die Antwort aus der vorherigen Runde, da die Fragen mit den Speaker-Nummern verbunden sind
    $answer_id = value(id('RG01', $i - 1));
    $antwortVorher = value(id('RT02', $answer_id), 'code');
    
    // Wenn "Ja" (Antwort == 1) gewählt wurde, gehe zur Endseite
    if ($antwortVorher == 1) {
        // Hol die Daten des Speakers aus der vorherigen Runde
        $speakerDataPrev = value(id('RG01', $i - 1), 'csv');
        $audioVorher = $speakerDataPrev[1];
        put('IT01_01', $audioVorher);  // Wird in Rohdaten erscheinen

        goToPage('end');  // Gehe zur Endseite
    }
    
    // Wenn "Nein" (Antwort == 3) gewählt wurde, bleibe auf der Seite
    if ($antwortVorher == 3){
        return;
    }
}

Wäre super lieb wenn hier jemand eine Lösung hat. Sonst funktioniert nämlich alles. LG
by SoSci Survey (345k points)
> Allerdings nicht wenn es im 7. loop also wenn man das 7. audio, das letzte in der Runde als ja anklickt.

Sie haben den Code mit den Filtern aktuell oben im PHP-Code mit untergebracht?

> // Hole die Antwort aus der vorherigen Runde

Ich würde empfehlen, dass Sie den entsprechenden Code unten bei der Funktion "Antworten mittels PHP-Code prüfen" unterbringen. Denn dann wird direkt nach dem "Weiter" geprüft und SoSci Survey springt oder eben nicht. Damit umgehen Sie das Problem, dass nach dem 7-ten Audio-File kein weitere Wiederholung mit entsprechender Prüfung kommt.

Alternativer Workaround: Lassen Sie loopPage() nicht bis 7 sondern bis 8 zählen. Bei der 8-ten Runde überspringen Sie das Audio immer.

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

...