Ankündigung

Einklappen
Keine Ankündigung bisher.

Prüfung Eingabedaten mit Funktion

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • #16
    Zitat von strub Beitrag anzeigen
    Wenn Du viele Formulare hast würde ich mir eine Validator Klasse schreiben (aber auch sonst sehr hilfreich). Des weiteren könntest du dann, falls du eine hast, die Request Klasse erweitern.

    So etwa in dieser Art:

    PHP-Code:
    $request = new Request(ValidatorInterface $validator);

    $verifiedData $request->validate([
    'bar' => 'alpha|minLen:5',
    'foo' => 'int|minVal:1|maxLen:3'
    ]); 
    Sehe ich auch so.

    Zitat von Alf2016 Beitrag anzeigen
    So ist es bspw. wirklich nicht notwendig, wie in #9 für jedes einzelne Formularfeld eine Typ-Prüfung explizit zu formulieren.
    Das Gegenteil ist bei mir der Fall. Die Prüfungen sind in der Masse so speziell, das diese oft nur mit eigenen Funktionen realisierbar sind.

    Aber schauen wir uns mal an welche Fallunterscheidungen bei Nutzung des sog. Affenformulars (Standardverfahren) zu treffen sind:
    1. Formular noch nicht gesendet (Erstaufruf) -> Formular ausgeben
    2. mindestens ein Element nicht vorhanden/fehlerhaft -> Formular nochmal mit Hinweisen ausgeben
    3. Alle benötigten Elemente ok -> Verarbeitung der Eingaben

    Eine validator-Klasse sollte diese Aufgaben maximal unterstützen. Die Inputs liegen als Array vor, das kann z.B. $_POST sein oder auch ganz woanders herkommen.
    Die Filterbedingungen werden ähnlich wie in #9 angedeutet als Array übergeben.
    PHP-Code:
    $validate = new Validate;
    $data $validate->validateArray($input$filter); 
    Ist die Prüfung erfolgreich, ist in $data ein Array mit allen Inputdaten deren Schlüssel im Array $filter vorhanden sind. Dieses Array kann ich nun nutzen um z.B. meine Datenbank zu aktualisieren.
    Bei Fehlern liefert validateArray() false und ein Aufruf von getErrorArray() liefert mir weitere Informationen (welcher Wert ist falsch, was ist falsch).
    Einen Sonderfall stellt die Rückgabe von NULL bei einen leeren $Input dar. Dies zeigt an dass noch kein Input vorhanden ist und das Formular erstmal nur auszugeben ist.

    Für die Filterdefinitionen haben meine Erfahrungen gezeigt das Ausdrücke wie "int|minVal:1|maxLen:3" praktisch so etwas wie eine eigene Sprache darstellen wo immer in der Doku nachgesehen werden muß.
    Daher habe ich nur eine kleine Zahl sog. Standardfilter wie z.B. TIME:
    PHP-Code:
    $filter = [
      
    'time' => 'TIME',
      
    'date' => 'DATE',
      
    "x5"FILTER_VALIDATE_FLOAT
    ]; 
    Nutzbar sind hier auch alle Filter-Funktionen von PHP. Weiter besteht die Möglichkeit einen regulären Ausdruck zu nutzen.
    Die Masse der Prüfungen wird durch annonyme Funktionen (Closure) oder Metoden einer Filterklasse realisiert. Dies mal angedeutet:
    PHP-Code:

    class userfilter
      public function 
    modUnitAdr($value){ 
        return 
    is_numeric($value) AND $value >= AND $value <= 250
      } 


    $validate = new Validate;

    $v->setUserFilter(new userfilter); 

    $filter = [
      
    'time' => 'TIME',
      
    'date' => 'DATE',
      
    "x5" => FILTER_VALIDATE_FLOAT,
      
    "devadr" => 'modUnitAdr'
    ];


    $data $validate->validateArray($input$filter); 
    Das hier vorgestellte Konzept hat sich seit ein paar Jahren in meinen Projekten bewährt. Die Filterklassen werden projektspezifisch erstellt und sind nur hier zur Demonstration mit im Code.
    Dies soll hier nur als Anregung dienen. Von den etwas fortgeschrittenen Nutzern hat da wohl jeder durch Erfahrungen sein eigenes Konzept.

    LG jspit





    Kommentar

    Lädt...
    X