Jeg har normalt en klasse, der udvider PDO, men min klasse er ret tilpasset. Hvis jeg får det ryddet op og testet, vil jeg poste det på et senere tidspunkt. Her er dog en løsning til dit 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);
Dette er muligvis ikke perfekt og kunne bruge tweaking. Det tager højde for, at $dbh
er opsat med en PDO-forbindelse. Afventende mindre syntaksproblemer, jeg lavede, burde det virke.
REDIGER
Men jeg tror faktisk, at jeg ville gå efter Doctrin ORM (eller en anden ORM). Når du opsætter modellen og tilføjer al valideringen der, så er det så enkelt som:
$table = new Table();
$table->fromArray($_POST);
$table->save();
Det skulle nemt udfylde indholdet. Dette er selvfølgelig med en ORM, som Doctrine.
OPDATERET
Foretog nogle mindre justeringer af den første kode, såsom at sætte isset
tilbage og ved hjælp af rtrim
over substr
. At gå i gang med at levere en mock-up af en PDO-udvidelsesklasse skal bare layoute måden at gøre det på og lave nogle enhedstests for at sikre, at det virker.