Bonjour,

J'ai une question qui concerne les bonnes pratiques en PHP.
J'utilise la classe suivante :

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()); 
    } 
  } 
}
Le formulaire suivant :
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>
La page traitement.php
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.