Übersetzungen dieser Seite:
 

Fragebogen-Probleme lösen

Der Einsteig in die Verwendung von PHP-Code und JavaScript ist nicht immer trivial – und gerade wenn man eine komplexere Aufgabestellung vor sich hat, funktioniert nicht alles auf Anhieb wie erwartet.

Um die Fehler aufzuspüren und effizient zu beheben (Fehlersuche, engl. „Debugging“), benötigen auch erfahrene Programmierer ein wenig Unterstützung vom Programm. Vor allem muss SoSci Survey (PHP-Code) oder der Internetbrowser (JavaScript) Informationen dazu liefern …

  • … wo der Fehler liegt, wenn gar nichts funktioniert (formale Fehler),
  • … was im Hintergrund passiert, bevor etwas auf dem Bildschirm erscheint und
  • … ob in Variablen das gespeichert ist, was man erwartet hätte (inhaltliche Fehler).

Formale Fehler sind am einfachsten zu finden: Wenn ein Strichpunkt am Ende eines Befehls fehlt oder eine Klammer (Syntaxfehler), dann wird der Programmcode gar nicht erst ausgeführt. SoSci Survey zeigt dann eine Fehlermeldung, bei JavaScript muss man erst einmal die Fehlerkonsole öffnen.

Inhaltliche Fehler sind schwieriger zu finden. Denn hier arbeitet der Code, führt aber nicht zum erwünschten Ergebnis. Dann hilft die Anzeige, was im Hintergrund passiert (s. Beispiel).

Fehlersuche im PHP-Code

Starten Sie den Fragebogen im Debug-Modus, indem Sie bei Fragebogen zusammenstellen auf den gelben Pfeil Debugging des Fragebogens klicken. Verwenden Sie den gelben Pfeil mit vorgestelltem Strich Debugging ab aktueller Seite, um den Debug-Modus ab einer bestimmten Seite zu starten.

  • Im Debug-Modus (Debug-Modus) und im Vorschau-Modus (Vorschau-Modus) sehen Sie Warnungen (orange) und Hinweise (gelb) auf mögliche Probleme, die im normalen Fragebogen nicht angezeigt werden (z.B. wenn Sie value() auf eine Variable anwenden, die noch nicht abgefragt wurde).
  • Im Debug-Modus wird neben jeder Frage deren Kennung und Beschreibung anzeigt. Fahren Sie mit dem Mauszeiger über die Beschreibung, so können Sie in einem Eingabefeld Notizen zur Frage machen. Diese werden auch im Fragenkatalog angezeigt, wenn Sie eine Frage zum Bearbeiten öffnen.
  • Im Debug-Modus haben Sie oben eine zusätzliche Steuerleiste (Debug-Leiste) und Sie sehen neben den Fragen zusätzlich Informationen.

Debug-Leiste

Klicken Sie links auf DEBUG ►, wenn die leiste einmal im Weg sein sollte. Falls Sie lediglich eine kleine gelbe Schaltfläche ◄ DEBUG rechts oben im Fragebogen sehen, klicken Sie darauf, um die vollständige Debug-Leiste anzuzeigen.

Debug-Leiste ausgeblendet

Hinweis: Wenn Sie den Fragebogen im Debug-Modus starten, wird dafür ein Fall im Datensatz angelegt. Dieser trägt in der Variable MODE den Wert „debug“ (Zusätzliche Variablen in der Datenausgabe). Verwenden Sie Erhobene DatenDaten ansehen, um die gespeicherten Daten einzusehen.

Sie haben eine Filterfrage auf Seite 2, der eigentliche [:de:create:filters|Filter]] dazu steht aber auf Seite 10? Verwenden Sie die Navigation in der Debug-Leiste, um direkt zwischen den beiden Seiten zu springen.

  • Wenn Sie mit dem Mauszeiger über Seite: fahren, erscheint eine Liste aller Seite im aktuellen Fragebogen. Klicken Sie auf einen der Einträge, um direkt dorthin zu springen.
  • Alternativ können Sie in das Eingabefeld hinter Seite: die Seitennummer eintragen und die Eingabetaste (Return) drücken oder auf den Pfeil (►) klicken.
  • Verwenden Sie den Pfeil nach links (◄), um zur vorigen Fragebogen-Seite zurückzugekehren – auch dann, wenn Sie im Fragebogen keinen Zurück-Knopf anbieten.
  • Verwenden Sie den Pfeil nach rechts (►), um ohne Prüfung der Vollständigkeit (Antwortpflicht/Nachhaken) zur nächsten Seite zu gelangen.

Tipp: Wenn Sie zu einer anderen Seite springen, werden die Angaben auf der aktuellen Fragebogen-Seite gespeichert. Sie brauchen nicht auf den „Weiter“-Knopf zu drücken.

Seitenablauf

Falls Sie mit goToPage() oder setPageOrder() arbeiten, möchten Sie eventuell nachvollziehen, welche Seiten im Verlauf des Interviews anzeigt wurden. Fahren Sie dafür mit dem Mauszeiger über den Namen des Fragebogens.

Informationen zum Fragebogen und Verlauf

Sie sehen eine Liste der bisher im Interview angezeigten Seiten. Die aktuelle Position ist fett hervorgehoben. Wenn Sie mittels setPageOrder() oder setNextPage() festlegen, dass es nach dem Klick auf Weiter mit einer bestimmten Seite weitergehen soll, wird diese in der Liste ebenfalls (ausgegraut) angezeigt.

Debug-Information

Wann immer Sie mit PHP-Code arbeiten, liefert die Debug-Information hilfreiche Informationen. Klicken Sie rechts oben auf „Debug-Information“, um sie ein- oder auszublenden.

Debug-Information einblenden

Die Debug-Information zeigt die wesentlichen Schritte, die im Hintergrund abgelaufen sind in der Zeit zwischen dem Start der aktuellen Seite (z.B. Klick auf den „Weiter“-Knopf) und der Darstellung der Seite auf dem Bildschirm. Hier wird anzeigt…

  • … welche Antworten eingelesen und im Datensatz gespeichert wurden („Lese Antworten von Seite …“) und
  • … was auf der aktuellen Seite verarbeitet wurde („Erstelle Fragebogen-Seite Nr. …“).

Beispiel für Debug-Informationen

Filterfragen

Als Beispiel dient hier eine Fragebogen-Seite mit einem kleinem Filter.

Beispiel für eine Fragebogen-Seite mit Filter

Der Befehl value() erzeugt automatisch einen Eintrag in der Debug-Information. Sie können der Debug-Information entnehmen, dass der PHP-Code den Befehl value('AB10') verwendet hat und dass dieser den Wert 2 zurücklieferte.

Debug-Information zur Filterfrage

Weiterhin sehen wir, dass die Frage „AB09“ angezeigt wird, nicht aber die Frage „AB05“ aus dem Filter – denn der Wert 2, den value() liefert, entspricht ja nicht dem Wert 1, auf welchen der Filter prüft.

Variablen

Mit dem Befehl debug() können Sie den Wert beliebiger Variablen im Datensatz oder im PHP-Code anzeigen. Als Beispiel dient folgende Fragebogen-Seite, die aus der offenen Texteingabe des Teilnehmers in „AB11_01“ einen neuen Wert berechnet und in einem Filter verwendet.

Beispiel-Fragebogenseite

Hier wurde zweimal der Befehl debug() eingesetzt. Der Parameter ist einmal die Kennung der offenen Texteingabe „AB11_01“ und einmal die PHP-Variable $num, in welcher das Ergebnis der Berechnung gespeichert wird.

Im Debug-Modus erzeugt debug() eine Ausgabe sowohl im Fragebogen als auch in der Debug-Information. Im normalen Interview sieht man davon nichts.

Beim ersten Aufruf von debug() teilt SoSci Survey zunächst pflichtbewusst mit, dass der Parameter eine String mit dem Inhalt „AB11_01“ ist. Darüber hinaus wird erkannt, dass es sich dabei um die Kennung einer Variable aus dem Datensatz handelt, deshalb zeigt es automatisch den Wert aus dem Datensatz (6) an.

Beim zweiten Aufruf von debug() zeigt SoSci Survey, welcher Wert aktuell in der PHP-Variable $num gespeichert ist (6).

Leere Seiten

Wenn eine Fragebogen-Seite keine Inhalt zeigt, springt SoSci Survey automatisch weiter zur nächsten Seite. Dies passiert z.B. wenn Fragen nur in Abhängigkeit eines Filters angezeigt werden. Im folgenden Beispiel wird Frage „AB05“ nur angezeigt, wenn der Teilnehmer in der Auswahl AB10 den Wert 1 auswählte.

Eine Fragebogenseite, die u.U. leer bleibt

In der Debug-Information ist nicht nur ersichtlich, dass und weshalb die Frage „AB05“ nicht angezeigt wird, sondern auch dass es automatisch mit der nächsten Seite Nr. 4 weitergeht.

beispiel

Darüber hinaus ist links oben an der Seitennummer „3+4“ erkennbar, dass die Seiten 3 und 4 gemeinsam angezeigt werden. Diese Anzeige erhält man auch, wenn man goToPage() verwendet: Dieser Befehl springt aus einer Fragebogenseite hinaus direkt zu einer anderen.

Beispiel

Folgender PHP-Code sollte ab einem Summenwert von 25 zu einer anderen Fragebogen-Seite springen und dort (über den weiteren Fragen) einen Text anzeigen – aber vom Text ist nichts zu sehen:

if (valueSum('AB01') >= 25) {
  goToPage('noTV');
  text('noTV');
}

Hier helfen nun die Informationen, welche der Debugging-Modus liefert (Debug-Information). Diese zeigen, dass der Befehl text() gar nicht ausgeführt wird, das goToPage() aber schon. Am Filter kann es also nicht liegen, dieser funktioniert.

Ein Blick in die Anleitung des Befehls goToPage() verrät daraufhin, dass dieser direkt zur angegeben Seite springt und dann nichts mehr von der aktuellen Seite ausgeführt wird, in diesem Beispiel also auch nicht das text(). Kennt man die Ursache, ist die Lösung einfach: Das text() muss vor das goTopage().

if (valueSum('AB01') >= 25) {
  text('noTV');
  goToPage('noTV');
}

Fehlersuche in JavaScript

Während PHP-Code von SoSci Survey auf dem Befragungsserver ausgeführt wird, läuft JavaScript im Browser beim Teilnehmer. Entsprechend ist der Browser auch dafür verantwortlich, Fehler und Informationen anzuzeigen.

Dafür wird die Fehlerkonsole des Browsers benötigt: Entwickler-Tools im Browser

Verwenden Sie den Befehl console.log(), um zusätzliche Informationen in der Fehlerkonsole anzuzeigen. So würde der folgende JavaScript-Code z.B. nach einem Element mit der HTML-ID „AB01_01“ suchen – und in der Fehlerkonsole anzeigen, was er gefunden hat.

<script type="text/javascript">
<!--
var input = document.getElementById("AB01_01");
console.log(input);
-->
</script>

Aktuelle Browser haben zusätzlich einen „Inspektor“ oder „DOM Explorer“ o.ä., welcher es erlaubt, einfach auf ein Objekt der Fragebogenseite zu klicken (z.B. auf ein Eingabefeld), um zusätzliche Informationen (z.B. den HTML_Code inkl. HTML-ID) zum Objekt anzeigen zu lassen.

de/create/debugging.txt · Zuletzt geändert: 28.07.2022 22:02 von admin
 
Falls nicht anders bezeichnet, ist der Inhalt dieses Wikis unter der folgenden Lizenz veröffentlicht: CC Attribution-Share Alike 4.0 International
Driven by DokuWiki