Bonjour,
J'ai une question qui concerne les bonnes pratiques en PHP.
J'utilise la classe suivante :
Le formulaire suivant :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 class contact { private $id; private $titre; private $prenom; private $nom; /** * Méthode de mise à jour de l'objet en base de données */ public function update() { $sSQL = "UPDATE contacts SET titre = :titre, prenom = :prenom, nom = :nom WHERE id = :id"; try { $core = Core::getInstance(); $stmt = $core->dbh->prepare($sSQL); $stmt->bindValue(':id', $this->id, PDO::PARAM_INT); $stmt->bindValue(':prenom', $this->getPrenom(), PDO::PARAM_STR); $stmt->bindValue(':nom', $this->getNom(), PDO::PARAM_STR); $stmt->execute(); return true; } catch (PDOException $e) { throw new Exception($e->getMessage()); } } }
La page traitement.php
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 <form action="traitement.php" method="get"> <input type="hidden" name="id" value="<?=$oContact->getId()?>" /> <label for="prenom">Prénom</label><input type="text" name="prenom" value="<?=$oContact->getPrenom()?>" /> <input type="submit" value="Enregistrer" /> </form>
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 $oContact = new contact(); $oContact->setId($_REQUEST["id"]); $oContact->setPrenom($_REQUEST["prenom"]); if ($oContact->update()) echo "Enregistrement terminé.";
Le problème, c'est que je ne souhaite mettre à jour que le champ prénom. Sans modifier le champ nom.
Quelle est la bonne manière de faire une méthode update() qui ne met à jour que les champs demandés :
- Je relis les données en base, avant de mettre à jour l'objet dans traitement.php ; problème : ça me semble être une lecture de base sans réel intérêt, qui impacte inutilement les performance.
- Je construis la chaîne $sSQL de la classe, pour ne mettre à jour que les attributs non-null. problème : il m'arrive qu'un formulaire permette de passer volontairement un attribut à NULL. Et dans ce cas la méthode ne tiendra pas compte de ce champ.
Avez-vous une autre idée ?
Merci pour votre aide,
Gillou.
Partager