====== caseData() ======
''array **caseData**()''\\
''array **caseData**(array Filter, [boolean LeereWerte])''\\
''array **caseData**(string Filter, [boolean LeereWerte])''
Die Funktion ''caseData()'' liefert alle Antwortcodes und Texteingaben aus dem laufenden Interview oder einen Teil davon.
* //Filter//\\ Geben Sie hier Rubriken und/oder Fragen an, für welche die Daten ermittelt werden sollen. Die Syntax dieses Parameters ist in der Anleitung zu ''[[getVariables]]'' beschrieben.
* //LeereWerte//\\ Standardmäßig werden keine Daten von Fragen aufgenommen, die im Interview (noch) nicht abgefragt wurden, und keine Daten von offenen Texteingaben, bei denen die Befragten nichts eingetragen haben. Geben Sie als zweiten Parameter ''true'' an, damit auch solche (nicht-)Daten aufgenommen werden.\\ **Hinweis:** Codes für fehlende Antworten (z.B. -9 für "abgefragt, aber nicht beantwortet") werden in jedem Fall aufgenommen.
===== Rückgabewert =====
Die Funktion liefert ein assoziatives Array zurück mit den Variablennamen als Schlüssel und den Daten als Wert.
[
'AB01_01' => 1,
'AB01_02' => 2,
'AB01_03' => 5,
'AB01_04' => 2,
'AB01_05' => -9
]
Die Funktion liefert für geschlossene Fragen Antwortcodes. Dies entspricht der dem Ausgabeformat ''%%'code'%%'' in der Funktion ''[[value]]''.
===== Beispiel: Angaben aus vorigem Interview vorbelegen =====
Wenn eine Erhebung regelmäßig mit denselben Personen durchgeführt wird, sollen einige Antworten aus dem vorhergehenden Fragebogen automatisch in den neuen Fragebogen übernommen werden.
Eine Herausforderung besteht darin, die Person zu identifizieren, sodass eine Zuordnung zwischen den Erhebungswellen möglich ist. Wenn die Einladung zur Befragung mittels [[:de:survey:mailing|Serienmail]] erfolgt, so steht dafür die Personenkennung SERIAL zur Verfügung, welche mittels ''[[caseserial]]'' ermittelt werden kann.
Die Daten aus dem vorhergehenden Interview können in der [[:de:create:databank]] abgelegt werden. Als Schlüssel für den Eintrag bietet sich die Personenkennung an. Um die Verknüpfung zwischen Variablen-Labels und Daten zu erhalten, werden die Daten mittels ''json_encode()'' als JSON-String kodiert.
Wenn also beispielsweise die demografischen Daten in den nächsten Fragebogen übernommen werden sollen, müssen im ersten Interview die Daten in der Datenbank für Inhalte abgelegt werden. Im folgenden Beispiel sind die relevanten Fragen in den Rubriken "SD" und "PA" zu finden. Der folgende PHP-Code muss auf einer Seite platziert werden, auf welcher alle relevanten Fragen bereits abgefragt wurden. Wenn die Demografie also auf den Seite 12 bis 15 abgefragt wird, darf der PHP-Code frühestens auf Seite 16 stehen.
// Einen eindeutigen Schlüssel
// aus der Personekennung erzeugen
$serial = caseSerial();
// Nur speichern, wenn eine Personenkennung vorliegt
if ($serial) {
// Ein Präfix (z.B. 'data-') is hilfreich wenn man
// die Datenbank noch für andere Zwecke verwenden will
$key = 'data-'.$serial;
// Die eigentlichen Daten des Interviews abrufen
$data = caseData(['SD','PA']);
// Diese Daten kodieren und in die
// Datenbank für inhalte schreiben
$package = json_encode($data);
dbSet($key, $package);
}
In dem folgenden Fragebogen kann man die Daten nun auslesen -- und wenn Daten für die Person vorliegen, mittels ''[[put]]'' direkt in die Variable schreiben. Stellen Sie z.B. mittels ''caseData()'' sicher, dass noch keine Antworten vorliegen. Der folgende PHP-Code würde im zweiten Fragebogen auf der ersten Seite platziert.
$currentData = caseData(['SD','PA']);
$serial = caseSerial();
// Daten nur schreiben, wenn in dem Interview
// noch keine Daten vorliegen und wenn eine
// Personenkennung vorhanden ist
if ($serial && empty($currentData)) {
$key = 'data-'.$serial;
$entry = dbGet($key);
// Nur fortfahren, wenn Daten vorliegen
if ($entry) {
$data = json_decode($entry[0]);
// Nur fortfahren, wenn die Daten gültig sind
if ($data) {
// Alle Variablen einzeln setzen
foreach ($data as $varName => $value) {
// Der dritte Parameter (true) erlaubt es,
// auch nicht-interne Variablen zu setzen
put($varName, $value, true);
}
}
}
}
**Hinweis:** Dieser PHP-Code schreibt die vorhandenen Daten direkt in den Datensatz. Die Daten liegen also auch dann vor, wenn der Befragte die entsprechenden Seiten gar nicht (mehr) ausfüllt bzw. korrigiert. Alternativ kann statt ''put()'' auch die Funktion ''[[preset]]'' genutzt werden. Allerdings muss diese auf jeder Seite aufgerufen werden, auf welche relevante Fragen stehen. Dafür würde es sich anbieten, eine Funktion unter //PHP-Funktionen// im Fragebogen zu speichern, und diese auf allen betroffenen Seiten aufzurufen.
**Hinweis:** Der Speicherplatz in der Datenbank für Inhalte ist auf 64kb pro Eintrag begrenzt. Behalten Sie dies im Auge, wenn Sie deutlich mehr als 1000 Variablen oder sehr lange Textantworten oder Rohdaten im Datensatz haben.
===== Beispiel: Antworten zur Weiterverarbeitung übermitteln =====
Mitunter sollen die Daten zur Weiterverarbeitung direkt per API an einen anderen Server übermittelt werden. Dafür können die Funktionen ''[[sendJSON]]'' genutzt werden. Die Funktion ''sendJSON()'' arbeitet direkt mit caseData() zusammen.
Um die gesamten Daten des Interviews an die URL ''%%https://api.example.com/analyze.php%%'' zu senden, würden Sie vor der "letzten Seite" im Fragebogen eine zusätzliche Seite einfügen und darauf folgenden PHP-Code.
$data = caseData();
sendJSON('https://api.example.com/analyze.php', $data);