Übersetzungen dieser Seite:
 

Nach Texteingaben filtern

Normalerweise wird überprüft, ob in einer Auswahl oder einer Skala ein bestimmter Wert gewählt wurde – wenn geprüft werden soll, ob eine Teilnehmer:in einen definierten Text in ein offenes Texteingabefeld geschrieben hat, dann läuft das im Prinzip genauso.

Der Unterschied besteht darin, dass nicht mit Zahlen, sondern mit Texten verglichen wird.

Prüfen, ob etwas angegeben wurde

Meist wird einfach nur geprüft, ob irgend etwas in ein Texteingabefeld eingetragen wurde. Oder für Programmierer:innen formuliert: Ob etwas anderes als der leere String (kein Text) eingetragen wurde. Der leere String wird einfach durch zwei einfache Anführungszeichen ('') oder durch zwei doppelte Anführungszeichen ("") mit nichts dazwischen.

if (value('AB01_01') != '') {
  question('BB01');
}

Der obige PHP-Code funktioniert – aber er reagiert recht sensibel auf Leerzeichen: Wenn ein:e Teilnehmer:in nur Leerzeichen in ein Textfeld einträgt, dann würde dies eigentlich lieber als „keine Angabe“ gewertet. Dafür gibt es die Funktion trim(), die Leerzeichen am Anfang und Ende einfach entfernt. Im Filter werden also erst die Leerzeichen entfernt und dann verglichen:

if (trim(value('AB01_01')) != '') {
  question('BB01');
}

Mindest-Textlänge prüfen

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

if (strlen(trim(value('AB01_01'))) > 3) {
  question('BB01');
}

Oder etwas lesbarer (falls bei so vielen Klammern der Überblick verloren geht):

$eingabe = value('AB01_01');  // Eingabe der Teilnehmer:in
$ohneLeer = trim($eingabe);   // Entfernen von Leerzeichen am Anfang und Ende
$laenge = strlen($ohneLeer);  // Länge ermitteln
if ($laenge > 3) {
  question('BB01');
}

Text vergleichen

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

if (value('AB01_01') != 'Katze') {
  repeatPage();
}

Evtl. besteht der Wunsch, bei der Groß- und Kleinschreibung nicht pingelig zu sein – dafür wird die Eingabe der teilnehmenden Person mittels strtolower() vor dem Vergleich in Kleinbuchstaben konvertiert.

if (strtolower(value('AB01_01')) != 'katze') {
  repeatPage();
}

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

if (strtolower(trim(value('AB01_01'))) != 'katze') {
  repeatPage();
}

Zahlen in der offenen Eingabe

PHP ist bei der Unterscheidung von Texten und Zahlen nicht kleinlich. Soll überprüft werden, ob die teilnehmenden Person im Eingabefeld AB01_01 eine Zahl eingegeben hat, die größer als 10 ist, kann das wie folgt getan werden:

if (value('AB01_01') > 10) {
  question('BC02');
}

Tunlichst sollte für das Eingabefeld dann aber eingestellt, dass die teilnehmenden Person nur Ziffern eintragen kann (s. Antworten prüfen: Eingabe von Nummern). Falls dies nicht eingestellt werden kann oder soll, kann mittels is_numeric() herausgefunden werden, ob die teilnehmenden Person eine Zahl eingetragen hat.

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

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

Ebenso kann PHP angewiesen werden, die Eingabe der teilnehmenden Person 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).

$eingabe = intval(value('AB01_01'));
if ($eingabe > 10) {
  question('BC02');
}
$eingabe = (int)value('AB01_01');
if ($eingabe > 10) {
  question('BC02');
}

Vorsicht: Nachkommastellen werden bei dieser Lösung abgeschnitten. Soll mit Dezimalzahlen gearbeitet werden, muss zunächst dafür gesorgt werden, 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.

de/create/filter-texts.txt · Zuletzt geändert: von chris.seiferth
 
Falls nicht anders bezeichnet, ist der Inhalt dieses Wikis unter der folgenden Lizenz veröffentlicht: CC Attribution-Share Alike 4.0 International
Driven by DokuWiki