Jag har vanligtvis en klass som utökar PDO, men min klass är ganska anpassad. Om jag får den städad och testad kommer jag att lägga upp den vid ett senare tillfälle. Här är dock en lösning på ditt 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);
Detta kanske inte är perfekt och kan behöva tweaking. Den tar hänsyn till att $dbh
är inställd med en PDO-anslutning. I avvaktan på några mindre syntaxproblem som jag gjorde, borde det fungera.
REDIGERA
Men egentligen tror jag att jag skulle gå för Doctrin ORM (eller en annan ORM). När du ställer in modellen och lägger till all validering där, är det så enkelt som:
$table = new Table();
$table->fromArray($_POST);
$table->save();
Det borde fylla innehållet lätt. Detta är naturligtvis med en ORM, som Doctrine.
UPPDATERAD
Gjorde några mindre justeringar av den första koden, som att sätta isset
tillbaka och använda rtrim
över substr
. Ska jobba på att tillhandahålla en modell av en PDO-tilläggsklass måste bara lägga upp sättet att göra det och göra några enhetstester för att se till att det fungerar.