La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

Jérôme CUTRONA 11:45:50 Programmation Web 2012-2013 1 PHP Interface base de données.

Présentations similaires


Présentation au sujet: "Jérôme CUTRONA 11:45:50 Programmation Web 2012-2013 1 PHP Interface base de données."— Transcription de la présentation:

1 Jérôme CUTRONA 11:45:50 Programmation Web PHP Interface base de données

2 211:45:50 Programmation Web Problème de conception posé Transcription d'un MCD en modèle objet PHP permettant de manipuler la base de données Transcription d'un MCD en modèle objet PHP permettant de manipuler la base de données Règles de transcription : Règles de transcription : Une entité (attributs) devient une classe (attributs) Un enregistrement correspond donc une instance Une entité (attributs) devient une classe (attributs) Un enregistrement correspond donc une instance DF / CIF DF / CIF Associations n,m Associations n,m

3 311:45:50 Programmation Web MCD modèle objet : Entité MCD Modèle objet Auteur AUTID AUTID int(11) AUTNOM varchar(50) AUTPRN varchar(50) AUTNAISS int(11) AUTADR varchar(255) AUTCOMM varchar(255) AUTLOGIN varchar(50) AUTPASSWD varchar(50) AUTADMIN smallint(6) AUTMAIL varchar(150)

4 411:45:50 Programmation Web MCD modèle objet : DF / CIF MCD Modèle objet Département DEPID DEPID int(11) DEPNOM varchar(50) Région REGID REGID int(11) REGNOM varchar(50) Appartenir 1,1 1,n

5 511:45:50 Programmation Web MCD modèle objet : Association n,m MCD Modèle objet

6 611:45:50 Programmation Web MCD modèle objet : Association n,m MCD Modèle objet... class TypePlace { private $tplid ; private $tplid ; private $tplnom ; private $tplnom ; function getCampings() … function getCampings() … function getEmplacements() … function getEmplacements() …}?> TypePlace TPLID TPLID int(11) TPLNOM varchar(50) EmplacementsnbPlaces 1,n 0,nCamping CMPID CMPID int(11) CMPNOM varchar(50)

7 711:45:50 Programmation Web Problème de conception posé Table Auteur AUTID AUTID int(11) AUTNOM varchar(50) AUTPRN varchar(50) AUTNAISS int(11) AUTADR varchar(255) AUTCOMM varchar(255) AUTLOGIN varchar(50) AUTPASSWD varchar(50) AUTADMIN smallint(6) AUTMAIL varchar(150)

8 811:45:50 Programmation Web Problème de conception posé Table Personne PERSID PERSID int(11) GRPNUM int(11) PERSNOM varchar(50) PERSPRNM varchar(50) PERSAD varchar(100) PERSCP varchar(5) PERSVILLE varchar(50) PERSTEL varchar(10) PERSMAIL varchar(100) PERSETAT varchar(20)

9 911:45:50 Programmation Web Approche proposée Créer un modèle des objets "ligne BD" Créer un modèle des objets "ligne BD" Doivent pouvoir gérer un enregistrement : Doivent pouvoir gérer un enregistrement : les valeurs et leurs étiquettes les valeurs et leurs étiquettes gestion des entrées / sorties avec la BD : lecture / insertion / mise à jour gestion des entrées / sorties avec la BD : lecture / insertion / mise à jour accès aux valeurs de façon sure accès aux valeurs de façon sure modification des valeurs de façon sure modification des valeurs de façon sure affichage affichage production de formulaire d'insertion / modification production de formulaire d'insertion / modification chargement à partir de données issues d'un formulaire / de la lecture de la base de données chargement à partir de données issues d'un formulaire / de la lecture de la base de données

10 1011:45:50 Programmation Web Conception du modèle Classe ? Classe ? attributs attributs méthodes concrètes méthodes concrètes pas de méthodes "obligatoires" pas de méthodes "obligatoires" Classe abstraite ? Classe abstraite ? attributs attributs méthodes concrètes méthodes concrètes méthodes abstraites "obligatoires" méthodes abstraites "obligatoires" Interface ? Interface ? méthodes "obligatoires" méthodes "obligatoires"

11 1111:45:50 Programmation Web Gestion des attributs (1) Solution classique : Solution classique : ajout de données membres dans la classe concernée ajout de données membres dans la classe concernée impossibilité d'écrire des méthodes génériques à un niveau supérieur de la hiérarchie impossibilité d'écrire des méthodes génériques à un niveau supérieur de la hiérarchie gestion des étiquettes associées aux valeurs ? gestion des étiquettes associées aux valeurs ? Approche proposée : Approche proposée : tableau associatif des valeurs dune ligne dune table confinement, itération, accès facilité tableau associatif des valeurs dune ligne dune table confinement, itération, accès facilité possibilité d'écrire des méthodes génériques possibilité d'écrire des méthodes génériques tableau associatif des étiquettes associées aux valeurs tableau associatif des étiquettes associées aux valeurs méthode d'initialisation du tableau des valeurs méthode d'initialisation du tableau des valeurs

12 1211:45:50 Programmation Web Conception du modèle Classe ? Classe ? attributs attributs méthodes concrètes méthodes concrètes pas de méthodes "obligatoires" pas de méthodes "obligatoires" Classe abstraite ? Classe abstraite ? attributs attributs méthodes concrètes méthodes concrètes méthodes abstraites "obligatoires" méthodes abstraites "obligatoires" Interface ? Interface ? méthodes "obligatoires" méthodes "obligatoires"

13 1311:45:50 Programmation Web Constitution d'une classe générique : Constitution d'une classe générique : tableau associatif des valeurs tableau associatif des valeurs Clés= noms des champs de la table Clés= noms des champs de la table Valeurs= valeurs d'une ligne de la table Valeurs= valeurs d'une ligne de la table Approche proposée class Auteur extendsEnregistrement Auteur Enregistrement__construct() initAttributs() Enregistrement__construct() $valeurs clévaleur clévaleur Création de l'objet Initialisation de l'objet $valeurs clévaleur 'AUTID' null 'AUTNOM' null $valeurs clévaleur 'AUTID' 1234 'AUTNOM' "Zola" Lecture dans la BD

14 1411:45:50 Programmation Web Gestion des attributs (2) class Enregistrement { // Attributs de l'enregistrement // Attributs de l'enregistrement protected $valeurs = array() ; protected $valeurs = array() ; /* Initialisation des noms des champs qui sont les clés du tableau $valeurs */ qui sont les clés du tableau $valeurs */ protected function initAttributs( protected function initAttributs( $_cles /* Tableau des clés */) { $_cles /* Tableau des clés */) { $this->valeurs = array() ; $this->valeurs = array() ; foreach (array_keys($_cles) as $cle) foreach (array_keys($_cles) as $cle) $this->valeurs[$cle] = null ; $this->valeurs[$cle] = null ; }

15 1511:45:50 Programmation Web Solutions possibles : Solutions possibles : 1. Accès R/W par $aut->valeurs['AUTID'] 2. Accès R par $aut->donne('AUTID') Accès W par $aut->affecte('AUTID', 12) 3. Accès R/W par $aut->AUTID Auteur Accès aux attributs Enregistrement__construct() initAttributs() $valeurs 'AUTID' 1234 'AUTNOM' "Zola" ConfinementConfinement Itération possibleItération possible Accès sûr ?Accès sûr ? Accès simple ?Accès simple ? $valeurs doit être public ! Syntaxe assez lourde Surcharge de __get() et __set()

16 1611:45:50 Programmation Web Gestion des attributs (3) /* Surcharge de __get pour donner accès aux valeurs sous la forme $e->un_champs */ public function __get( public function __get( $_cle /** Nom du champs */) { $_cle /** Nom du champs */) { if (array_key_exists($_cle, if (array_key_exists($_cle, $this->valeurs)) $this->valeurs)) return $this->valeurs[$_cle] ; return $this->valeurs[$_cle] ; throw new Exception( throw new Exception( "Champs '$_cle' inconnu dans '" "Champs '$_cle' inconnu dans '".get_class($this)."'") ;.get_class($this)."'") ; }

17 1711:45:50 Programmation Web Gestion des attributs (4) /* Surcharge de __set pour donner accès aux valeurs sous la forme $e->un_champs=val */ public function __set( public function __set( $_cle /** Nom du champs */, $_cle /** Nom du champs */, $_val /** Nouvelle valeur */) { $_val /** Nouvelle valeur */) { if (array_key_exists($_cle, if (array_key_exists($_cle, $this->valeurs)) $this->valeurs)) return $this->valeurs[$_cle] = $_val ; return $this->valeurs[$_cle] = $_val ; throw new Exception( throw new Exception( "Champs '$_cle' inconnu dans '" "Champs '$_cle' inconnu dans '".get_class($this)."'") ;.get_class($this)."'") ; }

18 1811:45:50 Programmation Web Gestion des étiquettes Valeurs : Valeurs : Tableau associatif au niveau de la classe mère Tableau associatif au niveau de la classe mère Accès simple à l'aide de __get et __set Accès simple à l'aide de __get et __set Traitements au niveau de la classe mère Traitements au niveau de la classe mère Méthode d'initialisation initAttributs($_cles) Méthode d'initialisation initAttributs($_cles) Étiquettes : Étiquettes : Tableau associatif Tableau associatif Propriété de la classe mère ? Propriété de la classe mère ? Communes à toutes les entités d'une classe dérivée Communes à toutes les entités d'une classe dérivée Attribut statique de la classe dérivée Attribut statique de la classe dérivée Méthode abstraite etiquettes() (classe mère) Méthode abstraite etiquettes() (classe mère) Utilisable pour l'initialisation des attributs Utilisable pour l'initialisation des attributs

19 1911:45:50 Programmation Web Définition des méthodes (1) Chargement de données : Chargement de données : à partir de données issues d'un formulaire (tableau) à partir de données issues d'un formulaire (tableau) à partir de la lecture de la base de données (tableau) à partir de la lecture de la base de données (tableau) possible si les clés de ces tableaux sont identiques à celles du tableau des valeurs possible si les clés de ces tableaux sont identiques à celles du tableau des valeurs démarche : pour chaque clé du tableau des valeurs, si cette dernière est présente dans le tableau des données fournies alors affecter la valeur fournie démarche : pour chaque clé du tableau des valeurs, si cette dernière est présente dans le tableau des données fournies alors affecter la valeur fournie implémentation possible dans la classe mère implémentation possible dans la classe mère

20 2011:45:50 Programmation Web Définition des méthodes (2) Lecture BD nécessite : Lecture BD nécessite : de connaître la table de connaître la table de connaître la clé primaire de connaître la clé primaire de transférer les données lues dans les valeurs de transférer les données lues dans les valeurs Écriture BD nécessite : Écriture BD nécessite : de connaître la table de connaître la table de connaître la clé primaire de connaître la clé primaire de savoir si l'on doit insérer ou mettre à jour la table lecture préalable de savoir si l'on doit insérer ou mettre à jour la table lecture préalable de disposer des valeurs de disposer des valeurs

21 2111:45:50 Programmation Web Définition des méthodes (3) Connaître la table : Connaître la table : Donnée des classes dérivées Donnée des classes dérivées A la charge des classes dérivées A la charge des classes dérivées Obligation d'implémentation méthode abstraite table() de la classe mère Obligation d'implémentation méthode abstraite table() de la classe mère Connaître la clé primaire : Connaître la clé primaire : Donnée des classes dérivées Donnée des classes dérivées A la charge des classes dérivées A la charge des classes dérivées Obligation d'implémentation méthode abstraite cle_pri() de la classe mère Obligation d'implémentation méthode abstraite cle_pri() de la classe mère

22 2211:45:51 Programmation Web Bilan (partiel) des méthodes class Auteur extendsEnregistrement Auteur Enregistrement table() "Auteur" cle_pri() "AUTID" etiquettes() … __construct() initAttributs() lecture() ecriture() $valeurs 'AUTID' 1234 'AUTNOM' "Zola" Enregistrement table() cle_pri() etiquettes() __construct() initAttributs() lecture() ecriture() $valeurs clévaleur

23 2311:45:51 Programmation Web Définition des méthodes (4) Lecture : Lecture : table / clé primaire connues table / clé primaire connues SELECT * FROM table WHERE clé_pri=id SELECT * FROM table WHERE clé_pri=id Chargement Chargement Écriture : Écriture : table / clé primaire connues table / clé primaire connues Si id existe dans la base mise à jour Si id existe dans la base mise à jour SELECT COUNT(*) FROM table WHERE clé_pri=id == 1 UPDATE table WHERE clé_pri=id SELECT COUNT(*) FROM table WHERE clé_pri=id == 1 UPDATE table WHERE clé_pri=id Sinon insertion Sinon insertion SELECT COUNT(*) FROM table WHERE clé_pri=id == 0 INSERT INTO table SELECT COUNT(*) FROM table WHERE clé_pri=id == 0 INSERT INTO table

24 2411:45:51 Programmation Web Définition des méthodes (5) Affichage : Affichage : Peut être fait de façon générique grâce au parcours des attributs et étiquettes Peut être fait de façon générique grâce au parcours des attributs et étiquettes Serait plus judicieux d'être spécialisé par les classes dérivées Serait plus judicieux d'être spécialisé par les classes dérivées Production de formulaire : Production de formulaire : Éléments de formulaire et non formulaire complet Éléments de formulaire et non formulaire complet Peut être fait de façon générique grâce au parcours des attributs et étiquettes Peut être fait de façon générique grâce au parcours des attributs et étiquettes Serait plus judicieux d'être spécialisé par les classes dérivées Serait plus judicieux d'être spécialisé par les classes dérivées

25 2511:45:51 Programmation Web Bilan (1) abstract class Enregistrement { protected $valeurs = array() ; protected $valeurs = array() ; abstract public function __construct($_id=null) ; abstract public function __construct($_id=null) ; protected function initAttributs($_cles) { … } protected function initAttributs($_cles) { … } abstract protected function table() ; abstract protected function table() ; abstract protected function cle_pri() ; abstract protected function cle_pri() ; abstract public function etiquettes() ; abstract public function etiquettes() ; public function etiquette($_cle) { … } public function etiquette($_cle) { … } public function lecture($_id) { … } public function lecture($_id) { … } public function ecriture() { … } public function ecriture() { … } public function chargement($_donnees) { … } public function chargement($_donnees) { … } public function affichage() { … } public function affichage() { … } public function formulaire() { … } public function formulaire() { … }

26 2611:45:51 Programmation Web Bilan (2) public function __get($_cle) { … } public function __get($_cle) { … } public function __set($_cle, $_val) { … } public function __set($_cle, $_val) { … } public function __isset($_cle) { … } public function __isset($_cle) { … } public function __unset($_cle) { … } public function __unset($_cle) { … } } // Fin class Enregistrement class Etendue extends Enregistrement { const table = "la_table" ; const table = "la_table" ; const cle_pri = "LA_CLE_PRI" ; const cle_pri = "LA_CLE_PRI" ; static private $labels static private $labels = array('XXXXX' => 'Etiquette X',...) ; = array('XXXXX' => 'Etiquette X',...) ; public function __construct($_id=null) { public function __construct($_id=null) { $this->initAttributs(self::$labels) ; $this->initAttributs(self::$labels) ; if (isset($_id)) if (isset($_id)) $this->lecture($_id) ; } $this->lecture($_id) ; }

27 2711:45:51 Programmation Web Bilan (3) protected function table() { protected function table() { return self::table ; return self::table ; } protected function cle_pri() { protected function cle_pri() { return self::cle_pri ; return self::cle_pri ; } protected function etiquettes() { protected function etiquettes() { return self::$labels ; return self::$labels ; } public function affichage() { //... public function affichage() { //... } public function formulaire() { //... public function formulaire() { //... } } // Fin class Etendue

28 2811:45:51 Programmation Web Implémentations plus élaborées Requête d'information Liste des champs Nature des champs Type de clé


Télécharger ppt "Jérôme CUTRONA 11:45:50 Programmation Web 2012-2013 1 PHP Interface base de données."

Présentations similaires


Annonces Google