Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

de:create:filter-texts [04.10.2011 21:14] – angelegt adminde:create:filter-texts [28.11.2014 11:03] (aktuell) – Aktualisierung admin
Zeile 15: Zeile 15:
 </code> </code>
  
-**Tipp:** Lesenswert in diesem Kontext kann auch das Kapitel [[placeholders|Platzhalter]] sein. +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:
- +
-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> <code php>
Zeile 24: Zeile 22:
 } }
 </code> </code>
 +
  
 ===== Mindest-Textlänge prüfen ===== ===== Mindest-Textlänge prüfen =====
  
-Eine weitere praktische Funktion ist ''strlen()'' -- die verrät die Länge eines Strings. 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.+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> <code php>
Zeile 35: Zeile 34:
 </code> </code>
  
-Oder etwas lesbarer (wenn man bei so vielen Klammern den Überblick verliert):+Oder etwas lesbarer (falls man bei so vielen Klammern den Überblick verliert):
  
 <code php> <code php>
-$eingabe = value('AB01_01'); +$eingabe = value('AB01_01');  // Eingabe des Teilnehmers 
-$ohneLeer = trim($eingabe); +$ohneLeer = trim($eingabe);   // Entfernen von Leerzeichen am Anfang und Ende 
-$laenge = strlen($ohneLeer);+$laenge = strlen($ohneLeer);  // Länge ermitteln
 if ($laenge > 3) { if ($laenge > 3) {
   question('BB01');   question('BB01');
 } }
 </code> </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.
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