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
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
. . .
Introduction (2/3) Fonctionnement
Client Web
(navigateur) Serveur Web
exemple.php ?
exemple.php Salut <?php echo $nom ?> !
Salut Martin ! Salut Martin !
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>
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
/* ... */
// ...
# ...
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
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>
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
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 ;
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
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 > ";
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
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 ).
Syntaxe (10/14)
Exemple
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
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 ;
}
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) ;
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>
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
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 ? >
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 }
. . .
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 ? >
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 ? >
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>
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
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";
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)
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>
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)
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>
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
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
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:\/\/.*:.*/"
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>
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);
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);
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>
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.
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/.
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>
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
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() ;
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 () ;
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
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;
} }
? >
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." ) ";
} }
? >
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>
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.
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 > ";
? >
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.
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>
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.
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() .
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;
} }
? >
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." ) ";
} }
? >
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>
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>
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.
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
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
}
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 > " ;
}
}
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>
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.
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.
Sessions et authentification (3/5) Exemple d’authentification et de session1/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>
Sessions et authentification (4/5) Exemple d’authentification et de session2/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)
Sessions et authentification (5/5) Exemple d’authentification et de session3/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 ") ;
?>
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()
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 >
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>
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>
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")
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>
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/
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 }
?>
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>
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>
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>