Files
2025-12-04 23:37:05 +01:00

69 lines
1.9 KiB
PHP

<?php
class Model{
protected $errorArray = [];
public function setValues($values) {
foreach ($values as $key => $value) {
$method = 'set' . str_replace(' ', '', ucwords(str_replace('_', ' ', $key)));
if (method_exists($this, $method)) {
$this->$method($value);
}
}
}
/**
* Automatische Validierung aller Attribute der Subklasse
* Prüft:
* - leere Felder
* - minimale Länge (2)
* - potenziell unsichere Zeichen
*/
protected function validate() {
$this->errorArray = [];
$reflection = new ReflectionClass($this); // Reflektiert Subklasse
$properties = $reflection->getProperties(ReflectionProperty::IS_PROTECTED);
foreach ($properties as $prop) {
$name = $prop->getName();
$value = $this->$name;
// 1) Pflichtfeldprüfung
if (empty($value)) {
$this->errorArray[$name] = "Bitte gib einen Wert für {$name} ein.";
continue;
}
// 2) Minimale Länge prüfen (nur Strings)
if (is_string($value) && strlen($value) < 2) {
$this->errorArray[$name] = "Der Wert von {$name} muss mindestens 2 Zeichen lang sein.";
}
// 3) Prüfen auf potenziell unsichere Zeichen (XSS / SQL-Injection)
if ($this->containsInvalidChars($value)) {
$this->errorArray[$name] = "Der Wert von {$name} enthält ungültige Zeichen.";
}
}
return $this->errorArray; // Fehler-Array zurückgeben
}
/**
* Prüft auf verdächtige Zeichen
*/
protected function containsInvalidChars($value) {
if (!is_string($value)) return false;
// einfache Regeln: < > ' " ; %
if (preg_match('/[<>\'"%;]/', $value)) {
return true;
}
return false;
}
}