0 votes
ago 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
ago by SoSci Survey (340k 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 :)

ago by s316873 (110 points)
Hallo. Vielen Danke für die Antwort.

Allerdings möchte ich dass nicht in jeder Runde alle 7 Audios angezeigt werden.

Denn wenn auf Nein geklickt wird, fällt dieses Audio in der nächsten Runde raus und wenn auf vielleicht geklickt wird, wird es in der nächsten Runde wieder angezeigt.
Sobald auf Ja geklickt wird geht es nicht mehr weiter.
Das heißt die 5 Runden werden nur komplett durchsangen wenn nie auf ja geklickt wird.

Zur Vereinfachung vom Verständnis.
Von den 7 Audios soll eines wiedererkannt werden. Dies wird durch diesen Ausbau gewährleistet. So kann man sich die Audios wo man sich nicht sicher ist nochmal anhören.
Es soll geschaut werden in wie viel Runden eine Entscheidung getroffen wurde.

LG

Ich kann auch gerne meinen bisherigen Code schicken.
Allerdings weiß ich nicht ob sich dieses Format hier im Forum eignet.

Danke im Vorraus!
ago by s316873 (110 points)
Hallo. Vielen Danke für die Antwort.

Allerdings möchte ich dass nicht in jeder Runde alle 7 Audios angezeigt werden.

Denn wenn auf Nein geklickt wird, fällt dieses Audio in der nächsten Runde raus und wenn auf vielleicht geklickt wird, wird es in der nächsten Runde wieder angezeigt.
Sobald auf Ja geklickt wird geht es nicht mehr weiter.
Das heißt die 5 Runden werden nur komplett durchgegangen wenn nie auf ja geklickt wird.

Zur Vereinfachung vom Verständnis.
Von den 7 Audios soll eines wiedererkannt werden. Dies wird durch diesen Ausbau gewährleistet. So kann man sich die Audios wo man sich nicht sicher ist nochmal anhören.
Es soll geschaut werden in wie viel Runden eine Entscheidung getroffen wurde.

LG

Ich kann auch gerne meinen bisherigen Code schicken.
Allerdings weiß ich nicht ob sich dieses Format hier im Forum eignet.

Danke im Vorraus!
ago by s316873 (110 points)
Seite 10( Beginn dieses teils des Fragebogens): Initialisierung

PHP Code
 if (!isset($speakers)) {
  $all = ['audio1','audio2','audio3','audio4','audio5','audio6','audio7'];  // deine Audios
  shuffle($all);
  registerVariable('speakers', implode(',', $all));
  registerVariable('round', 1);
  registerVariable('finished', 0);
}


Seite 11 (runde)

PHP

if (!isset($speakers)) $speakers = '';
if (!isset($round)) $round = 1;
if (!isset($finished)) $finished = 0;

// Platzhalter ersetzen
replace('%speakers%', $speakers);
replace('%round%', $round);
replace('%finished%', $finished);

return 'ok';

HTML:

<script>
// Hole die Variablen
let speakers = '%speakers%'.split(',');  // Die Liste der Audios
let round = parseInt('%round%');  // Aktuelle Runde
let finished = parseInt('%finished%');  // Status, ob das Experiment abgeschlossen ist

// Wenn das Experiment abgeschlossen ist oder alle Runden durch sind, leite zur Endseite weiter
if (finished === 1 || round > 5 || speakers.length === 0) {
    SoSciTools.submitPage();  // Weiter zur Endseite
}

// Wähle zufällig einen Sprecher (Audio) aus
let index = Math.floor(Math.random() * speakers.length);
let speaker = speakers[index];

// Debugging: Prüfe, ob die Variablen korrekt geladen wurden
console.log('Sprecher:', speaker);
console.log('Runde:', round);

// Füge den Audio-Player zum Dokument hinzu
document.write('<h3>Runde ' + round + '</h3>');
document.write('<audio controls src="media/' + speaker + '.mp3"></audio><br><br>');


// Füge den Audio-Player zum Dokument hinzu
document.body.appendChild(audioElement);

// Erstelle einen Button, der das Audio abspielt
let playButton = document.createElement('button');
playButton.textContent = "Audio abspielen";
playButton.onclick = function() {
    audioElement.play();
};

// Füge den Button ebenfalls zum Dokument hinzu
document.body.appendChild(playButton);

// Buttons für die Antworten
function send(response) {
    let newSpeakers = [...speakers];  // Kopiere die Liste der Sprecher

    if (response === 'yes') {
        SoSciTools.sendValue('finished', 1);  // Experiment abschließen
    } else if (response === 'no') {
        newSpeakers.splice(index, 1);  // Entferne den Sprecher aus der Liste
        SoSciTools.sendValue('speakers', newSpeakers.join(','));
    } else if (response === 'maybe') {
        SoSciTools.sendValue('speakers', newSpeakers.join(','));  // Behalte den Sprecher
    }

    SoSciTools.sendValue('round', round + 1);  // Erhöhe die Runde
    SoSciTools.submitPage();  // Gehe zur nächsten Seite
}

// Buttons für die Antworten
document.write('<button onclick="send(\'yes\')">Das ist Sprecher X</button> ');
document.write('<button onclick="send(\'no\')">Das ist er nicht</button> ');
document.write('<button onclick="send(\'maybe\')">Bin mir nicht sicher</button>');
</script>


Bis hierhin kwird mir dann nur ein Button 'weiter' angezeigt, und beim Audioplayer ' Fehler'

Seite12 Auswertung

HTML:

<script>
// Hole die Variablen
let speakers = '%speakers%'.split(',');  // Die Liste der Audios
let round = parseInt('%round%');  // Aktuelle Runde
let finished = parseInt('%finished%');  // Status


PHP:

$speakers = explode(',', $speakers);
$nextRound = [];

foreach ($speakers as $speaker) {
  $antwort = value($speaker);  // Eingabe aus JavaScript abrufen

  if ($antwort == 'Das ist Sprecher X') {
    goToPage('end');  // Erfolg: Direkt zum Ende
  } elseif ($antwort == 'Bin mir nicht sicher') {
    $nextRound[] = $speaker;
  }
}

// Aktuelle Runde erhöhen
$round++;  // $round kommt aus den gespeicherten Variablen

if ($round > 5 || count($nextRound) == 0) {
  put('finished', 1);
  goToPage('end');
} else {
  shuffle($nextRound);
  put('speakers', implode(',', $nextRound));
  put('round', $round);
  goToPage('next_round');
}
html('...');


Vielleicht hilft das weiter?
LG
ago by s316873 (110 points)
Ich habe die externen variablen speakers, round, und finished angelegt. Sie müssten IV01_1, IV01_2 und IV01_3 heißen. Ebenfalls habe ich die audios passend in speaker1.mp3 umbenannt und erneut hochgeladen.
ago by SoSci Survey (340k points)
> Allerdings möchte ich dass nicht in jeder Runde alle 7 Audios angezeigt werden.

Das hatte ich so verstanden. Entsprechend habe ich empfohlen, dass Sie per PHP-Filter nur jeweils die anzeigen, die in der vorigen Runde mit "Ja" oder "Vielleicht" bewertet wurden.

> // Aktuelle Runde erhöhen
> $round++;  // $round kommt aus den gespeicherten Variablen

Ich würde in Ihrem Fall davon abraten, dass Sie die Runde mit einer Variable durchzählen. Wie oben schon geschrieben, geraten Sie dann schnell in die Problematik, dass Sie dieselbe Frage in mehreren Runden verwenden und die in vorigen Runden gespeicherten Antworten dadurch verloren gehen.

Ich erachte im beschriebenen Fall auch die JavaScript-Implementierung für nicht so ganz zielführend - denn dann müssen Sie zwei Mechanismen koordinieren, die auf unterschiedlichen Ebenen ihre Schleifen verwenden.

Also ja, man könnte es auch auf dem Weg versuchen, den Sie skizzieren - aber da müssten Sie m.E. noch ganz schön viel JabaScript programmieren. Die Lösung, die ich oben in meiner Antwort vorgeschlagen habe, kommt ohne JavaScript aus und wäre ziemlich robust (z.B. auch in Hinblick auf Menschen, welche die Seite im Browser mal mit F5 neu laden).
ago by s316873 (110 points)
Hallo. Super ich würde es gerne so machen., wie Sie es vorschlagen, allerdings finde ich leider keinen Anfang, also wie erstelle ich das so wie Sie es sagen?  
LG
ago by s316873 (110 points)
ich habe nun eine skala erstellt. Hier sind links die 7 Audios mit Namen. und rechts 3 Kärtchen, Ja, Nein, Vielleicht.
ago by s316873 (110 points)
reshown ago by s316873
Allerdings komme ich jetzt nicht weiter:

Wie zeige ich immer nur eins an?

Wie binde ich die Audios hier ein?

Wie erstelle ich mein Rundenformat?

Wo füge ich den Filter ein?

Es tut mir leid, dass ich so viele Fragen habe.
ago by SoSci Survey (340k points)
> Wie erstelle ich mein Rundenformat?

Ich habe das hier mal ausgesucht, um zu starten. Wir brauchen erstmal in jeder Runde 7 Wiederholungen für die 7 Audiodateien. Die bekommen Sie mit

$i = loopPage(7);

Die Variable $i zählt nun hoch von 0 bis 6. Dazu passend holen wir jetzt die Werte aus de Zufallsgenerator mit den 7 Audio-Dateien. Wenn der bei Ihnen RG01 heißt und Sie dort eingestellt haben, dass wir pro Interview 7 Codes ziehen möchten, geht es wie folgt weiter:

$var = id('RG01', $i+1);
$audio = value($var, 'label');
$nummer = value($var);

Jetzt haben wir in $audio den Dateinamen des Audio-Files und in $nummer die Nummer zwischen 1 und 7 - die sagt uns, welche Zeile aus der Skala wird anzeigen.

Sie brauchen jetzt einen "Text" im Fragenkatalog mit dem HTML-Code zum EInbinden eines Audio-Files (s. Anleitung) ...

<audio id="audio03" controls controlsList="nodownload" style="position: absolute; left: -9999px; top: -9999px">
  <source src="%audiofile%" type="audio/mpeg" />
</audio>

... und den zeigen Sie mit der passenden Audiodatei an:

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

Dazu noch die Frage bzw. die passende Zeile daraus:

question('RT01', [$nummer]);

Probieren Sie das bitte mal soweit und berichten Sie, was funktioniert und wo es noch klemmt.
ago by s316873 (110 points)
Danke. Ich probiere das dann mal.

Der Zufallsgernerator: erstelle ich den mit Php oder als urnensystem in Soci Survey

Danke nochmals
Ich setzte mich heute Abend nochmal dran.

LG
ago by SoSci Survey (340k points)
Der Zufallsgenerator legen Sie einfach wie eine Frage im Fragenkatalog an.
ago by s316873 (110 points)
Hallo. Soweit hat es geklappt. ich habe einen Zufallsgenerator RG01 und eine Skala RT02. Im zufallsgenerator sind audio1-7 mit den labels 'Herr Frucht'. Das wird mir auch angezeigt, ebenso wird mir nur ein Item der Skala angezeigt. Allerings spielt sich mein audio nicht ab. die audios heißen. speaker1.mp3 etc.

Aufbau

Seite Zufall:

 - Zufallsgenerator
 - goToPage('Runde');

Seite Runde:

 -PHP:
// 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);
$speaker = value($var, 'label');           // speakerX.mp3 (Laden des Audio-Dateinamens)
 // Sprechername (z. B. Herr Pfirsich)
$nummer = value($var);          // Nummer zwischen 1–7

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



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

Wie fahre ich denn fort?
ich kann die Buttons ja mit filtern belegen. Allerings muss sich die page in runde 1 ja 7 mal laden und dann wird es erst wichtig was button 'nein' und 'vielleicht' ausgelöst haben.

Vielen lieben dank für die Hilfe bisher!
ago by s316873 (110 points)
Ich habe das hier versucht. Allerdings gibt es bei egal welchem Filter versuch immer an : RT02_01 gibt es nicht etc.

$antwort = value('RT02_' . $i);

// Prüfung: Bei JA -> direkt beenden
if ($antwort == 1) {
    goToPage('end');
}

// Vielleicht-Antworten zwischenspeichern
if ($antwort == 2) {
    // Bestehende Liste laden (Textvariable VV01 z. B. speaker1.mp3;speaker2.mp3)
    $maybeList = value('VV01');

    // Aktuelles Audio anhängen mit Semikolon als Trenner
    if ($maybeList == '') {
        $maybeList = $audio;
    } else {
        $maybeList = $maybeList . ';' . $audio;
    }

    // Speichern
    put('VV01', $maybeList);
}
ago by SoSci Survey (340k points)
> RT02_01 gibt es nicht etc.

Wie heißt denn Ihre Skala (ja/nein/vielleicht) mit den 7 Items für die 7 Videos?

$antwort = value('RT02_' . $i);

Das würde ich empfehlen durch

$antwort = value(id('RT02', $i));

zu ersetzen, weil die Variable nicht RT02_1 heißt, sondern RT02_01.
ago by s316873 (110 points)
Ja genau die Skala heißt Ja / Vielleicht / Nein.

Bei ja soll das experiment gespeichert und beendet werden.
bei nein soll das audio nicht mehr in der nächsten runde angegeben werden.
bei vieleicht solle es in der nächsten runde angzeigt werden.
wenn nach 5 runden keine eindeutige entscheidung getroffen wurde und noch audios das sind, wird experiment beendet und markiert als " keine auswahl getroffen"

ich habe das oben versucht und bekomme error:

 Die Funktion id() erwartet als Parameter Nr. 2 einen Wert vom Typ integer > 0. Es wurde ein Wert (0) vom Typ integer angegeben.

Lg
ago by s316873 (110 points)
Zum Thema Audios.

Mir wird erfolgreich immer ein anderer " herr Frucht" angezeigt, also da klappt der zufallsgenerator. Allerdings wird immer das gleiche Audio abgespielt. Kann ich das umgehen indem ich die dateien im Zufallsgenerator umbenenne? es ist wichtig dass das Zufallsaudio immer mit dem richtigen Namen korreliert. LG
ago by SoSci Survey (340k points)
>  Die Funktion id() erwartet als Parameter Nr. 2 einen Wert vom Typ integer > 0. Es wurde ein Wert (0) vom Typ integer angegeben.

Falls $i der Wert ist, den Sie von loopPage() bekommen, verwenden Sie bitte $i + 1.

> Ja genau die Skala heißt Ja / Vielleicht / Nein.

Und wie lautet die 4-stellige Kennung der Skala?

>  Allerdings wird immer das gleiche Audio abgespielt.

Wie sieht denn Ihr HTML- und PHP-Code zur Einbindung des Audio aus?
ago by s316873 (110 points)
TX01 ist so angelegt :
<audio id="audio_with_controls" preload="auto" autoplay controls controlsList="nodownload">
  <source src="speaker1.mp3" type="audio/mpeg" />
  <source src="speaker2.mp3" type="audio/mpeg" />
  <source src="speaker3.mp3" type="audio/mpeg" />
  <source src="speaker4.mp3" type="audio/mpeg" />
  <source src="speaker5.mp3" type="audio/mpeg" />
  <source src="speaker6.mp3" type="audio/mpeg" />
  <source src="speaker7.mp3" type="audio/mpeg" />
  Ihr Browser kann diese Audio-Datei leider nicht abspielen
</audio>
</audio>
ago by s316873 (110 points)
$antwort = value(id('RT02', $i + 1));

Warnung (Seite 14)
Die Variable RT02_01 wurde im Laufe dieses Interviews auf keiner vorhergehenden Seite abgefragt. Daher kann die Funktion value() keinen Antwort-Wert ermitteln.

>Und wie lautet die 4-stellige Kennung der Skala? -> RT02

> Wie sieht denn Ihr HTML- und PHP-Code zur Einbindung des Audio aus?

also der html code ist in TX01, habe hier nichts im Zufallsgenerator direkt weil es sich sonst doppelt das audio auf der seite


<audio id="audio_with_controls" preload="auto" autoplay controls controlsList="nodownload">
  <source src="speaker1.mp3" type="audio/mpeg" />
  <source src="speaker2.mp3" type="audio/mpeg" />
  <source src="speaker3.mp3" type="audio/mpeg" />
  <source src="speaker4.mp3" type="audio/mpeg" />
  <source src="speaker5.mp3" type="audio/mpeg" />
  <source src="speaker6.mp3" type="audio/mpeg" />
  <source src="speaker7.mp3" type="audio/mpeg" />
  Ihr Browser kann diese Audio-Datei leider nicht abspielen
</audio>
ago by SoSci Survey (340k points)
TX01 müsste so aussehen:

<audio id="audio03" controls controlsList="nodownload">
  <source src="%audiofile%" type="audio/mpeg" />
</audio>

Also nur ein <source>, nur ein <audio> und wie die Datei heißt, wird dann per Platzhalter eingefügt (s. oben).

> habe hier nichts im Zufallsgenerator direkt

Gut, das ist korrekt so.
ago by s316873 (110 points)
ich habe die skala RT02 auch jede reihe benannt mit herr Frucht etc vielleicht ist das der fehler
ago by s316873 (110 points)
>TX01 müsste so aussehen:

jetzt läd das audio unendlich
ago by SoSci Survey (340k points)
Dann würde ich sagen, wird noch nicht der korrekte Dateiname eingesetzt.

Erstellen und posten Sie gerne mal einen Pretest-Link direkt zur betroffenen Seite. Und teilen Sie bitte auch mit, wie Ihr PHP-Code aussieht, der TX01 einbindet und was die Debug-Information auf der Seite sagt.
ago by s316873 (110 points)
seite 11

Zufallsgenerator

php
go to page Runde -> Seite12

Seite 12

php

// 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);
$speaker = value($var, 'label');           // speakerX.mp3 (Laden des Audio-Dateinamens)
 // Sprechername (z. B. Herr Pfirsich)
$nummer = value($var);          // Nummer zwischen 1–7

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



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

$antwort = value(id('RT02', $i + 1));;

// Prüfung: Bei JA -> direkt beenden
if ($antwort == 1) {
    goToPage('end');
}

// Vielleicht-Antworten zwischenspeichern
if ($antwort == 2) {
    // Bestehende Liste laden (Textvariable VV01 z. B. speaker1.mp3;speaker2.mp3)
    $maybeList = value('VV01');

    // Aktuelles Audio anhängen mit Semikolon als Trenner
    if ($maybeList == '') {
        $maybeList = $audio;
    } else {
        $maybeList = $maybeList . ';' . $audio;
    }

    // Speichern
    put('VV01', $maybeList);
}


pretest link

https://www.soscisurvey.de/ohrenzeugen-leseil/?act=Ucy8Au06QmIHnA5dujhqlZLF
ago by SoSci Survey (340k points)
Danke für den Pretest-Link. Wenn Sie sich den Quellcode der Seite im Browser ansehen, steht da für den Audio-Player:

<source src="speaker5.mp3   Herr Orange" type="audio/mpeg">

Offenbar steht da im Zufallsgenerator noch etwas anderes als nur der Dateiname.

Nur zur Sicherheit: Sie haben in RG01 eingestellt, dass der Zufallsgenerator 7 Zettel pro Interview zieht?
ago by s316873 (110 points)
seite 12

Fehler
Die Variable RT02_01 wurde im Laufe dieses Interviews auf keiner vorhergehenden Seite abgefragt. Daher kann die Funktion value() keinen Antwort-Wert ermitteln.

drücke auf ja und dann weiter :

Fehler im Fragebogen (Seite 12)
In der Funktion id() wurde auf Variablen des Elements RG01 verwiesen. Dieses Element hat keine Variable(n) Nr. 2
Fehler im Fragebogen (Seite 12)
Für die Funktion value() wurde anstatt einer Frage- oder Item-Kennung ein Parameter vom Typ NULL angegeben:
Fehler im Fragebogen (Seite 12)
Für die Funktion value() wurde anstatt einer Frage- oder Item-Kennung ein Parameter vom Typ NULL angegeben:

Die Variable RT02_02 wurde im Laufe dieses Interviews auf keiner vorhergehenden Seite abgefragt. Daher kann die Funktion value() keinen Antwort-Wert ermitteln.

auch wird dann zwar die nächste skala angezeigt aber nicht merh Ja / Nein / Vielleicht
ago by s316873 (110 points)
Ja ich habe eingeben

Dateiname | Herr orange etc.

das ist falsch?

wie binde ich den namen sonst ein dass er zum audio passt?
ago by s316873 (110 points)
Jetzt geht es mit den audios. leider muss ich die Namen zum passenden audio anzeigen.

Wenn ich jetzt auf nein drücke und weiter kommt das nächste zufällige audio korrekt mit der Auswahl J/N/Vl
ago by SoSci Survey (340k points)
edited ago by SoSci Survey
> Dateiname | Herr orange etc.

Nun, Sie müssen das im Code dann zumindest auch entsprechend umsetzen. Das heißt, Sie müssen den Wert, den Sie aus dem Zufallsgenerator ziehen anhand des Pipe-Symbols zerlegen:

$var = id('RG01', $i + 1);
$speakerRaw = value($var, 'label');
$speakerData = preg_split('/\\s*\\|\\s*/', $speakerRaw);
$audio = $speakerData[0];
$name = $speakerData[1];

So oder so ähnlich und unten dann natürlich

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

> In der Funktion id() wurde auf Variablen des Elements RG01 verwiesen. Dieses Element hat keine Variable(n) Nr. 2

Was wird denn im Variablen-Karteireiter von RG01 angezeigt? Falls dort nur eine Variable steht (worauf die Fehlermeldung hinweist), dann prüfen Sie nochmal, was für die Anzahl der Ziehungen pro Interview eingestellt ist in der Frage.
ago by s316873 (110 points)
RT02 variablen
1 = Ja
2 = Vielleicht
3 = Nein
-9 = nicht beantwortet


RG01 Variablen:

1 = speaker1.mp3
2 = speaker2.mp3
3 = speaker3.mp3
4 = speaker4.mp3
5 = speaker5.mp3
6 = speaker6.mp3
7 = speaker7.mp3
ago by s316873 (110 points)
eingestellt sind 7 ziehungen per frage
ago by s316873 (110 points)
wenn ich speaker1.mp3 | herr orange eingebe dann verschwindet das  |
geht Ihre Version dann trotzdem?
ago by SoSci Survey (340k points)
> wenn ich speaker1.mp3 | herr orange eingebe dann verschwindet das  |
> geht Ihre Version dann trotzdem?

Verwenden Sie bitte ein Komma und vereinfachen Sie den oben empfohlenen Code wie folgt:

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

> RT02 variablen
> 1 = Ja

Welchen Fragetyp haben Sie denn für RT02 eingestellt? Das sieht nicht an einer "Skala (Zwischenwerte beschriftet)" aus?!
ago by s316873 (110 points)
Funktioniert:

wird nur noch das nagezeigt

Die Variable RT02_01 wurde im Laufe dieses Interviews auf keiner vorhergehenden Seite abgefragt. Daher kann die Funktion value() keinen Antwort-Wert ermitteln.
ago by s316873 (110 points)
Skala zwischenwerte beschriftet:

Variablen


RT02_01undefined Ist das Sprecher X?
RT02_02undefined Ist das Sprecher X?
RT02_03undefined Ist das Sprecher X?
RT02_04undefined Ist das Sprecher X?
RT02_05undefined Ist das Sprecher X?
RT02_06undefined Ist das Sprecher X?
RT02_07undefined Ist das Sprecher X?
1 = Ja
2 = Vielleicht
3 = Nein
-9 = nicht beantwortet


denke hier liehgt der fehler?
ago by SoSci Survey (340k points)
> Die Variable RT02_01 wurde im Laufe dieses Interviews auf keiner vorhergehenden Seite abgefragt. Daher kann die Funktion value() keinen Antwort-Wert ermitteln.

In der ersten Runde brauchen Sie ja noch keinen Filter. Das heißt, den IF-Filter benötigen Sie erst ab Runde 2. Um die Warnung auszublenden, würden Sie in Runde 2 noch das oben erwähnte code:ifany ergänzen:

$antwort = value(id('RT02', $i + 1), 'code:ifany');

Runde 2 muss sich dabei auf die Antworten aus Runde 1 beziehen. In Runde 2 wird dann eine neue Kopie von RT02 verwendet (z.B. RG03) und Runde 3 bezieht sich dann auf diese Antworten.
ago by s316873 (110 points)
okay also kann man erst in runde zwei abfragen welche buttons gedrückt wurden?

das heißt ich schreibe dass bei der neuen Seite ( RT03, RG03) in php


$antwort = value(id('RT02', $i + 1),'code:ifany' );;

// Prüfung: Bei JA -> direkt beenden
if ($antwort == 1) {
    goToPage('end');
}

// Vielleicht-Antworten zwischenspeichern
if ($antwort == 2) {
    // Bestehende Liste laden (Textvariable VV01 z. B. speaker1.mp3;speaker2.mp3)
    $maybeList = value('VV01');

    // Aktuelles Audio anhängen mit Semikolon als Trenner
    if ($maybeList == '') {
        $maybeList = $audio;
    } else {
        $maybeList = $maybeList . ';' . $audio;
    }

    // Speichern
    put('VV01', $maybeList);
}


?

und oben kommt genau das gleiche nur mit den richtigen RG03 etc beschriftet?

brauch ich auch einen neuen TX01?
ago by s316873 (110 points)
außerdem muss ich ja trotzdem in der ersten runde bei ja abbrechen, wie mach ich das?
ago by s316873 (110 points)
jetzt ist es so dass sich jach dem loop 7, die seiten einfach fortsetzen bis ins unendliche
ago by s316873 (110 points)
Code von runde 2:

// 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('RG04', $i + 1);
$nummer = value($var);   


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

// Zeige den Audioplayer mit Platzhalterersetzung

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

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


$antwort = value(id('RT02', $i + 1), 'code:ifany');

// Prüfung: Bei JA -> direkt beenden
if ($antwort == 1) {
    goToPage('end');
}

// Vielleicht-Antworten zwischenspeichern
if ($antwort == 2) {
    // Bestehende Liste laden (Textvariable VV01 z. B. speaker1.mp3;speaker2.mp3)
    $maybeList = value('VV01');

    // Aktuelles Audio anhängen mit Semikolon als Trenner
    if ($maybeList == '') {
        $maybeList = $audio;
    } else {
        $maybeList = $maybeList . ';' . $audio;
    }

    // Speichern
    put('VV01', $maybeList);
}
ago by s316873 (110 points)
Okay loop ist gelöst. Wie greife ich auf die antworten von vorher zu um dann in runde zwei die richtigen videos anzuzeigen?
ago by SoSci Survey (340k points)
> brauch ich auch einen neuen TX01?

Nein, das ist da nur der HTML-Code zur Anzeige eines (beleibigen) Audio-Files.

> außerdem muss ich ja trotzdem in der ersten runde bei ja abbrechen, wie mach ich das?

Dafür geben Sie unten bei "Verarbeitung der Antworten mittels PHP" einen PHP-Filter ein. Wenn Sie die Fragen oben wie folgt anzeigen...

question('RT02', [$nummer]);

... dann könnte es unten z.B. wie folgt aussehen:

$i = loopIndex();
$var = id('RG04', $i + 1);
$nummer = value($var);   

if (value(id('RT02', $nummer)) == 1) {
    goToPage('end');
}
ago by s316873 (110 points)
Super danke.

Wie kann ich denn jetzt sicherstellen dass in Runde 2 nur die Audios angezeigt werden die mit Vielleicht angekreuzt wurden?

LG
ago by SoSci Survey (340k points)
Dafür setzen Sie einen Filter an den Anfang der Seite.

$i = loopPage(7);
$var = id('RG04', $i + 1);
$nummer = value($var);   

Soweit wie gehabt und dann

if (value(id('RT02', $nummer)) == 3) {
  goToPage('next');
}

Darunter geht es dann normal weiter. Nur dass Sie in Runde 2 eine frische Kopie der RT02-Frage verwenden.
ago by s316873 (110 points)
Oke dann mach ich das mal so.

Dann muss ich nur noch schauen wie ich die abbruchfunktion einbaue. Also wenn es keine Audios mehr gibt oder nur Nein gedrückt wurde oder nach 5 Runden automatisch.

Ich hoffe ich kann dann später in der Auswertung sehen bei welchem Audio was eingegeben wird und wie viele Runden benutzt wurden.

Danke!
ago by s316873 (110 points)
Hallo ich habe das mit dem ja Filter umgesetzt. Allerdings erlaubt SociSurvey ja nicht den Filter auf die gleiche Seite zu setzen.

Direkt in der ersten Runde muss aber sobald ja gedrückt wird abgebrochen werden. Damit keine doppelte Ja Eingabe möglich ist.

Wenn ich die Bedingung erst auf der nächsten Seite prüfe dann wurden ja bereits 7 Eingaben getätigt und es könnte zu einem doppelten ja kommen. haben sie da eine idee? LG
ago by SoSci Survey (340k 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.
ago 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
ago by SoSci Survey (340k 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.

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

...