Ik heb meestal een klas die PDO uitbreidt, maar mijn klas is behoorlijk aangepast. Als ik het heb opgeruimd en getest, zal ik het op een later tijdstip posten. Hier is echter een oplossing voor uw systeem.
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);
Dit is misschien niet perfect en zou kunnen worden aangepast. Het houdt er rekening mee dat $dbh
is ingesteld met een PDO-verbinding. In afwachting van eventuele kleine syntaxisproblemen die ik heb gemaakt, zou dat moeten werken.
BEWERKEN
Maar echt, ik denk dat ik voor Doctrine ORM (of een andere ORM) zou gaan. Terwijl u het model instelt en alle validatie daar toevoegt, is het zo simpel als:
$table = new Table();
$table->fromArray($_POST);
$table->save();
Dat zou de inhoud gemakkelijk moeten vullen. Dit is natuurlijk met een ORM, zoals Doctrine.
GE-UPDATE
Heeft wat kleine aanpassingen gedaan aan de eerste code, zoals het plaatsen van isset
terug en gebruik rtrim
over substr
. Ga aan de slag met het leveren van een mock-up van een PDO Extension-klasse, je moet gewoon de manier om het te doen en een aantal unit-tests doen om te controleren of het werkt.