Normalerweise habe ich eine Klasse, die PDO erweitert, aber meine Klasse ist ziemlich benutzerdefiniert. Wenn ich es gereinigt und getestet habe, werde ich es zu einem späteren Zeitpunkt posten. Hier ist jedoch eine Lösung für Ihr System.
function dbSet($fields, &$values) {
$set = '';
$values = array();
foreach ($fields as $field) {
if (isset($_POST[$field])) {
$set .= "`$field` = ?,";
$values[] = $_POST[$field];
}
}
return rtrim($set, ',');
}
$fields = explode(" ","name surname lastname address zip fax phone date");
$_POST['date'] = $_POST['y']."-".$_POST['m']."-"$_POST['d'];
$query = "UPDATE $table SET ".dbSet($fields, $values).", stamp=NOW() WHERE id=?";
$values[] = $id;
$dbh->prepare($query);
$dbh->execute($values);
Dies ist möglicherweise nicht perfekt und könnte optimiert werden. Dabei wird $dbh
berücksichtigt wird mit einer PDO-Verbindung eingerichtet. Bis auf kleinere Syntaxprobleme, die ich gemacht habe, sollte das funktionieren.
BEARBEITEN
Aber wirklich, ich denke, ich würde mich für Doctrine ORM (oder ein anderes ORM) entscheiden. Wenn Sie das Modell einrichten und dort die gesamte Validierung hinzufügen, ist es so einfach wie:
$table = new Table();
$table->fromArray($_POST);
$table->save();
Das sollte den Inhalt leicht füllen. Dies ist natürlich mit einem ORM, wie Doctrine.
AKTUALISIERT
Am ersten Code wurden einige kleinere Änderungen vorgenommen, z. B. isset
eingefügt zurück und mit rtrim
über substr
. Um an der Bereitstellung eines Modells einer PDO-Erweiterungsklasse zu arbeiten, müssen Sie nur die Vorgehensweise festlegen und einige Komponententests durchführen, um sicherzustellen, dass sie funktioniert.