
By: icro | Date: Nov 19 2009 08:50 | Format: PHP | Expires: never | Size: 25.03 KB | Hits: 966
- <?php
- class FORMVALIDATOR
- {
- // speichert die Validierungsregeln
- // speichert die POST-Werte
- // speichert die Fehler
- // Kopie des Input-Arrays
- // Kopie des Sprach-Arrays
- /**
- * param array config
- */
- public function __construct
- (
- )
- )
- {
- }
- /**
- * param $options array siehe values
- */
- public function register
- (
- 'name' => 'str: formfieldname',
- 'validate' => 'str: regexp-pattern-case',
- 'min' => 'int: minlength',
- 'max' => 'int: maxlength',
- 'mustmatch' => 'str: related-to-formfieldname',
- 'optional' => 'bool: field can be empty',
- 'callback' => 'str: callback-method',
- 'regexp' => 'str: regexp (related to $option:validate)'
- )
- )
- {
- // $options prfen:
- {
- }
- else
- {
- return false;
- }
- // parse key validate
- {
- switch($options['validate'])
- {
- case 'alpha':
- $rules['regexp'] = "|^[D ']*$|";
- break;
- case 'alpha_dash_underscore':
- $rules['regexp'] = "|^[a-zA-Z-_]*$|";
- break;
- case 'alpha_dash_underscore_dot':
- $rules['regexp'] = "|^[a-zA-Z-_.]*$|";
- break;
- case 'alphastring':
- $rules['regexp'] = "|^[D '-.]*$|";
- break;
- case 'alphanumeric':
- $rules['regexp'] = '|^[a-zA-Z0-9]*$|';
- break;
- case 'numeric':
- $rules['regexp'] = '|^[0-9]*$|';
- break;
- case 'email':
- $rules['regexp'] = '#^([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$#';
- break;
- case 'captcha':
- $rules['callback'] = 'this:checkCaptcha';
- break;
- }
- }
- // Regeln fr das aktuelle Feld speichern
- $this->rules[$options['name']] = $rules;
- // Post-Value fr das aktuelle Feld speichern
- $this->value[$options['name']] = $this->input[$options['name']];
- }
- /**
- * param formfieldname_prefix string prefix, welches ihr an den namen des Formfields setzen knnt
- * param languagecache_prefix string prefix, welches ihr an den key im Language-Cache setzen knnt
- * return int count(errors)
- */
- public function validate
- (
- $formfieldname_prefix = '',
- $languagecache_prefix = ''
- )
- {
- // Sind Regeln und Values ein Array,
- {
- // durchlaufe die Post-Values.
- foreach($this->value as $k => $v)
- {
- // Existiert der Feldname in den Regeln,
- {
- // ist der Feldname optional,
- {
- // und ist das Feld leer, bedarf es keiner weiteren berprfung... also weiter;
- }
- // ansonsten,
- ##########################################################################################
- # PRIMARY:
- # Prfe, ob das Feld leer sein darf.
- # Alle Felder sind grundstzlich Pflichtfelder, es sei denn,
- # 'optional' existiert und steht auf 'true'.
- ##########################################################################################
- {
- // ist er leer,
- {
- // und exisitiert ein mustmatchfeld und ist dieses bereits eine Fehlermeldung,
- {
- // gehe weiter, um nicht fr alle mustmatch-Felder Folgefehler auszugeben;
- continue;
- }
- else
- {
- // ansonsten, schreibe den Fehler
- // und schreibe den Labelnamen fr dieses Feld in den Fehler
- // und gehe weiter, um diesen Fehler nicht mit Folgefehlern zu berschreiben.
- continue;
- }
- }
- }
- ##########################################################################################
- # SECONDARY:
- # Prfe, ob das Feld eine RegExp hat und ob diese true auf den preg_match zurckgibt.
- ##########################################################################################
- {
- // exisitiert ein mustmatchfeld und ist dieses bereits eine Fehlermeldung,
- {
- // gehe weiter, um nicht fr alle mustmatch-Felder Folgefehler auszugeben;
- continue;
- }
- else
- {
- // ansonsten, schreibe den Standard-Fehler...
- // und schreibe den Labelnamen fr dieses Feld in den Fehler
- .' '.
- // ...gefolgt von dem RegExp-spezifischen Hinweis, was hier eigentlich rein darf
- $this->lang[$languagecache_prefix.'error_validate_'.$this->rules[$k]['validate']]
- ;
- // und gehe weiter, um diesen Fehler nicht mit Folgefehlern zu berschreiben.
- continue;
- }
- }
- ##########################################################################################
- # TERTIARY:
- # Prfe, ob der Feldwert der Mindestlnge entspricht.
- ##########################################################################################
- {
- // ist der Feldwert kleiner als die Mindestlnge,
- {
- // exisitiert ein mustmatchfeld und ist dieses bereits eine Fehlermeldung,
- {
- // gehe weiter, um nicht fr alle mustmatch-Felder Folgefehler auszugeben;
- continue;
- }
- else
- {
- // ansonsten, schreibe den Fehler
- // und schreibe den Minimalwert fr dieses Feld in den Fehler
- $this->lang[str_replace($formfieldname_prefix, $languagecache_prefix, $k)], $this->rules[$k]['min']);
- // und gehe weiter, um diesen Fehler nicht mit Folgefehlern zu berschreiben.
- continue;
- }
- }
- }
- ##########################################################################################
- # QUARTARY:
- # Prfe, ob der Feldwert die Maximallnge einhlt.
- ##########################################################################################
- {
- // ist der Feldwert grer als die Maximallnge,
- {
- // exisitiert ein mustmatchfeld und ist dieses bereits eine Fehlermeldung,
- {
- // gehe weiter, um nicht fr alle mustmatch-Felder Folgefehler auszugeben;
- continue;
- }
- else
- {
- // ansonsten, schreibe den Fehler
- // und schreibe den Maximalwert fr dieses Feld in den Fehler
- $this->lang[str_replace($formfieldname_prefix, $languagecache_prefix, $k)], $this->rules[$k]['max']);
- // und gehe weiter, um diesen Fehler nicht mit Folgefehlern zu berschreiben.
- continue;
- }
- }
- }
- ##########################################################################################
- # QUINARY:
- # Prfe, ob der Feldwert die den Wert des Mustmatch-Feldes enthlt.
- ##########################################################################################
- {
- // stimmen die Werte nicht berein,
- if($v != $this->value[$this->rules[$k]['mustmatch']])
- {
- // schreibe den Fehler,
- // schreibe den Labelnamen dieses Feldes in den Fehler
- // und den Labelnamen fr das Feld,
- // mit dem die Werte dieses Feldes bereinstimmen sollten
- $this->lang[str_replace($formfieldname_prefix, $languagecache_prefix, $this->rules[$k]['mustmatch'])]);
- // und gehe weiter, um diesen Fehler nicht mit Folgefehlern zu berschreiben.
- continue;
- }
- }
- ##########################################################################################
- # SENARY:
- # Prfe, ob der Feldwert ein Callback enthlt.
- ##########################################################################################
- {
- $callback = $this->rules[$k]['callback'];
- {
- // Methoden-Name
- // prfe, ob diese Klasse die geforderte Methode enthlt
- {
- // gibt das Callback false zurck
- if(!$this->$method($v))
- {
- // exisitiert ein mustmatchfeld und ist dieses bereits eine Fehlermeldung,
- {
- // gehe weiter, um nicht fr alle mustmatch-Felder Folgefehler auszugeben;
- continue;
- }
- else
- {
- // ansonsten, schreibe den Fehler
- $this->errors[$k] = $this->lang[$languagecache_prefix.'error_callback_'.$method];
- continue;
- }
- }
- else
- {
- // echo 'iwas, was passieren knnte, wenn das callback true zurckgibt';
- }
- }
- else
- {
- // vertippt?
- $this->errors[$k] = 'missing callback '.$method;
- continue;
- }
- }
- }
- }
- }
- }
- // gib die Summe der Fehler zurck
- }
- /**
- * return arary errors
- */
- public function errors()
- {
- return $this->errors;
- }
- /**
- * callback zum testen
- *
- * return bool
- */
- public function testCallbackEmail($email_address)
- {
- if
- (
- '#^([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$#',
- $email_address
- )
- )
- {
- return true;
- }
- else
- {
- return false;
- }
- }
- } // end class
- ##############################################################################################
- # DUMMIES
- ##############################################################################################
- /**
- * Konstruiert ein Dummy-Object, in welchem die Sprachvariablen fr multilingualen Support gespeichert werden.
- */
- class LANGUAGE
- {
- public function __construct()
- {
- // Dummy-Array fr Sprachvariablen
- 'global_text_contactform_name' => "user name",
- 'global_text_contactform_email' => "email address",
- 'global_text_contactform_email_retype' => "re-type email address",
- 'global_text_contactform_password' => "password",
- 'global_text_contactform_password_retype' => "re-type password",
- 'global_text_contactform_birthday_year' => "year",
- // Standard-fehler
- 'global_text_contactform_error_emptyfield' => "The field <em>%1$s</em> is empty.",
- 'global_text_contactform_error_length_minmax' => "The field <em>%1$s</em> must be between %2$d and %3$d characters in length.",
- 'global_text_contactform_error_length_min' => "The field <em>%1$s</em> must be %2$d characters in minimum length.",
- 'global_text_contactform_error_length_max' => "The field <em>%1$s</em> must be %2$d characters in maximum length.",
- 'global_text_contactform_error_mustmatch' => "The field <em>%1$s</em> do not match with <em>%2$s</em>. Please retype it in the specified box.",
- // regexp-Fehler
- 'global_text_contactform_error_validate_email' => "Your email address is invalid. Please type it again making sure the spelling is correct.",
- 'global_text_contactform_error_validate_alpha' => "Allowed are only letters.",
- 'global_text_contactform_error_validate_alpha_dash_underscore' => "Allowed are only a-z, A-Z, dash and underscore.",
- 'global_text_contactform_error_validate_alpha_dash_underscore_dot' => "Allowed are only a-z, A-Z, dash, underscore and dot.",
- 'global_text_contactform_error_validate_alpha_alphastring' => "Allowed are only letters, dash, dot and tick mark.",
- 'global_text_contactform_error_validate_alphanumeric' => "Allowed are only a-z, A-Z and 0-9.",
- 'global_text_contactform_error_validate_numeric' => "Allowed are only numbers.",
- // Callback-Fehler
- 'global_text_contactform_error_callback_testCallbackEmail' => "Generated by your Method testCallbackEmail(): Email-Address in incorrect.",
- );
- }
- }
- /**
- * Konstruiert ein Dummy-Object, in welchem die POST-Daten gespeichert werden.
- */
- class CORE
- {
- public function __construct()
- {
- // Dummy-Array an Stelle eingehender POST-Daten
- 'author_email' => 'icronosonic@hotmail.com',
- 'author_email_retype' => 'icronosonic@hotmail.com',
- 'author_password' => '1234567890',
- 'author_password_retype' => '1234567890',
- 'author_birthday_year' => '1900');
- }
- }
- ##############################################################################################
- # DUMMIES INITIALISIEREN
- ##############################################################################################
- $CORE = new CORE;
- $LANGUAGE = new LANGUAGE;
- ##############################################################################################
- # TEST
- ##############################################################################################
- /**
- * bergabe der POST und Sprach-Variablen an den Constructor
- */
- /**
- * Registrierung der Formfelder und bergabe der Validierungs-Parameter
- */
- $FFV->register(array('name' => 'author_name', 'validate' => 'alpha_dash_underscore', 'min' => 2, 'max' => 22));
- $FFV->register(array('name' => 'author_email_retype', 'validate' => 'email', 'mustmatch' => 'author_email'));
- $FFV->register(array('name' => 'author_password_retype', 'mustmatch' => 'author_password', 'min' => 8, 'max' => 32));
- $FFV->register(array('name' => 'author_birthday_year', 'validate' => 'numeric', 'optional' => true, 'min' => 4, 'max' => 4));
- /**
- * POST-Daten Validieren
- */
- if($FFV->validate('author_', 'global_text_contactform_') > 0) $test = $FFV->errors();
- ##############################################################################################
- # CALLBACK-TEST
- ##############################################################################################
- /**
- * bergabe der POST und Sprach-Variablen an den Constructor
- */
- /**
- * Registrierung des Feldes authorname als Email-Validierung im Callback
- */
- /**
- * POST-Daten Validieren
- */
- if($FFV->validate('author_', 'global_text_contactform_') > 0) $callbackTest = $FFV->errors();
- ##############################################################################################
- # FEHLERAUSGABE
- ##############################################################################################
- echo "<pre>";
- echo "</pre>";
Latest pastes
6 hours ago
2 days ago
3 days ago
7 days ago
13 days ago