Dafür macht man sich eine "Form" Klasse und erbt dann eine "Form_NewAddress" Klasse davon. Man könnte das dann so anwenden:
PHP-Quellcode:
if ($_SERVER['REQUEST_METHOD'] == "POST") {
$form = new Form_NewAddress($_POST); // Formular mit Daten
if ($form->is_valid()) { // geht interne Felder durch: is_email(...) && is_plz(...) && ...
$new = new DB_Adressen();
$new->set_data($form->cleaned_data); // cleaned_data: Array mit bereinigten Werten (zB "echte" Ints)
$new->save();
} else {
echo $form->render(); // gibt Fehlermeldung + vorher ausgefüllte Felder aus
}
} else {
$form = new Form_NewAddress(); // leeres Formular
echo $form->render();
}
Ohne mir jetzt genauer Gedanken über die Implementation gemacht zu haben, würde ich die NewAddress-Form-Klasse ungefähr so machen:
PHP-Quellcode:
class Form_NewAddress
extends Form
{
// wird von der Vaterklasse im __construct aufgerufen
protected function init_fields()
{
$this->add_field("
name",
new FormField_VarChar(255));
$this->add_field("
email",
new FormField_Email());
$this->add_field("
irgendwas_mit_regex",
new FormField_Regex("
.*hier kranken Regex einfügen.*"));
}
// Weitere Methoden werden alle geerbt. is_valid() geht die Felder durch und füllt
// cleaned_data. render() ruft alle render() Methoden der FormField-Instanzen auf
// die wiederum den HTML Code zurückgeben. __construct prüft speichert eventuell
// mitgegebene Daten in raw_data. Vaterklasse sollte übrigens abstract sein.
}
Ich hoffe du verstehst was ich meine. Ansonsten sag Bescheid, dann mach ich gern ein detaillierteres Codebeispiel.
DB_Adressen::save() macht übrigens allgemein wenig Sinn. Eine Instanz repräsentiert einen Datensatz der Tabelle. Die Klasse selbst repräsentiert die ganze Tabelle. Speichern kann man eigentlich nur einen Datensatz.
Liebe Grüße,
Valentin