28
Jérôme CUTRONA Jérôme CUTRONA [email protected] [email protected] 15:38:20 15:38:20 Programmation Web 2012-2013 Programmation Web 2012-2013 1 PHP PHP Interface base de Interface base de données données

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

Embed Size (px)

Citation preview

Page 1: Jérôme CUTRONA jerome.cutrona@univ-reims.fr 11:45:50 Programmation Web 2012-2013 1 PHP Interface base de données

Jérôme CUTRONAJérôme CUTRONA

[email protected]@univ-reims.fr

03:24:5203:24:52 Programmation Web 2012-2013Programmation Web 2012-2013 11

PHPPHPInterface base de donnéesInterface base de données

Page 2: Jérôme CUTRONA jerome.cutrona@univ-reims.fr 11:45:50 Programmation Web 2012-2013 1 PHP Interface base de données

2203:24:5203:24:52 Programmation Web 2012-2013Programmation Web 2012-2013

Problème de conception poséProblème de conception posé

Transcription d'un MCD en modèle objet PHP Transcription d'un MCD en modèle objet PHP permettant de manipuler la base de donnéespermettant de manipuler la base de données

Règles de transcription :Règles de transcription : Une entité (attributs) devient une classe (attributs)Une entité (attributs) devient une classe (attributs)

Un enregistrement correspond donc une instanceUn enregistrement correspond donc une instance DF / CIFDF / CIF Associations n,mAssociations n,m

Page 3: Jérôme CUTRONA jerome.cutrona@univ-reims.fr 11:45:50 Programmation Web 2012-2013 1 PHP Interface base de données

3303:24:5203:24:52 Programmation Web 2012-2013Programmation Web 2012-2013

MCD MCD modèle objet : Entité modèle objet : Entité

MCDMCD Modèle objetModèle objet

<?php<?phpclassclass Auteur Auteur {{ privateprivate $$autidautid ; ; privateprivate $$autnomautnom ; ; privateprivate $$autprnautprn ; ; privateprivate $$autnaissautnaiss ; ; privateprivate $$autadrautadr ; ; privateprivate $$autcommautcomm ; ; privateprivate $$autloginautlogin ; ; privateprivate $$autpasswdautpasswd ; ; privateprivate $$autadminautadmin ; ; privateprivate $$autmailautmail ; ;}}?>?>

AuteurAuteur

AUTIDAUTID    int(11)int(11)AUTNOM  AUTNOM  varchar(50)varchar(50)AUTPRN  AUTPRN  varchar(50)varchar(50)AUTNAISS  AUTNAISS  int(11)int(11)AUTADR  AUTADR  varchar(255)varchar(255)AUTCOMM  AUTCOMM  varchar(255)varchar(255)AUTLOGIN  AUTLOGIN  varchar(50)varchar(50)AUTPASSWD  AUTPASSWD  varchar(50)varchar(50)AUTADMIN  AUTADMIN  smallint(6)smallint(6)AUTMAIL  AUTMAIL  varchar(150)varchar(150)

Page 4: Jérôme CUTRONA jerome.cutrona@univ-reims.fr 11:45:50 Programmation Web 2012-2013 1 PHP Interface base de données

4403:24:5203:24:52 Programmation Web 2012-2013Programmation Web 2012-2013

MCD MCD modèle objet : DF / CIF modèle objet : DF / CIF

MCDMCD Modèle objetModèle objet<?php<?phpclassclass Departement Departement {{ privateprivate $$depiddepid ; ; privateprivate $$depnomdepnom ; ; privateprivate $$regidregid ; ; privateprivate $$regionregion ; ;

functionfunction getRegion getRegion() …() …}}

classclass Region Region {{ privateprivate $$regidregid ; ; privateprivate $$regnomregnom ; ;

functionfunction getDepartements getDepartements() …() …}}?>?>

DépartementDépartement

DEPIDDEPID    int(11)int(11)DEPNOM  DEPNOM  varchar(50)varchar(50)

RégionRégion

REGIDREGID    int(11)int(11)REGNOM  REGNOM  varchar(50)varchar(50)

AppartenirAppartenir

1,11,1

1,n1,n

Page 5: Jérôme CUTRONA jerome.cutrona@univ-reims.fr 11:45:50 Programmation Web 2012-2013 1 PHP Interface base de données

5503:24:5203:24:52 Programmation Web 2012-2013Programmation Web 2012-2013

MCD MCD modèle objet : Association n,m modèle objet : Association n,m

MCDMCD Modèle objetModèle objet<?php<?phpclassclass Camping Camping {{ privateprivate $$cmpidcmpid ; ; privateprivate $$cmpnomcmpnom ; ; functionfunction getEmplacements getEmplacements() …() … functionfunction getTypePlaces getTypePlaces() …() …}}classclass Emplacements Emplacements {{ privateprivate $$nbPlacesnbPlaces ; ; privateprivate $$cmpidcmpid ; ; privateprivate $$tplidtplid ; ; privateprivate $$campingcamping ; ; privateprivate $$typeplacetypeplace ; ; functionfunction getCamping getCamping() …() … functionfunction getTypePlace getTypePlace() …() …}}......

TypePlaceTypePlace

TPLIDTPLID    int(11)int(11)TPLNOM  TPLNOM  varchar(50)varchar(50)

EmplacementsEmplacementsnbPlacesnbPlaces

1,n1,n

0,n0,n

CampingCamping

CMPIDCMPID    int(11)int(11)CMPNOM  CMPNOM  varchar(50)varchar(50)

Page 6: Jérôme CUTRONA jerome.cutrona@univ-reims.fr 11:45:50 Programmation Web 2012-2013 1 PHP Interface base de données

6603:24:5203:24:52 Programmation Web 2012-2013Programmation Web 2012-2013

MCD MCD modèle objet : Association n,m modèle objet : Association n,m

MCDMCD Modèle objetModèle objet

......classclass TypePlace TypePlace {{ privateprivate $$tplidtplid ; ; privateprivate $$tplnomtplnom ; ; functionfunction getCampings getCampings() …() … functionfunction getEmplacements getEmplacements() …() …}}?>?>

TypePlaceTypePlace

TPLIDTPLID    int(11)int(11)TPLNOM  TPLNOM  varchar(50)varchar(50)

EmplacementsEmplacementsnbPlacesnbPlaces

1,n1,n

0,n0,n

CampingCamping

CMPIDCMPID    int(11)int(11)CMPNOM  CMPNOM  varchar(50)varchar(50)

Page 7: Jérôme CUTRONA jerome.cutrona@univ-reims.fr 11:45:50 Programmation Web 2012-2013 1 PHP Interface base de données

7703:24:5203:24:52 Programmation Web 2012-2013Programmation Web 2012-2013

Problème de conception poséProblème de conception posé

Table AuteurTable Auteur

AUTIDAUTID    int(11)int(11)AUTNOM  AUTNOM  varchar(50)varchar(50)AUTPRN  AUTPRN  varchar(50)varchar(50)AUTNAISS  AUTNAISS  int(11)int(11)AUTADR  AUTADR  varchar(255)varchar(255)AUTCOMM  AUTCOMM  varchar(255)varchar(255)AUTLOGIN  AUTLOGIN  varchar(50)varchar(50)AUTPASSWD  AUTPASSWD  varchar(50)varchar(50)AUTADMIN  AUTADMIN  smallint(6)smallint(6)AUTMAIL  AUTMAIL  varchar(150)varchar(150)

<?php<?phpclassclass Auteur Auteur {{ privateprivate $$autidautid ; ; privateprivate $$autnomautnom ; ; privateprivate $$autprnautprn ; ; privateprivate $$autnaissautnaiss ; ; privateprivate $$autadrautadr ; ; privateprivate $$autcommautcomm ; ; privateprivate $$autloginautlogin ; ; privateprivate $$autpasswdautpasswd ; ; privateprivate $$autadminautadmin ; ; privateprivate $$autmailautmail ; ; publicpublic functionfunction __construct __construct((......)) …… publicpublic functionfunction lecture lecture(($$idid)) …… publicpublic functionfunction ecriture ecriture()() ……}}?>?>

Page 8: Jérôme CUTRONA jerome.cutrona@univ-reims.fr 11:45:50 Programmation Web 2012-2013 1 PHP Interface base de données

8803:24:5203:24:52 Programmation Web 2012-2013Programmation Web 2012-2013

Problème de conception poséProblème de conception posé<?php<?phpclassclass Personne Personne {{ privateprivate $$persidpersid ; ; privateprivate $$grpnumgrpnum ; ; privateprivate $$persnompersnom ; ; privateprivate $$persprnmpersprnm ; ; privateprivate $$persadpersad ; ; privateprivate $$perscpperscp ; ; privateprivate $$persvillepersville ; ; privateprivate $$perstelperstel ; ; privateprivate $$persmailpersmail ; ; privateprivate $$persetatpersetat ; ; publicpublic functionfunction __construct __construct((......)) …… publicpublic functionfunction lecture lecture(($$idid)) …… publicpublic functionfunction ecriture ecriture()() ……}}?>?>

Table PersonneTable Personne

  PERSIDPERSID    int(11)int(11)

  GRPNUM  GRPNUM  int(11)int(11)

  PERSNOM  PERSNOM  varchar(50)varchar(50)

  PERSPRNM  PERSPRNM  varchar(50)varchar(50)

  PERSAD  PERSAD  varchar(100varchar(100))

  PERSCP  PERSCP  varchar(5)varchar(5)

  PERSVILLE  PERSVILLE  varchar(50)varchar(50)

  PERSTEL  PERSTEL  varchar(10)varchar(10)

  PERSMAIL  PERSMAIL  varchar(100varchar(100))

  PERSETAT  PERSETAT  varchar(20)varchar(20)

Page 9: Jérôme CUTRONA jerome.cutrona@univ-reims.fr 11:45:50 Programmation Web 2012-2013 1 PHP Interface base de données

9903:24:5203:24:52 Programmation Web 2012-2013Programmation Web 2012-2013

Approche proposéeApproche proposée

Créer un Créer un modèle des objetsmodèle des objets "ligne BD" "ligne BD" Doivent pouvoir gérer un enregistrement :Doivent pouvoir gérer un enregistrement :

les les valeursvaleurs et leurs et leurs étiquettesétiquettes gestion des gestion des entrées / sorties avec la BDentrées / sorties avec la BD : :

lecture / insertion / mise à jourlecture / insertion / mise à jour accès aux valeursaccès aux valeurs de façon sure de façon sure modification des valeursmodification des valeurs de façon sure de façon sure affichageaffichage production de production de formulaireformulaire d'insertion / modification d'insertion / modification chargementchargement à partir de donnéesà partir de données issues d'un issues d'un

formulaire / de la lecture de la base de donnéesformulaire / de la lecture de la base de données

Page 10: Jérôme CUTRONA jerome.cutrona@univ-reims.fr 11:45:50 Programmation Web 2012-2013 1 PHP Interface base de données

101003:24:5203:24:52 Programmation Web 2012-2013Programmation Web 2012-2013

Conception du modèleConception du modèle

Classe ?Classe ? attributsattributs méthodes concrètesméthodes concrètes pas de méthodes "obligatoires"pas de méthodes "obligatoires"

Classe abstraite ?Classe abstraite ? attributsattributs méthodes concrètesméthodes concrètes méthodes abstraites "obligatoires"méthodes abstraites "obligatoires"

Interface ?Interface ? méthodes "obligatoires"méthodes "obligatoires"

Page 11: Jérôme CUTRONA jerome.cutrona@univ-reims.fr 11:45:50 Programmation Web 2012-2013 1 PHP Interface base de données

111103:24:5303:24:53 Programmation Web 2012-2013Programmation Web 2012-2013

Gestion des attributs (1)Gestion des attributs (1)

Solution classique :Solution classique : ajout de ajout de données membresdonnées membres dans la dans la classe concernéeclasse concernée impossibilitéimpossibilité d'écrire des d'écrire des méthodes génériquesméthodes génériques à un à un

niveau supérieur de la hiérarchieniveau supérieur de la hiérarchie gestion des gestion des étiquettesétiquettes associées aux valeurs associées aux valeurs ??

Approche proposée :Approche proposée : tableau associatiftableau associatif des des valeurs d’une ligne d’une tablevaleurs d’une ligne d’une table

confinementconfinement, , itérationitération, , accèsaccès facilitéfacilité possibilité d'écrire des possibilité d'écrire des méthodes génériquesméthodes génériques tableau associatif tableau associatif des des étiquettes étiquettes associées aux associées aux

valeursvaleurs méthode d'méthode d'initialisation du tableau des valeursinitialisation du tableau des valeurs

Page 12: Jérôme CUTRONA jerome.cutrona@univ-reims.fr 11:45:50 Programmation Web 2012-2013 1 PHP Interface base de données

121203:24:5303:24:53 Programmation Web 2012-2013Programmation Web 2012-2013

Conception du modèleConception du modèle

Classe ?Classe ? attributsattributs méthodes concrètesméthodes concrètes pas de méthodes "obligatoires"pas de méthodes "obligatoires"

Classe abstraite ?Classe abstraite ? attributsattributs méthodes concrètesméthodes concrètes méthodes abstraites "obligatoires"méthodes abstraites "obligatoires"

Interface ?Interface ? méthodes "obligatoires"méthodes "obligatoires"

Page 13: Jérôme CUTRONA jerome.cutrona@univ-reims.fr 11:45:50 Programmation Web 2012-2013 1 PHP Interface base de données

131303:24:5303:24:53 Programmation Web 2012-2013Programmation Web 2012-2013

Constitution d'une Constitution d'une classe génériqueclasse générique : : tableau associatiftableau associatif des des valeursvaleurs

ClésClés = noms des champs de la table= noms des champs de la table ValeursValeurs = valeurs d'une ligne de la table= valeurs d'une ligne de la table

Approche proposéeApproche proposée

class Auteurclass Auteurextendsextends

EnregistrementEnregistrement

AuteurAuteur

EnregistrementEnregistrement

__construct()__construct()initAttributsinitAttributs()()

EnregistrementEnregistrement

__construct()__construct()initAttributsinitAttributs()()

$$valeursvaleurs

cléclé valeurvaleur

$$valeursvaleurs

cléclé valeurvaleur

Création de l'objetCréation de l'objetInitialisation de l'objetInitialisation de l'objet

$$valeursvaleurs

cléclé valeurvaleur

''AUTIDAUTID'' nullnull

''AUTNOMAUTNOM'' nullnull

$$valeursvaleurs

cléclé valeurvaleur

''AUTIDAUTID'' 12341234

''AUTNOMAUTNOM'' ""ZolaZola""Lecture dans la BDLecture dans la BD

Page 14: Jérôme CUTRONA jerome.cutrona@univ-reims.fr 11:45:50 Programmation Web 2012-2013 1 PHP Interface base de données

141403:24:5303:24:53 Programmation Web 2012-2013Programmation Web 2012-2013

Gestion des attributs (2)Gestion des attributs (2)

classclass Enregistrement Enregistrement {{

// Attributs de l'enregistrement// Attributs de l'enregistrement

protectedprotected $$valeursvaleurs == arrayarray()() ;;

/* Initialisation des noms des champs/* Initialisation des noms des champs

qui sont les clés du tableau $valeurs */qui sont les clés du tableau $valeurs */

protectedprotected functionfunction initAttributs initAttributs((

$$_cles_cles /* Tableau des clés *//* Tableau des clés */) {) {

$$thisthis->->valeurs valeurs == arrayarray()() ;;

foreachforeach ((array_keysarray_keys(($$_cles_cles)) asas $$clecle))

$$thisthis->->valeursvaleurs[[$$clecle]] == nullnull ;;

}}

Page 15: Jérôme CUTRONA jerome.cutrona@univ-reims.fr 11:45:50 Programmation Web 2012-2013 1 PHP Interface base de données

151503:24:5303:24:53 Programmation Web 2012-2013Programmation Web 2012-2013

Solutions possibles :Solutions possibles :1.1. Accès R/W par Accès R/W par $$autaut->->valeursvaleurs[[''AUTIDAUTID'']]

2.2. Accès R par Accès R par $$aut-aut->>donnedonne((''AUTIDAUTID''))Accès W par Accès W par $$aut-aut->>affecteaffecte((''AUTIDAUTID', ', 1212))

3.3. Accès R/W par Accès R/W par $$aut-aut->>AUTIDAUTID

AuteurAuteur

Accès aux attributsAccès aux attributs

EnregistrementEnregistrement

__construct()__construct()initAttributsinitAttributs()()

$$valeursvaleurs

''AUTIDAUTID'' 12341234

''AUTNOMAUTNOM'' ""ZolaZola""

•Confinement Confinement •Itération possible Itération possible •Accès sûr Accès sûr ??•Accès simple Accès simple ??

$$valeursvaleurs doit être doit être publicpublic !!

Syntaxe assez lourdeSyntaxe assez lourdeSurcharge de Surcharge de __get()__get() et et __set()__set()

Page 16: Jérôme CUTRONA jerome.cutrona@univ-reims.fr 11:45:50 Programmation Web 2012-2013 1 PHP Interface base de données

161603:24:5303:24:53 Programmation Web 2012-2013Programmation Web 2012-2013

Gestion des attributs (3)Gestion des attributs (3)

/* Surcharge de /* Surcharge de __get__get pour donner accès aux pour donner accès aux valeurs sous la forme $e->un_champs */valeurs sous la forme $e->un_champs */

publicpublic functionfunction __get(__get(

$$_cle_cle /** Nom du champs *//** Nom du champs */)) {{

ifif ((array_key_existsarray_key_exists(($$_cle_cle,,

$$thisthis->->valeursvaleurs))))

returnreturn $$thisthis->->valeursvaleurs[[$$_cle_cle]] ;;

throwthrow newnew ExceptionException((

""Champs 'Champs '$$_cle_cle' inconnu dans '' inconnu dans '""

..get_classget_class(($$thisthis))..""''"")) ;;

}}

Page 17: Jérôme CUTRONA jerome.cutrona@univ-reims.fr 11:45:50 Programmation Web 2012-2013 1 PHP Interface base de données

171703:24:5303:24:53 Programmation Web 2012-2013Programmation Web 2012-2013

Gestion des attributs (4)Gestion des attributs (4)

/* Surcharge de /* Surcharge de __set__set pour donner accès aux pour donner accès aux valeurs sous la forme $e->un_champs=val */valeurs sous la forme $e->un_champs=val */

publicpublic functionfunction __set(__set(

$$_cle_cle /** Nom du champs *//** Nom du champs */,,

$$_val_val /** Nouvelle valeur *//** Nouvelle valeur */)) {{

ifif ((array_key_existsarray_key_exists(($$_cle_cle,,

$$thisthis->->valeursvaleurs))))

returnreturn $$thisthis->->valeursvaleurs[[$$_cle_cle]] == $$_val_val ;;

throwthrow newnew ExceptionException((

""Champs 'Champs '$$_cle_cle' inconnu dans '' inconnu dans '""

..get_classget_class(($$thisthis))..""''"")) ;;

}}

Page 18: Jérôme CUTRONA jerome.cutrona@univ-reims.fr 11:45:50 Programmation Web 2012-2013 1 PHP Interface base de données

181803:24:5303:24:53 Programmation Web 2012-2013Programmation Web 2012-2013

Gestion des étiquettesGestion des étiquettes

ValeursValeurs : : Tableau associatifTableau associatif au niveau de la classe mère au niveau de la classe mère Accès simple à l'aide de Accès simple à l'aide de __get__get et et __set__set Traitements au niveau de la classe mèreTraitements au niveau de la classe mère Méthode d'Méthode d'initialisationinitialisation initAttributsinitAttributs(($$_cles_cles) )

ÉtiquettesÉtiquettes : : Tableau associatifTableau 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éeCommunes à toutes les entités d'une classe dérivée

Attribut statiqueAttribut statique de la classe dérivée de la classe dérivée

Méthode abstraite Méthode abstraite etiquettes()etiquettes() (classe mère)(classe mère)

Utilisable pour l'Utilisable pour l'initialisation des attributsinitialisation des attributs

Page 19: Jérôme CUTRONA jerome.cutrona@univ-reims.fr 11:45:50 Programmation Web 2012-2013 1 PHP Interface base de données

191903:24:5303:24:53 Programmation Web 2012-2013Programmation Web 2012-2013

Définition des méthodes (1)Définition des méthodes (1)

Chargement de données :Chargement de données : à partir de à partir de donnéesdonnées issues d'un issues d'un formulaireformulaire (tableau) (tableau) à partir de la à partir de la lecturelecture de la de la base de donnéesbase de données (tableau) (tableau)

possible si les possible si les clésclés de ces tableaux sont de ces tableaux sont identiquesidentiques à à celles du tableau des valeurscelles du tableau des valeurs

démarche : démarche : pour chaque clépour chaque clé du tableau des valeurs, du tableau des valeurs, sisi cette dernière est cette dernière est présenteprésente dans le tableau des dans le tableau des données fournies alors données fournies alors affecteraffecter la valeur fournie la valeur fournie

implémentationimplémentation possible dans la possible dans la classe mèreclasse mère

Page 20: Jérôme CUTRONA jerome.cutrona@univ-reims.fr 11:45:50 Programmation Web 2012-2013 1 PHP Interface base de données

202003:24:5303:24:53 Programmation Web 2012-2013Programmation Web 2012-2013

Définition des méthodes (2)Définition des méthodes (2)

Lecture BD nécessiteLecture BD nécessite : : de connaître la de connaître la tabletable de connaître la de connaître la clé primaireclé primaire de de transférertransférer les données lues dans les valeurs les données lues dans les valeurs

Écriture BD nécessiteÉcriture BD nécessite : : de connaître la de connaître la tabletable de connaître la de connaître la clé primaireclé primaire de savoir si l'on doit de savoir si l'on doit insérerinsérer ouou mettre à jourmettre à jour la table la table

lecture préalable lecture préalable de disposer des valeursde disposer des valeurs

Page 21: Jérôme CUTRONA jerome.cutrona@univ-reims.fr 11:45:50 Programmation Web 2012-2013 1 PHP Interface base de données

212103:24:5303:24:53 Programmation Web 2012-2013Programmation Web 2012-2013

Définition des méthodes (3)Définition des méthodes (3)

Connaître la tableConnaître la table : : Donnée des classes dérivéesDonnée des classes dérivées A la charge des classes dérivéesA la charge des classes dérivées Obligation d'implémentationObligation d'implémentation

méthode abstraite méthode abstraite table()table() de la classe mère de la classe mère

Connaître la clé primaireConnaître la clé primaire : : Donnée des classes dérivéesDonnée des classes dérivées A la charge des classes dérivéesA la charge des classes dérivées Obligation d'implémentationObligation d'implémentation

méthode abstraite méthode abstraite cle_pri()cle_pri() de la classe mère de la classe mère

Page 22: Jérôme CUTRONA jerome.cutrona@univ-reims.fr 11:45:50 Programmation Web 2012-2013 1 PHP Interface base de données

222203:24:5303:24:53 Programmation Web 2012-2013Programmation Web 2012-2013

Bilan (partiel) des méthodesBilan (partiel) des méthodes

class Auteurclass Auteurextendsextends

EnregistrementEnregistrement

AuteurAuteur

EnregistrementEnregistrementtabletable()()""AuteurAuteur""cle_pricle_pri()()""AUTIDAUTID""etiquettesetiquettes()()……

__construct()__construct()initAttributsinitAttributs()()

lecturelecture()()ecritureecriture()()

$$valeursvaleurs

''AUTIDAUTID'' 12341234

''AUTNOMAUTNOM'' ""ZolaZola""

EnregistrementEnregistrementtabletable()()

cle_pricle_pri()()etiquettesetiquettes()()

__construct()__construct()initAttributsinitAttributs()()

lecturelecture()()ecritureecriture()()

$$valeursvaleurs

cléclé valeurvaleur

Page 23: Jérôme CUTRONA jerome.cutrona@univ-reims.fr 11:45:50 Programmation Web 2012-2013 1 PHP Interface base de données

232303:24:5403:24:54 Programmation Web 2012-2013Programmation Web 2012-2013

Définition des méthodes (4)Définition des méthodes (4)

LectureLecture : : table / clé primaire connuestable / clé primaire connues SELECT * FROM SELECT * FROM tabletable WHERE WHERE clé_priclé_pri==idid ChargementChargement

ÉcritureÉcriture : : table / clé primaire connuestable / clé primaire connues Si Si idid existe dans la base existe dans la base mise à jour mise à jour SELECT COUNT(*) FROM SELECT COUNT(*) FROM tabletable WHERE WHERE clé_priclé_pri==idid == 1 == 1 UPDATEUPDATE tabletable WHERE WHERE clé_priclé_pri==idid

Sinon Sinon insertion insertion SELECT COUNT(*) FROM SELECT COUNT(*) FROM tabletable WHERE WHERE clé_priclé_pri==idid == 0== 0 INSERTINSERT INTO INTO tabletable

Page 24: Jérôme CUTRONA jerome.cutrona@univ-reims.fr 11:45:50 Programmation Web 2012-2013 1 PHP Interface base de données

242403:24:5403:24:54 Programmation Web 2012-2013Programmation Web 2012-2013

Définition des méthodes (5)Définition des méthodes (5)

Affichage Affichage :: Peut être fait de façon Peut être fait de façon génériquegénérique grâce au grâce au parcoursparcours

des des attributsattributs etet étiquettesétiquettes Serait plus judicieux d'être Serait plus judicieux d'être spécialiséspécialisé par les classes par les classes

dérivéesdérivées

Production de formulaire Production de formulaire :: Éléments de formulaireÉléments de formulaire et non formulaire complet et non formulaire complet Peut être fait de façon Peut être fait de façon génériquegénérique grâce au grâce au parcoursparcours

des des attributs et étiquettesattributs et étiquettes Serait plus judicieux d'être Serait plus judicieux d'être spécialiséspécialisé par les classes par les classes

dérivéesdérivées

Page 25: Jérôme CUTRONA jerome.cutrona@univ-reims.fr 11:45:50 Programmation Web 2012-2013 1 PHP Interface base de données

252503:24:5403:24:54 Programmation Web 2012-2013Programmation Web 2012-2013

Bilan (1)Bilan (1)

abstractabstract classclass Enregistrement Enregistrement {{

protectedprotected $$valeursvaleurs == arrayarray()() ;;

abstractabstract publicpublic functionfunction __construct(__construct($$_id_id==nullnull) ) ;;

protectedprotected functionfunction initAttributs initAttributs(($$_cles_cles) { … }) { … }

abstractabstract protectedprotected functionfunction table table() () ;;

abstractabstract protectedprotected functionfunction cle_pri cle_pri()() ;;

abstractabstract public public functionfunction etiquettes etiquettes()() ;;

publicpublic functionfunction etiquette etiquette(($$_cle_cle)) { … }{ … }

publicpublic functionfunction lecture lecture(($$_id_id)) { … }{ … }

publicpublic functionfunction ecriture ecriture() { … } () { … }

publicpublic functionfunction chargement chargement(($$_donnees_donnees)) { … }{ … }

publicpublic functionfunction affichage affichage()() { … }{ … }

publicpublic functionfunction formulaire formulaire() { … }() { … }

Page 26: Jérôme CUTRONA jerome.cutrona@univ-reims.fr 11:45:50 Programmation Web 2012-2013 1 PHP Interface base de données

262603:24:5403:24:54 Programmation Web 2012-2013Programmation Web 2012-2013

Bilan (2)Bilan (2)

publicpublic functionfunction __get(__get($$_cle_cle) { … }) { … }

publicpublic functionfunction __set(__set($$_cle_cle, , $$_val_val) { … }) { … }

publicpublic functionfunction __isset(__isset($$_cle_cle) { … }) { … }

publicpublic functionfunction __unset(__unset($$_cle_cle)) { … }{ … }

} } // Fin class Enregistrement // Fin class Enregistrement

classclass Etendue Etendue extendsextends Enregistrement Enregistrement {{

constconst table table == " "la_tablela_table" " ;;

constconst cle_pri cle_pri == " "LA_CLE_PRILA_CLE_PRI" " ;;

staticstatic privateprivate $$labelslabels

== arrayarray((''XXXXXXXXXX' ' =>=> ' 'Etiquette XEtiquette X', ...', ...)) ;;

publicpublic functionfunction __construct(__construct($$_id_id==nullnull)) {{

$$thisthis->->initAttributsinitAttributs((selfself::$::$labelslabels)) ;;

ifif (isset((isset($$_id_id))))

$$thisthis->->lecturelecture(($$_id_id)) ; ; }}

Page 27: Jérôme CUTRONA jerome.cutrona@univ-reims.fr 11:45:50 Programmation Web 2012-2013 1 PHP Interface base de données

272703:24:5403:24:54 Programmation Web 2012-2013Programmation Web 2012-2013

Bilan (3)Bilan (3)

protectedprotected functionfunction table table()() {{

returnreturn selfself::::table table ;;

}}

protectedprotected functionfunction cle_pri cle_pri()() {{

returnreturn selfself::::cle_pri cle_pri ;;

}}

protectedprotected functionfunction etiquettes etiquettes()() {{

returnreturn selfself::$::$labelslabels ;;

}}

publicpublic functionfunction affichage affichage()() { { // ...// ...

}}

publicpublic functionfunction formulaire formulaire()() {{ // ... // ...

}}

} } // Fin class Etendue// Fin class Etendue

Page 28: Jérôme CUTRONA jerome.cutrona@univ-reims.fr 11:45:50 Programmation Web 2012-2013 1 PHP Interface base de données

282803:24:5403:24:54 Programmation Web 2012-2013Programmation Web 2012-2013

Implémentations plus élaboréesImplémentations plus élaborées

Requête d'informationRequête d'information

Liste des champsListe des champs

Nature des champsNature des champs

Type de cléType de clé