====== Nach Texteingaben filtern ======

Normalerweise überprüft man, ob in einer Auswahl oder einer Skala ein bestimmter Wert gewählt wurde -- wenn man prüfen möchte, ob ein Teilnehmer etwas bestimmtes in ein offenes Texteingabefeld geschrieben hat, dann läuft das im Prinzip genauso.

Der Unterschied besteht darin, dass man nicht mit Zahlen, sondern mit Texten vergleicht.

===== Prüfen, ob etwas angegeben wurde =====

Meist möchte man einfach nur prüfen, ob irgend etwas in ein Texteingabefeld eingetragen wurde. Oder für Programmierer formuliert: Ob etwas anderes als der leere String (kein Text) eingetragen wurde. Den leeren String schriebt man einfach durch zwei einfache Anführungszeichen (%%''%%) oder durch zwei doppelte Anführungszeichen (%%""%%) mit nichts dazwischen.

<code php>
if (value('AB01_01') != '') {
  question('BB01');
}
</code>

Der obige PHP-Code funktioniert -- aber er reagiert recht sensibel auf Leerzeichen: Wenn ein Teilnehmer nur Leerzeichen in ein Textfeld einträgt, dann würde man das eigentlich lieber als "keine Angabe" werten. Dafür gibt es die Funktion ''trim()'', die Leerzeichen am Anfang und Ende einfach entfernt. Im Filter entfernt man also erst die Leerzeichen und vergleicht dann:

<code php>
if (trim(value('AB01_01')) != '') {
  question('BB01');
}
</code>


===== Mindest-Textlänge prüfen =====

Eine weitere praktische Funktion ist ''strlen()''. Sie verrät die Länge eines Strings (Textes). Wenn man also weiß, dass jede sinnvolle Angabe mindestens 4 Zeichen haben muss, dann kann man auch die String-Länge prüfen. Damit Leerzeichen keine falschen Entscheidungen zur Folge haben, wird auch hier wieder ''trim()'' verwendet.

<code php>
if (strlen(trim(value('AB01_01'))) > 3) {
  question('BB01');
}
</code>

Oder etwas lesbarer (falls man bei so vielen Klammern den Überblick verliert):

<code php>
$eingabe = value('AB01_01');  // Eingabe des Teilnehmers
$ohneLeer = trim($eingabe);   // Entfernen von Leerzeichen am Anfang und Ende
$laenge = strlen($ohneLeer);  // Länge ermitteln
if ($laenge > 3) {
  question('BB01');
}
</code>


===== Text vergleichen =====

Soll überprüft werden, ob der Teilnehmer die richtige Antwort gegeben hat, funktioniert das durch die Vergleichsoperatoren ''=='' (gleich) und ''!='' (ungleich) -- wie bei Zahlen. Der folgende Filter soll überprüfen, ob der Teilnehmer ein Test-Video angesehen hat. Das Test-Video zeigt ein Wort, welches man in ein Eingabefeld eintragen soll. Falls der Teilnehmer nun das falsche Wort einträgt, wird die Seite mit dem Test-Video erneut angezeigt.

<code php>
if (value('AB01_01') != 'Katze') {
  repeatPage();
}
</code>

Evtl. möchte man bei der Groß- und Kleinschreibung nicht pingelig sein -- dafür konvertiert man die Eingabe des Teilnehmers mittels ''strtolower()'' vor dem Vergleich in Kleinbuchstaben.

<code php>
if (strtolower(value('AB01_01')) != 'katze') {
  repeatPage();
}
</code>

Leerzeichen am Anfang/Ende können wieder durch das bekannte ''trim()'' entfernt werden:

<code php>
if (strtolower(trim(value('AB01_01'))) != 'katze') {
  repeatPage();
}
</code>


===== Zahlen in der offenen Eingabe =====

PHP ist bei der Unterscheidung von Texten und Zahlen nicht kleinlich. Möchte man überprüfen, ob der Teilnehmer im Eingabefeld ''AB01_01'' eine Zahl eingegeben hat, die größer als 10 ist, kann man das wie folgt tun:

<code php>
if (value('AB01_01') > 10) {
  question('BC02');
}
</code>

Man sollte für das Eingabefeld dann aber tunlichst einstellen, dass der Teilnehmer nur Ziffern eintragen kann (s. [[:de:create:checks#eingabe_von_nummern|Antworten prüfen: Eingabe von Nummern]]). Falls man dies nicht einstellen kann oder möchte, kann man mittels ''is_numeric()'' herausfinden, ob der Teilnehmer eine Zahl eingetragen hat.

Folgender Filter greift nur, wenn der Teilnehmer eine Zahl eingegeben hat und diese Zahl größer als 10 ist.

<code php>
$eingabe = value('AB01_01');
if (is_numeric($eingabe) and ($eingabe > 10)) {
  question('BC02');
}
</code>

Ebenso kann man PHP anweisen, die Eingabe des Teilnehmers so gut wie möglich in eine Zahl umzuwandeln. Aus einem "5b" wird dann ''5''. Die Umwandlung erfolgt mit der Funktion ''intval()'' oder mit einem vorangestellten ''(int)'' (sog. Type Casting).

<code php>
$eingabe = intval(value('AB01_01'));
if ($eingabe > 10) {
  question('BC02');
}
</code>

<code php>
$eingabe = (int)value('AB01_01');
if ($eingabe > 10) {
  question('BC02');
}
</code>

**Vorsicht:** Nachkommastellen werden bei dieser Lösung abgeschnitten. Möchte man mit Dezimalzahlen arbeiten, muss man zunächst dafür sorgen, dass als Dezimaltrennzeichen der Punkt verwendet wird (ggf. in SoSci Survey einstellen, dass eine Texteingabe nur Dezimalzahlen erlaubt) und anschließend mittels vorangestelltem ''(float)'' die Umwandlung in eine Zahl vornehmen.