Modification de la base de données
Bonjour,
Je ne comprends pas comment modifier les enregistrement d'une base de données à partir d'un formulaire php. Voici ce que j'ai essayé :
J’ai une base de données comprenant une liste de biens immobiliers.
Lorsque je clique sur un élément de ma liste de biens, j’envoie une requête GET à mon url. $_GET[‘bien’] contient l’id de mon bien (sa clé primaire auto-incrémentée). Un formulaire de saisie s'affiche alors qui me permet de saisir de nouvelles valeurs pour les champs de mon bien.
Lorsque je soumets le formulaire, je crée donc un objet BienDAO , qui va m’aider à modifier ma base de données.
Code:
$dao = new BienDAO() ;
Cet objet me renvoie une connexion à ma base de données. C’est l’objet qui gère les méthodes CRUD avec ma base de données : Je crée donc un bien qui reprend les valeurs des champs de l’enregistrement correspondant à l’id en question dans ma base de données :
Code:
$bien = $dao->trouver($_GET['bien']);
La méthode trouver() est définie ainsi :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| public function trouver($id) {
$id = (int) $id;
$req = $this->bdd->query('SELECT * FROM biens WHERE id = '.$id);
$donnees = $req->fetch();
$bien_trouve = new Bien();
foreach ($donnees as $attr => $valeur) {
$setter = 'set'.ucfirst($attr);
$bien_trouve->$setter($valeur);
}
return $bien_trouve;
} |
Je fais donc :
Code:
1 2 3 4 5 6 7 8
| foreach ($_POST as $attr => $valeur) {
$setter = 'set'.ucfirst($attr);
if(method_exists($dao, $setter)) {
$bien->$setter($valeur);
}
}
$bien->setId((int) $_GET['bien']);
$dao->modifier($bien); |
Quant à la méthode modifier() la voici :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| public function modifier(Bien $bien) {
$req = $this->bdd->prepare('UPDATE biens SET type = :type, date_modif = :date_modif, description = :description, code_postal = :code_postal, ville = :ville, voie = :voie, superficie = :superficie, montant = :montant WHERE id = :id');
$req->bindValue(':type',$bien->getType(),PDO::PARAM_STR);
$req->bindValue(':date_modif',date('Y-m-d'),PDO::PARAM_STR);
$req->bindValue(':description',$bien->getDescription(),PDO::PARAM_STR);
$req->bindValue(':code_postal',$bien->getCode_postal(),PDO::PARAM_INT);
$req->bindValue(':ville',$bien->getVille(),PDO::PARAM_STR);
$req->bindValue(':voie',$bien->getVoie(),PDO::PARAM_STR);
$req->bindValue(':superficie',$bien->getSuperficie(),PDO::PARAM_INT);
$req->bindValue(':montant',$bien->getMontant(),PDO::PARAM_INT);
$req->bindValue(':id',$bien->getId(),PDO::PARAM_INT);
$req->execute();
$req->CloseCursor();
} |
Je ne comprends pas pourquoi la modification n’est pas effectuée dans la base de données. Mon objet Bien a toujours les mêmes attributs.
Merci de votre aide,
A bientôt !