1. Trang chủ
  2. » Công Nghệ Thông Tin

Pratique de MySQL et PHP- P34 pptx

5 221 0
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 5
Dung lượng 243,15 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

M[c p1, c q2] Tableau 3.7 — Les méthodes publiques de la classe tableau Tableau tabAttrs Constructeur de tableaux en fonction d’une dimen-sion et d’une liste de paramètres de présentat

Trang 1

tableau E, assez éloigné des autres, sera ignoré Voici, pour un tableau avec deux

dimensions d1et d2, la représentation adoptée

CSG e[d2, c12] e[d2, c22] e[d3, c q2]

e[d1, c11] M[c1

1, c12] M[c1

1, c22] M[c1

1, c q2]

e[d1, c2

1] M[c2

1, c1

2] M[c2

1, c2

2] M[c2

1, c q2]

e[d1, c p1] M[c p1, c12] M[c p1, c22] M[c p1, c q2]

Tableau 3.7 — Les méthodes publiques de la classe tableau

Tableau ( tabAttrs) Constructeur de tableaux en fonction d’une

dimen-sion et d’une liste de paramètres de présentation.

ajoutValeur ( ligne,colonne,valeur) Définit la valeur du tableau dans une cellule

donnée par les paramètresligne etcolonne.

ajoutEntete ( dimension,cle,texte) Définit l’en-tête pour la dimensiondimension et

la clécle.

TableauHTML () Produit la représentation HTML du tableau.

ajoutAttributsTable ( tabAttrs) Ajouts de paramètres de présentation pour la balise

<table>.

setCouleurPaire ( couleur) Couleur de fond pour les lignes paires.

setCouleurImpaire ( couleur) Couleur de fond pour les lignes impaires.

setAfficheEntete ( dimension,couleur) Indique si l’on souhaite ou non afficher l’en-tête pour

la dimension.

setCoinSuperieurGauche ( texte) Texte à placer dans le coin supérieur gauche.

Les éléments apparaissant dans cette présentation sont :

• Le libellé du coin supérieur gauche CSG (dans le tableau C par exemple c’est

« Box office ») ;

• les clés de la dimension 1, notées c i

1, pour chaque ligne i, avec 1  i  p (dans

le tableau B ce sont les titres de films ; dans le tableau C les villes) ;

• les clés de la dimension 2, notées c j2, pour chaque ligne j, avec 1  j  q (dans

notre exemple il s’agit de ’Semaine’ suivi du numéro de la semaine) ;

• les en-têtes de la dimension d k , notés e[d k , c i k ], avec k = 1 ou k = 2 ;

• enfin M[i, j] désigne la valeur de la mesure pour la position (i, j) du tableau.

Une fois cet effort de modélisation effectué, tout le reste devient facile Les informations précédentes doivent pouvoir être manipulées par l’intermédiaire de l’interface de la classe Tableau et donc être stockées comme propriétés des objets de

la classe Tableau Par ailleurs, elles doivent être accessibles en entrée ou en sortie par l’intermédiaire d’un ensemble de méthodes publiques

Ce modèle de tableau capture les exemples A et B En l’étendant à trois dimen-sions, on obtient également les présentations C et D En revanche il ne convient pas

Trang 2

au tableau E : il faut savoir renoncer aux cas qui rendent beaucoup plus complexes les manipulations sans que cela soit justifié par le gain en puissance

Dans ce qui suit, nous donnons des exemples d’utilisation, ainsi que l’implanta-tion de la classe, en nous limitant au cas à deux dimensions La gesl’implanta-tion d’un nombre

de dimensions quelconque est partiellement réalisée dans le code fourni sur le site,

et partiellement laissée au lecteur (le polycopié d’exercices fournit des suggestions complémentaires)

3.2.2 Utilisation

La table 3.7 donne la liste des méthodes publiques de la classe Tableau On trouve bien entendu le constructeur de la classe, qui prend en paramètres la dimension du

tableau et des attributs HTML à placer dans la balise <table> Les trois méthodes

suivantes sont les plus importantes Elles définissent respectivement l’ajout d’une

valeur dans une cellule (le tableau M des mesures), la description des en-têtes (le tableau e) et enfin la sortie de la chaîne de caractères contenant la représentation

HTML du tableau

Les autres méthodes publiques sont moins essentielles Elles permettent de régler l’apparence du tableau en affectant certaines valeurs à des paramètres internes à la classe utilisés ensuite au moment de la génération de la chaîne HTML

Voyons maintenant comment on utilise cette classe dans une petite application

de test qui extrait des données de MySQL et les affiche sous forme de tableau HTML

Le script SQL suivant permet de créer la table BoxOffice (les exemples contiennent

un autre script, InsBoxOffice.sql, pour insérer un échantillon de données dans cette table)

Exemple 3.7 exemples/BoxOffice.sql:Création de la table BoxOffice.

# C r é a t i o n d ’ une t a b l e p o u r box o f f i c e s i m p l i f i é

CREATE TABLE B o x O f f i c e

( t i t r e VARCHAR( 6 0 ) NOT NULL,

s e m a i n e INTEGER NOT NULL,

v i l l e VARCHAR( 6 0 ) NOT NULL,

n b _ e n t r e e s INTEGER NOT NULL,

PRIMARY KEY ( t i t r e , s e m a i n e , v i l l e )

) ;

Le script ApplClasseTableau.php, ci-dessous, instancie deux objets de la classe Tableau, correspondant aux présentations A et B données précédemment Ces deux objets sont alimentés à partir des lignes issues d’une même requête, ce qui montre concrètement comment on peut facilement choisir une présentation particulière en partant des mêmes données Notez qu’il n’y a pratiquement plus une seule balise HTML apparaissant dans ce script La figure 3.3 donne le résultat

Trang 3

Exemple 3.8 exemples/ApplClasseTableau.php:Application de la classe Tableau.

<? xml v e r s i o n = " 1 0 " e n c o d i n g = " i s o−8959−1 " ? >

<!DOCTYPE html PUBLIC "−//W3C/ / DTD XHTML 1 0 S t r i c t / / EN"

" h t t p : / / www w3 o r g / TR / xhtml1 /DTD/ xhtml1−s t r i c t dtd ">

<html xmlns= " h t t p : / / www w3 o r g / 1 9 9 9 / xhtml " xml : l a n g = " f r " >

<head >

< t i t l e >La c l a s s e t a b l e a u < / t i t l e >

< l i n k r e l = ’ s t y l e s h e e t ’ h r e f = " f i l m s c s s " t y p e = " t e x t / c s s " / >

</ head >

<body >

<? php

r e q u i r e _ o n c e ( " Connect php " ) ;

r e q u i r e _ o n c e ( "BDMySQL php " ) ;

r e q u i r e _ o n c e ( " T a b l e a u php " ) ;

t r y {

/ / C o n n e x i o n à l a b a s e d e d o n n é e s

$bd = new BDMySQL (NOM, PASSE , BASE , SERVEUR) ;

/ / C r é a t i o n du p r e m i e r t a b l e a u

$ t a b l e a u A = new T a b l e a u ( 2 , a r r a y ( " b o r d e r " = >2) ) ;

$ t a b l e a u A−>s e t A f f i c h e E n t e t e ( 1 , FALSE) ;

/ / C r é a t i o n du s e c o n d t a b l e a u

$ t a b l e a u B = new T a b l e a u ( 2 , a r r a y ( " b o r d e r " = >2) ) ;

$ t a b l e a u B−>s e t C oi nSupe r i e ur G a uc he ( " Box o f f i c e " ) ;

$ t a b l e a u B−>s e t C o u l e u r I m p a i r e ( " s i l v e r " ) ;

$ i = 0 ;

/ / R e c h e r c h e d e s f i l m s p a r i s i e n s

$ r e s u l t a t = $bd−>execRequete ( "SELECT ∗ FROM B o x O f f i c e WHERE

v i l l e = ’ P a r i s ’ " ) ;

w h i l e ( $bo = $bd−>o b j e t S u i v a n t ( $ r e s u l t a t ) ) {

/ / P r e m i e r t a b l e a u : p r é s e n t a t i o n s t a n d a r d , e n c o l o n n e s

$ i ++;

$ t a b l e a u A−>a j o u t V a l e u r ( $i , " Film " , $bo−> t i t r e ) ;

$ t a b l e a u A−>a j o u t V a l e u r ( $i , " V i l l e " , $bo−> v i l l e ) ;

$ t a b l e a u A−>a j o u t V a l e u r ( $i , " Semaine " , $bo−>semaine ) ;

$ t a b l e a u A−>a j o u t V a l e u r ( $i , "Nb e n t r é e s " , $bo−>n b _ e n t r e e s ) ; / / S e c o n d t a b l e a u : p r é s e n t a t i o n p a r t i t r e e t p a r s e m a i n e

$ t a b l e a u B−>a j o u t E n t e t e ( 2 , $bo−>semaine , " Semaine " $bo−>

s e m a i n e ) ;

$ t a b l e a u B−>a j o u t V a l e u r ( $bo−>t i t r e , $bo−>semaine , $bo−>

n b _ e n t r e e s ) ; }

/ / A f f i c h a g e d e s t a b l e a u x

echo $ t a b l e a u A−>tableauHTML ( ) "<br />\n " ;

Trang 4

echo $ t a b l e a u B−>tableauHTML ( ) "<br />\n " ;

}

c a t c h ( E x c e p t i o n $ e x c ) {

/ / Une e r r e u r e s t s u r v e n u e

echo " <b> E r r e u r r e n c o n t r é e : < / b> " $exc−>g e t M e s s a g e ( ) "\n " ;

}

? >

</ body >

</ html >

Figure 3.3 — Affichage des deux tableaux.

Bien entendu on utilise un objet de la classe BDMySQL pour se connecter, effectuer une requête et parcourir le résultat Ce qui nous intéresse ici c’est la production des tableaux Le premier, tableauA, est instancié comme suit :

$ t a b l e a u A = new T a b l e a u ( 2 , a r r a y ( " b o r d e r " = >2) ) ;

$ t a b l e a u A−>s e t A f f i c h e E n t e t e ( 1 , FALSE) ;

On indique donc qu’il s’agit d’un tableau à deux dimensions, avec une bordure

de 2 pixels On peut noter la pratique consistant à passer un nombre variable de paramètres (ici des attributs HTML) sous la forme d’un tableau PHP La seconde instruction supprime l’affichage des en-têtes de la dimension 1

Ensuite, à chaque fois que la boucle sur le résultat de la requête renvoie un objet

bo, on insère des valeurs avec la méthode ajoutValeur() Rappelons que cette

fonction définit la valeur de M[c1, c2] ó c1 (respectivement c2) est la clé désignant

la ligne (respectivement la colonne) de la cellule

Trang 5

$ i ++;

$ t a b l e a u A−>a j o u t V a l e u r ( $i , " Film " , $bo−> t i t r e ) ;

$ t a b l e a u A−>a j o u t V a l e u r ( $i , " V i l l e " , $bo−> v i l l e ) ;

$ t a b l e a u A−>a j o u t V a l e u r ( $i , " Semaine " , $bo−>semaine ) ;

$ t a b l e a u A−>a j o u t V a l e u r ( $i , "Nb e n t r é e s " , $bo−>n b _ e n t r e e s ) ;

Ici la clé de la dimension 1 (les lignes) est basée sur un compteur incrémenté à chaque passage dans la boucle, et la clé de la dimension 2 (les colonnes) est un texte qui servira également d’en-tête (voir figure 3.3)

Pour le second tableau, tableauB, on applique les mêmes principes L’instancia-tion est identique On appelle deux méthodes qui fixent le libellé du coin supérieur gauche, et une couleur de fond pour les lignes impaires

$ t a b l e a u B−>s e t C o i n S u p e r i e u r G a u c h e ( " Box o f f i c e " ) ;

$ t a b l e a u B−>s e t C o u l e u r I m p a i r e ( " s i l v e r " ) ;

Puis, à chaque passage dans la boucle, on insère une valeur de la mesure nbEntr´ees indexée par le titre du film (dimension 1, les lignes) et par la semaine (dimension 2, les colonnes) De plus, au lieu de garder l’en-tête par défaut pour les colonnes (le numéro de la semaine), on le définit avec la méthode ajoutEntete() comme étant la concaténation de la chaîne "Semaine " et du numéro de semaine

$ t a b l e a u B−>a j o u t E n t e t e ( 2 , $bo−>semaine , " Semaine " $bo−>semaine ) ;

$ t a b l e a u B−>a j o u t V a l e u r ( $bo−> t i t r e , $bo−>semaine , $bo−>n b E n t r e e s ) ;

Il n’y a rien de plus à faire L’appel de la méthode tableauHTML() renvoie une chaîne qui peut être placée dans un document HTML Bien entendu on pourrait améliorer la présentation, par exemple en cadrant à droite les colonnes contenant des nombres C’est possible – et facile- - en ajoutant des méthodes appropriées à la classe Tableau Ce type d’extension est très utile à réaliser pour bien comprendre comment fonctionne une classe

Cet exemple montre comment la programmation objet permet de s’affranchir de détails de bas niveau comme, ici, les balises HTML à utiliser en ouverture et en fermeture ou l’ordre de création des cellules On se contente de déclarer le contenu

du tableau et l’objet se charge de fournir une chaîne de caractères contenant sa description HTML Cette chaîne peut alors être utilisée par l’application comme bon lui semble On pourrait par exemple la placer dans une cellule d’un autre tableau pour obtenir très facilement des imbrications Ce qui compte, pour bien utiliser la classe, c’est d’une part de comprendre la modélisation (et donc ce qu’est conceptuellement

un objet tableau), et d’autre part de connaître les modes de contrôle et d’interaction avec l’objet

Ngày đăng: 06/07/2014, 00:20

TỪ KHÓA LIÊN QUAN