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

Pratique de MySQL et PHP- P21 doc

5 255 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 202,97 KB

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

Nội dung

2.3 MISE À JOUR D’UNE BASE PAR FORMULAIRE L’interface de mise à jour de la table FilmComplet donnée à la fin du chapitre 1 voir les exemples pages 47 et 49 est assez rudimentaire et fera

Trang 1

Est-il nécessaire de préciser qu’il faut rester extrêmement prudent avec les don-nées transmises par HTTP ? Il est par exemple très délicat de proposer un formulaire pour saisir des commandes à effectuer, dans MySQL ou dans le système d’exploita-tion Encore une fois, reportez-vous au site php.net pour sa documentation sur la sécurité des applications PHP, et de nombreuses recommandations à ce sujet.

2.3 MISE À JOUR D’UNE BASE PAR FORMULAIRE

L’interface de mise à jour de la table FilmComplet donnée à la fin du chapitre 1

(voir les exemples pages 47 et 49) est assez rudimentaire et ferait rapidement hurler n’importe quel utilisateur Nous allons développer un système plus convivial pour insérer, mettre à jour ou détruire les lignes d’une table, en prenant comme cible la

table FilmSimple, qui est un peu plus facile à manipuler (voir le schéma page 28).

2.3.1 Script d’insertion et de mise à jour

Le script principal,FilmSimple.php, affiche une page dont le contenu varie en fonction

du mode choisi Voici les modes possibles :

1 En mode par défaut, on affiche la liste des films en leur associant une ancre

permettant d’accéder au formulaire de modification Une ancre placée sous le tableau permet d’accéder au formulaire d’insertion.

2 En mode modification d’un film, on affiche un formulaire présentant les champs

de saisie Chaque champ vaut par défaut la valeur couramment stockée dans la base pour ce film Seule exception : on ne peut pas modifier le titre puisqu’on

suppose ici que c’est le moyen d’identifier (et donc de retrouver) le film modifié.

3 Enfin, en mode insertion, on présente un formulaire de saisie, sans valeur par

défaut.

Pour commencer nous allons définir avec define() des constantes définissant les différents modes Les constantes permettent de manipuler des symboles, plus faciles

à utiliser et plus clairs que des valeurs.

/ / L e s c o n s t a n t e s p o u r l e mode

d e f i n e ( "MODE_DEFAUT" , " d e f a u t " ) ;

d e f i n e ( "MODE_INSERTION" , " i n s e r t i o n " ) ;

d e f i n e ( "MODE_MAJ" , " maj " ) ;

Ensuite, afin de ne pas se lancer dans un script d’une taille démesurée, on découpe

le travail en plusieurs parties, correspondant chacune à une fonctionnalité précise, puis on réalise chaque partie par une fonction.

La première fonction affiche le formulaire On pourrait prévoir une fonction pour

un formulaire en mise à jour et une autre pour un formulaire en insertion, mais la plus grande part du code serait commun, ce qui entraîne une double modification chaque fois que le site évolue (par exemple lors de l’ajout d’un champ dans la table).

Trang 2

Il est beaucoup plus astucieux de programmer une seule fonction qui affiche un contenu légèrement différent en fonction du type de mise à jour souhaité (insertion

ou modification) Voici le code de cette fonction Le style de programmation adopté ici est du HTML dans lequel on insère ponctuellement des instructions PHP Ce style trouve très rapidement ses limites en terme de lisibilité, comme vous pourrez vous en convaincre en essayant de décrypter le contenu Rassurez-vous, c’est la dernière fois que j’utilise cette gestion obscure des accolades !

Exemple 2.16 exemples/FormFilmSimple.php:Le formulaire avec valeurs par défaut, et modes insertion

ou mise à jour

<? php

/ / F o r m u l a i r e d e s a i s i e , a v e c v a l e u r s p a r d é f a u t

f u n c t i o n F o r m F i l m S i m p l e ( $mode , $ v a l _ d e f a u t )

{

? >

<!−− On e s t en HTML −−>

< f o r m a c t i o n = ’ F i l m S i m p l e php ’ method= ’ p o s t ’ >

< i n p u t t y p e = ’ h i d d e n ’ name= " a c t i o n " v a l u e = " F o r m F i l m S i m p l e " / >

< i n p u t t y p e = ’ h i d d e n ’ name= " mode " v a l u e = " <? php echo $mode ? > " / >

< t a b l e >

<? php i f ( $mode == MODE_INSERTION) { ? >

< t r ><td > T i t r e : </ td ><td >< i n p u t t y p e = ’ t e x t ’ s i z e = ’ 40 ’ name=

’ t i t r e ’ v a l u e = " <? php echo $ v a l _ d e f a u t [ ’ t i t r e ’ ] ? > " / >

</ td > </ t r >

<? php } e l s e { ? >

< t r ><td >Mise à j o u r de </ td ><td > <? php echo $ v a l _ d e f a u t

[ ’ t i t r e ’ ] ? >

< i n p u t t y p e = ’ h i d d e n ’

name= ’ t i t r e ’

v a l u e = ’ <? php echo $ v a l _ d e f a u t [ ’ t i t r e ’ ] ? > ’ / >

</ td > </ t r >

<? php } ? >

< t r ><td >Année : </ td >

<td >< i n p u t t y p e = ’ t e x t ’ s i z e = ’ 4 ’ m a x l e n g t h = ’ 4 ’

name= " annee " v a l u e = " <? php

echo $ v a l _ d e f a u t [ ’ annee ’ ] ? > " / >

</ td > </ t r >

< t r ><td > R é a l i s a t e u r ( prénom − nom) : </ td >

<td >< i n p u t t y p e = ’ t e x t ’ s i z e = ’ 20 ’ name= " p r e n o m _ r e a l i s a t e u r "

v a l u e = " <? php

echo $ v a l _ d e f a u t [ ’ p r e n o m _ r e a l i s a t e u r ’ ] ? > " / >

< b r / >

< i n p u t t y p e = t e x t s i z e = ’ 20 ’ name= " n o m _ r e a l i s a t e u r "

v a l u e = " <? php echo $ v a l _ d e f a u t [ ’ n o m _ r e a l i s a t e u r ’ ] ? > " / >

</ td > </ t r >

Trang 3

< t r ><td >Année de n a i s s a n c e :

<td >< i n p u t t y p e = ’ t e x t ’ s i z e = ’ 4 ’ m a x l e n g t h = ’ 4 ’

name= ’ a n n e e _ n a i s s a n c e ’

v a l u e = " <? php echo $ v a l _ d e f a u t [ ’ a n n e e _ n a i s s a n c e ’ ] ? > " / >

</ td > </ t r >

< t r >< t d c o l s p a n = ’ 2 ’ >< i n p u t t y p e = ’ s u b m i t ’ v a l u e = ’ E x é c u t e r ’ / >

</ td > </ t r >

</ t a b l e >

</ form >

<? php

}

? >

La fonction FormFilmSimple() prend en paramètres le mode (insertion ou modification) et un tableau contenant les valeurs par défaut à placer dans les champs.

Le mode est systématiquement placé dans un champ caché pour être transmis au script traitant les données du formulaire, et saura ainsi dans quel contexte elles ont été saisies :

<input type=’hidden’name="mode"value="<?php echo $mode ?>"/>

Les modes d’insertion et de modification correspondent à deux affichages diffé-rents du formulaire En insertion le champ « titre » est saisissable et sans valeur par défaut En mise à jour, il est affiché sans pouvoir être saisi, et il est de plus dans un champ caché avec sa valeur courante qui est transmise au script de traitement des données.

<? php i f ( $mode == MODE_INSERTION) { ? >

< t r ><td > T i t r e : </ td ><td >< i n p u t t y p e = ’ t e x t ’ s i z e = ’ 40 ’ name= ’

t i t r e ’

v a l u e = " <?= $ v a l _ d e f a u t [ ’ t i t r e ’ ] ? > " / > </ td

> </ t r >

<? php } e l s e { ? >

< t r ><td >Mise à j o u r de </ td ><td ><?= $ v a l _ d e f a u t [ ’ t i t r e ’ ] ? > < / td >

<td >< i n p u t t y p e = ’ h i d d e n ’

name= ’ t i t r e ’ v a l u e = ’ <?= $ v a l _ d e f a u t [ ’ t i t r e ’ ] ? > ’ / > </ td > </ t r

>

<? php } ? >

Le tableau des valeurs par défaut passé en paramètre à la fonction, $val_defaut, doit contenir un élément par champ, le nom de l’élément étant le nom du champ,

et sa valeur la valeur par défaut du champ Ce tableau associatif peut s’obtenir par

un appel à mysql_fetch_assoc() si le film vient de la base et doit être modifié.

Il peut également s’agir du tableau $_POST ou $_GET après saisie du formulaire, pour réafficher les données prises en compte La figure 2.4 montre le formulaire en modification.

Notez qu’on place un autre champ caché, action, dans le formulaire La trans-mission de cette variable action au scriptFilmSimple.phpindique que des valeurs ont

Trang 4

été saisies dans le formulaire, et qu’elles doivent déclencher une insertion ou une mise à jour dans la base.

Figure 2.4 — Formulaire en modification du film Vertigo

La seconde fonction effectue les requêtes de mise à jour Elle prend en entrée le mode (insertion ou modification), un tableau associatif qui, comme $val_defaut,

contient les valeurs d’une ligne de la table FilmSimple, enfin l’identifiant de

connexion à la base.

Exemple 2.17 exemples/MAJFilmSimple.php:Fonction de mise à jour de la table

<? php

/ / F o n c t i o n d e m i s e à j o u r ou i n s e r t i o n d e l a t a b l e F i l m S i m p l e

f u n c t i o n MAJFilmSimple ( $mode , $ f i l m , $ c o n n e x i o n )

{

/ / P r é p a r a t i o n d e s v a r i a b l e s , e n t r a i t a n t p a r a d d S l a s h e s

/ / l e s c h a î n e s d e c a r a c t è r e s

$ t i t r e = a d d S l a s h e s ( $ f i l m [ ’ t i t r e ’ ] ) ;

$annee = $ f i l m [ ’ annee ’ ] ;

$ p r e n o m _ r e a l i s a t e u r = a d d S l a s h e s ( $ f i l m [ ’ p r e n o m _ r e a l i s a t e u r ’ ] ) ;

$ n o m _ r e a l i s a t e u r = a d d S l a s h e s ( $ f i l m [ ’ n o m _ r e a l i s a t e u r ’ ] ) ;

$ a n n e e _ n a i s s a n c e = $ f i l m [ ’ a n n e e _ n a i s s a n c e ’ ] ;

i f ( $mode == MODE_INSERTION)

$ r e q u e t e = " INSERT INTO F i l m S i m p l e ( t i t r e , annee , "

" p r e n o m _ r e a l i s a t e u r , n o m _ r e a l i s a t e u r , a n n e e _ n a i s s a n c e ) " " VALUES ( ’ $ t i t r e ’ , ’ $annee ’ , ’ $ p r e n o m _ r e a l i s a t e u r ’ , " " ’ $ n o m _ r e a l i s a t e u r ’ , ’ $ a n n e e _ n a i s s a n c e ’ ) " ;

e l s e

Trang 5

$ r e q u e t e = "UPDATE F i l m S i m p l e SET annee = ’ $annee ’ , "

" p r e n o m _ r e a l i s a t e u r = ’ $ p r e n o m _ r e a l i s a t e u r ’ , "

" n o m _ r e a l i s a t e u r = ’ $ n o m _ r e a l i s a t e u r ’ , "

" a n n e e _ n a i s s a n c e = ’ $ a n n e e _ n a i s s a n c e ’ "

"WHERE t i t r e = ’ $ t i t r e ’ " ;

/ / E x é c u t i o n d e l ’ o r d r e SQL

E x e c R e q u e t e ( $ r e q u e t e , $ c o n n e x i o n ) ;

}

? >

Enfin, la troisième fonction affiche un tableau des films présents dans la table, en associant à chaque film une ancre pour la modification.

Exemple 2.18 exemples/TableauFilms.php:Tableau affichant la liste des films

<? php

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

f u n c t i o n T a b l e a u F i l m s ( $ c o n n e x i o n )

{

$ r e s u l t a t = E x e c R e q u e t e ( " SELECT ∗ FROM FilmSimple " , $connexion ) ;

echo " < t a b l e b o r d e r = ’ 4 ’ c e l l s p a c i n g = ’ 2 ’ c e l l p a d d i n g = ’2 ’ > "

" < c a p t i o n a l i g n = ’ bot t om ’ > T a b l e < i > F i l m S i m p l e < / i > </ c a p t i o n > " " < t r ><th > T i t r e < / th ><th >Année < / th ><th > R é a l i s a t e u r < / th > "

" <th >Année n a i s s a n c e < / th ><th >Action < / th > </ t r >\n " ;

w h i l e ( $ f i l m = O b j e t S u i v a n t ( $ r e s u l t a t ) ) {

/ / On c o d e l e t i t r e p o u r l e p l a c e r d a n s l ’URL

$ t i t r e U R L = u r l E n c o d e ( $ f i l m−> t i t r e ) ;

echo " < t r ><td > $ f i l m−> t i t r e </ td ><td >$film −>annee </ td > "

" <td > $ f i l m−>p r e n o m _ r e a l i s a t e u r $film −>n o m _ r e a l i s a t e u r </ td > "

" <td > $ f i l m−>a n n e e _ n a i s s a n c e </ td > "

" <td ><a h r e f = ’ F i l m S i m p l e php ? mode= " MODE_MAJ

"&amp ; t i t r e = $ t i t r e U R L ’ > M o d i f i e r c e f i l m < / a > </ td > </ t r >\n " ; }

echo " </ t a b l e >\n " ;

}

? >

Le tableau est standard, la seule particularité se limite à une l’ancre qui contient deux arguments, le mode et le titre du film à modifier :

<a href=’FilmSimple.php?mode=maj&amp;titre=$titreURL’>

Rappelons qu’il faut prendre garde à ne pas placer n’importe quelle chaîne de caractères dans une URL (voir page 67) : des caractères blancs ou accentués seraient sans doute mal tolérés et ne donneraient pas les résultats escomptés On ne doit

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

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN