• Aucun résultat trouvé

AlexandrePauchet PHP TechnologieWeb

N/A
N/A
Protected

Academic year: 2022

Partager "AlexandrePauchet PHP TechnologieWeb"

Copied!
79
0
0

Texte intégral

(1)

Technologie Web

PHP

Alexandre Pauchet

INSA Rouen - Département ASI

BO.B.RC.18,[email protected]

(2)

Plan

1 Introduction

2 Syntaxe

3 Fonctions et modularité

4 Chaînes de caractères

5 Les fichiers

6 Les formulaires

7 Les classes

8 Les exceptions

9 Session et authentification

10 PHP et XML

11 Bases de données

(3)

Introduction (1/3) Description

PHP Hypertext Preprocessor

Langage de script intégré à HTML/XHTML, côté serveur Le serveur parse les documents et interprète le code PHP

Le client reçoit uniquement le résultat du script (une page “générée”) Le code PHP est inclus dans des balises PHP : <?php code-PHP ?>

Voir : http://www.php.net/

Fonctionnalités diverses

Fonctionnalités équivalentes aux autres langages de scripts CGI Support d’un important nombre de bases de données

Nombreuses librairies :

gestion des protocoles mail (imap, pop) production de pdf, flash

gestion de XML

. . .

(4)

Introduction (2/3) Fonctionnement

Client Web

(navigateur) Serveur Web

exemple.php ?

exemple.php Salut <?php echo $nom ?> !

Salut Martin ! Salut Martin !

(5)

Introduction (3/3) Premier script PHP

< !D O C T Y P E h t m l>

<h t m l>

<h e a d>

<t i t l e>P a g e PHP< /t i t l e>

<m e t a http - e q u i v =" content - t y p e " c o n t e n t=" t e x t / h t m l ; c h a r s e t = utf -8 " / >

< /h e a d>

<b o d y>

< ? php e c h o " <p > B o n j o u r le m o n d e !! </ p >\ n "; ? >

< /b o d y>

< /h t m l>

(6)

Syntaxe (1/14) Syntaxe de base

Insertion d’une commande PHP :

<?php code PHP ?>

Séparateur d’instructions : le point virgule “ ;”

<?php instruction1; instruction2; ... ?>

Commentaires : syntaxe à la C, C++ ou Shell

/* ... */

// ...

# ...

(7)

Syntaxe (2/14) Les variables

Le typage des variables est dynamique Syntaxe : $NomDeVariable[=val];

règle de nommage : $[a-zA-Z\_]([a-zA-Z0-9\_])*

sensibilité à la casse assignation par :

valeur : $var1=$var2;

référence : $var1=&$var2;

Portée : locale à la fonction où elle est déclarée Exemple :

< ? php

$ v a r 1 = 1 0 ;

$ v a r 2 =& $ v a r 1 ;

$ v a r 1 = 2 0 ;

e c h o " <p > " . $ v a r 1 ." " .

$ v a r 2 ." </ p > " ;

? >

Affichera :

20 20

(8)

Syntaxe (3/14) Variables globales

Déclaration de variable globale : global $var;

global.php

< !D O C T Y P E h t m l>

<h t m l>

<h e a d>

<t i t l e>P a g e PHP< /t i t l e>

<m e t a http - e q u i v =" content - t y p e " c o n t e n t=" t e x t / h t m l ; c h a r s e t = utf -8 " / >

< /h e a d>

<b o d y>

< ? php

f u n c t i o n a f f i c h e () { g l o b a l $ v a r 1 ;

e c h o " <p > H e l l o ". $ v a r 1 ." !!! </ p >\ n ";

}

? >

< ? php

$ v a r 1 =" J o h n ";

a f f i c h e () ;

? >

< /b o d y>

< /h t m l>

(9)

Syntaxe (4/14) Variables superglobales

Les variables superglobales sont utilisables sans le mot clef global

Quelques tableaux superglobaux :

$_GLOBAL contient des références sur les variables de l’environnement d’exécution global (clefs = noms des variables globales)

$_SERVER variables fournies par le serveur web

$_GET et $_POST variables transmises par les méthodes GET et POST du protocole HTTP

$_COOKIE, $_REQUEST, $_SESSION, $_FILES, $_ENV

(10)

Syntaxe (5/14) Les constantes

Syntaxe : define("NOM_DE_LA_CONSTANTE", valeur)

Les constantes :

ne commencent pas par $

sont définies et accessibles globalement dans tout le code ne peuvent pas être rédéfinies

ne peuvent contenir que des booléens, des entiers, des flottants et des chaînes de caractères

Exemple

d e f i n e (" PHP " ," PHP H y p e r t e x t P r e p r o c e s s o r ") ;

e c h o PHP ;

(11)

Syntaxe (6/14) Les types

4 types simples :

entiers : integer

réels : float , double

booléens : boolean ( TRUE ou FALSE ) chaînes de caractères : string

2 types complexes :

tableaux : array

objets : object

2 types spéciaux :

ressources : resource (ex : connexion BD)

absence de valeur : null

(12)

Syntaxe (7/14) Les tableaux

Principe : associations ordonnées de type clef ⇒ valeur Déclaration : array( [clef =>] valeur, ...)

la clef est facultative, elle est de type entier ou chaîne de caractères ; en cas d’omission, la valeur sera associée à la clef d’indice max+1 la valeur peut être de n’importe quel type

fruits.php

$ t a b=a r r a y(" f r u i t "= >" p o m m e ",42 ," l é g u m e "= >" s a l a d e ",1.5e3) ; f o r e a c h($ t a b as $ c l e = > $ v a l e u r) {

e c h o " <p > ".$ c l e." = > ".$ v a l e u r." </ p > ";

}

e c h o " <p > tab [ 1 ] = ".$ t a b[ 1 ] ." </ p > ";

$ t a b[]=" peu i m p o r t e ";

e c h o " <p > tab [ 2 ] = ".$ t a b[ 2 ] ." </ p > ";

e c h o " <p > tab [ ’ f r u i t ’]= ".$ t a b[" f r u i t "]." </ p > ";

(13)

Syntaxe (8/14) Opérations sur les tableaux

Attention, un tableau est toujours une référence !

count($array) : nombre d’éléments sort($array) : trie le tableau

array_pop($array) : récupère et supprime le dernier élément d’une liste (i.e. fonctionne comme une pile)

array_push($array, $elem1, ...) : ajoute des éléments à la fin d’une liste (i.e. fonctionne comme une pile)

array_shift($array) : récupère et supprime le premier élément d’une liste

array_unshift($array, $elem1, ...) : ajout d’éléments en début de liste

array_merge($array1, $array2, ...) : fusionne plusieurs tableaux

in_array($elem, $array) : recherche d’un élément dans un tableau

array_key_exists($key, $array) : recherche une clef dans un tableau

array_flip($array) : inverse les clef et les valeurs d’un tableau

(14)

Syntaxe (9/14)

Détermination du type d’une variable

Type d’une variable : string gettype($var);

Test : is_integer($var); is_double($var); is_array($var); ...

Conversion dynamique : $result = (type-désiré)$var;

Instructions de vérification d’existence (formulaires) :

boolean isset($var); retourne FALSE si $var n’est pas initialisée ou a la valeur NULL , TRUE sinon ;

boolean empty($var); retourne TRUE si $var n’est pas initialisée, a la valeur 0 , "0" , ou NULL , FALSE sinon ;

boolean is_null($var); retourne TRUE si $var n’est pas initialisée ou

vaut NULL , FALSE sinon (inverse de isset ).

(15)

Syntaxe (10/14)

Exemple

(16)

Syntaxe (11/14) Opérateurs

Opérateurs identiques à ceux du C/C++/Java : opérateurs arithmétiques : + - * / %

in/décrémentation : var++ var-- ++var --var

opérateurs logiques : && || !

comparaisons : == != <= >= < >

concaténation de chaînes de caractères : .

affectation : = += -= *= . . .

Opérateurs spécifiques :

‘commande shell‘ (ex : $a=‘ls -ul‘ )

=== : teste la valeur et le type

(17)

Syntaxe (12/14) Instructions de branchement

Proches du C/C++/Java :

Si-sinon-alors :

if ( c o n d i t i o n ) { i n s t r u c t i o n s }

[ e l s e i f ( c o n d i t i o n ) { i n s t r u c t i o n s

}]

[ e l s e {

i n s t r u c t i o n s }]

Switch-case :

s w i t c h ( e x p r e s s i o n ) { c a s e ’ v a l e u r 1 ’:

I n s t r u c t i o n s b r e a k ;

...

d e f a u l t:

I n s t r u c t i o n s b r e a k ;

}

(18)

Syntaxe (13/14) Boucles

Proches du C/C++/Java :

Boucles for :

for ( $i =0; $i < N ; $i ++) { I n s t r u c t i o n s

}

f o r e a c h ( $ t a b as $ v a l ) { I n s t r u c t i o n s

}

f o r e a c h ( $ t a b as $ c l e = > $ v a l) { I n s t r u c t i o n s

}

Boucles while :

w h i l e ( c o n d i t i o n) { I n s t r u c t i o n s }

do {

I n s t r u c t i o n s

} w h i l e ( c o n d i t i o n) ;

(19)

Syntaxe (14/14) Répétition de code HTML

Utilisation des boucles pour répéter du code HTML : Entrelacement code PHP / code HTML

repetitionHTML.php

< !D O C T Y P E h t m l>

<h t m l>

<h e a d>

<m e t a http - e q u i v =" content - t y p e " c o n t e n t=" t e x t / h t m l ; c h a r s e t = utf -8 " / >

<t i t l e>P a g e PHP< /t i t l e>

< /h e a d>

<b o d y>

< ? php

$ t a b =a r r a y(" p r e m i e r "," s e c o n d "," t r o i s i è m e "," ... ") ;

? >

<ul>

< ? php f o r e a c h( $ t a b as $ e l e m ) { ? >

<li> < ? php e c h o $ e l e m ; ? > < /li>

< ? php } ? >

< /ul>

< /b o d y>

< /h t m l>

(20)

Fonctions et modularité (1/7) Les fonctions

Syntaxe

< ? php

f u n c t i o n n o m D e F o n c t i o n ( arg1 , arg2 , ... , a r g N ) [: t y p e] { i n s t r u c t i o n s ;

[ r e t u r n V A L E U R ;]

}

? >

les noms de fonctions sont insensibles à la casse une fonction peut être utilisée avant sa définition

la valeur en retour d’une fonction peut être fixée (PHP7) ; elle sera transtypée si nécessaire

les arguments sont non typés et supportent une valeur par défaut la surcharge de fonctions n’est pas supportée

passage d’arguments par valeur et référence supporté (&)

les fonctions supportent un nombre variable d’arguments

retour d’une unique valeur par la directive return

(21)

Fonctions et modularité (2/7) Exemples de fonction

fonctions-math.php

1 < ? php

2 f u n c t i o n p u i s s a n c e ( $nombre , $ e x p o s a n t =1) : f l o a t {

3 $ r e s = 1;

4 for( $i =abs( $ e x p o s a n t ) -1; $i >=0; $i- -)

5 $ r e s = $ r e s * $ n o m b r e;

6 if($ e x p o s a n t > 0)

7 $ r e t o u r = $ r e s;

8 e l s e

9 $ r e t o u r = 1/$ r e s;

10 r e t u r n $ r e t o u r;

11 }

12 f u n c t i o n i n c r e m e n t e r(&$nombre, $ i n c r e m e n t=1) { 13 $ n o m b r e += $ i n c r e m e n t;

14 }

15 $ v a l = 4;

16 i n c r e m e n t e r($val, 2) ; 17 e c h o " val = ".$ v a l." </ p > ";

18 e c h o " <p > p u i s s a n c e (2 , -2) = ".p u i s s a n c e(2 , -2) ." </ p > ";

19 $ f o n c t i o n = ’ p u i s s a n c e ’;

20 e c h o " <p > $ f o n c t i o n (2 ,4) = ".$ f o n c t i o n(2 ,4) ." </ p > ";

21 ? >

(22)

Fonctions et modularité (3/7) Exemples de fonction

fonctions.php

1 < ? php

2 h e a d e r(" Content - T y p e : t e x t / p l a i n ; c h a r s e t = UTF -8 ") ; 3

4 f u n c t i o n f o r m a t t e r U n e L i s t e D e M e s s a g e s ( $ l i s t e D e M e s s a g e s , $ l i s t e A u t e u r s ) { 5 $ c h a i n e = " ";

6 f o r e a c h( $ l i s t e D e M e s s a g e s as $id = > $ m e s s) { 7 f o r e a c h($ l i s t e A u t e u r s as $ n o m = > $ i d s) { 8 if(i n _ a r r a y($id, $ i d s) )

9 $ c h a i n e = $ c h a i n e . $ n o m." : ".$ m e s s." \ n ";

10 }

11 }

12 r e t u r n $ c h a i n e;

13 }

14

15 f u n c t i o n a j o u t e r M e s s a g e s(&$ l i s t e D e M e s s a g e s, &$ l i s t e A u t e u r s, $ m e s s a g e s) { 16 f o r e a c h($ m e s s a g e s as $id = > $ m e s s a g e) {

17 a r r a y _ p u s h($ l i s t e D e M e s s a g e s, $ m e s s a g e[ 1 ] ) ; 18 if(a r r a y _ k e y _ e x i s t s($ m e s s a g e[0] , $ l i s t e A u t e u r s) ) {

19 a r r a y _ p u s h($ l i s t e A u t e u r s[$ m e s s a g e[0]] , c o u n t($ l i s t e D e M e s s a g e s) -1) ;

20 } e l s e {

21 $ l i s t e A u t e u r s[$ m e s s a g e[ 0 ] ] = a r r a y(c o u n t($ l i s t e D e M e s s a g e s) -1) ;

22 }

23 }

24 }

. . .

(23)

Fonctions et modularité (4/7) Exemples de fonction

fonctions.php . . .

1 $ m e s s a g e s = a r r a y() ; 2 $ a u t e u r s = a r r a y() ;

3 $ m e s s a g e s R e c u s = a r r a y(a r r a y(" Bob ", " S a l u t ") ,

4 a r r a y(" S a m a n t h a ", " T i e n s ? Ca f a i s a i t l o n g t e m p s ! ") ,

5 a r r a y(" R e n c o n t r e s . com ", " S a l u t Bob ! Rdv sur r e n c o n t r e s . com ") , 6 a r r a y(" Bob ", " Oui . Q u o i de neuf , S a m a n t h a ? ") ,

7 a r r a y(" S a m a n t h a ", " R i e n de p a r t i c u l i e r ... ") ) ; 8

9 a j o u t e r M e s s a g e s($ m e s s a g e s, $ a u t e u r s, $ m e s s a g e s R e c u s) ;

10 e c h o " L i s t e de m e s s a g e s :\ n " . f o r m a t t e r U n e L i s t e D e M e s s a g e s($ m e s s a g e s, $ a u t e u r s) ; 11

12 // A f f i c h e " L i s t e de m e s s a g e s :

13 // Bob : S a l u t

14 // S a m a n t h a : T i e n s ? Ca f a i s a i t l o n g t e m p s !

15 // R e n c o n t r e s . com : S a l u t Bob ! Rdv sur r e n c o n t r e s . com 16 // Bob : Oui . Q u o i de neuf , S a m a n t h a ?

17 // S a m a n t h a : R i e n de p a r t i c u l i e r . . . "

18 ? >

(24)

Fonctions et modularité (5/7) Nombre variable d’arguments

fonction-nbArgsVariable.php

1 < ? php

2 h e a d e r(" Content - T y p e : t e x t / p l a i n ; c h a r s e t = UTF -8 ") ; 3

4 f u n c t i o n f ( $req , $ o p t = null , ... $ p a r a m s ) {

5 e c h o " req : $ r e q ; opt : $ o p t ; nb a r g s : " . c o u n t( $ p a r a m s ) . " \ n ";

6 }

7

8 f (1) ; // req : 1; opt : ; nb a r g s : 0

9 f (1 , 2) ; // req : 1; opt : 2; nb a r g s : 0

10 f (1 , 2 , 3) ; // req : 1; opt : 2; nb a r g s : 1

11 f (1 , 2 , 3 , 4) ; // req : 1; opt : 2; nb a r g s : 2

12 f (1 , 2 , 3 , 4 , 5) ; // req : 1; opt : 2; nb a r g s : 3

13 14 ? >

(25)

Fonctions et modularité (6/7) Inclusion de code externe

2 directives :

include_once("fichier"); remplacement par le contenu du fichier

require_once("fichier"); idem, mais arrêt du script en cas d’erreur (ex : absence de fichier)

inclusion.php

1 < !D O C T Y P E h t m l>

2 <h t m l>

3 <h e a d>

4 <t i t l e>P a g e PHP< /t i t l e>

5 <m e t a http - e q u i v =" content - t y p e " c o n t e n t=" t e x t / h t m l ; c h a r s e t = utf -8 " / >

6 <m e t a http - e q u i v =" Content - Style - T y p e " c o n t e n t=" t e x t / css " / >

7 < /h e a d>

8 <b o d y>

9 < ? php i n c l u d e _ o n c e (" E n t e t e . inc . php ") ; ? >

10 <p>c o n t e n u n o r m a l de la p a g e< /p>

11 <p a l i g n=" r i g h t ">

12 <i> < ? php i n c l u d e _ o n c e (" P i e d d e p a g e . inc . php ") ; ? > < /i>

13 < /p>

14 < /b o d y>

15 < /h t m l>

(26)

Fonctions et modularité (7/7) Conventions de nommage des fichiers

Attention

Les fichiers dont l’extension n’est pas .php ne sont pas parsés, et donc directement lisible par une requête HTTP

Bonne pratique : .inc.php Bonne pratique : .conf.php Bonne pratique : .class.php

Mauvaise pratique (par exemple) : .inc

(27)

Chaînes de caractères (1/9) Déclaration et fonctionnement

Les chaînes peuvent être déclarées avec : Simples quotes : $t=’texte’;

Doubles quotes : $t="texte";

Fonctionnement différent : entre doubles quotes, les variables et les caractères échappatoires sont interprétés

Exemples, pour $t="Mot";

(28)

Chaînes de caractères (2/9) Opérations sur les chaînes de caractères

Longueur : int strlen(string $ch)

Répétition : string str_repeat(string $cr, int nb) Minuscules : string strtolower(string $ch)

Majuscules : string strtoupper(string $ch)

Initiales en majuscules : string ucwords(string $ch) 1 ere lettre en majuscule : string ucfirst(string $ch) Suppression de caractères en début de chaîne :

string ltrim(string $ch, string liste)

Suppression de caractères en fin de chaîne :

string rtrim(string $ch, string liste)

Suppression de caractères en début et fin de chaîne :

string trim(string $ch, string liste)

(29)

Chaînes de caractères (3/9) Exemple

traitementString.php

< !DOCTYPE h t m l>

<h t m l>

<h e a d>

<meta h t t p−e q u i v=" c o n t e n t−t y p e " c o n t e n t=" t e x t / h t m l ; c h a r s e t=u t f−8" />

<t i t l e>Page PHP</t i t l e>

</h e a d>

<b o d y>

<? php

$prenom = " . . . JEan__";

$nom = " BONNEAu";

$ a d r e s s e =" 10 r u e abraham l i n c o l n ";

$ e m a i l = " j e a n−BONNEAU@asi . i n s a−r o u e n . f r ";

$ c o m p l e t = u c f i r s t(s t r t o l o w e r(t r i m( $prenom ,’ ._ ’) ) ) ;

$ c o m p l e t .= " ".s t r t o u p p e r(l t r i m( $nom ,’ ’) ) ;

$ e s p a c e s = s t r l e n( $ c o m p l e t ) +3;

e c h o $ c o m p l e t ." : ".u c w o r d s( $ a d r e s s e ) ."<b r />"; e c h o s t r _ r e p e a t (" . ", $ e s p a c e s ) .s t r t o l o w e r( $ e m a i l ) ;

?>

</b o d y>

</h t m l>

(30)

Chaînes de caractères (4/9) Sous-chaînes de caractères

Recherche sensible à la casse (retourne tous les caractères de $ch depuis la 1 ere occurence de $ch2 jusqu’à la fin) :

string strstr(string $ch, string $ch2) Recherche insensible à la casse :

string stristr(string $ch, string $ch2) Extraction de chaînes de caractères :

string substr(string $chr, int indice, int N) Décompte du nombre d’occurences d’une sous-chaîne : int substr_count(string $ch, string $ssch) Remplacement :

string str_replace(string $oldssch, string $newssch, string $ch)

Position : int strpos(string $ch, string $ssch)

(31)

Chaînes de caractères (5/9) Exemples

traitementString2.php

<? php

$ c h = "Un p o t d e l a i t e t un p o t d e m i e l "; e c h o s t r s t r( $ch , " p o t ") ."<b r />";

// a f f i c h e " p o t d e l a i t e t un p o t d e m i e l "

e c h o s u b s t r( $ch , 1 8 , 6 ) ."<b r />"; // a f f i c h e " un p o t "

e c h o s u b s t r _ c o u n t( $ch , " p o t ") ."<b r />"; // a f f i c h e "2"

e c h o s t r _ r e p l a c e (" p o t ", " b r o c ", $ c h ) ."<b r />"; // a f f i c h e "Un b r o c d e l a i t e t un b r o c d e m i e l "

e c h o s t r p o s( $ch , " un p o t ") ."<b r />"; // a f f i c h e " 1 8 "

?>

</b o d y>

</h t m l>

(32)

Chaînes de caractères (6/9) Les expressions rationnelles

Une expression rationnelle (RegEx) permet de définir un motif de caractères, représentatif d’un ensemble de chaînes de caractères.

Caractère(s) : "" ou ’ ’ (ex : "a", "ab")

Caractères spéciaux : \., \$, \ˆ , \?, \\, \[, \], \(, \), \+ et \*

Classe de caractères : [] (ex : [xyz], [a-z]) Classes de caractères prédéfinies :

[[:alnum:]] : caractères alphanumériques [[:alpha:]] : caractères alphabétiques [[:ctrl:]] : caractères de contrôle [[:digit:]] : chiffres

[[:punct:]] : caractères de punctuation

[[:space:]] : caractères d’espaces

[[:upper:]] : majuscules

(33)

Chaînes de caractères (7/9) Modèles généraux

N’importe quel caractère : . 0 ou 1 fois : ? (ex : "https?") Au moins une fois : +

0, 1 ou plusieurs fois : * (ex : "mat.*") Exactement n fois : "{n}"

Au moins n fois : "{n,}"

Entre n et m fois : "{n,m}"

Groupements : () (ex : "(ma)*")

Alternative : | (ex : "(\.net)|(\.com)")

Exemples

" [[: d i g i t : ] ] { 2 } / [ [ : d i g i t : ] ] { 2 } / [ [ : d i g i t : ] ] { 4 } "

" [[: a l n u m : ] ] * \ . [ [ : a l n u m : ] ] * @ a s i \. insa - r o u e n \. fr

(34)

Chaînes de caractères (8/9) Fonctions de recherche et de remplacement

Fonctions de recherche

int p r e g _ m a t c h ( s t r i n g $ m o d e l e r e g e x , s t r i n g $ c h a i n e [ , a r r a y & $ m a t c h e s ] )

Fonctions de remplacement

m i x e d p r e g _ r e p l a c e ( m i x e d $ m o d e l e r e g e x , m i x e d

$ r e p l a c e m e n t , m i x e d $ c h a i n e )

Remarque

Le modèle d’une expression rationnelle est déclarée entre / /, à l’intérieur d’une chaîne de caractères.

Ex : "/ftp:\/\/.*:.*/"

(35)

Chaînes de caractères (9/9) Exemple

expressionsRationelles.php

< !DOCTYPE h t m l>

<h t m l>

<h e a d>

<t i t l e>Page PHP</t i t l e>

<meta h t t p−e q u i v=" c o n t e n t−t y p e " c o n t e n t=" t e x t / h t m l ; c h a r s e t=u t f−8" />

</h e a d>

<b o d y>

<? php

$ c h a i n e = " La d e r n i è r e v e r s i o n e s t : \ nPHP 4 ( 4 ème v e r s i o n ) \ n V i v e l e PHP 4

";

$ c h a i n e = p r e g _ r e p l a c e(" /4/ ", " 5 ", $ c h a i n e ) ;

$ c h a i n e = p r e g _ r e p l a c e(" /\ n / ", "<b r />", $ c h a i n e ) ; e c h o $ c h a i n e ;

?>

</b o d y>

</h t m l>

(36)

Les fichiers (1/3) Ouverture des fichiers

Ouverture : $fichier=fopen("NOM", "MODE"); avec MODE valant :

r, r+ : lecture et lecture/écriture, pointeur au début

w, w+ : écriture et lecture/écriture, avec création ou effacement, pointeur au début

a, a+ : écriture et lecture/écriture, pointeur à la fin, avec création x, x+ : création en écriture et lecture/écriture, pointeur au début, erreur en cas d’existence du fichier

c, c+ : création en écriture et lecture/écriture, pointeur au début, sans erreur

Verrouillage d’un fichier :

bool flock($fichier, int $operation)

Fermeture : fclose($fichier);

Présence : file_exists($fichier);

(37)

Les fichiers (2/3) Gestion des fichiers

Lecture d’une ligne :

string fgets($fichier [, integer nbOctets])

Lecture d’un caractère :

string fgetc($fichier)

Ecriture d’une ligne :

integer fputs($fichier, string)

Test de fin de fichier :

boolean feof($fichier)

Positionnement : fseek($fichier, int $position);

(38)

Les fichiers (3/3) Exemple

fichier.php

< !D O C T Y P E h t m l>

<h t m l>

<h e a d>

<t i t l e>L e c t u r e/E c r i t u r e d a n s un f i c h i e r< /t i t l e>

<m e t a http - e q u i v =" Content - t y p e " c o n t e n t=" t e x t / h t m l ; c h a r s e t = utf -8 "/ >

< /h e a d>

< ? php

$ f i c h i e r =f o p e n(" f i c h i e r . txt ", " a ") ; f p u t s( $ f i c h i e r , " Une p h r a s e \ n ") ; f c l o s e( $ f i c h i e r ) ;

$ f i c h i e r =f o p e n(" f i c h i e r . txt ", " r ") ;

e c h o " <p > D a n s le f i c h i e r f i c h i e r . txt : </ p > ";

w h i l e(!f e o f( $ f i c h i e r ) ) { e c h o f g e t c( $ f i c h i e r ) ; }

f c l o s e( $ f i c h i e r ) ;

? >

< /h t m l>

(39)

Les formulaires (1/3) GET/POST

Les champs d’un formulaire sont disponibles à travers les variables superglobales $_GET et $_POST

Remarques :

Si le submit est une image, les coordonnées du click sont transmises via $sub_x et $sub_y

Il est possible d’utiliser des tableaux à une dimension pour des formulaires ayant par exemple des listes à choix multiples

Les caractères spéciaux (&, ", ’, <, >) doivent être transformés en caractères interprétables par le navigateur :

string htmlentities(string [,int $flags]) string html_entity_decode(string [,int $flags])

La balise HTML <pre>...</pre> peut être utilisée pour interpréter les

espaces, tabulations et sauts de ligne.

(40)

Les formulaires (2/3)

Utilité de Htmlentities : contrer les attaques de type XSS

htmlentities.php

< ? php

$ p h r a s e = " J ’ a i m e le < strong > gras </ strong > ! ";

$a = h t m l e n t i t i e s( $ p h r a s e ) ;

$b = h t m l _ e n t i t y _ d e c o d e ( $a ) ;

e c h o $ p h r a s e . " < br / > "; // J ’ a i m e le g r a s ! ( a v e c " g r a s " en g r a s ) e c h o $a . " < br / > "; // J ’ a i m e le < strong > gras </ strong > ! e c h o $b ; // J ’ a i m e le g r a s ! ( a v e c " g r a s " en g r a s )

? >

Tiré de http://xkcd.com/327/.

(41)

Les formulaires (3/3) Exemple de traitement de formulaire

formulaire.php

<f o r m a c t i o n=" f o r m u l a i r e . php " m e t h o d=" P O S T ">

<l a b e l>P r e n o m< /l a b e l> <i n p u t t y p e=" t e x t " n a m e=" p r e n o m " s i z e=" 10 " v a l u e=" A l e x "/ >

<l a b e l>Nom< /l a b e l> <i n p u t t y p e=" t e x t " n a m e=" nom " s i z e=" 20 " v a l u e=" P "/ > <br/ >

<l a b e l>OS : U n i x< /l a b e l> <i n p u t t y p e=" r a d i o " n a m e=" os " v a l u e=" u n i x "/ >

<l a b e l>OS/2< /l a b e l> <i n p u t t y p e=" r a d i o " n a m e=" os " v a l u e=" os /2 "/ >

<l a b e l>W i n d o w s< /l a b e l> <i n p u t t y p e=" r a d i o " n a m e=" os " v a l u e=" w i n d o w s "/ > <br/ >

<i n p u t t y p e=" t e x t " n a m e=" l i g n e " v a l u e=" < s c r i p t t y p e = ’ t e x t / j a v a s c r i p t ’ > a l e r t ( ’ Pub

! ’) ; </ script > " s i z e=" 20 "/ > <br/ >

<i n p u t t y p e=" s u b m i t " n a m e=" a c t i o n " v a l u e=" E n v o y e r "/ >

<i n p u t t y p e=" r e s e t " v a l u e=" E f f a c e r "/ >

< /f o r m>

<p>

< ? php

if(i s s e t( $ _ P O S T [’ a c t i o n ’]) && !e m p t y( $ _ P O S T [’ p r e n o m ’]) && !e m p t y( $ _ P O S T [’ nom ’])

&& !e m p t y( $ _ P O S T [’ os ’]) && !e m p t y( $ _ P O S T [’ l i g n e ’]) ) {

e c h o $ _ P O S T [’ p r e n o m ’]." ". $ _ P O S T [’ nom ’]." u t i l i s e un s y s t è m e d ’ e x p l o i t a t i o n ".

$ _ P O S T [’ os ’]." < br / > ";

e c h o " <p > h t m l e n t i t i e s ( L i g n e ) - > ".h t m l e n t i t i e s( $ _ P O S T [’ l i g n e ’]) ." </ p > "; e c h o " <p > Ligne - > ". $ _ P O S T [’ l i g n e ’]." </ p > ";

} e l s e

e c h o " <p > T o u s les c h a m p s d o i v e n t ê t r e r e n s e i g n é s </ p > ";

? >

< /p>

(42)

Les classes (1/18) Déclaration

Syntaxe

c l a s s N o m C l a s s e {

p u b l i c/p r o t e c t e d/p r i v a t e $ a t t r i b u t 1[ = c o n s t a n t e 1];

p u b l i c/p r o t e c t e d/p r i v a t e $ a t t r i b u t 2[ = c o n s t a n t e 2];

...

p u b l i c/p r o t e c t e d/p r i v a t e f u n c t i o n _ _ c o n s t r u c t( . . . ) { // c o n s t r u c t e u r }

p u b l i c/p r o t e c t e d/p r i v a t e f u n c t i o n m e t h o d e 1( . . . ) [: t y p e] { // m é t h o d e }

p u b l i c/p r o t e c t e d/p r i v a t e f u n c t i o n m e t h o d e 2( . . . ) [: t y p e] { // m é t h o d e }...

}

Seules les initialisations par constante sont autorisées Encapsulation/Accessibilité :

public : accès universel

protected : accès réservé à la classe et aux classes dérivées private : accès réservé à la classe

Les contraintes sont les mêmes que pour les fonctions/procédures

(43)

Les classes (2/18) Attributs et méthodes

Instanciation : $objet = new NomClasse(...) Accès aux attributs et méthodes par l’opérateur “ -> ”

$objet->attribut / $objet->methode()

L’accès aux attributs dans les méthodes se fait par $this->attribut La surcharge des méthodes dans une même classe n’est pas possible, mais la redéfinition dans une classe fille l’est

Exemple (objet.php)

c l a s s A c c e s {

p u b l i c $ v a r P u b l i q u e = " v a r i a b l e p u b l i q u e ";

p r o t e c t e d $ v a r P r o t e g e e = " v a r i a b l e p r o t é g é e ";

p r i v a t e $ v a r P r i v e e = " v a r i a b l e p r i v é e "; p u b l i c f u n c t i o n l e c t u r e P u b l i q u e()

{ e c h o " <p > F o n c t i o n p u b l i q u e </ p > "; } p r o t e c t e d f u n c t i o n l e c t u r e P r o t e g e e()

{ e c h o " <p > F o n c t i o n p r o t é g é e </ p > "; } p r i v a t e f u n c t i o n l e c t u r e P r i v e e()

{ e c h o " <p > F o n c t i o n privée </ p > "; } }

$ a c c e s = new A c c e s() ;

e c h o " v a r P u b l i c : $acces - > v a r P u b l i q u e ";

$acces- >l e c t u r e P u b l i q u e() ;

(44)

Les classes (3/18) Constructeurs et destructeurs

PHP5 permet les constructeurs unifiés et les destructeurs : v o i d _ _ c o n s t r u c t ([ a r g u m e n t s ]) { . . . } v o i d _ _ d e s t r u c t () { . . . }

En cas d’héritage, appel explicite du constructeur/destructeur de la classe mère dans le corps du constructeur de la classe fille :

p a r e n t :: _ _ c o n s t r u c t ([ a r g u m e n t s ]) ;

p a r e n t :: _ _ d e s t r u c t () ;

(45)

Les classes (4/18) Héritage

Syntaxe

c l a s s C l a s s D e r i v é e e x t e n d s C l a s s e H é r i t é e { ...

}

si une classe dérivée n’a pas de constructeur, celui de la classe mère est appelé

la propagation d’appel des constructeurs n’est pas automatique l’opérateur de résolution de portée est “ :: ”

parent est un mot clef permettant l’accès à la classe mère

(46)

Les classes (5/18) Exemple d’héritage

Personne.class.php

< ? php

c l a s s P e r s o n n e { p r o t e c t e d $ n o m ;

p u b l i c f u n c t i o n _ _ c o n s t r u c t ( $ n o m ) {

$this - >nom = $ n o m;

}

p u b l i c f u n c t i o n i n f o() { r e t u r n $this- >nom;

} }

? >

(47)

Les classes (6/18) Exemple d’héritage

Etudiant.class.php

< ? php

c l a s s E t u d i a n t e x t e n d s P e r s o n n e { p u b l i c $ n u m e r o ;

f u n c t i o n _ _ c o n s t r u c t ( $num , $ n o m ) { p a r e n t :: _ _ c o n s t r u c t ( $ n o m ) ;

$this - >n u m e r o = $ n u m;

}

p u b l i c f u n c t i o n i n f o() {

r e t u r n $this- >nom." ( ".$this- >n u m e r o." ) ";

} }

? >

(48)

Les classes (7/18) Exemple d’héritage

heritage.php

< !D O C T Y P E h t m l>

<h t m l>

<h e a d>

<m e t a http - e q u i v =" content - t y p e " c o n t e n t=" t e x t / h t m l ; c h a r s e t = utf -8 " / >

<t i t l e>P a g e PHP< /t i t l e>

< ? php r e q u i r e _ o n c e (" P e r s o n n e . c l a s s . php ") ; ? >

< ? php r e q u i r e _ o n c e (" E t u d i a n t . c l a s s . php ") ; ? >

< /h e a d>

<b o d y>

< ? php

$ p e r s o n n e = new P e r s o n n e (" J o h n ") ;

e c h o " <p > P e r s o n n e : ". $ p e r s o n n e - >i n f o() ." </ p > ";

$ e t u d i a n t = new E t u d i a n t(1203 , " S a m a n t h a ") ; e c h o " <p > E t u d i a n t : ".$ e t u d i a n t- >i n f o() ." </ p > ";

? >

< /b o d y>

< /h t m l>

(49)

Les classes (8/18) Les classes abstraites

Classes abstraites en PHP5

PHP5 permet la création de classes abstraites, ne permettant pas l’instanciation d’objets mais servant de classe de base pour la création de classes dérivées.

abstract sert à déclarer les méthodes et classes abstraites.

(50)

Les classes (9/18) Exemple de classe abstraite

compte.php

< ? php

a b s t r a c t c l a s s C o m p t e { p r o t e c t e d $ n o m ; p r o t e c t e d $ s o l d e ;

p u b l i c f u n c t i o n _ _ c o n s t r u c t ( $nom , $ s o l d e ) {

$this - >nom = $ n o m;

$this- >s o l d e = $ s o l d e;

}

a b s t r a c t p r o t e c t e d f u n c t i o n g e t I n f o() ; }

c l a s s C o m p t e C h e q u e e x t e n d s C o m p t e{

// NB : i n u t i l e q u a n d il y a le m ê m e n o m b r e d ’ a r g u m e n t s p u b l i c f u n c t i o n _ _ c o n s t r u c t($nom, $ s o l d e) {

p a r e n t::_ _ c o n s t r u c t($nom, $ s o l d e) ; }

p u b l i c f u n c t i o n g e t I n f o() {

r e t u r n " C o m p t e c h e q u e de ".$this- >nom." : ".$this- >s o l d e;

} }

? >

< /h e a d>

<b o d y>

< ? php

$ c c q = new C o m p t e C h e q u e (" J o h n ", 1 0 0 0 ) ; e c h o " <p > ". $ccq - >g e t I n f o() ." </ p > ";

? >

(51)

Les classes (10/18) Les interfaces

Interfaces en PHP5

déclarées par le mot clef interface ne contenant aucune déclaration d’attribut ne contenant aucune implémentation de méthode dont les déclarations de méthodes sont public

implémentées par une classe par implements ; une classe peut

implémenter plusieurs interfaces.

(52)

Les classes (11/18) Exemple d’interface

interface.php

< ? php

i n t e r f a c e F o n c t i o n {

p u b l i c f u n c t i o n c a l c u l e r () ; }

c l a s s A d d i t i o n i m p l e m e n t s F o n c t i o n { p r i v a t e $ v a r 1 ;

p r i v a t e $ v a r 2 ;

p u b l i c f u n c t i o n _ _ c o n s t r u c t ( $var1 , $ v a r 2 ) {

$this - >v a r 1 = $ v a r 1;

$this- >v a r 2 = $ v a r 2;

}

p u b l i c f u n c t i o n c a l c u l e r() { r e t u r n $this- >v a r 1+$this- >v a r 2;

} }

? >

< /h e a d>

<b o d y>

< ? php

$ a d d i t i o n = new A d d i t i o n (10 , 20) ;

e c h o " <p > a d d i t i o n (10 ,20) = ". $ a d d i t i o n - >c a l c u l e r() ." </ p > ";

? >

< /b o d y>

< /h t m l>

(53)

Les classes (12/18) Méthodes et classes finales

En PHP5 il est possible d’empêcher toute redéfinition de méthode ou de classe, par le mot clef final .

c l a s s U n e C l a s s e {

f i n a l f u n c t i o n m e t h o d e () { ... }

}

empêche toute redéfinition de methode() dans les classes dérivées.

f i n a l c l a s s U n e C l a s s e { ...

}

empêche toute dérivation de la classe uneClasse.

(54)

Les classes (13/18) Clonage d’objet

Le clonage d’objet est possible en PHP5

Les opérateurs d’affectation = et de référence & permettent de copier un objet, mais les modifications sur la copie sont répercutées sur l’original.

Pour éviter cela, il faut cloner les objets par :

$ o b j e t c l o n e = c l o n e $ o b j e t ;

Pour modifier les propriétés de l’objet cloné, il faut définir la méthode

prédéfinie __clone() .

(55)

Les classes (14/18) Exemple de clonage

Clonage.inc.php

< ? php

c l a s s P e r s o n n e { p r o t e c t e d $ n o m ;

p u b l i c f u n c t i o n _ _ c o n s t r u c t ( $ n o m ) {

$this - >nom = $ n o m;

}

p u b l i c f u n c t i o n i n f o() { r e t u r n $this- >nom;

}

p u b l i c f u n c t i o n _ _ c l o n e() {

$this- >nom = " C l o n e de ".$this- >nom;

} }

? >

(56)

Les classes (15/18) Exemple de clonage

Etudiant.class.php

< ? php

c l a s s E t u d i a n t e x t e n d s P e r s o n n e { p u b l i c $ n u m e r o ;

f u n c t i o n _ _ c o n s t r u c t ( $num , $ n o m ) { p a r e n t :: _ _ c o n s t r u c t ( $ n o m ) ;

$this - >n u m e r o = $ n u m;

}

p u b l i c f u n c t i o n i n f o() {

r e t u r n $this- >nom." ( ".$this- >n u m e r o." ) ";

} }

? >

(57)

Les classes (16/18) Exemple de clonage

clonage.php

< !D O C T Y P E h t m l>

<h t m l>

<h e a d>

<t i t l e>P a g e PHP : c l o n a g e< /t i t l e>

<m e t a http - e q u i v =" content - t y p e " c o n t e n t=" t e x t / h t m l ; c h a r s e t = utf -8 " / >

< ? php r e q u i r e(" C l o n a g e . inc . php ") ; ? >

< ? php r e q u i r e(" E t u d i a n t . c l a s s . php ") ; ? >

< /h e a d>

<b o d y>

< ? php

$ p e r s o n n e = new P e r s o n n e (" J o h n ") ;

$ c l o n e = c l o n e $ p e r s o n n e ;

e c h o " <p > p e r s o n n e : ". $ p e r s o n n e - >i n f o() ." </ p > ";

e c h o " <p > c l o n e : ".$clone- >i n f o() ." </ p > ";

$ e t u d i a n t = new E t u d i a n t(1235 , " S a m a n t h a ") ;

$ e t u d i a n t 2 = $ e t u d i a n t;

$ c l o n e = c l o n e $ e t u d i a n t;

$ e t u d i a n t- >n u m e r o = 5 5 5 5 5 ;

e c h o " <p > e t u d i a n t : ".$ e t u d i a n t- >i n f o() ." </ p > ";

e c h o " <p > e t u d i a n t 2 : ".$ e t u d i a n t 2- >i n f o() ." </ p > ";

e c h o " <p > c l o n e : ".$clone- >i n f o() ." </ p > ";

? >

< /b o d y>

< /h t m l>

(58)

Les classes (17/18)

Attributs et méthodes statiques (PHP5)

Déclaration par le mot clef static

Accès par ‘ nomclasse:: ’

statique.php

< !D O C T Y P E h t m l>

<h t m l>

<h e a d>

<m e t a http - e q u i v =" content - t y p e " c o n t e n t=" t e x t / h t m l ; c h a r s e t = utf -8 " / >

<t i t l e>P a g e PHP< /t i t l e>

< ? php

c l a s s S t a t i q u e {

p u b l i c s t a t i c $ v a r S t a t i q u e = " v a r i a b l e s t a t i q u e ";

p u b l i c s t a t i c f u n c t i o n f o n c t i o n S t a t i q u e ()

{ e c h o " <p > F o n c t i o n s t a t i q u e : ". S t a t i q u e :: $ v a r S t a t i q u e ." </ p > "; } }

? >

< /h e a d>

<b o d y>

< ? php

S t a t i q u e :: f o n c t i o n S t a t i q u e () ;

S t a t i q u e :: $ v a r S t a t i q u e = " var . s t a t . ";

S t a t i q u e :: f o n c t i o n S t a t i q u e () ;

? >

< /b o d y>

< /h t m l>

(59)

Les classes (18/18) Divers

Méthode __toString():string : permet de formater l’affichage d’une instance de la classe.

Sérialisation d’objets : pour faciliter l’enregistrement d’objets dans des fichiers il est conseillé d’utiliser les méthodes serialize et

unserialize pour en enregistrer une représentation linéaire.

(60)

Les exceptions (1/4) La classe Exception

PHP5 introduit la classe prédéfinie Exception 2 attributs :

message : message d’erreur (string) code : code d’erreur facultatif (int) Méthodes :

getMessage() : accesseur sur le message de l’objet getCode() : accesseur sur le code d’erreur de l’objet getFile() : retourne le fichier contenant l’erreur getLine() : retourne la ligne renvoyant l’exception

__toString() : retourne une chaîne descriptive de l’exception

(61)

Les exceptions (2/4) Récupération des exceptions

Code type

try {

// C o d e à s u r v e i l l e r

// Ce c o d e p e u t r e n v o y e r des e x c e p t i o n s non de v o t r e f a i t

if ( e r r e u r p r e v u e) { t h r o w new E x c e p t i o n () ; }

e l s e {

// R é s u l t a t ; }

}

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

// G e s t i o n des e r r e u r s

}

(62)

Les exceptions (3/4) Personnalisation

Héritage d’exception : le mécanisme de l’héritage permet d’étendre la classe Exception

c l a s s M o n E x c e p t i o n e x t e n d s E x c e p t i o n {

p u b l i c f u n c t i o n a l e r t e ( $ m e s s ) {

e c h o " < s c r i p t t y p e = ’ t e x t / j a v a s c r i p t ’ > a l e r t ( ’ E r r e u r n

". $this - > g e t C o d e () ." \ n " .$this - > g e t M e s s a g e () ." \ n " . $ m e s s ." ’) </ script > " ;

}

}

(63)

Les exceptions (4/4) Exemple

exception.php

<h e a d>

<t i t l e>Page PHP</t i t l e>

<meta h t t p−e q u i v=" c o n t e n t−t y p e " c o n t e n t=" t e x t / h t m l ; c h a r s e t=u t f−8" />

<? php

c l a s s M o n E x c e p t i o n e x t e n d s E x c e p t i o n {

p u b l i c f u n c t i o n a l e r t e ( ) {

e c h o "< s c r i p t t y p e =\"t e x t/ j a v a s c r i p t \"> a l e r t ( ’ E r r e u r ". $ t h i s−>

g e t C o d e( ) ." \\ n ".$ t h i s−>g e t M e s s a g e( ) ." ’ ) </ s c r i p t >"; }

}

?>

</h e a d>

<b o d y>

<? php

$num = 1 0 0 ; $denom = 0 ; t r y {

i f( $denom==0) { t h r o w new M o n E x c e p t i o n (" D i v i s i o n p a r 0 ") ; } e l s e { e c h o "$num/ $denom = ", $num/ $denom ; }

}

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

$ e x c e p t−>a l e r t e( ) ; }

?>

</b o d y>

(64)

Sessions et authentification (1/5) Session

La gestion de session permet de stocker des données entre les différentes pages visitées

session_start() : crée ou restaure une session À mettre obligatoirement avant tout envoi d’en-tête À mettre dans toute page participant à une session

la variable superglobale $_SESSION permet l’enregistrement de variables dans la session :

$_SESSION["nomdelavariable "]=x ajoute ou modifie une variable à/de la session en cours

$_SESSION["nomdelavariable "] accède à la valeur d’une variable de la session en cours

unset($_SESSION["nomdelavariable "]) retire la variable session_destroy() détruit la session en cours

Remarque

L’utilisation d’une session ne nécessite pas forcément d’authentification.

(65)

Sessions et authentification (2/5) Authentification

2 méthodes d’authentification

par HTTP : en utilisant le système d’identification, et la capacité des navigateurs d’ouvrir une fenêtre de connexion

<? php

i f ( !i s s e t( $_SERVER [’PHP_AUTH_USER ’] ) ) {

h e a d e r(’WWW−A u t h e n t i c a t e : B a s i c r e a l m =" c o n n e x i o n " ’) ; h e a d e r(’HTTP/ 1 . 1 401 U n a u t h o r i z e d ’) ;

e c h o " A u t h e n t i f i c a t i o n r e q u i s e "; e x i t;

} e l s e {

// v é r i f i c a t i o n du p a s s

e c h o "<p> l o g i n : {$_SERVER [ ’ PHP_AUTH_USER ’ ] } < / p>"; e c h o "<p>p a s s w o r d : {$_SERVER [ ’PHP_AUTH_PW’ ] } < / p>"; }

?>

par un formulaire pour saisir pseudo et mot de passe

Une login et mot de passe saisis, il faut vérifier les droits de l’utilisateur. Les

informations peuvent être stockées dans un fichier simple ou une BD.

(66)

Sessions et authentification (3/5) Exemple d’authentification et de session

1/3

authentification-form.php

< !DOCTYPE h t m l>

<h t m l>

<h e a d>

<t i t l e>a u t h e n t i f i c a t i o n−f o r m</t i t l e>

<meta h t t p−e q u i v=" c o n t e n t−t y p e " c o n t e n t=" t e x t / h t m l ; c h a r s e t=u t f−8" />

</h e a d>

<b o d y>

<f o r m a c t i o n=" a u t h e n t i f i c a t i o n−p a g e 1 . php " method="POST">

<l a b e l>U s e r n a m e : </l a b e l> <i n p u t t y p e=" t e x t " name=" l o g i n " s i z e=" 20 "/>

<l a b e l>P a s s w o r d : </l a b e l> <i n p u t t y p e=" p a s s w o r d " name=" p a s s w o r d " s i z e

=" 20 "/>

<i n p u t t y p e=" s u b m i t " name=" s u b m i t " v a l u e=" L o g i n "/>

</f o r m>

</b o d y>

</h t m l>

(67)

Sessions et authentification (4/5) Exemple d’authentification et de session

2/3

authentification-page1.php

<? php r e q u i r e(" l o g i n . i n c . php ") ?>

< !DOCTYPE h t m l>

<h t m l>

<h e a d>

<t i t l e>a u t h e n t i f i c a t i o n−p a g e 1</t i t l e>

<meta h t t p−e q u i v=" c o n t e n t−t y p e " c o n t e n t=" t e x t / h t m l ; c h a r s e t=u t f−8" />

<meta h t t p−e q u i v=" C o n t e n t−S t y l e−Type " c o n t e n t=" t e x t / c s s " />

</h e a d>

<b o d y>

<? php

$ l o g i n = $_POST [’ l o g i n ’] ; $ i d = $_SESSION [’ u s e r I d ’] ; e c h o " $ l o g i n − $ i d ";

?>

<h1> p a g e 1 </h1>

<a h r e f=" a u t h e n t i f i c a t i o n−p a g e 2 . php ">p a g e 2</a>

<a h r e f=" l o g o u t . php ">l o g o u t</a>

</b o d y>

</h t m l>

authentification-page2.php

idem (changement des “1” en “2” et inversement)

(68)

Sessions et authentification (5/5) Exemple d’authentification et de session

3/3

login.inc.php

<? php

s e s s i o n _ s t a r t( ) ;

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

// r e c h e r c h e d e l ’ u t i l i s a t e u r : f i c h i e r p l a t ou bd

$ l o g i n A u t o r i s e=" a l e x ";

$ p a s s w o r d A u t o r i s e=" a n d r e ";

$ u s e r I d A u t o r i s e=" 1 ";

i f ( $_POST [’ l o g i n ’] == $ l o g i n A u t o r i s e && $_POST [’ p a s s w o r d ’] ==

$ p a s s w o r d A u t o r i s e )

$_SESSION [" u s e r I d "] = $ u s e r I d A u t o r i s e ;

e l s e h e a d e r(" L o c a t i o n : . / a u t h e n t i f i c a t i o n−f o r m . php ") ; }

e l s e i f( !i s s e t( $_SESSION [" u s e r I d "] ) ) h e a d e r(" L o c a t i o n : . / a u t h e n t i f i c a t i o n−f o r m . php ") ;

?>

logout.php

<? php

r e q u i r e(" l o g i n . i n c . php ") ; s e s s i o n _ d e s t r o y( ) ;

h e a d e r(" L o c a t i o n : . / a u t h e n t i f i c a t i o n−f o r m . php ") ;

?>

(69)

PHP et XML (1/6) Lecture d’un fichier XML

L’extension SimpleXML (PHP5) fournit les fonctions permettant d’accéder au contenu d’un fichier XML :

simplexml_element simplexml_load_file(string $fileName) de lire des éléments :

simplexml_element->element

simplexml_element->elementMultiple[x]

de lire les attributs des éléments Si le nom de l’attribut est connu :

$xml->element["nomAttribut"]

Si le nom de l’attribut est inconnu :

simplexml_element xmlElement->attributes()

(70)

PHP et XML (2/6) Fichier XML

bib.xml

< ? xml v e r s i o n = " 1.0 " e n c o d i n g = " UTF -8 " ? >

< b i b l i o >

< l i v r e e d i t e u r =" Bob " p r i x =" 5. 0 0 " >

< a u t e u r > J oh n A i p u < / a u t e u r >

< t i t r e >Il é t a i t une f o i s < / t i t r e >

< / l i v r e >

< l i v r e v e r s i o n =" 3 . 0 5 " p r i x =" 2 . 5 0 " >

< a u t e u r > Y an n N a p u < / a u t e u r >

< t i t r e >La s u i t e < / t i t r e >

< / l i v r e >

< / b i b l i o >

(71)

PHP et XML (3/6) Exemple de lecture des éléments

XML1.php

< !DOCTYPE h t m l>

<h t m l>

<h e a d>

<meta h t t p−e q u i v=" c o n t e n t−t y p e " c o n t e n t=" t e x t / h t m l ; c h a r s e t=u t f−8" />

<t i t l e>Page PHP</t i t l e>

</h e a d>

<b o d y>

<? php

$ x m l = s i m p l e x m l _ l o a d _ f i l e (" . / d a t a / b i b . xm l ") ;

$ l i v r e = $xml−>l i v r e[1]−>t i t r e." ";

$ l i v r e.=" ( ".$xml−>l i v r e[1]−>a u t e u r." ) "; e c h o " 2 nd l i v r e : ".$ l i v r e."<b r />"; e c h o " l i s t e d e s t i t r e s :< b r />";

$ i = 1 ;

f o r e a c h($xml−>l i v r e a s $ c l e=>$ v a l) {

e c h o $ c l e." ".$ i." : ".$ v a l−>t i t r e."<b r />";

$ i++;

}

?>

</b o d y>

</h t m l>

(72)

PHP et XML (4/6) Exemple de lecture d’attributs

XML2.php

< !DOCTYPE h t m l>

<h t m l>

<h e a d>

<meta h t t p−e q u i v=" c o n t e n t−t y p e " c o n t e n t=" t e x t / h t m l ; c h a r s e t=u t f−8" />

<t i t l e>Page PHP</t i t l e>

</h e a d>

<b o d y>

<? php

$ x m l = s i m p l e x m l _ l o a d _ f i l e (" d a t a / b i b . x ml ") ;

$ i = 1 ;

f o r e a c h( $xml−>l i v r e a s $ l i v r e) { e c h o " L i v r e ".$ i." : ";

f o r e a c h($ l i v r e−>a t t r i b u t e s( ) a s $ a t t=>$ v a l) { e c h o " $ a t t=$ v a l ";

}

e c h o "<b r />";

$ i++;

}

?>

</b o d y>

</h t m l>

(73)

PHP et XML (5/6)

Modification et enregistrement des données

Modification d’un fichier XML

Les données (attributs et éléments) peuvent être modifiées :

$xmlelement->element="Nouvelle valeur d’élément"

$xmlelement->element[i]="Nouvelle valeur d’élément"

$xmlelement->element["att"]="Nouvelle valeur d’attribut"

Ajout d’attributs et éléments :

$xmlelement->element->addChild("name"[, "valeur"]);

$xmlelement->element->addAttribute("type", "valeur") Enregistrement des modifications :

boolean $xmlelement->asxml("Fichier.xml")

(74)

PHP et XML (6/6)

Modification et enregistrement des données

XML3.php

< !DOCTYPE h t m l>

<h t m l>

<h e a d>

<t i t l e>Page PHP</t i t l e>

<meta h t t p−e q u i v=" c o n t e n t−t y p e " c o n t e n t=" t e x t / h t m l ; c h a r s e t=u t f−8" />

<meta h t t p−e q u i v=" C o n t e n t−S t y l e−Type " c o n t e n t=" t e x t / c s s " />

</h e a d>

<b o d y>

<? php

$ x m l = s i m p l e x m l _ l o a d _ f i l e (" d a t a / b i b . x ml ") ;

$xml−>l i v r e[1]−>t i t r e = " Nouveau t i t r e ";

$xml−>a d d c h i l d(" l i v r e ") ;

$xml−>l i v r e[2]−>a d d C h i l d(" t i t r e ", "Un 3ème") ;

$xml−>l i v r e[2]−>a d d C h i l d(" a u t e u r ", " Aude H a i b u ") ;

$xml−>l i v r e[2]−>a d d A t t r i b u t e(" p r i x ", " 7 . 5 0 ") ; i f($xml−>a s x m l(" d a t a / bibMODIFIED . x ml ") )

e c h o " E n r e g i s t r e m e n t r é a l i s é ";

?>

</b o d y>

</h t m l>

(75)

Bases de données (1/5) Description de SQLite

PHP supporte un grand nombre de bases de données

Oracle, Sybase, Ingres II, MySQL, PostgreSQL, SQLite (inclus dans PHP5), . . .

Caractéristiques de SQLite

SGBD embarqué dans la distribution de PHP5

⇒ pas de processus indépendant

léger et rapide (pas d’architecture client-serveur) SQLite implémente la norme SQL 92

classes facilitant son interaction avec PHP BD en un et un seul fichier

pas d’insertions concurrentes (base verrouillée) accès concurrents en lecture seule

Documentation officielle

http://fr.php.net/manual/fr/ref.sqlite.php

http://sqlite.org/

(76)

Bases de données (2/5) Ouverture et fermeture

Accès à la base

Ouverture : $db = new PDO("sqlite:path/filename");

Fermeture : unset($db);

Script type d’accès à la base :

<? php

e r r o r _ r e p o r t i n g(E_ALL) ; t r y {

/∗ c r e a t i o n d e l a BD ∗/

$db = new PDO(" s q l i t e : . / d a t a /DATABASE/ p e r s o n n e s . s q l i t e ") ; /∗ e r r o r s −> e x c e p t i o n s ∗/

$db−>s e t A t t r i b u t e(PDO: :ATTR_ERRMODE, PDO: :ERRMODE_EXCEPTION) ; . . .

$db−>e x e c("INSERT . . . ) ; // R e q u ê t e SQL ( i n s e r t i o n )

$ r e s u l t = $db−>q u e r y ( "SELECT . . ." ) ; // R e q u ê t e SQL ( s é l e c t i o n )

$db−>b e g i n T r a n s a c t i o n ( ) ; . . . // S é r i e d e r e q u ê t e s SQL

$db−>commit ( ) ; u n s e t ( $db ) ; }

c a t c h ( PDOException $ e ) { // T r a i t e m e n t d e s E x c e p t i o n s }

?>

(77)

Bases de données (3/5) Exemple - Création d’une table

SQLite-Creation.php

e r r o r _ r e p o r t i n g(E_ALL) ; t r y

{

$ r e q u e t e = "CREATE TABLE I F NOT EXISTS p e r s o n n e s ( i d INTEGER PRIMARY KEY ,

nom TEXT NOT NULL ) ";

/∗ c r e a t i o n d e l a BD ∗/

$db= new PDO(" s q l i t e : . / d a t a /DATABASE/ p e r s o n n e s . s q l i t e ") ; /∗ e r r o r s −> e x c e p t i o n s ∗/

$db−>s e t A t t r i b u t e(PDO: :ATTR_ERRMODE, PDO: :ERRMODE_EXCEPTION) ; /∗ r e q u e t e d e c r e a t i o n ∗/

$db−>q u e r y($ r e q u e t e) ; u n s e t($db) ;

e c h o ’ T a b l e c r é é e ’; }

c a t c h(PDOException $ e) {

e c h o $e−>g e t M e s s a g e( ) ; }

?>

</b o d y>

(78)

Bases de données (4/5) Exemple - Insertion de données

SQLite-Insertion.php

e r r o r _ r e p o r t i n g(E_ALL) ; t r y

{

/∗ c r e a t i o n d e l a BD ∗/

$db= new PDO(" s q l i t e : . / d a t a /DATABASE/ p e r s o n n e s . s q l i t e ") ; /∗ e r r o r s −> e x c e p t i o n s ∗/

$db−>s e t A t t r i b u t e(PDO: :ATTR_ERRMODE, PDO: :ERRMODE_EXCEPTION) ; /∗ d e b u t d e t r a n s a c t i o n ∗/

$db−>b e g i n T r a n s a c t i o n( ) ;

$db−>e x e c("INSERT INTO p e r s o n n e s ( ’ nom ’ )

VALUES ( ’ J o h n ’ ) ; ") ;

$db−>e x e c("INSERT INTO p e r s o n n e s ( ’ nom ’ )

VALUES ( ’ Samantha ’ ) ; ") ; /∗ commit d e s i n s e r t i o n s ∗/

$db−>commit( ) ; u n s e t($db) ;

e c h o ’ I n s e r t i o n s r é a l i s é e s ’; }

c a t c h(E x c e p t i o n $ e) { e c h o $e−>g e t M e s s a g e( ) ; }

?>

</b o d y>

(79)

Bases de données (5/5) Exemple - Sélection dans une table

SQLite-Selection.php

e r r o r _ r e p o r t i n g(E_ALL) ; t r y

{

/∗ c r e a t i o n d e l a BD ∗/

$db= new PDO(" s q l i t e : . / d a t a /DATABASE/ p e r s o n n e s . s q l i t e ") ; /∗ e r r o r s −> e x c e p t i o n s ∗/

$db−>s e t A t t r i b u t e(PDO: :ATTR_ERRMODE, PDO: :ERRMODE_EXCEPTION) ; /∗ r e q u e t e d e s e l e c t i o n ∗/

$ r e q u e t e = "SELECT ∗FROM p e r s o n n e s ";

$ r e s u l t = $db−>q u e r y($ r e q u e t e) ; u n s e t($db) ;

f o r e a c h($ r e s u l t a s $row) {

e c h o ’<p> ’.$row[’ i d ’] .’ : ’.$row[’ nom ’] .’</p> ’; }

}

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

e c h o $e−>g e t M e s s a g e( ) ; }

?>

</b o d y>

Références

Documents relatifs

L’archive ouverte pluridisciplinaire HAL, est destinée au dépôt et à la diffusion de documents scientifiques de niveau recherche, publiés ou non, émanant des

L’archive ouverte pluridisciplinaire HAL, est destinée au dépôt et à la diffusion de documents scientifiques de niveau recherche, publiés ou non, émanant des

[r]

Dans un langage de programmation sans orientée objet (Pascal, C, … ), il est interdit d'utiliser le même nom pour deux sous-programmes différents. Les langages C#, C++, JAVA,

It is actually not hard to generalize the random access data structure of [5, Thm 5.3] to support access on grids within O(|Γ | polylog n) space, where Γ is a grid attractor as

Conversely, some variant of the mirror language { w | w ∈ {a, b} ∗ and w = w R } is generated by many variants of sticker systems (that can generate all linear context-free

str_locate(string, pattern) Locate the positions of pattern matches in a string. number of code points, which generally equals the number of characters).. sequences of

ajouts sont facultatifs dans la chaîne où ils figurent, c’est-à-dire, leur présence n’est pas nécessaire pour que cette chaîne soit bien formée : la chaîne