In den Spezialfunktionen findet sich eine Datenbank für Inhalte. Dies ist eine projektinterne Miniatur-Datenbank, in der Daten für die Verwendung im Fragebogen abgelegt oder sogar während des Inteviews geändert werden können. Das führt zu vielfältigen Möglichkeiten, z.B.
preset()
)Der Fragetyp Erweiterte Auswahl bietet darüber hinaus die Möglichkeit, auf die Datenbank zuzugreifen. So lassen sich lange und/oder dynamische Auswahlfagen programmieren.
Mitunter benötigt man im PHP-Code eine Vielzahl von Texten - z.B. um nummerische Codes in Textbausteine oder Dateinamen zu übersetzen. Wenn die Anzahl der Texte überschaubar ist, kann man dies einfach mit einer if/elseif
oder switch/case
Konstruktion lösen:
$stimulus = random(1,3); switch ($stimulus) { case 1: $text = 'Apfelbaum'; break; case 2: $text = 'Birnbaum'; break; case 3: $text = 'Clementinenbaum'; break; }
Wenn die Anzahl der Möglichkeiten oder die Länge der Texte aber wächst, dann wird der PHP-Code schnell unübersichtlich – oder erzeugt beim Einfügen in den Fragebogen gar Probleme, weil er Größengrenzen sprengt. Für diesen fall gibt es eine projektinterne Datenbank für Inhalte, zu finden bei den Spezialfunktionen. Dieses Kapitel erklärt die Verwendung der Datenbank.
Wichtig: Bitte beachten Sie, dass die Daten in der Datenbank für Inhalte beim Export des Projekts noch nicht exportiert werden. Beim Archivieren eines Projekts werden die Daten nicht archiviert, sondern gelöscht. Eine Änderung dieses Verhaltens ist in kommenden Programmversionen vorgesehen.
In der Datenbank für Inhalte können Paare aus jeweils einem Schlüssel (eine Kennung) und Daten hinterlegt werden.
'1'
). Steuerzeichen (z.B. Zeilenumbrüche) sind in den Texten nicht möglich – HTML-Tags selbstverständlich schon.Im Fragebogen kann man dann anhand des Schlüssels die hinterlegten Daten abrufen. Bildlich dargestellt könnte eine Datenbank folgende Paare aus Schlüsseln und Daten enthalten:
Schlüssel | Daten (Kombinationen) |
---|---|
A1 | (Apfelbaum, Äpfel) |
A2 | (Birnbaum, Birnen) |
A3 | (Clementinenbaum, Clementinen) |
B1 | (6) |
B2 | (12) |
B3 | (18) |
B4 | (24) |
B5 | (30) |
Die Daten müssen zunächst in einer Tabelle vorliegen, z.B. in Excel oder OpenOffice Calc:
Um die oben dargestellten Datenbankeinträge zu erzeugen, würde Ihre Tabelle aussehen wie folgt:
A1 | Apfelbaum | Äpfel |
A2 | Birnbaum | Birnen |
A3 | Clementinenbaum | Clementinen |
B1 | 6 | |
B2 | 12 | |
B3 | 18 | |
B4 | 24 | |
B5 | 30 |
Diese Tabelle speichern Sie im Dateiformat CSV (Character Separated Values) ab. Das ist nichts anderes als eine Textdatei, in der die Werte hintereinander stehen und durch ein vorgegebenes Zeichen (z.B. einen Tabulator) getrennt sind.
In oFb wählen Sie unter Spezialfunktionen → Datenbank für Inhalte nun bei Daten einlesen (CSV) die CSV-Datei aus und bestätigen mit OK. Im folgenden Fenster werden noch ein paar Details abgefragt – normalerweise erkennt oFb die korrekten Format-Einstellungen der Datei automatisch.
Wenn Sie in einem mehrsprachigen Projekt arbeiten, können Sie für unterschiedliche Sprachversionen unterschiedliche Daten hinterlegen. Das Programm wird immer prüfen, ob für die aktuelle Sprachversion ein eigener Eintrag vorliegt – und wenn nicht, wird der Eintrag aus der Basissprache verwendet (Mehrsprachige Befragungen).
Hinweis: Jede Zeile in der Tabelle muss mindestens 2 Spalten haben. Zeilen, die nur einen Schlüssel oder gar keine Daten enthalten, werden beim import ignoriert.
Die Verwendung der Daten im PHP-Code ist trivial: Mit dem Befehl dbGet()
werden die Daten zu einem Schlüssel ausgelesen. Mit dem befehl dbKeys()
kann man sich die verfügbaren Schlüssel auflisten lassen.
Im folgenden Beispiel werden 2 Zufallszahlen gezogen (entsprechend den Kategorien A und B) und mithilfe der Daten in einen Text umgewandelt. Bitte beachten Sie, dass die Daten jeweils als Kombination (Liste) vorliegen – das erste und ggf. einzige Element in so einer Liste hat jeweils den Index 0.
$zahlA = random(1,3); // Obstsorte (1-3) $zahlB = random(1,5); // Anzahl Früchte (1-5) $keyA = 'A'.$zahlA; // Dem Zahlencode ein 'A' voranstellen => 'A1' bis 'A3' $keyB = 'B'.$zahlB; // Dem Zahlencode ein 'B' voranstellen => 'B1' bis 'B5' $dataA = dbGet($keyA); // Die Daten für den Schlüssel A auslesen $dataB = dbGet($keyB); // Die Daten für den Schlüssel B auslesen $baum = $dataA[0]; // Im ersten Datenfeld der A-Daten steht ein Baum $frucht = $dataA[1]; // Im zweiten Datenfeld der A-Daten steht die zugehörige Frucht $anzahl = $dataB[0]; // Im ersten Datenfeld der B-Daten steht eine Anzahl // Das ganze zu einer Beschreibung verknüpfen $text = 'Der '.$baum.' hatte in diesem Jahr '.$anzahl.' '.$frucht.'. Hat sich der eingesetzte Dünger bezahlt gemacht?'; // Auf die Seite schreiben - alternativ könne man den Text als Platzhalter verwenden html('<p>'.$text.'</p>');
Das einfache Beispiel von ganz oben ließe sich wie folgt programmieren.
$stimulus = random(1,3); $data = dbGet('A'.$stimulus); $text = $data[0];
Sofern Sie die Daten ändern möchten, importieren Sie eine neue CSV-Datei. Doppelte Schlüssel werden dabei einfach aktualisiert.
Um Einträge zu löschen, löschen Sie mit dem roten Kreuz rechts oben alle Einträge und importieren Sie die aktualisierten Daten erneut.
Mit der Funktion dbSet()
können Einträge in der Datenbank für Inhalte auch während des Interviews geändert oder gelöscht werden.