Übersetzungen dieser Seite:
 

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.

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

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:

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 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.

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

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

$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');
}

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.

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

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.

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. 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:

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

Man sollte für das Eingabefeld dann aber tunlichst einstellen, dass der Teilnehmer nur Ziffern eintragen kann (s. 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.

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

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).

$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. 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.

de/create/filter-texts.txt · Zuletzt geändert: 28.11.2014 11:03 von admin
 
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