0251 / 590 837 15
info@a-coding-project.de

PEAR QuickForm – Formular mit Validierung (PHP)

Quickform Beispiel

PEAR QuickForm

Im PHP-Alltag verbringt man häufig viel Zeit mit der Validierung der Benutzereingaben. Ist auch alles angegeben? Passen die Daten?… Dort schafft das Paket HTML_QuickForm Abhilfe. Hier kann man ein Formular komplett ohne HTML erstellen. Mann kann außerdem Regeln zur Validierung einbauen, die dann entweder nur auf dem Server oder auf Client und Server ausgeführt werden. Ich würde mich immer für die zweite Variente entscheiden, weil der normale Benutzer ein fehlerhaftes Formular gar nicht zum Server abschickt und somit die Seite auch nicht neu laden muss.

Methoden der Klasse

Dies sind nur ein paar Methoden der Klasse.

addElement(String $type, String $name, String $label)

Fügt ein Element zum Formular hinzu. Das Element besteht aus einem Label und einem Input. Mit $type übergibt man den Typ (text, password, submit,…).,$name übergibt das Name-Attribut und $label die Beschriftung des Labels.

Beispiel: $form->addElement(‚text‘,’name‘,’Name‘);

Fügt $form eine Textbox mit den Label Name hinzu

addRule(String $element, String $errormessage, String $type, String $regex, String $location, Boolean $resetvalue)

Mit addRule kann man die Regeln für die Validierung erstellen.

  • $element: betroffens Element.
  • $errormessage: Text, der angezeigt wird falls die Regel nicht eingehalten wird
  • $type: Typ der Überprüfung. Möglich sind zum Beispiel regex (für Reguläre Ausdrücke) oder required (Element muss angegeben werden)
  • $regex: Regulärer Ausdruck. Wenn $type nicht regex ist kann dieser Teil ein Leerstring “ sein.
  • $location: Art der Überprüfung. ‚client‘ = Überprüfung auf Client
  • $resetvalue: Soll die Eingabe wenn sie fehlerhaft ist zurückgesetzt werden?

Beispiel 1: $form->addRule(’name‘,’Name ist erforderlich‘,’required‘,“,’client‘);

Prüft auf dem Client, ob der Name angegeben worden ist.

Beispiel 2: $form->addRule(’name‘,’Name darf nur aus Buchstaben bestehen‘,’regex‘,’#^[a-z]+$#i‘,’client‘,true);

name darf nur aus Buchstaben bestehen.

applyFilter(String $element, String $method)

Mit applyFilter kann man festlegen, was mit den Elementen nach dem hochladen passiert. Bei $elements kann man das betroffene Element übergeben. Will man alle Elemente haben kann man hier die Konstante __ALL__ angeben.

Beispiel: $form->applyFilter(‚__ALL__‘,’trim‘);

Entfernt mit der Funktion trim alle Leerzeichen vor und hinter allen Angaben.

display

Gibt das Formular aus.

Beispiel: $form->display();

setRequiredNote(String $text)

Gibt den Text an, der als Hinweis angezeigt werden soll

setJsWarnings (String $text)

Text, welcher beim Fehler ausgegeben werden soll

validate

Liefert zurück, ob das Formular korrekt übergeben wurde. Es ist die serverseitige Überprüfung.

Beispiel:

<?php
if($form->validate()){
  echo "Formular ist korrekt!"; 
}
?>

Hier wird „Formular ist korrekt!“ ausgegeben, wenn das Formular richtig ausgefüllt wurde.

Gesamtbeispiel

Da auf meinem externen Server kein PEAR ist, muss ich hier leider auf eine Ansicht des Beispiels verzichten. Der HTML-Code sollte aber ausgiebig genug sein.

Im Beispiel werde ich einfach ein Name-Feld erstellen, was aus Buchstaben bestehen muss. Der Name wird danach ausgegeben.

PHP-Code:

<?PHP
require_once('pear/PEAR/HTML/QuickForm.php');
$form = new HTML_QuickForm('testform','post',$_SERVER[PHP_SELF]);
$form->setRequiredNote('<span style="font-size:70%;color:#f00;">*</span>
       <span style="font-size:70%;">markiert ein erforderliches Feld</span>');
$form->setJsWarnings('Folgende Fehler sind aufgetreten',
                     'Bitte korrigieren Sie diese Felder');

$form->addElement('text','name','Name');
$form->addElement('submit','submit','Abschicken');
$form->applyFilter('__ALL__','trim');
$form->addRule('name','Name ist erforderlich',
               'required','','client');
$form->addRule('name','Name darf nur aus Buchstaben bestehen',
               'regex','/^(w*)$/','client',true);
if(false==$form->validate()){
  $form->display();
}
else{
  echo $_POST['name'];
}
?>

Beim Aufruf, bekomme ich folgenden HTML-Code zurück (Einrückung wurde verändert):

<script type="text/javascript">
//<![CDATA[
function validate_testform(frm) {
  var value = '';
  var errFlag = new Array();
  var _qfGroups = {};
  _qfMsg = '';

  value = frm.elements['name'].value;
  if (value == '' && !errFlag['name']) {
    errFlag['name'] = true;
    _qfMsg = _qfMsg + 'n - Name ist erforderlich';
  }

  value = frm.elements['name'].value;
  var regex = /^(w*)$/;
  if (value != '' && !regex.test(value) && !errFlag['name']) {
    errFlag['name'] = true;
    _qfMsg = _qfMsg + 'n - Name darf nur aus Buchstaben bestehen';
    var field = frm.elements['name'];
    field.value = field.defaultValue;
  }

  if (_qfMsg != '') {
    _qfMsg = 'Folgende Fehler sind aufgetreten' + _qfMsg;
    _qfMsg = _qfMsg + 'nBitte korrigieren Sie diese Felder';
    alert(_qfMsg);
    return false;
  }
  return true;
}
//]]>
</script>

<form action="/quickform_client.php" 
  method="post" name="testform" id="testform" 
  onsubmit="try { 
              var myValidator = validate_testform;
            } 
            catch(e) { 
              return true; 
            } 
            return myValidator(this);">
<div>
<table border="0">
  <tr>
    <td align="right" valign="top">
      <span style="color: #ff0000">*</span><b>Name</b>
    </td>
      <td valign="top" align="left">
        <input name="name" type="text" />
      </td>
  </tr>
  <tr>
    <td align="right" valign="top">
      <b></b>
    </td>
    <td valign="top" align="left">
      <input name="submit" value="Abschicken" type="submit" />
    </td>
  </tr>
  <tr>
    <td></td>
    <td align="left" valign="top">
      <span style="font-size:80%;color:#ff0000;">*</span>
      <span style="font-size:80%;">
        markiert ein erforderliches Feld      </span>
    </td>
  </tr>
</table>
</div>
</form>
Quickform Beispiel

Quickform Beispiel

Verwandte Themen

Kommentare

ManuelaC schrieb am 14.04.2010:

Nabend. Eine etwas unpassende Frage aber wie kann ich diesen Blog zu meinem Google Feedreader hinzufuegen? Finde keinen Link. Auf jedenfall ein toller Beitrag.

Stefan Wienströer schrieb am 15.04.2010:

Log dich bei Google ein und gehe auf Reader. Oben LInks steht Abonennt hinzufügen. Dort gibst du die folgende Adresse ein: http://blog.stevieswebsite.de/feed/

Pamy Tosta schrieb am 03.02.2011:

Herzlichen Dank, endlich habe ich das ganz verstanden :-)

rkofler schrieb am 16.11.2011:

thx! und für alle die ein Datum a la 2001-12-31 validieren möchten, zw. 1900-2099. <code> $form-&gt;addRule('datum','Datum bitte im Format 2000-12-31 eingeben.','regex','/^(19|20)[0-9][0-9]-(1[0-2]|0[1-9])-(3[0-1]|0[1-9]|[1-2][0-9])$/','client',true); </code>