php.de

Zurück   php.de > Webentwicklung > Software-Design

Software-Design Diskussionen auf Profi-Niveau: PHP Lösungen auf konzeptioneller Ebene

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 03.01.2009, 22:26  
Erfahrener Benutzer
 
Registriert seit: 06.09.2008
Beiträge: 189
#Avedo befindet sich auf einem aufstrebenden Ast
Standard

Hallo!

Entschuldigt das doppelte Posting, aber es hat sich bei mir etwas getan. Ich hatte ja vor das Formular auch über die Ausgabe des Objekts der Form-Klasse zu erstellen. Dazu habe ich die Klasse Form_Element um das Array $attributs und um die Methode addAttr() erweitert. So ist es mir möglich den verschiedenen Eingabefeldern erschiedene Attribute zuzuweisen. Damit ich aber überhaupt eine Ausgabe erhalte musste ich ersteinmal eine Klasse Form_Element_Text implementieren. Das habe ich auch getan. Die Klasse Form habe ich um die magische Methode __toString() erweitert.

Wo liegt also mein problem hört sich doch alles gut an? Das Problem ist, dass ich nicht weiß, was ich als action-Attribut in den Kopf des Formulars schreiben soll. Zudem wird bei folgendem Aufruf nur das erste Eingabefeld und sofort ein Fehler, und das auch noch mehrfach, angezeigt.
PHP-Code:
<?php
    error_reporting
(E_ALL E_STRICT);

    
// require needed classes
    
require_once('Form.php');
    require_once(
'Form_Element_Text.php');
    require_once(
'Validator_Length.php');
    require_once(
'Validator_Alnum.php');
    require_once(
'Validator_Alpha.php');

    
// Creating Form
    
$form = new Form();
    
    
// Creating Form Elements
    
$text1 = new Form_Element_Text('feld1');
    
$text1->addValidator( new Validator_Length(5,8) );
    
$text1->addValidator( new Validator_Alnum() );
    
    
$text2 = new Form_Element_Text('feld2');
    
$text2->addValidator( new Validator_Length(5,20) );
    
$text2->addValidator( new Validator_Alpha() );
    
    
// Adding Elements to form
    
$form->addElement($text1);
    
$form->addElement($text2);
    
    
// set form data
    
$form->setData($_POST);
    
    
// check for errors
    
if( $form->isValid() )
        echo 
"<b>Succesfull.</b><br />";
    else
        echo 
"<b>Error accured.</b><br />";
    
    
// print out form
    
echo $form;
?>
Wie kann ich diese Fehler beheben? Zudem würde mich interessieren, wie ich das Layout des Formulars anpassbarer machen kann. Wäre euch für eure Hilfe und weiter Anregungen und Kommentaren zu diesen Klassen sehr dankbar. Den Code der entsprechenden Klassen findet ihr unten. Ein großes Danke an dieser Stelle nochmal allen, die mir bisher geholfen haben und vorallem robo47 für den sehr sehr hilfreichen Code.

MfG, Andy

PHP-Code:
<?php
error_reporting
(E_ALL E_STRICT);

/***
* Class Form 
*
* The Form class supports 
* the handling of different forms.
* You are able to assign different elements,
* to each form.
*  
* @package Form
* @version 0.1
**/  
Class Form
{
    
// protected class variables
    
protected $elements = array();
    protected 
$errors = array();

    
/**
    * addElement() - Adds an element to the form
    *
    * @access public
    * @param Obj $element
    * @return NONE
    */
    
public function addElement($element)
    {
        
// create hash
        
$hash md5(get_class($element));
        
        
// check if entry exists
        
if( !isset($this->validators[$hash]) )
        {
            
$this->elements[$hash] = $element;
        }
    }

    
/**
    * setData() - Assigns data to the form (e.g. $_POST)
    *
    * @access public
    * @param Arr $data
    * @return NONE
    */
    
public function setData($data)
    {
        
// iterate over all elements
        
foreach ($this->elements as $element)
        {
            
// ierate over data array
            
foreach($data as $key => $value)
            {
                
// check if element exists
                
if( $key == $element->getName() )
                {
                    
// assign value
                    
$element->setValue($value);
                    break;
                }
            }
        }
    }

    
/**
    * isValid() - Checks if any errors accured in this form
    *
    * @access public
    * @return Boolean
    */
    
public function isValid()
    {
        
// initiate return parameter
        
$isValid true;
        
        
// check if all elements are valid
        
foreach($this->elements as $element)
        {
            
// check if element is valid
            
$elementValid $element->isValid();
            
            
// element is not valid
            
if( false === $elementValid 
            {
                
// set return parameter
                
$isValid false;
                
                
// get error messages
                
$this->errors[$element->getName()] = $element->getErrors();
            }
        }
        
        return 
$isValid;
    }

    
/**
    * getErrors() - Returns the errors accured in a form
    *
    * @access public
    * @return Array
    */
    
public function getErrors()
    {
        return 
$this->errors;
    }
    
    
/**
    * __toString() - Returns the html-code of the form
    *
    * @access public
    * @return NONE
    */
    
public function __toString()
    {    
        
// initiate code-variable
        
$html "\n\n<!-- start PHP created form -->\n";
        
        
// start form
        
$html .= '<form action="" method="">';
        
        
// get all form fields
        
foreach($this->elements as $element)
        {            
            
// element is not valid
            
if( $element->isValid() === false 
            {
                foreach(
$element->getErrors() as $error)
                {
                    
$html .= "\n" $error "<br />";
                }
            }
            
            
// check if element is valid
            
$html .= sprintf("\n%s: %s"$element->getName(), $element);
        }
        
        
// end form
        
$html .= "\n</form>\n";
        
$html .= "<!-- end PHP created form -->\n\n";
        
        return 
$html;
    }
}

/***
* Abstract Class Form_Element 
*
* The Form_Element class supports 
* the handling of different input fields.
* You are able to assign validators,
* names and values to each input element.
*  
* @package Form_Element
* @version 0.1
**/  
Abstract Class Form_Element
{
    
// protected class variables
    
protected $name '';
    protected 
$value '';
    protected 
$attributs = array();
    protected 
$validators = array();
    protected 
$errors = array();

    
/**
    * Constructor - Is called when the class is instanced
    *
    * @access public
    * @param Str $name
    * @return NONE
    */
    
public function __construct($name)
    {
        
$this->name $name;
    }

    
/**
    * setValue - Assigns value to an element
    *
    * @access public
    * @param Mix $value
    * @return NONE
    */
    
public function setValue($value)
    {
        
$this->value $value;
    }
    
    
/**
    * addValidator() - Adds an validator to an element
    *
    * @access public
    * @param Obj $validator
    * @return NONE
    */
    
public function addValidator($validator)
    {
        
// create hash
        
$hash md5(serialize(get_object_vars($validator)));
        
        
// check if entry exists
        
if( !isset($this->validators[$hash]) )
        {
            
$this->validators[$hash] = $validator;
        }
    }
    
    
/**
    * addAttr() - Adds an attribut to an element
    *
    * @access public
    * @param Str $key
    * @param Mix $val
    * @return NONE
    */
    
public function addAttr($key$val)
    {        
        
// check if entry exists
        
if( !isset($this->attributs[$key]) )
        {
            
$this->attributs[$key] = $val;
        }
    }
    
    
/**
    * getName() - Returns the name of an element
    *
    * @access public
    * @return NONE
    */
    
public function getName()
    {
        return 
$this->name;
    }

    
/**
    * getName() - Returns the value of an element
    *
    * @access public
    * @return NONE
    */
    
public function getValue()
    {
        return 
$this->value;
    }
    
    
/**
    * isValid() - Checks if any errrors accured in this element
    *
    * @access public
    * @return Boolean
    */
    
public function isValid()
    {
        
// initiate return parameter
        
$isValid true;
        
        
// check value with the assigned validators
        
foreach( $this->validators as $validator 
        {
            
// invalid value
            
if( !$validator->isValid($this->value) )
            {
                
// set return parameter
                
$isValid false;
                
                
// get error messages
                
$errors $validator->getErrors();
                
                
// save errors
                
foreach($errors as $error
                {
                    
$this->errors[] = $error;
                }
            }
        }
        
        return 
$isValid;
    }

    
/**
    * getErrors() - Returns the errors accured in an element
    *
    * @access public
    * @return Array
    */
    
public function getErrors()
    {
        return 
$this->errors;
    }
}

/***
* Class Form_Element_Text 
*
* The Form_Element class 
* represents a text-input filed.
* You are able to assign a name, a value
* and different validators to each input element.
*  
* @package Form_Element
* @subpackage Form_Element_Text
* @version 0.1
**/  
Class Form_Element_Text extends Form_Element
{
    
/**
    * __toString() - Returns the html-code of the input field
    *
    * @access public
    * @return NONE
    */
    
public function __toString()
    {
        
// initiate code-variable
        
$html '<input type="text"';
        
        
// add name
        
$html .= ' name="' $this->name '"';
        
        
// add value
        
$html .= ' value="' $this->value '"';
        
        
// prepare attributs
        
foreach($this->attributs as $key => $val)
        {
            
$html .= ' ' $key '="' $val '"';
        }
        
        
// close tag
        
$html .= ' />';
        
        return 
$html;
    }
}
?>
__________________
I'm so tired of slitting the throats of people calling me a violent psychopath.

Geändert von #Avedo (03.01.2009 um 22:51 Uhr).
#Avedo ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 03.01.2009, 23:00  
Moderator
 
Benutzerbild von robo47
 
Registriert seit: 03.09.2004
Beiträge: 11.798
PHP-Kenntnisse:
Fortgeschritten
robo47 ist ein wunderbarer Anblickrobo47 ist ein wunderbarer Anblickrobo47 ist ein wunderbarer Anblickrobo47 ist ein wunderbarer Anblickrobo47 ist ein wunderbarer Anblickrobo47 ist ein wunderbarer Anblickrobo47 ist ein wunderbarer Anblickrobo47 ist ein wunderbarer Anblick
Standard

Betreibst du irgendeine Art von tests ? Oder schreibst du den Code einfach so runter ohne irgendwie zu testen ?
Gerade bei größeren Komponenten ist das sinnvoll!

PHP-Code:
    public function addElement($element)
    {
        
// create hash
        
$hash md5(get_class($element));
        
        
// check if entry exists
        
if( !isset($this->validators[$hash]) )
        {
            
$this->elements[$hash] = $element;
        }
    } 
da wird elemente + validatoren durcheinandergeschmissen.

und md5(get_class( ... ));
damit würdest du wenn das ernst gemeint ist deiner Form genau 1 Element jeder Klasse hinzufügen können, keine 2 Text-Felder oder was auch immer.

Bevor du hier so eine riesen Klasse oder sogar mehrere postest, schreib doch einfach mal ein paar tests ob sie das macht was sie soll ? -> phpunit oder auch simpletest wären da vielleicht nützlich.
robo47 ist offline   Mit Zitat antworten
Alt 03.01.2009, 23:16  
Erfahrener Benutzer
 
Registriert seit: 06.09.2008
Beiträge: 189
#Avedo befindet sich auf einem aufstrebenden Ast
Standard

Hallo!

Danke für deine Hilfe. Es erscheint nun auch das erste Formularfeld.

Natürlich versuche ich die Klassen zu testen jedoch weiß ich nicht, wie ich solche Klassen anders testen sollte als kleine Beispiel-Aufrufe zu schreiben. Werde mir mal PHPUnit ansehen.

Leider bleibt mein altes problem, dass die fehlermeldungen bereits ausgegeben werden, obwohl ich das Formular noch garnicht abgesendet habe. Wie kann ich das geschickt verhindern?

Des weiteren wird die Fehlermeldung, dass die Eingabe zu kurz ist 3 mal für jedes Feld angezeigt. Woran kann das liegen?

Zudem erhalte ich für
PHP-Code:
ereg("[[:alnum:]]{".strlen($value)."}"$value
das Warning
Code:
Warning:  ereg() [function.ereg]: REG_EMPTY in /home/www/web274/html/admin/classes/Validator_Alnum.php on line 31 
Wie kann ich diesen Fehler verhindern? Oder gibt es eine andere bessere Funktion mittels der ich auf alphanumerische Eingaben zu prüfen kann?

MfG, Andy
__________________
I'm so tired of slitting the throats of people calling me a violent psychopath.
#Avedo ist offline   Mit Zitat antworten
Alt 03.01.2009, 23:31  
erc
Erfahrener Benutzer
 
Registriert seit: 02.01.2009
Beiträge: 730
PHP-Kenntnisse:
Fortgeschritten
erc wird schon bald berühmt werden
Standard

Zitat:
Zitat von #Avedo Beitrag anzeigen
Leider bleibt mein altes problem, dass die fehlermeldungen bereits ausgegeben werden, obwohl ich das Formular noch garnicht abgesendet habe. Wie kann ich das geschickt verhindern?
Versuch mal das Formular zu prüfen nach dem es gesendet wurde und nicht davor

PHP-Code:
[...]
    
$form->addElement($text2);
       
    if(
$_POST) {    
        
// set form data
        
$form->setData($_POST);
        
        
// check for errors
        
if( $form->isValid() )
            echo 
"<b>Succesfull.</b><br />";
        else
            echo 
"<b>Error accured.</b><br />";
    }
    
    
// print out form
    
echo $form
erc ist offline   Mit Zitat antworten
Alt 03.01.2009, 23:37  
Erfahrener Benutzer
 
Registriert seit: 06.09.2008
Beiträge: 189
#Avedo befindet sich auf einem aufstrebenden Ast
Standard

Danke für deine Antwort. Hat mir bei der Lösung des Problems sehr geholfen. Dieser Fehler ist also behoben.

Mich würde nun aber noch interessieren, wie ich eine Unterscheidung in optionale und Pflichtfelder hinbekomme. Das muss ja über einen optionalen Parameter binding lösbar sein. Würde es reichen, die abstrakte Klasse um eine Methode zu erweitern, die überprüft ob eine Eingabe gemacht wurde oder nicht und dann wenn dies nicht der Fall ist und binding auf false gesetzt ist einfach immer true für isValid() zurückgebe? So könnte ich auch verhindern, dass für solche Felder, wenn sie leer sind Fehler ausgegeben würden. Zudem kann ich dann eine Zusätzliche Fehlermeldung ausgeben, wenn ein Pflichtfeld nicht ausgefüllt wurde. Habe ich etwas übersehen?

Sitze nun noch an einer geeigneten Lösung um Formatierungen für das Formular festlegen zu können. Eine Methode addAttr(), die Attribute für das <form>-Tag festlegt ist sicher hilfreich jedoch könnte es ja sein, dass vor einem Formularfeld eine Beschreibung stehen soll, oder dass das Formular in eine Tabelle gepackt wreden soll. Wie kann ich das ermöglichen? Kurz, wie schaffe ich es, dass das Formular zum Beispiel wie hier anpassbar ist?
MfG, Andy
__________________
I'm so tired of slitting the throats of people calling me a violent psychopath.

Geändert von #Avedo (04.01.2009 um 05:05 Uhr).
#Avedo ist offline   Mit Zitat antworten
Alt 04.01.2009, 11:44  
Erfahrener Benutzer
 
Registriert seit: 28.09.2008
Beiträge: 1.127
PHP-Kenntnisse:
Fortgeschritten
Koala befindet sich auf einem aufstrebenden Ast
Standard

ich hab mir auch eine Validierungsklasse geschrieben.

Allerdings eine reine Validierung und kein Mischmasch von
Formularerzeugung und Vailiderung.

So hab ich die maximale Freiheit bei der Darstellung des Formulars
(die Dinge die Du angesprochen hast: Tabellenlayout, Beschreibungstexte etc.)

Pflichtfelder erkennt die klasse anhand der Namen der input-Felder
(vorangestelltes "r_").

Die Methode displayErrors() liefert einen String mit den Fehlern zurück.

Zusätzlich gibt es die Methoden getJSErrors() um JS-Alerts anzuzeigen und getCSSErrors(), mit der dynamisch CSS erzeugt wird, damit die unausgefüllten Pflichtfelder rot umrandet werden.

Wenn Du willst such ich Dir die Klasse raus und poste sie hier.

ereg ist übrigens veraltet ...
Koala ist offline   Mit Zitat antworten
Alt 04.01.2009, 13:44  
Erfahrener Benutzer
 
Registriert seit: 06.09.2008
Beiträge: 189
#Avedo befindet sich auf einem aufstrebenden Ast
Standard

HAst du dir die Posts im Thread mal durchgelesen? Es gibt keinen Mischmasch von Formularausgabe und Validierung. Wir reden hier nicht von einer Klasse, sondern von über 20 Klassen. Eine Klasse Form, eine Form_Element, eine Klasse für jedes Formular-Element(Text, Hidden, etc.), eine Klasse Validator und eine Klasse für jeden spezifischen Validator. Flexibler kann es nicht gehen. Die Validatoren sind so auch in anderen Klassen einsetzbar. Zum Beispiel bei der Validierung von per URL übergebenen Parametern oder der Verarbeitung von Stream-Daten. Eine Klasse wäre viel zu statisch. Das habe ich nun auch begriffen. Habe ja am Anfang dieses Threads es auch in einer Klasse gelöst.
MfG, Andy
__________________
I'm so tired of slitting the throats of people calling me a violent psychopath.
#Avedo ist offline   Mit Zitat antworten
Alt 04.01.2009, 14:07  
Erfahrener Benutzer
 
Registriert seit: 28.09.2008
Beiträge: 1.127
PHP-Kenntnisse:
Fortgeschritten
Koala befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Es gibt keinen Mischmasch von Formularausgabe und Validierung.
oh - sorry.

Dann versteh ich aber das hier nicht:
Zitat:
Sitze nun noch an einer geeigneten Lösung um Formatierungen für das Formular festlegen zu können. Eine Methode addAttr(), die Attribute für das <form>-Tag festlegt ist sicher hilfreich jedoch könnte es ja sein, dass vor einem Formularfeld eine Beschreibung stehen soll, oder dass das Formular in eine Tabelle gepackt wreden soll. Wie kann ich das ermöglichen? Kurz, wie schaffe ich es, dass das Formular zum Beispiel wie hier anpassbar ist?
Zitat:
Eine Klasse Form, eine Form_Element, eine Klasse für jedes Formular-Element(Text, Hidden, etc.), eine Klasse Validator und eine Klasse für jeden spezifischen Validator. Flexibler kann es nicht gehen.
flexibler geht es natürlich ohne form- und form-element-Klassen, indem Du das Formular in der view/action definerst. so hast Du maximale Freiheit bei der Gestaltung.
Wenn Du alle Eventualitäten abdecken willst bei der Gestaltung von Formularen,
dann hast Du gigantisch viel zu Programmieren.

Und zu der Sache mit den Pflichtfeldern hatt ich ja geschrieben wie Du es machen kannst.

Geändert von Koala (04.01.2009 um 14:11 Uhr).
Koala ist offline   Mit Zitat antworten
Alt 04.01.2009, 14:38  
Neuer Benutzer
 
Registriert seit: 27.12.2008
Beiträge: 23
Bleda befindet sich auf einem aufstrebenden Ast
Standard

Eine Möglichkeit wäre es, Fieldset-Objekte zwischen das Formularobjekt und die Eingabefelder zu schieben. Dann musst du allerdings vermutlich die Kommunikation zwischen Formular und Eingabefeldern anpassen. Ausserdem würde ich mir noch eine Möglichkeit lassen, mehrere Eingabefelder als Gruppe vorzuverarbeiten, so dass nur noch ein Wert zurückkommt. Beispiele hierfür wären eine Datumseingabe mittels 3 Select-Listen (Tag/Monat/Jahr) oder eine Auswahlliste mit einem "andere"-Textfeld. Die könntest du auch als Klassen definieren, die ihrerseits Eingabefelder enthalten und deren Werte zu einem oder mehreren eigenen Rückgabewerten verrechnen.

Die Hierarchie wäre dann etwa folgende:

Formular ---> Fieldset ---> Gruppe ---> Eingabefelder

Validiert wird dann 3 mal, nämlich zuerst auf der Eingabefelder-Stufe, dann wird der Rückgabewert der Gruppe berechnet und validiert und zu guter Letzt können auf Formularebene noch Beziehungen zwischen den Werten gecheckt werden.

Nicht dass ich das schonmal so gemacht hätte, aber ich plane ja auch gerade eine Formularklasse und ich hab halt manchmal etwas zuviel Fantasie.

Was den View angeht: das finde ich auch ziemlich schwierig, das wirklich zu trennen. Die Verarbeitung der Formularwerte gehört ganz klar nicht zum View, auch die definition der geforderten Eingabefelder nicht. Die Darstellung ist jedoch ziemlich stark von der Definition abhängig. Aber das Formular im View zu definieren... da hab ich irgendwie das Gefühl, dass es bessere Lösungen geben muss.
Bleda ist offline   Mit Zitat antworten
Alt 04.01.2009, 14:54  
Erfahrener Benutzer
 
Registriert seit: 28.09.2008
Beiträge: 1.127
PHP-Kenntnisse:
Fortgeschritten
Koala befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
auch die definition der geforderten Eingabefelder nicht.
stimmt - gehört wohl eher in den Controller.

Zitat:
Aber das Formular im View zu definieren... da hab ich irgendwie das Gefühl, dass es bessere Lösungen geben muss.
mag sein, aber Du hast eben die größtmögliche Freiheit.

Deine fieldset-Objekte machen sich in einem Tabellenlayout z.B. nicht gut.
Koala ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
PHP: Formular Generator Zergling-new Tutorials 16 06.07.2010 03:14
Ergebnis von Formular in iFrame zeigen PsychoEagle HTML, Usability und Barrierefreiheit 2 22.07.2009 21:07
Problem mit Formular, Daten an datenbank senden Aurec PHP Tipps 2008 11 20.11.2008 18:17
Formular Pflichtfelder für Frontpage Formular erstellen Caruso JavaScript, Ajax und mehr 5 21.06.2008 09:17
Wert aus Textfeld in neues Formular übernehmen (kein Submit) PsychoEagle HTML, Usability und Barrierefreiheit 9 02.01.2007 14:51
formular includen samspa5 PHP Tipps 2006 13 18.03.2006 11:37
[Erledigt] Formular in Formular HTML, Usability und Barrierefreiheit 4 19.10.2005 12:18
[Erledigt] PHP Formular ~~wichtig~~ PHP Tipps 2005 27 29.05.2005 19:38
[Erledigt] Im Formular user abfragen? Datenbanken 3 06.01.2005 10:51
[Erledigt] PHP Formular - Daten an nächsten Schritt weiter geben - Wie? PHP Tipps 2005 14 02.01.2005 20:05
[Erledigt] Daten in einem Formular ausgeben und ändern PHP Tipps 2004-2 7 07.12.2004 17:22
Wie implementiere ich mein Email Formular? PHP Tipps 2004-2 2 14.11.2004 17:02
Brauche PHP Formular Beitragsarchiv 9 16.08.2004 16:23
[Erledigt] Formular mit Daten werden auf anderer Seite zusammengefasst PHP Tipps 2004 4 15.08.2004 15:44
[Erledigt] Daten in neuem Formular anzeigen PHP Tipps 2004 6 21.07.2004 10:44

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
php validierung pflichtfelder, formular zend validator mit nur 4 werten festlegen, formularfeld bei fehler umranden, form validierung php, http://www.php.de/software-design/50128-formular-validierung-4.html, formular php fehler rot umranden, file-input validiert nicht eznd, html input validierung, zend forms abhängige pflichtfelder, klasse zur formulardatenvalidierung, zend filter input abhängige felder, formulareingaben überprüfen rot umranden php, formular rot umranden php, zend validierung abhängiger felder, validierung formulare, zend validate abhängige parameter, zend geterrors ausgeben, framework pflichtfelder warnung php, validierung 3 mal testen, php formular validierung dynamisches css

Alle Zeitangaben in WEZ +1. Es ist jetzt 05:33 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum