Обикновено имам PDO, разширяващ клас, но моят клас е доста персонализиран. Ако го почистя и тествам, ще го публикувам по-късно. Ето решение за вашата система обаче.
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);
Това може да не е идеално и може да се нуждае от настройване. Той взема предвид, че $dbh
се настройва с PDO връзка. В очакване на някакви незначителни проблеми със синтаксиса, които направих, това трябва да работи.
РЕДАКТИРАНЕ
Наистина обаче мисля, че бих отишъл за Doctrine ORM (или друг ORM). Докато настройвате модела и добавяте цялата валидация там, тогава е толкова просто:
$table = new Table();
$table->fromArray($_POST);
$table->save();
Това трябва да попълни съдържанието лесно. Това разбира се е с ORM, като Doctrine.
АКТУАЛИЗИРАНО
Направих някои малки корекции в първия код, като например поставяне на isset
обратно и с помощта на rtrim
над substr
. Ще работя по предоставянето на макет на клас за разширение на PDO просто трябва да очертая начина, по който да го направя, и да направя някои тестове за модули, за да се уверя, че работи.