J'ai généralement une classe étendant PDO, mais ma classe est assez personnalisée. Si je le fais nettoyer et tester, je le posterai plus tard. Voici cependant une solution à votre système.
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);
Cela peut ne pas être parfait et pourrait nécessiter des ajustements. Il prend en compte que $dbh
est configuré avec une connexion PDO. En attendant les problèmes de syntaxe mineurs que j'ai rencontrés, cela devrait fonctionner.
MODIFIER
Vraiment cependant, je pense que j'irais pour Doctrine ORM (ou un autre ORM). Lorsque vous configurez le modèle et y ajoutez toute la validation, c'est aussi simple que :
$table = new Table();
$table->fromArray($_POST);
$table->save();
Cela devrait remplir le contenu facilement. C'est bien sûr avec un ORM, comme Doctrine.
MISE À JOUR
A apporté quelques modifications mineures au premier code, comme mettre isset
en arrière et en utilisant rtrim
sur substr
. Pour travailler sur la fourniture d'une maquette d'une classe d'extension PDO, il suffit de mettre en page la manière de le faire et de faire des tests unitaires pour s'assurer que cela fonctionne.