0 votes
in SoSci Survey (dt.) by s109993 (10.3k points)
edited by s109993

Wie im Titel. Es geht nicht auf die nächste Seite. Erst beim zweiten klick auf Weiter. Es ist eine normale Auswahlfrage, kein Code. Allerdings ist viel Code auf anderen Seiten. Gibt es eine Möglichkeit mit er Console herauszufinden, was da los ist?

EDIT:
auf der nächsten Seite ist folgender Code, sonst nichts:

if ((value('X005') == -1) AND (value('A007') == 1)) {
goToPage('Abschluss');
}

Nach dem ersten Klick auf Weiter, ändern sich in der URL nur die vier Buchstaben nach rnd

by SoSci Survey (305k points)
Bitte posten Sie die Ausgabe der Debug-Information, nachdem Sie das erste mal auf "Weiter" geklickt haben: https://www.soscisurvey.de/help/doku.php/de:create:debugging
by s109993 (10.3k points)
edited by s109993
Ich arbeite mit einer Datenbank mit Inhalte + Zugriffsbeschränkung mit Teilnahmecode, die wichtig für die Filter ist. Das heißt, der Fragebogen muss aktiv sein und ich muss mich mit einem Login einwählen, um testen zu können. Das funktioniert aber nicht mit dem Debugg Modus, oder? Also auch für debug(); muss ich ja im debug Modus testen.

EDIT:
Vor der Auswahlseite sind 2 Seiten mit nur Code. Ein Filter am Anfang der Umfrage, macht bei einigen Bedingungen einen Sprung auf die Seite vor der Auswahlfrage.

Dort steht nur Code für verschiedene Platzhalter. Kann das damit zu tun haben? Weil für die Fälle ohne diesen Sprung, kann man normal auf Weiter klicken und es funktioniert gleich beim ersten Mal.


if (value('X001_55') == 1) {  // 1 == LG / 0 = keine LG

replace('%LG1_M_sel%', 'X013_01', 'response');
replace('%LG2_M_sel%', 'X013_02', 'response');


} else if (value('X001_55') == 0) {

replace('%LG1_M_sel%', 'X004_01', 'response');
replace('%LG2_M_sel%', 'X004_02', 'response');

}
by SoSci Survey (305k points)
Sie können für Adresseinträge das Häkchen "Fragebogen im Debugging-Modus starten" setzen. Dann bekommen Sie auch beim Zugriff via Login den Debug-Modus. Oder Sie starten über den gelben Pfeil und verwenden dann die gelb-orange Leiste oben, um die Variable SERIAL auf einen geeigneten Wert zu setzen, damit die Datenbank für Inhalte etwas findet.

> Nach dem ersten Klick auf Weiter, ändern sich in der URL nur die vier Buchstaben nach rnd

Ja, das ist korrekt und soll so ein.

> Weil für die Fälle ohne diesen Sprung, kann man normal auf Weiter klicken und es funktioniert gleich beim ersten Mal.

Es gibt Fälle, wo eine leere Seite, die keinen Inhalt zeigt beim Wiederholen von Seiten zu Problemen führt. Ich denke aber nicht, dass es sich in Ihrem Fall um dieses Problem handelt. Die Platzhalter haben nichts damit zu tun - aber Sie können mal versuchen, den Code auf eine Seite zu packen, die auch weiteren Inhalte zeigt.
by s109993 (10.3k points)
[Information]    Interview Nummer 388 wird fortgesetzt
[Information]    Der Fragebogen qnr2 im Projekt BT24LK wird verwendet
[Information]    Die Verweildauer auf Seite 25 betrug zusätzliche 5 Sekunden
[Verarbeitung]    Lese Antworten von Seite 9+14+15+16+17+18+19+20+21+22+23+24+25
[Information]    Antwort auf X012 = 0
[Information]    In der Frage X012 fehlt eine erforderliche Antwort
[Information]    Antwort auf A007 = 1
[Information]    Fragen bisher zu 67% vollständig beantwortet
[Information]    Es fehlen notwendige Antworten, die Seite wird wiederholt

Danke, das mit dem SERIAL = Login im Debug Mode, hat funktioniert. Wusste nicht, dass das möglich ist. Ein Filter hat wohl nicht die richtigen Bedingungen und deshalb werden Seiten mit Code ausgeführt (vor der Seite mit der Auswahlfrage). Warum allerdings dann die fehlende Antwort in der Variable X012 zu einer Wiederholung der Seite später führt, ist mir Schleierhaft.

Ich werde versuchen, dass am So zu beheben. Danke für die Unterstützung.

1 Answer

0 votes
by SoSci Survey (305k points)

[Information] In der Frage X012 fehlt eine erforderliche Antwort
Warum allerdings dann die fehlende Antwort in der Variable X012 zu einer Wiederholung der Seite später führt, ist mir Schleierhaft.

Prüfen Sie bitte einmal, ob für die Frage X012 ein Antwortzwang ("Frage muss beantwortet werden") eingestellt ist. Welchen Fragetyp hat diese Frage denn?

by s109993 (10.3k points)
X012 ist eine Mehrfachauswahl mit Antwortpflicht. Die Items werden aus einer Datenbank gezogen. Falls für einen Fall keine Items in der Datenbank abgelegt sind, wird die Frage übersprungen (da keine Items == leere Seite, Frage wird übersprungen).
by SoSci Survey (305k points)
Und in dem Fall, dass die Frage übersprungen wird, wird die Seite wiederholt? Das klingt nach einem Programmfehler - womöglich stellt SoSci Survey fest, dass die angegebene Mindestanzahl Kreuzchen nicht gesetzt wurde. Wir sehen uns zeitnah an, ob das der Fall ist.

Also Workaround könnten Sie einen kleinen PHP-Filter verwenden:

$items = ...
if (!empty($items)) {
  question('X012');
}
by s109993 (10.3k points)
Nur um sicher zu gehen (ich teste das auch gleich noch). Das würde einfach die Frage nur anzeigen, wenn X008 nicht leer ist. Anstatt diese leer (also ohne Items) anzuzeigen und dann zu überspringen. Und dadurch wird die Pflichtfrage quasi ignoriert?

$items = getItems('X008', 'all');

$LGM1 = array(1);
$LGM2 = array(2);
$LGM3 = array(3);
$LGM4 = array(4);
$LGM5 = array(5);
$LGM6 = array(6);
$LGM7 = array(7);
$LGM8 = array(8);
$LGM9 = array(9);

if (trim(value('X001_10') == '')) {
    $items = array_diff($items, $LGM1 );
}

if (trim(value('X001_11') == '')) {
    $items = array_diff($items, $LGM2 );
}

if (trim(value('X001_12') == '')) {
    $items = array_diff($items, $LGM3 );
}

if (trim(value('X001_13') == '')) {
    $items = array_diff($items, $LGM4 );
}

if (trim(value('X001_14') == '')) {
    $items = array_diff($items, $LGM5 );
}

if (trim(value('X001_15') == '')) {
    $items = array_diff($items, $LGM6 );
}

if (trim(value('X001_16') == '')) {
    $items = array_diff($items, $LGM7 );
}

if (trim(value('X001_17') == '')) {
    $items = array_diff($items, $LGM8 );
}

if (trim(value('X001_18') == '')) {
    $items = array_diff($items, $LGM9 );
}


if (!empty($items)) {
question('X008', $items);
}
by SoSci Survey (305k points)
Ich konnte das Problem nicht replizieren: Weder mit einem Frage-Filter, welcher die Items alle ausblendet, noch mit einem PHP-Filter, der question() ohne Items aufruft.

Das oben (nur ohne das empty()) war der Code, den Sie verwendet hatten?

Der Code oben scheint mir ein wenig aufwändig für den Zweck, aber im Prinzip sollte das so funktionieren, ja.
by s109993 (10.3k points)
Leider ist der Fragebogen so komplex, dass es unmöglich ist Ihnen das über ein Forum zu zeigen. Und wir gehen morgen ins Feld.

Das heißt, die Idee mit empty() hat nicht funktioniert oder wäre es trotzdem eine Überlegung diese mal einzubauen?
by SoSci Survey (305k points)
Ob es mit empty() funktioniert, müssen Sie mir sagen.

Was nicht funktioniert hat, war den oben beschriebenen Fehler zu reproduzieren. Ich konnte keine Wiederholung der Seite provozieren, wenn die Frage ausgeblendet worden war.
by SoSci Survey (305k points)
Update: Ich konnte das Problem inzwischen replizieren. Und zwar trat es auf, wenn die Frage per question() eingebunden war und zusätzlich noch eine Ausgabe auf der seite erfolgte. Ich denke, das sollte sich heute noch lösen lassen. Sie arbeiten auf www.soscisurvey.de, ja?
by s109993 (10.3k points)
Edit: Nein, ich arbeite auf einem privaten Server (IEA). Gibt es einen Workaround mit Code?
--------------------------------------------------------------------------------------------------------------------------------------

Der Code kommt von Ihnen ;-)

Aber wenn ich es noch richtig weiß, hat die kürzere Version nicht funktioniert. Deshalb ist es schon in Ordnung.

Der Code wird 5 Mal hintereinander auf 5 aufeinanderfolgenden Seiten angezeigt (natürlich verschiedene Variablen), aber immer genau in diesem Format.

Danach kommt für jede dieser 5 Blöcke eine Zufallsziehung (jeweils in einem php-Block, aber immer auf der gleichen Seite). Und erst danach kommt die Frage, welche sich wiederholt. Das zu duplizieren ist relativ aufwändig. Aber ich Versuche es jetzt einfach mal mit dem empty() Befehl und schau mal

// Zufallsziehung LG Mathe
// -------------------------

$key = caseSerial();
$preload = dbGet($key);

        replace('%Mathe_LG1%', $preload[9]);     // Mathe LG1
    replace('%Mathe_LG2%', $preload[10]);    // Mathe LG2
    replace('%Mathe_LG3%', $preload[11]);    // Mathe LG3
    replace('%Mathe_LG4%', $preload[12]);    // Mathe LG4
    replace('%Mathe_LG5%', $preload[13]);    // Mathe LG5
    replace('%Mathe_LG6%', $preload[14]);    // Mathe LG6
    replace('%Mathe_LG7%', $preload[15]);    // Mathe LG7   
    replace('%Mathe_LG8%', $preload[16]);    // Mathe LG8   
    replace('%Mathe_LG9%', $preload[17]);    // Mathe LG9      

if (!isset($randomLGM)) {
   $randomLGM= getItems('X008', 'all');
  shuffle($randomLGM);
  registerVariable($randomLGM);
}



$itemlisteLGM = getItems('X008', 'is', 2);
$item_displayLGM = array_intersect($randomLGM, $itemlisteLGM );




$selectedLGM = [];
foreach ($item_displayLGM as $item) {
    $selectedLGM[] = $preload[(int)$item + (int)8];
}
putList('X013', $selectedLGM);
by SoSci Survey (305k points)
> Der Code kommt von Ihnen ;-)

Ich hoffe, ich hatte nur die Grundlagen dafür geliefert und nicht den kompletten Code. Nächstes Mal nehme ich jedenfalls Arrays, das wird übersichtlicher ;)

Okay, also auf www.soscisurvey.de (und mit dem nächsten Update) wäre das Problem behoben. Für den lokalen Server tut es die Einbindung mit dem kleinen empty()-Filter.

Als Workaround ist also nur eine kleine Änderung an den Stellen erforderlich, wo question() steht.
by s109993 (10.3k points)
Scheint funktioniert zu haben mit dem Workaround, vielen Dank!

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

...