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

Ich habe einen Zufallsgenerator eingebaut, der am Ende die nächste Seite mit "setnextpage" anhand einer ID auswählt. Die ID wird korrekt ermittelt (habe ich mir ausgeben lassen), aber einmal pro Fragebogen überspringt er eine Frage - wirklich nur exakt einmal pro Fragebogen. Es passiert nicht jedes Mal (manchmal geht er alles durch) und immer an verschiedenen Stellen. Wenn ich mir die Antworten anzeigen lasse, sind alle Fragen angezeigt, aber diese eine Frage wird ohne Antworten dargestellt. Fragen ohne Antworten sind aber gar nicht zugelassen.

Ich bin etwas ratlos.

in SoSci Survey (dt.) by s194680 (110 points)
Bitte posten Sie doch mal den kompletten PHP-Code den Sie verwenden.

Für die Fehlersuche starten Sie den Fragebogen mal im Debug-Modus und verfolgen Sie die Debug-Information.

Welche Inhalte/Zettel genau haben Sie in den Zufallsgenerator gelegt und wie viele davon ziehen Sie pro Interview?
Das ist der PHP-Code:

//Dauerhaft
if(count($objQuest) == 0 && count($subQuest) == 0){
    setNextPage($firstNotRandomQuest);
    $questArt = 500;
}elseif(count($objQuest) == 0 && count($subQuest) > 0){
    $questArt = 99;
}elseif(count($objQuest) > 0 && count($subQuest) == 0){
    $questArt = 1;
}else{
    $questArt = random(1,2);
    if($questArt == 2){
        $questArt = 99;
    }
}



if($questArt == 1){
    //Objektiv
    $frageart = "objektiv";
    $arraylaenge = count($objQuest);
    if(count($objQuest) == 1){
        shuffle($objQuest);
        $nQuestId = $objQuest[0];
        unset($objQuest[0]);
    }else{
        $nQuest = random(0,$arraylaenge-1);
        $nQuestId = $objQuest[$nQuest];
        array_splice($objQuest,$nQuest,1);
    }
    setNextPage($nQuestId);
    registerVariable($objQuest);
    $nSeite = $nQuestId;
    registerVariable($nSeite);
}elseif($questArt == 99){
    //Subjektiv
    $frageart = "subjektiv";
    $arraylaenge = count($subQuest);
    if(count($subQuest) == 1){
        shuffle($subQuest);
        $nQuestId = $subQuest[0];
        unset($subQuest[0]);
    }else{
        $nQuest = random(0,$arraylaenge-1);
        $nQuestId = $subQuest[$nQuest];
        array_splice($subQuest,$nQuest,1);
    }
    setNextPage($nQuestId);
    registerVariable($subQuest);
    $nSeite = $nQuestId;
    registerVariable($nSeite);
}
registerVariable($frageart);


Vereinfacht gesagt habe ich alle Fragen (es gibt 2 Fragekategorien, objektiv und subjektiv) in ein Array gelegt. Per Zufallsgenerator (siehe Code) werden die Fragen gezogen, bis keine mehr verfügbar ist. Insgesamt gibt es 36 Fragen (18 Kategorie objektiv, 18 Kategorie subjektiv), in jedem Interview müssen alle Fragen randomisiert gezogen werden.

Den Debug-Modus habe ich schon durchlaufen lassen, der bestätigt, dass in manchen Durchläufen plötzlich eine Frage "rausgeworfen wird". Das heißt, er springt z.B. von 16 verbleibenden Fragen in der Kategorie Objektiv auf 14, statt auf 15.

1 Answer

0 votes

Per Zufallsgenerator (siehe Code) werden die Fragen gezogen, bis keine mehr verfügbar ist.

Was ich in Ihrem Code nicht sehe, ist ein "Zufallsgenerator" im Sinne von Fragetyp "Zufallsgenerator". Dieser kann ein shuffle() mehr als komfortabel ersetzen.

Wenn Sie die Fragen einfach nur in rotierter Abfolge anzeigen möchten (die genaue Funktion Ihres Codes zu verstehen würde jetzt etwas länger dauern, deshalb bleibe ich aml bai Ihrer vereinfachsten Aussage), sehen Sie sich doch bitte mal diese Anleitung an: Fragen rotieren - Seiten kann man damit ebenfalls hervorragend rotieren.

Überhaupt ist es nicht ganz ohne Risiko, eine Schleife manuell mit registerVariable() zu bauen. Denn es gibt z.B. den Fall, dass eine Seite mehrfach angezeigt wird (etwas durch ein F5 oder weil Antworten fehlten) und dann wird auch der PHP-Code doppelt ausgeführt. Das kann man mittels getRoute() abfangen ... aber in aller Regel ist es deutlich (!) einfacher und sicherer, Schleifen und Rotationen mittels loopPage() oder eben setPageOrder() zu bauen. Mehr dazu s. auch Seiten rotieren.

by SoSci Survey (206k points)
...