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 …
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).
Starten Sie den Fragebogen im Debug-Modus, indem Sie bei Fragebogen zusammenstellen auf den gelben Pfeil klicken. Verwenden Sie den gelben Pfeil mit vorgestelltem Strich , um den Debug-Modus ab einer bestimmten Seite zu starten.
value()
auf eine Variable anwenden, die noch nicht abgefragt wurde).
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.
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 Daten → Daten 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.
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.
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.
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.
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.
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…
Als Beispiel dient hier eine Fragebogen-Seite mit einem kleinem 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.
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.
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.
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).
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.
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.
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.
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'); }
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.