// you’re reading...

Internet

Formularvalidierung mit GUMP in PHP

Auch wenn PHP den Ruf hat, dass Plugins und Tools nicht so zahlreich vorhanden sind, wie in der Java-Welt, kann dennoch mit den vorhandenen Mitteln vieles umgesetzt werden. In diesem Tutorial zeige ich, wie Sie ein HTML-Formular in PHP validieren können.

Notwendige Software

Ich verwende für dieses Beispiel das Templatesystem Twig sowie das Validierungssystem GUMP. Auf dem Ziel-Apache-Server läuft ein aktuelles PHP5.

HTML-Formular

Im Twig-Templatesystem habe ich mittels Makros ein Formular erstellt, welches auf Validierungsfehler reagiert. Das Makro sieht wie folgt:

{% macro input(field, name, value, type, class) %}
  <div class="control-group {{class}}">    
    <label class="control-label" for="{{ field }}">{{ name }}
    </label>    
    <div class="controls">    
      <input type="{{ type }}" name="{{ field }}" id="{{ field }}"
             placeholder="{{ name }}" value="{{ value|e }}" />    
    </div>    
  </div>      
{% endmacro %}

Diese Makro wird zum Erzeugen des HTML-Formulars in einer weiteren Templatedatei aufgerufen:

<form method="post" action="./new">  
  {{ macro.input('firstname', 'Firstname',        firstname,  'text',     firstname_class) }}
  {{ macro.input('lastname',  'Lastname',         lastname,   'text',     lastname_class) }}
  {{ macro.input('email',     'E-Mail',           email,      'text',     email_class) }}
  {{ macro.input('password',  'Password',         '',         'password', password_class) }}
  {{ macro.input('password2', 'Retype password',  '',         'password', password2_class) }}

  <div class="control-group">    
    <div class="controls">    
      <button class="btn" type="submit">Register
      </button>    
    </div>    
  </div>    
</form>

Das Makro erhält folgende Parameter:

  • field = Name des Formularfelds
  • name = ausgeschriebener Name des Feldes, welcher als Placeholder im Feld angezeigt wird
  • value = Anzeigen eines Wertes – hier der letzte Wert nach Validierungsfehler
  • type = Typ des HTML-Input-Elements (Textfeld oder Passwortfeld)
  • class = CSS-Fehlerklasse aus Validierung

Twig erzeugt anhand des Templates und Makros ein korrektes Markup zur Eingabe der Daten.

Validierung in PHP GUMP

Die Eingabedaten werden nun per POST-Request an die PHP Seite übertragen. Im nächsten Schritt wird ein GUMP-Validierungsobjekt erzeugt, welches Regeln für die Validierung erhält. Mein Beispielcode sieht wie folgt aus:

        $validator = New \GUMP();
        $post = $validator->sanitize($post);

        $validator->validation_rules(array(
          'firstname'   => 'required|alpha_numeric|max_len,100|min_len,2',
          'lastname'    => 'required|alpha_numeric|max_len,100|min_len,2',
          'password'    => 'required|max_len,100|min_len,6',
          'password2'   => 'required|max_len,100|min_len,6',
          'email'       => 'required|valid_email'
        ));
        $validator->filter_rules(array(
          'firstname'   => 'trim|sanitize_string',
          'lastname'    => 'trim|sanitize_string',
          'password'    => 'trim|sha1',
          'password2'   => 'trim|sha1',
          'email'       => 'trim|sanitize_email'
        ));

        $validated_data = $validator->run($post);
        $validation_errors = $validator->errors();

Die einzelnen Filter können Sie der GUMP Dokumentation entnehmen. In kurz gesagt wird in diesem Beispiel jeweils ein 2-100 Zeichen langer Name mit Alphanumerischen Zeichen erwartet. Das E-Mail-Feld muss eine gültige E-Mail enthalten. Weiterhin sind alle Felder Pflichtfelder.

Mittels dem Filter SHA1 wird das Passwort direkt verschlüsselt und mit sanitnize werden ungültige Zeichen entfernt. Das Validierungsergebnis ist ein Array von Fehlern in der Variable $validation_errors. Ist kein Fehler aufgetreten, ist die Variable FALSE. In diesem Fall können Sie die weitere Verarbeitung starten. Sollten Validierungsfehler aufgetreten sein, sollte natürlich wieder das obige Formular angezeigt werden.

Validierungsfehler anzeigen

Die Anzeige der Fehler gliedert sich in zwei Teile. Erstmal das Füllen des HTML-Formulars mit den zuvor eingegeben Werten und das Markieren der fehlerhaft validierten Eingabefelder.

    if(count($validation_errors) > 0) {
        $view->setData('firstname', $request->post('firstname'));
        $view->setData('lastname',  $request->post('lastname'));
        $view->setData('email',     $request->post('email'));

        // markiere alle CSS-Klassen wie im genannten Makro mit 'error'-Klasse
        foreach ($errors as $error)
        {
            $fieldname = $error['field'];
            $view->setData($fieldname.'_class', 'error'); 
        }
    }

Mit den ersten drei setData()-Aufrufen werden die alten Werte voreingetragen und mit der Schleife  wird für jedes fehlerhafte Feld die error-Klasse ergänzt, damit diese im Markup mit angezeigt wird.

Analog zum Anzeigen der jeweiligen Fehlerklasse in CSS können Sie auch weitere Elemente erstellen, wenn Sie einen Fehlertext anzeigen lassen möchten. Dazu müssen Sie nur das Makro um einen weiteren Parameter erweitern und diese Variable im Markup anzeigen lassen und je nach Bedarf im Fehlerfall füllen.

Fazit

Mit GUMP können viele Standardregeln bei der Validierung bedient werden, welche entweder mühsam in PHP selbst entwickelt werden müssten oder in verschiedenen anderen Plugins zusammengetragen werden sollten. Die Kombination von Twig und GUMP führt in diesem Fall zu einem schnellen Ergebnis. Beide Plugins sind kompakt und verbrauchen wenig Ressourcen, daher ist die Performance besser als große kombinierte Systeme wie PHPCake.

Empfehlen:    
   

Diskussion

2 Kommentare für “Formularvalidierung mit GUMP in PHP”

  1. Danke für den Code. Hat mir sehr weitergeholfen.

    Posted by Haiko | März 23, 2013, 15:18
  2. Good write up using GUMP! If there’s anything that you think could make GUMP a better validation library, please don’t hesitate to let me know.

    S

    Posted by Sean Nieuwoudt | April 19, 2013, 07:30

Kommentar schreiben


(Eingegebener Name wird unter Impressum/Kontakt der Website validiert)

*