====== Problemlösung bei Filterfragen ======

Filter bzw. Filterfragen sind für Projektleiter ohne Programmiererfahrung traditionell eine gewisse Herausforderung. Natürlich ist es hilfreich, vorab die Anleitung zu Filterfragen zu lesen: [[:de:create:filters|Filterfragen und Filter]].

Besonders frustrierend ist es, wenn der Filter nicht funktioniert und man weiß nicht weiter. Dieses Kapitel beschreibt, wie man einem Fehler schnell auf die Schliche kommt.

===== Die häufigsten Probleme =====

Ein Filter im Fragebogen besteht in aller Regel aus 2 Teilen:

  - Eine //Filterfrage//, welche der Teilnehmer beantwortet. Diese Antwort bestimmt, wie es im Fragebogen weiter geht, z.B. ob eine andere Frage angezeigt wird oder nicht.
  - PHP-Code, der eigentliche //Filter//, welcher genau festlegt, was passiert.

==== Top 1 ====

Überprüfen Sie bitte als erstes, ob der Filter vielleicht auf derselben Seite steht wie die Filterfrage (z.B. oben die Filterfrage und darunter der PHP-Code mit dem Filter).

Das kann nicht funktionieren: Eine Fragebogen-Seite wird stets von oben bis unten verarbeitet -- und erst am Schluss wird das Ergebnis (die Fragebogen-Seite) an den Browser des Teilnehmers geschickt. Das heißt: Wenn die Filterfrage beim Teilnehmer angezeigt wird, wurde der Filter bereits aktiv. Die Antwort des Teilnehmer, die mittels ''value()'' ausgelesen werden soll, liegt zu diesem Zeitpunkt aber noch gar nicht vor -- der Filter kann also auf nichts reagieren.

Die Lösung ist denkbar einfach: Platzieren Sie den PHP-Code für den Filter auf einer späteren Seite im Fragebogen.

Falls Frage und Filter auf derselben Seite stehen müssen, hilft Ihnen das Kapitel [[:de:create:dynamic|Fragen bei Auswahl einer bestimmten Option sofort einblenden]]

==== Top 2 ====

Im Befehl ''value()'' steht womöglich eine falsche Variablen-Kennung.

Sie benötigen für ''value()'' __immer__ die Kennung einer Variable im Datensatz, nicht die Kennung einer Frage oder eines Items (auch wenn diese oft übereinstimmen).

Lösung: Die korrekten Variablen-Kennungen sind der **Variablen-Übersicht** zu entnehmen. Um die Kennung müssen im Befehl value() noch einfache (''<nowiki>'</nowiki>'') oder doppelte Anführungszeichen (''"'') gesetzt werden, z.B. ''value('AB01_01')''.

==== Top 3 ====

Wird eine Frage angezeigt, obwohl der Filter sie ausblenden sollte? Oder die Frage wird sogar doppelt angezeigt? Erscheint die Warnung "Items in der nachfolgenden Frage werden auf dieser Seite schon weiter oben angezeigt. Dies führt fast zwangsläufig zu Datenverlust"?

Bitte beachten Sie, dass das "Hineinziehen" einer Frage in die Fragebogen-Seite mittels Drag & Drop denselben Effekt hat wie die Verwendung von ''question()'' (z.B. in einem Filter). Möglicherweise haben Sie die Frage zusätzlich zum ''question()''-Befehl noch in die Seite "hineingezogen".

Lösung: Ziehen Sie die Frage wieder aus der Seite heraus ([[:de:create:questionnaire#fragen_loeschen_oder_verschieben|Fragen löschen oder verschieben]]), so dass sie nur noch mittels ''question()'' eingebunden ist.

===== Fehler finden =====

Das Ergebnis der Funktion ''value()'' ist nicht das, was man erwartet hat? Oder der Filter springt nicht dorthin wo man es dachte? Filter und Programmierung sind kein Hexenwerk. Der Server wird einfach Schritt für Schritt das machen, was Sie in den //PHP-Code// geschrieben haben.

Um das zu verstehen, ist der //Debug-Modus// ungemein hilfreich: Um in den Debug-Modus zu gelangen, starten Sie den Fragebogen unter **Fragebogen zusammenstellen** mit dem gelben Pfeil ({{:button.debug.here.gif?nolink|Fragebogen im Debug-Modus starten}}). Der Debug-Modus unterscheidet sich von der normalen Ansicht des Fragebogens in drei Punkten:

  - Bei jeder Frage steht in eckigen Klammern deren Kennung.
  - Rechts oben steht ein Knopf "Debug-Informationen". Klickt man diesen an, werden Informationen zur Verarbeitung der aktuellen Fragebogen-Seite angezeigt -- diese sind enorm hilfreich zur Fehlersuche in Filtern ([[:de:create:debugging]]).
  - SoSci Survey zeigt im Fragebogen Hinweise und Warnungen, wenn möglicherweise ein Problem vorliegt. Diese Hinweise und Warnungen bekommt ein Teilnehmer (im Gegensatz zu Fehlern) nicht zu sehen.

Die Debug-Informationen verraten u.a., was bei ''value()'' herauskommt und wann der Fragebogen mittels ''goToPage()'' wohin springt. In Kombination mit ''[[:de:create:functions:debug|debug()]]'' lässt sich auch der Inhalte von PHP-Variablen anzeigen. Entsprechen diese Informationen nicht dem, was man eigentlich erwarten würde, hat man den Fehler i.d.R. schon gefunden.

===== Support zu Filtern =====

Problem noch nicht gelöst? Dann stellen Sie eine Frage im [[https://support.soscisurvey.de|Online-Support]]. Die Frage sollte folgende Informationen enthalten:

  - Auf Basis welcher Filterfrage (Typ und Kennung) soll gefiltert werden?
    - Auf welcher Seite steht die Filterfrage?
    - Welche Variable(n) und Antwortcodes hat die Filterfrage (**Variablen-Übersicht**)?
  - Auf welcher/n Seite/n stehen die Inhalte, die gefilter werden sollen?
  - Welcher Filter (PHP-Code) wurde bereits ausprobiert und hat nicht funktioniert?
    - Auf welcher Seite steht der PHP-Code des Filters?
    - Unter welcher/n Bedingung/en soll was passieren? 
    - Was zeigt die Debug-Information auf der Seite mit dem Filter?