Di solito ho una classe che estende PDO, ma la mia classe è piuttosto personalizzata. Se lo faccio pulire e testare lo posterò in un secondo momento. Tuttavia, ecco una soluzione per il tuo sistema.
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);
Questo potrebbe non essere perfetto e potrebbe essere necessario un ritocco. Tiene conto che $dbh
è configurato con una connessione PDO. In attesa di eventuali problemi di sintassi minori che ho riscontrato, dovrebbe funzionare.
MODIFICA
In realtà, penso che sceglierei Doctrine ORM (o un altro ORM). Mentre imposti il modello e aggiungi lì tutta la convalida, è semplice come:
$table = new Table();
$table->fromArray($_POST);
$table->save();
Ciò dovrebbe popolare facilmente i contenuti. Questo è ovviamente con un ORM, come Doctrine.
AGGIORNATO
Ha apportato alcune piccole modifiche al primo codice, come inserire isset
indietro e utilizzando rtrim
su substr
. Per lavorare per fornire un modello di una classe di estensione PDO, devo solo definire il modo per farlo e fare alcuni test unitari per assicurarti che funzioni.