====== accessCount() ======
Die Funktion ''accessCount()'' dient dazu, Falscheingaben bei einer Code-Abfrage zu begrenzen. Ohne Parameter gibt die Funktion die Anzahl der bisherigen Versuche zurück. Wird der Parameter ''Sperrzeit'' angegeben, dann wird der Zähler um eins erhöht.
''int **accessCount**([int //Sperrzeit//])''
* //Sperrzeit// -- Wenn eine Sperrzeit (in Sekunden) eingetragen wird, dann legt die Funktion einen Sperreintrag an bzw. zählt diesen um eins hoch. Nach Ablauf der Sperrzeit (gerechnet ab dem ersten Aufruf der Funktion) werden die Fehlversuche auf 0 zurückgesetzt.
**Hinweis:** Bei der Abfrage von [[:de:survey:serials|Teilnahmecodes]] zählt SoSci Survey Fehlversuche automatisch. Die Funktion ''accessCount()'' ist nur dann erforderlich, wenn die Abfrage und Prüfung von Codes manuell umgesetzt wird.
**Hinweis:** Die Funktion prüft die mehrfache Eingabe sowohl anhand des laufenden Interviews als auch anhand der IP-Adresse. Die Sperreinträge werden getrennt von den erhobenen Daten gespeichert, sodass für gewöhnlich keine Verarbeitung personenbezogener Daten im Sinne der DSGVO erfolgt. Allerdings kann die Sperre durch einen Internet-Proxy umgangen werden, welcher auf den Fragebogen über unterschiedliche IP-Adressen zugreift.
**Hinweis:** Die Funktion erstellt auch einen Eintrag in der externen Sperrliste, welche vom Server u.U. dazu genutzt wird, eine IP-Adresse für einen längeren Zeitraum komplett auszusperren (Serverkonfiguration: [[:de:server:security:fail2ban]]).
===== Anwendungsbeispiel =====
Dieses Anwendungsbeispiel benötigt folgende Voraussetzungen:
* Es wurden gültige Teilnahmecodes erzeugt.
* In der [[:de:create:databank]] wurden für die Teilnahmecodes Einträge angelegt, der Schlüssel setzt sich aus "Code-" und dem Teilnahmecode zusammen, also z.B. "Code-abcde12345".
* Der Teilnahmecode wird auf Seite 1 mit einer Texteingabe-Frage abgefragt, die Variable zum Eingabefeld hat die Kennung "TC01_01".
* Für den Fall, dass ein falscher Code eingegeben wurde, wurde eine Fehlermeldung als Text TC02 angelegt, für den Fall, dass zu viele ungültige Eingaben versucht wurden, existiert ein zweiter Text TC03.
Auf Seite 1 des Fragebogens wird zunächst mittels ''accessCount()'' geprüft, ob maximal 5 Fehlversuche gemacht wurden. Abhängig davon wird das Eingabefeld oder eine Fehlermeldung angezeigt. Im zweiten Fall dann auch kein "Weiter"-Knopf.
if (accessCount() > 5) {
show('TC03'); // Fehlermeldung "zu viele Versuche"
buttonHide(); // Knöpfe ausblenden
pageStop();
} else {
show('TC01'); // Fragen nach dem Teilnahmecode
}
Auf der zweiten Seite wird der Code gegne die Datenbank für Inhalte geprüft. Abhängig von der Prüfung wird entweder ein Fehlversuch gezählt oder eine Fehlermeldung angezeigt, und die vorige Seite wiederholt.
$code = strtolower(value('TC03')); // Eingabe in Kleinbuchstaben konvertieren
$key = 'Code-'.$code; // Präfix für den Datenbank-Eintrag ergänzen
$data = dbGet($key); // Auslesen des Datenbank-Eintrags
// Falls kein Datenbank-Eintrag gefunden wird
if (!$data) {
accessCount(600); // Sperreintrag für 10 Minuten anlegen und um eins hochzählen
repeatPage('TC02'); // Fehlermeldung zeigen und Seite wiederholen
}