Obvykle mám třídu rozšiřující PDO, ale moje třída je docela vlastní. Pokud to vyčistím a otestuji, zveřejním to později. Zde je však řešení pro váš systém.
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);
To nemusí být dokonalé a mohlo by to vyžadovat ladění. Bere v úvahu, že $dbh
je nastaven pomocí PDO Connection. Dokud jsem udělal nějaké drobné problémy se syntaxí, mělo by to fungovat.
UPRAVIT
Opravdu si však myslím, že bych šel do Doctrine ORM (nebo jiného ORM). Když nastavíte model a přidáte tam všechna ověření, je to stejně jednoduché jako:
$table = new Table();
$table->fromArray($_POST);
$table->save();
To by mělo obsah snadno naplnit. To je samozřejmě s ORM, jako je Doctrine.
AKTUALIZOVÁNO
Provedl jsem několik drobných úprav prvního kódu, jako je vložení isset
zpět a pomocí rtrim
přes substr
. Chystám se pracovat na poskytnutí makety třídy PDO Extension, stačí si rozvrhnout způsob, jak to udělat, a udělat nějaké testy jednotek, aby se ujistil, že to funguje.