<?php
error_reporting(E_ALL ^ E_NOTICE);
//Prüfen ob Formular versendet wurde
//Wenn nicht, nur Formular anzeigen, ansonsten Code ausführen
if (isset($_POST["submit"])) {
//Definition erstellen
$check = new Checker('vorname');
$check->addDef(Checker::C_MANDATORY_FIELD, true);
$check->addDef(Checker::C_MIN_LENGTH, 3);
$check->addDef(Checker::C_MAX_LENGTH, 15);
$check->addDef(Checker::C_REGEXP, "/^[a-zA-Z]+$/s", 'Dieses Feld darf nur Buchstaben beinhalten');
$checks['vorname'] = $check;
$check = new Checker('nachname');
$check->addDef(Checker::C_MANDATORY_FIELD, true);
$check->addDef(Checker::C_MIN_LENGTH, 3);
$check->addDef(Checker::C_MAX_LENGTH, 20);
$check->addDef(Checker::C_REGEXP, "/^[a-zA-Z]+$/s", 'Dieses Feld darf nur Buchstaben beinhalten');
$checks['nachname'] = $check;
//Eingabe prüfen
$valid = true;
foreach($checks as $name => $check){
$htmlMessages = array();
$valid = $check->check($_POST[$name]) ? $valid : false;
$htmlMessages[$name] = $check->getHtmlMessage();
}
Class Checker{
/**
* Konstanten um den Check-Type zu definieren
*/
const C_MANDATORY_FIELD = 'mandatory';
const C_MIN_LENGTH = 'min';
const C_MAX_LENGTH = 'max';
const C_REGEXP = 'regexp';
protected $messages = array();
protected $checks = array();
protected $fieldName;
protected $htmlMessage;
public $valid = false;
public function __construct($fieldName){
$this->fieldName = $fieldName;
}
/**
* Definition hinzufügen
* @param $type String Eine der Klassenkonstanten elche dei Check-Typen definieren
* @param $arg Variant Argument zur Prüfung
* @param $msg String Optional: Fehlermessage
*/
public function addDef($type, $arg, $msg = NULL){
$this->checks[] = array(
'type' => $type,
'arg' => $arg,
'msg' => $msg);
}
/**
* Führt die Prüfung eines Wertes durch
* @param $value Variant Zu prüfenden Wert
* @return Boolean
*/
public function check($value){
$this->messages = array();
$this->valid = true;
foreach($this->checks as $check){
$checkFunction = $check['type'];
$this->valid = $this->$checkFunction($check['arg'], $value, $check['msg']) ? $this->valid : false;
}
if($this->valid){
$this->htmlMessage = "Feld {$this->fieldName} mit dem Inhalt '{$value}' ist gültig";
}else{
$this->htmlMessage = "Feld {$this->fieldName} mit dem Inhalt '{$value}' ist ungültig:<br />";
$this->htmlMessage .= implode('<br />', $this->messages);
}
return $this->valid;
}
/**
* Gibt die HTML-Message der Prüfung aus
* @return String
*/
public function getHtmlMessage(){
return $this->htmlMessage;
}
/**
* Interne Funktion um ggf die Message in den Array zu schreiben
* @param $invalid Boolean Angabe ob die Prüfung fehlgeschlagen ist
* @param $message String
* @return Boolean Der Valid-Wert.
*/
protected function setFail($invalid, $message){
if($invalid) $this->messages[] = $message;
return !$invalid;
}
/**
* Prüfung auf Mandatory
* @param $arg Boolean Angabe ob ein Wert enthalten sein muss
* @param $value Variant Prüfwert
* @param $msg String Optional
* @return Boolean
*/
protected function mandatory($arg, $value, $msg = NULL){
if (!isset($msg)) $msg = 'Dieses Feld ist ein Plichtfeld';
return $this->setFail($arg && empty($value), $msg);
}
/**
* Prüfung auf Minimum
* @param $arg Integer Minimum
* @param $value Variant Prüfwert
* @param $msg String Optional
* @return Boolean
*/
protected function min($arg, $value, $msg = NULL){
if (!isset($msg)) $msg = "Dieses Feld muss mindestens {$arg} Zeichen beinhalten";
return $this->setFail(strlen($value) < $arg, $msg);
}
/**
* Prüfen auf Maximum
* @param $arg Integer Maximum
* @param $value Variant Prüfwert
* @param $msg String Optional
* @return Boolean
*/
protected function max($arg, $value, $msg = NULL){
if (!isset($msg)) $msg = "Dieses Feld darf maximal {$arg} Zeichen beinhalten";
return $this->setFail(strlen($value) > $arg, $msg);
}
/**
* Prüfen mittels Regulärem Ausdruck
* @param $arg String Pattern
* @param $value Variant Prüfwert
* @param $msg String Optional
* @return Boolean
*/
protected function regexp($arg, $value, $msg = NULL){
if (!isset($msg)) $msg = "Dieses Feld muss dem Regulären Ausdruck {$arg} entsprechen";
return $this->setFail(preg_match($arg, $value)==0, $msg);
}
}
} else {echo "Nicht gesendet.";}
?>