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

Pratique de MySQL et PHP- P27 pptx

5 124 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

Tiêu đề Faites Votre Commande Au Restaurant
Trường học University Name
Chuyên ngành Computer Science
Thể loại Pratique
Năm xuất bản 2023
Thành phố City Name
Định dạng
Số trang 5
Dung lượng 147,71 KB

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

Nội dung

Cette persistance est obtenue en stockant les valeurs du tableau dans un fichier temporaire, situé par exemple sous Unix dans le répertoire /tmp et configurable avec le paramètre session

Trang 1

<h1> F a i t e s v o t r e commande au r e s t a u r a n t < / h1>

<? 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 ( " Connexion php " ) ;

r e q u i r e _ o n c e ( " E x e c R e q u e t e php " ) ;

r e q u i r e _ o n c e ( " N o r m a l i s a t i o n php " ) ;

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

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

$ c o n n e x i o n = Connexion (NOM, PASSE , BASE , SERVEUR) ;

/ / N o r m a l i s a t i o n d e s e n t r é e s HTTP

N o r m a l i s a t i o n ( ) ;

/ / S i l e t y p e d e c h o i x n ’ e s t p a s d é f i n i : on co mmence

/ / p a r p r o p o s e r l e s e n t r é e s

i f ( ! i s S e t ( $_POST [ ’ t y p e _ c h o i x ’ ] ) ) {

echo " B o n j o u r Nous v o u s a v o n s a t t r i b u é l a s e s s i o n "

s e s s i o n _ i d ( ) " < b r / > " ;

FormCommande ( " E n t r é e " , " S e s s i o n P H P php " , $ c o n n e x i o n ) ;

}

e l s e {

/ / E n r e g i s t r o n s l e c h o i x q u i v i e n t d ’ ê t r e f a i t

/ / I l f a u d r a i t t e s t e r q u e i d _ c h o i x e s t d é f i n i

$ r e q u e t e = " SELECT l i b e l l e FROM C a r t e "

"WHERE i d _ c h o i x = ’ $_POST [ i d _ c h o i x ] ’ " ;

$ r e s u l t a t = 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 ) ;

$ c h o i x = O b j e t S u i v a n t ( $ r e s u l t a t ) ;

$_SESSION [ $_POST [ ’ t y p e _ c h o i x ’ ] ] = $ c h o i x−> l i b e l l e ;

/ / A f f i c h a g e d e s c h o i x d é j à e f f e c t u é s

i f ( i s S e t ( $_SESSION [ ’ E n t r é e ’ ] ) )

echo " V o t r e e n t r é e : " $_SESSION [ ’ E n t r é e ’ ] " < b r / > " ;

i f ( i s S e t ( $_SESSION [ ’ P l a t ’ ] ) )

echo " V o t r e p l a t : " $_SESSION [ ’ P l a t ’ ] " < b r / > " ;

i f ( i s S e t ( $_SESSION [ ’ D e s s e r t ’ ] ) )

echo " V o t r e d e s s e r t : " $_SESSION [ ’ D e s s e r t ’ ] " < b r / > " ;

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

i f ( $_POST [ ’ t y p e _ c h o i x ’ ] == ’ E n t r é e ’ )

FormCommande ( " P l a t " , " S e s s i o n P H P php " , $ c o n n e x i o n ) ;

e l s e i f ( $_POST [ ’ t y p e _ c h o i x ’ ] == ’ P l a t ’ )

FormCommande ( " D e s s e r t " , " S e s s i o n P H P php " , $ c o n n e x i o n ) ;

e l s e {

echo " <p>Nous a v o n s n o t é v o t r e commande M e r c i ! < p / > " ;

s e s s i o n _ d e s t r o y ( ) ;

}

}

Trang 2

? >

</ body >

</ html >

Les deux différences principales sont, d’une part, le recours à la fonction

session_start() qui remplace la manipulation explicite des cookies (voir le script

ExSession.php, page 103), et d’autre part l’utilisation du tableau $_SESSION à la place

de la table Commande.

Ce tableau peut être vu comme une variable PHP persistante entre deux échanges client/serveur Cette persistance est obtenue en stockant les valeurs du tableau

dans un fichier temporaire, situé par exemple sous Unix dans le répertoire /tmp (et

configurable avec le paramètre session_save_path dans le fichierphp.ini)

Ce mécanisme, valable pour la mise en place d’un système de gestion des ses-sions très simple, trouve rapidement ses limites Si de très nombreuses informations doivent être associées à une session, il est préférable de les placer dans la base

de données, en les référençant par l’identifiant de session (donné par la fonction session_id()) Une base de données permet de mieux structurer les informations Elle persiste sur une très longue durée, contrairement à un fichier temporaire D’autre part, elle est plus sûre puisque seuls les utilisateurs autorisés peuvent y accéder Les principes de gestion de session présentés ici seront repris de manière plus étendue dans le chapitre 7 pour développer des utilitaires robustes et associer la ges-tion de sessions à l’authentificages-tion des utilisateurs dans une base MySQL Les fonc-tionnalités de PHP présentées précédemment nous suffiront puisque nous utilisons MySQL, mais vous pouvez consulter les autres fonctions PHP dans la documentation

si vous pensez avoir à utiliser le mécanisme natif PHP Il est possible en particulier

d’éviter l’utilisation des cookies en demandant à PHP la réécriture de chaque URL

dans une page pour y inclure l’identifiant de session Comme expliqué au début de cette section, cette méthode reste cependant globalement insatisfaisante et peu sûre

2.6 SQL DYNAMIQUE ET AFFICHAGE MULTI-PAGES

Dans la plupart des cas les requêtes SQL exécutées dans les scripts PHP sont fixées par

le programmeur et ce dernier connaît le type du résultat (nombre d’attributs et noms des attributs) Il peut arriver que les ordres SQL soient « dynamiques », c’est-à-dire déterminés à l’exécution C’est le cas par exemple quand on permet à l’utilisateur d’effectuer directement des requêtes SQL sur la base et d’afficher le résultat sous forme de table On peut alors faire appel à des fonctions MySQL qui donnent des informations sur le type du résultat

Voici une illustration de cette fonctionnalité avec, en guise de garniture, l’af-fichage « multi-pages » du résultat Au lieu de donner en bloc, dans une seule page HTML, toutes les lignes du résultat de la requête, on affiche seulement un sous-groupe de taille fixée (ici, 10), et on donne la possibilité de passer d’un groupe à l’autre avec des ancres

Trang 3

2.6.1 Affichage d’une requête dynamique

Commençons par écrire une fonction qui prend en argument le résultat d’une requête (tel qu’il est rendu par la fonction mysql_query()), la position de la première ligne

à afficher, et le nombre de lignes à afficher

Exemple 2.31 exemples/AfficheResultat.php:Affichage partiel du résultat d’une requête SQL

<? php

/ / A f f i c h a g e p a r t i e l du r é s u l t a t d ’ u n e r e q u ê t e

r e q u i r e ( " UtilBD php " ) ;

f u n c t i o n A f f i c h e R e s u l t a t ( $ r e s u l t a t , $ p o s i t i o n , $ n b r L i g n e s )

{

/ / A f f i c h a g e d ’ un t a b l e a u HTML, a v e c a u t a n t d e c o l o n n e s

/ / q u e d ’ a t t r i b u t s On a f f i c h e $ n b r L i g n e s l i g n e s ,

/ / à p a r t i r d e l a l i g n e i n d i q u é e p a r $ p o s i t i o n ,

echo " < t a b l e b o r d e r = ’4 ’ > " ;

$ c o m p t e u r L i g n e s = 1 ;

$ n b A t t r = m y s q l _ n u m _ f i e l d s ( $ r e s u l t a t ) ;

$ n o L i g n e = 0 ;

w h i l e ( $ t a b A t t r = m y s q l _ f e t c h _ r o w ( $ r e s u l t a t ) ) {

/ / A v a n t l a p r e m i è r e l i g n e , on a f f i c h e l ’ en−t ê t e de l a t a b l e

i f ( $ c o m p t e u r L i g n e s == 1 ) {

echo " < t r > " ;

/ / A f f i c h a g e d e s noms d ’ a t t r i b u t s

f o r ( $ i = 0 ; $ i < $ n b A t t r ; $ i ++)

echo " <th > " m y s q l _ f i e l d _ n a m e ( $ r e s u l t a t , $ i ) " </ th >\n " ;

}

/ / A f f i c h a g e d e c h a q u e l i g n e d a n s l a f o u r c h e t t e [ p r e m i è r e ,

d e r n i è r e ]

i f ( $ c o m p t e u r L i g n e s >= $ p o s i t i o n

and $ c o m p t e u r L i g n e s <= $ p o s i t i o n + $ n b r L i g n e s −1) {

$ c l a s s e = "A" ( ( $ n o L i g n e ++) % 2 ) ;

echo " < t r c l a s s = ’ $ c l a s s e ’ > " ;

f o r ( $ i = 0 ; $ i < $ n b A t t r ; $ i ++) {

i f ( empty ( $ t a b A t t r [ $ i ] ) ) $ t a b A t t r [ $ i ] = " Champ v i d e " ; echo " <td > $ t a b A t t r [ $ i ] < / td > " ;

}

echo " </ t r >\n " ;

}

/ / I n u t i l e d e c o n t i n u e r s i t o u t e s t a f f i c h é

i f ( $ c o m p t e u r L i g n e s ++ >= $ p o s i t i o n + $ n b r L i g n e s − 1) break ;

}

Trang 4

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

}

? >

La fonction AfficheResultat() utilise quelques nouvelles fonctionnalités de l’interface MySQL/PHP Elles permettent d’obtenir la description du résultat, en plus

du résultat lui-même

1 mysql_num_fields() donne le nombre d’attributs dans le résultat ;

2 mysql_field_name() donne le nom de l’un des attributs ;

3 mysql_fetch_row() renvoie la ligne sous forme d’un tableau indicé, plus facile à manipuler que les tableaux associatifs ou les objets quand on doit exploiter le résultat de requêtes quelconques pour lesquelles on ne connaît

pas, a priori, le type du résultat et donc le nom des attributs.

L’affichage comprend deux boucles La première, classique, permet de parcourir toutes les lignes du résultat Notez qu’ici on ne prend en compte que les lignes à présenter, à savoir celles dont la position est comprise entre $position et

$position+$nbrLignes-1 La seconde boucle parcourt, pour une ligne donnée, tous les attributs

echo " < t r c l a s s = ’A ’ " ( ( $ n o L i g n e ++) % 2 ) " > " ;

f o r ( $ i = 0 ; $ i < $ n b A t t r ; $ i ++) {

i f ( empty ( $ t a b A t t r [ $ i ] ) ) $ t a b A t t r [ $ i ] = " Champ v i d e " ;

echo " <td > $ t a b A t t r [ $ i ] < / td > " ;

}

echo " </ t r >\n " ;

On alterne la couleur de fond pour rendre la table plus lisible Notre feuille de style,films.css, définit deux couleurs de fond pour les classes A0 et A1

tr.A0 {background-color:white}

tr.A1 {background-color:yellow}

On utilise alternativement les classes A0 et A1 pour la balise <tr> On concatène

pour cela le caractère ’A’ avec le résultat de l’expression $l++ % 2 La variable $l++ est un entier qui, auto-incrémenté par l’opérateur ’++’, vaut successivement 0, 1, 2,

3, etc En prenant cette valeur modulo 2 (l’opérateur ’%’), on obtient l’alternance souhaitée de 0 et de 1

2.6.2 Affichage multi-pages

Voyons maintenant comment réaliser l’affichage multi-pages, une technique très utile pour afficher de longues listes et utilisée, par exemple, par les moteurs de recherche

Trang 5

Exemple 2.32 exemples/ExecSQL.php:Affichage multi-pages du résultat d’une requête

<? 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 > I n t e r r o g a t i o n a v e c SQL< / 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 >

<h1> I n t e r r o g a t i o n a v e c SQL< / h1>

< f o r m method= ’ p o s t ’ a c t i o n = ’ ExecSQL php ’ >

< t e x t a r e a name= ’ r e q u e t e ’ c o l s = ’ 50 ’ r o w s = ’ 3 ’ ><? php

i f ( i s S e t ($_REQUEST [ ’ r e q u e t e ’ ] ) )

echo $_REQUEST [ ’ r e q u e t e ’ ] ;

e l s e

echo " SELECT ∗ FROM FilmSimple " ;

? >

</ t e x t a r e a >

< b r / >

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

</ form >

<? php

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

r e q u i r e _ o n c e ( " N o r m a l i s a t i o n php " ) ;

r e q u i r e _ o n c e ( " A f f i c h e R e s u l t a t php " ) ;

d e f i n e ( "TAILLE_GROUPE " , 1 0 ) ;

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

$ c o n n e x i o n = Connexion (NOM, PASSE , BASE , SERVEUR) ;

/ / N o r m a l i s a t i o n d e s e n t r é e s HTTP

N o r m a l i s a t i o n ( ) ;

/ / La r e q u ê t e e x i s t e ? I l f a u t l a t r a i t e r

i f ( i s S e t ($_REQUEST [ ’ r e q u e t e ’ ] ) ) {

$ r e s u l t a t = E x e c R e q u e t e ($_REQUEST [ ’ r e q u e t e ’ ] , $ c o n n e x i o n ) ;

/ / On c o d e l a r e q u ê t e p o u r l a p l a c e r d a n s u n e URL

$ r e q u e t e C o d e e = u r l E n c o d e ($_REQUEST [ ’ r e q u e t e ’ ] ) ;

/ / On v i e n t d e s o u m e t t r e l a r e q u ê t e d a n s l e f o r m u l a i r e ? Dans / / c e c a s l a

/ / p r e m i è r e l i g n e d o i t ê t r e a f f i c h é e S i n o n on r é c u p è r e l a

p o s i t i o n c o u r a n t e

i f ( i s S e t ( $_POST [ ’ s u b m i t ’ ] ) ) {

$ p o s i t i o n = 1 ;

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