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

Pratique de MySQL et PHP- P37 pdf

5 128 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 143,43 KB

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

Nội dung

Ensuite toute demande de création d’un champ passe par la méthode champLibelle qui choisit d’abord flèche 1, en fonction de la demande, la méthode de création de champ spécialisée, puis

Trang 1

libellé, on a recours à un ensemble de méthodes privées un peu plus important Tout d’abord, il existe une méthode dédiée à chaque type de champ (input, select, etc.) qui se charge de construire la balise HTML correctement Ensuite toute demande

de création d’un champ passe par la méthode champLibelle() qui choisit d’abord

(flèche 1), en fonction de la demande, la méthode de création de champ spécialisée, puis crée le composant avec le champ et le libellé (flèche 2)

Voyons maintenant dans le détail le code de la classe, en commençant par les propriétés

class Formulaire

{

// Partie priv´ ee : les propri´ et´ es et les constantes

const VERTICAL = 1;

const HORIZONTAL = 2;

// Propri´ et´ es de la balise <form>

private $methode, $action, $nom, $transfertFichier=FALSE;

// Propri´ et´ es de pr´ esentation

private $orientation="", $centre=TRUE, $classeCSS, $tableau ;

// Propri´ et´ es stockant les composants du formulaire

private $composants=array(), $nbComposants=0;

On trouve donc :

les paramètres à placer dans la balise ouvrante <form>, avec methode qui

peut valoir get ou post, action, le nom du script à déclencher sur validation

du formulaire, transfertFichier qui indique si le formulaire permet ou non

de transférer des fichiers, et le nom du formulaire qui peut être utilisé pour les contrôles Javascript ;

les propriétés déterminant la présentation du formulaire, avec orientation, qui peut être soit VERTICAL, soit HORIZONTAL, deux constantes locales à la classe, soit la chaîne vide qui indique qu’on n’est pas en mode table La variable booléenne centre indique si le formulaire doit être centré dans la page HTML Enfin une variable tableau, correspondant à un objet de la classe Tableau qui va nous aider à mettre en forme les champs ;

la représentation des composants : un simple tableau, et le nombre de compo-sants créés à un moment donné

Bien entendu, comme toutes les classes objet, celle-ci ne demande qu’à être complétée Des suggestions en ce sens sont proposées dans le polycopié d’exercices

Constructeur

Le constructeur de la classe Formulaire se contente d’initialiser les attributs,

notamment ceux qui seront par la suite placés dans la balise ouvrante <form>.

Deux d’entre eux sont obligatoires : la méthode employée (qui est en général post)

Trang 2

et le nom du script associé au formulaire Les paramètres optionnels indiquent si le formulaire doit être centré, la classe CSS définissant la présentation (cette classe n’est pas utilisée dans la version présentée ici), et le nom du formulaire

f u n c t i o n F o r m u l a i r e ( $methode , $ a c t i o n , $ c e n t r e = t r u e ,

$ c l a s s e = " Form " , $nom= " Form " ) {

/ / I n i t i a l i s a t i o n d e s p r o p r i é t é s d e l ’ o b j e t a v e c l e s

p a r a m è t r e s

$ t h i s−>methode = $methode ;

$ t h i s−>a c t i o n = $ a c t i o n ;

$ t h i s−>c l a s s e C S S = $ c l a s s e ;

$ t h i s−>nom = $nom ;

$ t h i s−>c e n t r e = $ c e n t r e ;

}

Quelques contrôles seraient les bienvenus (sur la méthode par exemple, qui ne peut prendre que deux valeurs) Comme d’habitude nous les omettons pour ne pas surcharger le code

Méthodes privées

La classe comprend ensuite un ensemble de méthodes privées pour produire les champs d’un formulaire HTML Toutes ces méthodes renvoient une chaîne de caractères contenant la balise complète, prête à insérer dans un document HTML

La méthode champINPUT(), ci-dessous, produit par exemple un champ input du type demandé, avec son nom, sa valeur, le nombre de caractères du champ de saisie,

et le nombre maximal de caractères saisissables par l’utilisateur4

/ / M é t h o d e p o u r c r é e r un champ i n p u t g é n é r a l

p r i v a t e f u n c t i o n champINPUT ( $ t y p e , $nom , $ v a l , $ t a i l l e ,

$ t a i l l e M a x )

{

/ / A t t e n t i o n a u x p r o b l è m e s d ’ a f f i c h a g e

$ v a l = h t m l S p e c i a l C h a r s ( $ v a l ) ;

/ / C r é a t i o n e t r e n v o i d e l a c h a î n e d e c a r a c t è r e s

r e t u r n " < i n p u t t y p e = ’ $ t y p e ’ name=\"$nom\" "

" v a l u e =\" $ v a l \" s i z e = ’ $ t a i l l e ’ m a x l e n g t h = ’ $ t a i l l e M a x ’ / > \ n " ; }

Quand on manipulate des chaînes en y incluant des variables, attention à bien imaginer ce qui peut se passer si les variables contiennent des caractères gênants comme « ’ » Pour l’attribut value par exemple, on a appliqué au préalable la fonction htmlSpecialChars()

Les paramètres passés aux méthodes créant des champs peuvent varier en fonction

du type de champ produit Par exemple les méthodes produisant des listes de choix

4 On peut faire défiler un texte dans un champ de saisie Le nombre de caractères saisissables n’est donc pas limité par la taille d’affichage du champ.

Trang 3

prennent en argument un tableau associatif – comme $liste dans la méthode ci-dessous – dont la clé est la valeur de chaque choix, et l’élément le libellé associé

/ / Champ p o u r s é l e c t i o n n e r d a n s u n e l i s t e

p r i v a t e f u n c t i o n champSELECT ( $nom , $ l i s t e , $ d e f a u t , $ t a i l l e

=1)

{

$ s = " < s e l e c t name=\"$nom\" s i z e = ’ $ t a i l l e ’ >\n " ;

w h i l e ( l i s t ( $ v a l , $ l i b e l l e ) = e a c h ( $ l i s t e ) ) {

/ / A t t e n t i o n a u x p r o b l è m e s d ’ a f f i c h a g e

$ v a l = h t m l S p e c i a l C h a r s ( $ v a l ) ;

$ d e f a u t = h t m l S p e c i a l C h a r s ( $ d e f a u t ) ;

i f ( $ v a l != $ d e f a u t )

$ s = " < o p t i o n v a l u e =\" $ v a l \"> $ l i b e l l e < / o p t i o n >\n " ;

e l s e

$ s = " < o p t i o n v a l u e =\" $ v a l \" s e l e c t e d = ’1 ’ > $ l i b e l l e < /

o p t i o n >\n " ; }

r e t u r n $ s " </ s e l e c t >\n " ;

}

Dans la méthode ci-dessus, on crée un champ select constitué d’une liste d’options Une autre méthode champBUTTONS, que nous vous laissons consulter dans

le fichierFormulaire.php, dispose tous les choix sur deux lignes, l’une avec les libellés, l’autre avec les boutons correspondants Elle est utilisée pour les listes de boutons radio ou checkbox

Une méthode plus générale permet de produire la chaîne contenant un champ

de formulaire, quel que soit son type Comme les paramètres peuvent varier selon ce type, on utilise à cette occasion une astuce de PHP pour passer un nombre variable

de paramètres La variable $params ci-dessous est un tableau associatif dont la clé est

le nom du paramètre, et l’élément la valeur de ce paramètre Dans le cas d’un champ textarea par exemple, $params doit être un tableau à deux éléments, l’un indexé par ROWS et l’autre par COLS

/ / Champ d e f o r m u l a i r e

p r i v a t e f u n c t i o n champForm ( $ t y p e , $nom , $ v a l , $ p a r a m s , $ l i s t e =

a r r a y ( ) )

{

s w i t c h ( $ t y p e )

{

c a s e " t e x t " : c a s e " p a s s w o r d " : c a s e " s u b m i t " : c a s e " r e s e t " :

c a s e " f i l e " : c a s e " h i d d e n " :

/ / E x t r a c t i o n d e s p a r a m è t r e s d e l a l i s t e

i f ( i s S e t ( $ p a r a m s [ ’ SIZE ’ ] ) )

$ t a i l l e = $ p a r a m s [ " SIZE " ] ;

e l s e $ t a i l l e = 0 ;

i f ( i s S e t ( $ p a r a m s [ ’MAXLENGTH ’ ] ) and $ p a r a m s [ ’MAXLENGTH ’

] ! = 0 )

$ t a i l l e M a x = $ p a r a m s [ ’MAXLENGTH ’ ] ;

e l s e $ t a i l l e M a x = $ t a i l l e ;

Trang 4

/ / A p p e l d e l a m é t h o d e c h a m p I n p u t

$champ = $ t h i s−>champInput ( $type , $nom , $val , $ t a i l l e ,

$ t a i l l e M a x ) ;

/ / S i c ’ e s t un t r a n s f e r t d e f i c h i e r : s ’ e n s o u v e n i r

i f ( $ t y p e == " f i l e " ) $ t h i s−> t r a n s f e r t F i c h i e r =TRUE;

b r e a k ;

c a s e " t e x t a r e a " :

$ l i g = $ p a r a m s [ "ROWS" ] ; $ c o l = $ p a r a m s [ "COLS" ] ;

/ / A p p e l d e l a m é t h o d e c h a m p T e x t a r e a d e l ’ o b j e t c o u r a n t

$champ = $ t h i s−>champTextarea ($nom , $val , $ l i g , $ c o l ) ;

b r e a k ;

c a s e " s e l e c t " :

$ t a i l l e = $ p a r a m s [ " SIZE " ] ;

/ / A p p e l d e l a m é t h o d e c h a m p S e l e c t d e l ’ o b j e t c o u r a n t

$champ = $ t h i s−>champSelect ($nom , $ l i s t e , $val , $ t a i l l e )

;

b r e a k ;

c a s e " c h e c k b o x " :

$champ = $ t h i s−>champButtons ( $type , $nom , $ l i s t e , $val ,

$ p a r a m s ) ;

b r e a k ;

c a s e " r a d i o " :

/ / A p p e l d e l a m é t h o d e c h a m p B u t t o n s d e l ’ o b j e t c o u r a n t

$champ = $ t h i s−>champButtons ( $type , $nom , $ l i s t e , $val ,

a r r a y ( ) ) ;

b r e a k ;

d e f a u l t : echo " <b>ERREUR : $ t y p e e s t un t y p e inconnu < / b>\n " ;

b r e a k ;

}

r e t u r n $champ ;

}

$this->transfertFichier à true pour être sûr de bien produire la balise

<form> avec les bons attributs En fait, avec cette technique, on est assuré que

le formulaire sera toujours correct, sans avoir à s’appuyer sur le soin apporté au

développement par l’utilisateur de la classe

La méthode champForm permet d’appeler la bonne méthode de création de champ en fonction du type souhaité La structure de test switch utilisée ci-dessus (voir chapitre 11) est bien adaptée au déclenchement d’une action parmi une liste prédéterminée en fonction d’un paramètre, ici le type du champ L’ensemble des types de champ text, password, submit, reset, hidden et file correspond par exemple à la méthode champInput

Trang 5

Création des composants

Finalement nous disposons de tous les éléments pour commencer à construire les composants d’un formulaire Chacune des méthodes qui suit construit un composant

et le stocke dans la propriété composants de l’objet Voici le cas le plus simple, pour commencer : l’ajout d’un composant de texte dans le formulaire

/ / A j o u t d ’ un t e x t e q u e l c o n q u e

p u b l i c f u n c t i o n a j o u t T e x t e ( $ t e x t e )

{

/ / On a j o u t e un é l é m e n t d a n s l e t a b l e a u $ c o m p o s a n t s

$ t h i s−>composants [ $ t h i s −>nbComposants ] = a r r a y ( " t y p e "=>"TEXTE" ,

" t e x t e " => $ t e x t e ) ;

/ / R e n v o i d e l ’ i d e n t i f i a n t d e l a l i g n e , e t i n c r é m e n t a t i o n

r e t u r n $ t h i s−>nbComposants ++;

}

Un composant est représenté par un tableau associatif PHP comprenant toujours

un élément type, et d’autres éléments qui dépendent du type de composant Pour un texte, on a simplement un élément texte mais nous verrons que pour un champ la description est un peu plus riche

Le composant est stocké dans le tableau composants, propriété de l’objet, et indicé par un numéro qui tient lieu d’identifiant pour le composant Cet identifiant est renvoyé de manière à ce que l’utilisateur garde un moyen de référencer le composant pour, par exemple, le récupérer ou le modifier par l’intermédiaire d’autres méthodes

La seconde méthode (privée celle-là) construisant des composants est champLibelle()

/ / C r é a t i o n d ’ un champ a v e c s o n l i b e l l é

p r i v a t e f u n c t i o n c h a m p L i b e l l e ( $ l i b e l l e , $nom , $ v a l , $ t y p e ,

$ p a r a m s = a r r a y ( ) , $ l i s t e = a r r a y ( ) )

{

/ / C r é a t i o n d e l a b a l i s e HTML

$champHTML = $ t h i s−>champForm ( $type , $nom , $val , $params ,

$ l i s t e ) ;

/ / On m e t l e l i b e l l é e n g r a s

$ l i b e l l e = " <b> $ l i b e l l e < / b> " ;

/ / S t o c k a g e du l i b e l l é e t d e l a b a l i s e d a n s l e c o n t e n u

$ t h i s−>composants [ $ t h i s −>nbComposants ] = a r r a y("t y p e" => "CHAMP" ,

" l i b e l l e " => $ l i b e l l e ,

" champ " => $champHTML) ;

/ / R e n v o i d e l ’ i d e n t i f i a n t d e l a l i g n e , e t i n c r é m e n t a t i o n

r e t u r n $ t h i s−>nbComposants ++;

}

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

TỪ KHÓA LIÊN QUAN