Vous êtes sur la page 1sur 79

INSA - ASI TechnoWeb : PHP 1/79

Technologie Web
PHP

Alexandre Pauchet

INSA Rouen - Département ASI


BO.B.RC.18, pauchet@insa-rouen.fr
INSA - ASI TechnoWeb : PHP 2/79

Plan

1 Introduction
7 Les classes
2 Syntaxe
8 Les exceptions
3 Fonctions et modularité
9 Session et authentification
4 Chaînes de caractères
10 PHP et XML
5 Les fichiers
11 Bases de données
6 Les formulaires
INSA - ASI TechnoWeb : PHP 3/79

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
...
INSA - ASI TechnoWeb : PHP 4/79

Introduction (2/3)
Fonctionnement

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

Salut Martin !

Salut Martin !

Client Web
(navigateur) Serveur Web
INSA - ASI TechnoWeb : PHP 5/79

Introduction (3/3)
Premier script PHP

<! DOCTYPE html >


< html >
< head >
< title > Page PHP </ title >
< meta http - equiv = " content - type " content = " text / html ; charset = utf -8 " / >
</ head >
< body >
<? php echo " <p > Bonjour le monde !! </ p >\ n " ; ? >
</ body >
</ html >
INSA - ASI TechnoWeb : PHP 6/79

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


/* ... */
// ...
# ...
INSA - ASI TechnoWeb : PHP 7/79

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 : Affichera :
<? php 20 20
$var1 =10;
$var2 =& $var1 ;
$var1 =20;
echo " <p > " . $var1 . " " .
$var2 . " </p > " ;
?>
INSA - ASI TechnoWeb : PHP 8/79

Syntaxe (3/14)
Variables globales

Déclaration de variable globale : global $var;

global.php
<! DOCTYPE html >
< html >
< head >
< title > Page PHP </ title >
< meta http - equiv = " content - type " content = " text / html ; charset = utf -8 " / >
</ head >
< body >
<? php
function affiche () {
global $var1 ;
echo " <p > Hello " . $var1 . " !!! </ p >\ n " ;
}
?>
<? php
$var1 = " John " ;
affiche () ;
?>
</ body >
</ html >
INSA - ASI TechnoWeb : PHP 9/79

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
INSA - ASI TechnoWeb : PHP 10/79

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
define ( " PHP " ," PHP Hypertext Preprocessor " ) ;
echo PHP ;
INSA - ASI TechnoWeb : PHP 11/79

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
INSA - ASI TechnoWeb : PHP 12/79

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
$tab = array ( " fruit " = > " pomme " ,42 , " légume " = > " salade " ,1.5 e3 ) ;
foreach ( $tab as $cle = > $valeur ) {
echo " <p > " . $cle . " = > " . $valeur . " </p > " ;
}
echo " <p > tab [1]= " . $tab [1]. " </p > " ;
$tab []= " peu importe " ;
echo " <p > tab [2]= " . $tab [2]. " </p > " ;
echo " <p > tab [ ’ fruit ’]= " . $tab [ " fruit " ]. " </p > " ;
INSA - ASI TechnoWeb : PHP 13/79

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
INSA - ASI TechnoWeb : PHP 14/79

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.
INSA - ASI TechnoWeb : PHP 15/79

Syntaxe (10/14)
Exemple
INSA - ASI TechnoWeb : PHP 16/79

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
INSA - ASI TechnoWeb : PHP 17/79

Syntaxe (12/14)
Instructions de branchement

Proches du C/C++/Java :

Si-sinon-alors : Switch-case :
if ( condition ) { switch ( expression ) {
instructions case ’ valeur1 ’:
} Instructions
[ elseif ( condition ) { break ;
instructions ...
}] default :
[ else { Instructions
instructions break ;
}] }
INSA - ASI TechnoWeb : PHP 18/79

Syntaxe (13/14)
Boucles

Proches du C/C++/Java :

Boucles while :
Boucles for : while ( condition ) {
for ( $i =0; $i <N ; $i ++) { Instructions
Instructions }
}
do {
foreach ( $tab as $val ) { Instructions
Instructions } while ( condition ) ;
}
foreach ( $tab as $cle = > $val ) {
Instructions
}
INSA - ASI TechnoWeb : PHP 19/79

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
<! DOCTYPE html >
< html >
< head >
< meta http - equiv = " content - type " content = " text / html ; charset = utf -8 " / >
< title > Page PHP </ title >
</ head >
< body >
<? php
$tab = array ( " premier " ," second " ," troisième " ," ... " ) ;
?>
< ul >
<? php foreach ( $tab as $elem ) { ? >
< li > <? php echo $elem ; ? > </ li >
<? php } ? >
</ ul >
</ body >
</ html >
INSA - ASI TechnoWeb : PHP 20/79

Fonctions et modularité (1/7)


Les fonctions

Syntaxe
<? php
function nomDeFonction ( arg1 , arg2 , ... , argN ) [: type ] {
instructions ;
[ return VALEUR ;]
}
?>

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
INSA - ASI TechnoWeb : PHP 21/79

Fonctions et modularité (2/7)


Exemples de fonction

fonctions-math.php
1 <? php
2 function puissance ( $nombre , $exposant =1) : float {
3 $res = 1;
4 for ( $i = abs ( $exposant ) -1; $i > =0; $i - -)
5 $res = $res * $nombre ;
6 if ( $exposant > 0)
7 $retour = $res ;
8 else
9 $retour = 1/ $res ;
10 return $retour ;
11 }
12 function incrementer (& $nombre , $increment =1) {
13 $nombre += $increment ;
14 }
15 $val = 4;
16 incrementer ( $val , 2) ;
17 echo " val = " . $val . " </p > " ;
18 echo " <p > puissance (2 , -2) = " . puissance (2 , -2) . " </p > " ;
19 $fonction = ’ puissance ’;
20 echo " <p > $fonction (2 ,4) = " . $fonction (2 ,4) . " </p > " ;
21 ?>
INSA - ASI TechnoWeb : PHP 22/79

Fonctions et modularité (3/7)


Exemples de fonction

fonctions.php
1 <? php
2 header ( " Content - Type : text / plain ; charset = UTF -8 " ) ;
3
4 function 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 ( $listeDeMessages , $listeAuteurs ) {
5 $chaine = " " ;
6 foreach ( $ l i steDeMessages as $id = > $mess ) {
7 foreach ( $listeAuteurs as $nom = > $ids ) {
8 if ( in_array ( $id , $ids ) )
9 $chaine = $chaine . $nom . " : " . $mess . " \ n " ;
10 }
11 }
12 return $chaine ;
13 }
14
15 function aj ou terMessages (& $listeDeMessages , & $listeAuteurs , $messages ) {
16 foreach ( $messages as $id = > $message ) {
17 array_push ( $listeDeMessages , $message [1]) ;
18 if ( a r r a y _ key_exists ( $message [0] , $listeAuteurs ) ) {
19 array_push ( $listeAuteurs [ $message [0]] , count ( $listeDeMessages ) -1) ;
20 } else {
21 $listeAuteurs [ $message [0]] = array ( count ( $listeDeMessages ) -1) ;
22 }
23 }
24 }

...
INSA - ASI TechnoWeb : PHP 23/79

Fonctions et modularité (4/7)


Exemples de fonction

fonctions.php
...
1 $messages = array () ;
2 $auteurs = array () ;
3 $mes sagesR ecus = array ( array ( " Bob " , " Salut " ) ,
4 array ( " Samantha " , " Tiens ? Ca faisait longtemps ! " ) ,
5 array ( " Rencontres . com " , " Salut Bob ! Rdv sur rencontres . com " ) ,
6 array ( " Bob " , " Oui . Quoi de neuf , Samantha ? " ) ,
7 array ( " Samantha " , " Rien de particulier ... " ) ) ;
8
9 a jo u te rM e ss ag es ( $messages , $auteurs , $messagesRecus ) ;
10 echo " Liste de messages :\ 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 ( $messages , $auteurs ) ;
11
12 // Affiche " Liste de messages :
13 // Bob : Salut
14 // Samantha : Tiens ? Ca faisait longtemps !
15 // Rencontres . com : Salut Bob ! Rdv sur rencontres . com
16 // Bob : Oui . Quoi de neuf , Samantha ?
17 // Samantha : Rien de particulier ..."
18 ?>
INSA - ASI TechnoWeb : PHP 24/79

Fonctions et modularité (5/7)


Nombre variable d’arguments

fonction-nbArgsVariable.php
1 <? php
2 header ( " Content - Type : text / plain ; charset = UTF -8 " ) ;
3
4 function f ( $req , $opt = null , ... $params ) {
5 echo " req : $req ; opt : $opt ; nb args : " . count ( $params ) . " \ n " ;
6 }
7
8 f (1) ; // req : 1; opt : ; nb args : 0
9 f (1 , 2) ; // req : 1; opt : 2; nb args : 0
10 f (1 , 2 , 3) ; // req : 1; opt : 2; nb args : 1
11 f (1 , 2 , 3 , 4) ; // req : 1; opt : 2; nb args : 2
12 f (1 , 2 , 3 , 4 , 5) ; // req : 1; opt : 2; nb args : 3
13
14 ?>
INSA - ASI TechnoWeb : PHP 25/79

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 <! DOCTYPE html >
2 < html >
3 < head >
4 < title > Page PHP </ title >
5 < meta http - equiv = " content - type " content = " text / html ; charset = utf -8 " / >
6 < meta http - equiv = " Content - Style - Type " content = " text / css " / >
7 </ head >
8 < body >
9 <? php include_once ( " Entete . inc . php " ) ; ? >
10 <p > contenu normal de la page </ p >
11 <p align = " right " >
12 <i > <? php include_once ( " Pieddepage . inc . php " ) ; ? > </ i >
13 </ p >
14 </ body >
15 </ html >
INSA - ASI TechnoWeb : PHP 26/79

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


INSA - ASI TechnoWeb : PHP 27/79

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";


INSA - ASI TechnoWeb : PHP 28/79

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)
1ere 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)
INSA - ASI TechnoWeb : PHP 29/79

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>
<body>
<? 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 />" ;
echo 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 ) ;
?>
</ body>
</ h t m l>
INSA - ASI TechnoWeb : PHP 30/79

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 1ere 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)
INSA - ASI TechnoWeb : PHP 31/79

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


Exemples

traitementString2.php
<? php
$ c h = "Un p o t de lait e t un p o t de m i e l " ;
echo s t r s t r ( $ch , " p o t " ) . "<b r />" ;
// a f f i c h e " p o t de l a i t e t un p o t de m i e l "
echo 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 " , $ch ) . "<b r />" ;
// a f f i c h e "Un b r o c de l a i t e t un b r o c de m i e l "
echo s t r p o s ( $ch , " un p o t " ) . "<b r />" ;
// a f f i c h e "18"
?>
</ body>
</ h t m l>
INSA - ASI TechnoWeb : PHP 32/79

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
INSA - ASI TechnoWeb : PHP 33/79

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
" [[: digit :]]{2}/[[: digit :]]{2}/[[: digit :]]{4} "
" [[: alnum :]]*\.[[: alnum :]]* @asi \. insa - rouen \. fr
INSA - ASI TechnoWeb : PHP 34/79

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


Fonctions de recherche et de remplacement

Fonctions de recherche
int preg_match ( string $modeleregex , string $chaine
[ , array & $matches ] )

Fonctions de remplacement
mixed preg_replace ( mixed $modeleregex , mixed
$replacement , mixed $chaine )

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:\/\/.*:.*/"
INSA - ASI TechnoWeb : PHP 35/79

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>
<body>
<? 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 ) ;
echo $ c h a i n e ;
?>
</ body>
</ h t m l>
INSA - ASI TechnoWeb : PHP 36/79

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);
INSA - ASI TechnoWeb : PHP 37/79

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);
INSA - ASI TechnoWeb : PHP 38/79

Les fichiers (3/3)


Exemple

fichier.php
<! DOCTYPE html >
< html >
< head >
< title > Lecture / Ecriture dans un fichier </ title >
< meta http - equiv = " Content - type " content = " text / html ; charset = utf -8 " / >
</ head >
<? php
$fichier = fopen ( " fichier . txt " , " a " ) ;
fputs ( $fichier , " Une phrase \ n " ) ;
fclose ( $fichier ) ;
$fichier = fopen ( " fichier . txt " , " r " ) ;
echo " <p > Dans le fichier fichier . txt : </p > " ;
while (! feof ( $fichier ) ) {
echo fgetc ( $fichier ) ;
}
fclose ( $fichier ) ;
?>
</ html >
INSA - ASI TechnoWeb : PHP 39/79

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.
INSA - ASI TechnoWeb : PHP 40/79

Les formulaires (2/3)


Utilité de Htmlentities : contrer les attaques de type XSS

htmlentities.php
<? php
$phrase = " J ’ aime le < strong > gras </ strong > ! " ;
$a = htmlentities ( $phrase ) ;
$b = h t m l _ en t it y_ d ec o de ( $a ) ;
echo $phrase . " < br / > " ; // J ’ aime le gras ! ( avec " gras " en gras )
echo $a . " < br / > " ; // J ’ aime le < strong > gras </ strong > !
echo $b ; // J ’ aime le gras ! ( avec " gras " en gras )
?>

Tiré de http://xkcd.com/327/.
INSA - ASI TechnoWeb : PHP 41/79

Les formulaires (3/3)


Exemple de traitement de formulaire

formulaire.php
< form action = " formulaire . php " method = " POST " >
< label > Prenom </ label > < input type = " text " name = " prenom " size = " 10 " value = " Alex " / >
< label > Nom </ label > < input type = " text " name = " nom " size = " 20 " value = " P " / > < br / >
< label > OS : Unix </ label > < input type = " radio " name = " os " value = " unix " / >
< label > OS /2 </ label > < input type = " radio " name = " os " value = " os /2 " / >
< label > Windows </ label > < input type = " radio " name = " os " value = " windows " / > < br / >
< input type = " text " name = " ligne " value = " < script type = ’ text / javascript ’> alert ( ’ Pub
! ’) ; </ script > " size = " 20 " / > < br / >
< input type = " submit " name = " action " value = " Envoyer " / >
< input type = " reset " value = " Effacer " / >
</ form >
<p >
<? php
if ( isset ( $_POST [ ’ action ’ ]) && ! empty ( $_POST [ ’ prenom ’ ]) && ! empty ( $_POST [ ’ nom ’ ])
&& ! empty ( $_POST [ ’ os ’ ]) && ! empty ( $_POST [ ’ ligne ’ ]) ) {
echo $_POST [ ’ prenom ’ ]. " " . $_POST [ ’ nom ’ ]. " utilise un système d ’ exploitation " .
$_POST [ ’ os ’ ]. " < br / > " ;
echo " <p > htmlentities ( Ligne ) -> " . htmlentities ( $_POST [ ’ ligne ’ ]) . " </p > " ;
echo " <p > Ligne - > " . $_POST [ ’ ligne ’ ]. " </p > " ;
}
else
echo " <p > Tous les champs doivent être renseignés </ p > " ;
?>
</ p >
INSA - ASI TechnoWeb : PHP 42/79

Les classes (1/18)


Déclaration

Syntaxe
class NomClasse {
public / protected / private $attribut1 [ = constante1 ];
public / protected / private $attribut2 [ = constante2 ];
...
public / protected / private function __construct (...) { // constructeur
}
public / protected / private function methode1 (...) { // méthode
}
public / protected / private function methode2 (...) { // méthode
}
...
}

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
INSA - ASI TechnoWeb : PHP 43/79

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)
class Acces
{
public $varPublique = " variable publique " ;
protected $varProtegee = " variable protégée " ;
private $varPrivee = " variable privée " ;
public function lecturePublique ()
{ echo " <p > Fonction publique </ p > " ; }
protected function lectureProtegee ()
{ echo " <p > Fonction protégée </ p > " ; }
private function lecturePrivee ()
{ echo " <p > Fonction privée </ p > " ; }
}
$acces = new Acces () ;
echo " varPublic : $acces - > varPublique " ;
$acces - > lecturePublique () ;
INSA - ASI TechnoWeb : PHP 44/79

Les classes (3/18)


Constructeurs et destructeurs

PHP5 permet les constructeurs unifiés et les destructeurs :


void __construct ([ arguments ]) {...}
void __destruct () {...}

En cas d’héritage, appel explicite du constructeur/destructeur de la


classe mère dans le corps du constructeur de la classe fille :
parent :: __construct ([ arguments ]) ;
parent :: __destruct () ;
INSA - ASI TechnoWeb : PHP 45/79

Les classes (4/18)


Héritage

Syntaxe
class ClassDerivée extends ClasseHérité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 portée est “ ::”
parent est un mot clef permettant l’accès à la classe mère
INSA - ASI TechnoWeb : PHP 46/79

Les classes (5/18)


Exemple d’héritage

Personne.class.php
<? php
class Personne {
protected $nom ;
public function __construct ( $nom ) {
$this - > nom = $nom ;
}
public function info () {
return $this - > nom ;
}
}
?>
INSA - ASI TechnoWeb : PHP 47/79

Les classes (6/18)


Exemple d’héritage

Etudiant.class.php
<? php
class Etudiant extends Personne {
public $numero ;
function __construct ( $num , $nom ) {
parent :: __construct ( $nom ) ;
$this - > numero = $num ;
}
public function info () {
return $this - > nom . " ( " . $this - > numero . " ) " ;
}
}
?>
INSA - ASI TechnoWeb : PHP 48/79

Les classes (7/18)


Exemple d’héritage

heritage.php
<! DOCTYPE html >
< html >
< head >
< meta http - equiv = " content - type " content = " text / html ; charset = utf -8 " / >
< title > Page PHP </ title >
<? php require ( " Personne . class . php " ) ; ? >
<? php require ( " Etudiant . class . php " ) ; ? >
</ head >
< body >
<? php
$personne = new Personne ( " John " ) ;
echo " <p > Personne : " . $personne - > info () . " </p > " ;
$etudiant = new Etudiant (1203 , " Samantha " ) ;
echo " <p > Etudiant : " . $etudiant - > info () . " </p > " ;
?>
</ body >
</ html >
INSA - ASI TechnoWeb : PHP 49/79

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.
INSA - ASI TechnoWeb : PHP 50/79

Les classes (9/18)


Exemple de classe abstraite

compte.php
<? php
abstract class Compte {
protected $nom ;
protected $solde ;
public function __construct ( $nom , $solde ) {
$this - > nom = $nom ;
$this - > solde = $solde ;
}
abstract protected function getInfo () ;
}
class CompteCheque extends Compte {
// NB : inutile quand il y a le même nombre d ’ arguments
public function __construct ( $nom , $solde ) {
parent :: __construct ( $nom , $solde ) ;
}
public function getInfo () {
return " Compte cheque de " . $this - > nom . " : " . $this - > solde ;
}
}
?>
</ head >
< body >
<? php
$ccq = new CompteCheque ( " John " , 1000) ;
echo " <p > " . $ccq - > getInfo () . " </p > " ;
?>
INSA - ASI TechnoWeb : PHP 51/79

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.
INSA - ASI TechnoWeb : PHP 52/79

Les classes (11/18)


Exemple d’interface

interface.php
<? php
interface Fonction {
public function calculer () ;
}
class Addition implements Fonction {
private $var1 ;
private $var2 ;
public function __construct ( $var1 , $var2 ) {
$this - > var1 = $var1 ;
$this - > var2 = $var2 ;
}
public function calculer () {
return $this - > var1 + $this - > var2 ;
}
}
?>
</ head >
< body >
<? php
$addition = new Addition (10 , 20) ;
echo " <p > addition (10 ,20) = " . $addition - > calculer () . " </p > " ;
?>
</ body >
</ html >
INSA - ASI TechnoWeb : PHP 53/79

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.

class UneClasse {
final function methode ()
{ ... }
}
empêche toute redéfinition de methode() dans les classes dérivées.

final class UneClasse {


...
}
empêche toute dérivation de la classe uneClasse.
INSA - ASI TechnoWeb : PHP 54/79

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 :
$objetclone = clone $objet ;

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


prédéfinie __clone().
INSA - ASI TechnoWeb : PHP 55/79

Les classes (14/18)


Exemple de clonage

Clonage.inc.php
<? php
class Personne {
protected $nom ;
public function __construct ( $nom ) {
$this - > nom = $nom ;
}
public function info () {
return $this - > nom ;
}
public function __clone () {
$this - > nom = " Clone de " . $this - > nom ;
}
}
?>
INSA - ASI TechnoWeb : PHP 56/79

Les classes (15/18)


Exemple de clonage

Etudiant.class.php
<? php
class Etudiant extends Personne {
public $numero ;
function __construct ( $num , $nom ) {
parent :: __construct ( $nom ) ;
$this - > numero = $num ;
}
public function info () {
return $this - > nom . " ( " . $this - > numero . " ) " ;
}
}
?>
INSA - ASI TechnoWeb : PHP 57/79

Les classes (16/18)


Exemple de clonage

clonage.php
<! DOCTYPE html >
< html >
< head >
< title > Page PHP : clonage </ title >
< meta http - equiv = " content - type " content = " text / html ; charset = utf -8 " / >
<? php require ( " Clonage . inc . php " ) ; ? >
<? php require ( " Etudiant . class . php " ) ; ? >
</ head >
< body >
<? php
$personne = new Personne ( " John " ) ;
$clone = clone $personne ;
echo " <p > personne : " . $personne - > info () . " </p > " ;
echo " <p > clone : " . $clone - > info () . " </p > " ;
$etudiant = new Etudiant (1235 , " Samantha " ) ;
$etudiant2 = $etudiant ;
$clone = clone $etudiant ;
$etudiant - > numero = 55555;
echo " <p > etudiant : " . $etudiant - > info () . " </p > " ;
echo " <p > etudiant2 : " . $etudiant2 - > info () . " </p > " ;
echo " <p > clone : " . $clone - > info () . " </p > " ;
?>
</ body >
</ html >
INSA - ASI TechnoWeb : PHP 58/79

Les classes (17/18)


Attributs et méthodes statiques (PHP5)

Déclaration par le mot clef static


Accès par ‘nomclasse::’

statique.php
<! DOCTYPE html >
< html >
< head >
< meta http - equiv = " content - type " content = " text / html ; charset = utf -8 " / >
< title > Page PHP </ title >
<? php
class Statique
{
public static $varStatique = " variable statique " ;
public static function fonctionStatique ()
{ echo " <p > Fonction statique : " . Statique :: $varStatique . " </p > " ; }
}
?>
</ head >
< body >
<? php
Statique :: fonctionStatique () ;
Statique :: $varStatique = " var . stat . " ;
Statique :: fonctionStatique () ;
?>
</ body >
</ html >
INSA - ASI TechnoWeb : PHP 59/79

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.
INSA - ASI TechnoWeb : PHP 60/79

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
INSA - ASI TechnoWeb : PHP 61/79

Les exceptions (2/4)


Récupération des exceptions

Code type
try {
// Code à surveiller
// Ce code peut renvoyer des exceptions non de votre
fait
if ( erreur prevue ) {
throw new Exception () ;
}
else {
// Résultat ;
}
}
catch ( Exception $except ) {
// Gestion des erreurs
}
INSA - ASI TechnoWeb : PHP 62/79

Les exceptions (3/4)


Personnalisation

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


la classe Exception
class MonException extends Exception
{
public function alerte ( $mess ) {
echo " < script type = ’ text / javascript ’> alert ( ’
Erreur n ◦ " . $this - > getCode () . " \ n " . $this - >
getMessage () . " \ n " . $mess . " ’) </ script > " ;
}
}
INSA - ASI TechnoWeb : PHP 63/79

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 MonException e x t e n d s E x c e p t i o n
{
public function 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>
<body>
<? php
$num = 1 0 0 ; $denom = 0 ;
try {
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 ( MonException $ e x c e p t ) {
$ e x c e p t −> a l e r t e ( ) ;
}
?>
</ body>
INSA - ASI TechnoWeb : PHP 64/79

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.
INSA - ASI TechnoWeb : PHP 65/79

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 ’ ) ;
echo " A u t h e n t i f i c a t i o n r e q u i s e " ;
exit ;
} else {
// 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 fois le login et mot de passe récupérés, il faut vérifier si l’utilisateur a le droit
de se connecter. Les infos peuvent être stockées dans un fichier simple, un fichier
du type .htaccess, ou dans une base de données.
INSA - ASI TechnoWeb : PHP 66/79

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>
<body>
<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>Username : </ 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>
</ body>
</ h t m l>
INSA - ASI TechnoWeb : PHP 67/79

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>
<body>
<? php
$ l o g i n = $_POST [ ’ l o g i n ’ ] ; $ i d = $_SESSION [ ’ u s e r I d ’ ] ;
echo " $ 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>
</ body>
</ h t m l>

authentification-page2.php
idem (changement des “1” en “2” et inversement)
INSA - ASI TechnoWeb : PHP 68/79

Sessions et authentification (5/5)


Exemple d’authentification et de session 3/3

login.inc.php
<? php
session_start () ;
i f ( i s s e t ($_POST [ " s u b m i t " ] ) ) {
// r e c h e r c h e de l ’ u t i l i s a t e u r : fichier plat , h t a c c e s s 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 " ;
if ( $_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 ’ ] ==
$passwordAutorise )
$_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 " ) ;
session_destroy () ;
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 " ) ;
?>
INSA - ASI TechnoWeb : PHP 69/79

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()
INSA - ASI TechnoWeb : PHP 70/79

PHP et XML (2/6)


Fichier XML

bib.xml
<? xml version = " 1.0 " encoding = " UTF -8 " ? >
< biblio >
< livre editeur = " Bob " prix = " 5.00 " >
< auteur > John Aipu </ auteur >
< titre > Il était une fois </ titre >
</ livre >
< livre version = " 3.05 " prix = " 2.50 " >
< auteur > Yann Napu </ auteur >
< titre > La suite </ titre >
</ livre >
</ biblio >
INSA - ASI TechnoWeb : PHP 71/79

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>
<body>
<? php
$xml = s i m p l e x m l _ l o a d _ f i l e ( " . / d a t a / b i b . xml " ) ;
$ 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 ++;
}
?>
</ body>
</ h t m l>
INSA - ASI TechnoWeb : PHP 72/79

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>
<body>
<? php
$xml = s i m p l e x m l _ l o a d _ f i l e ( " d a t a / b i b . xml " ) ;
f o r e a c h ( $xml−> l i v r e a s $ l i v r e ) {
$i = 0;
echo " 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 ++;
}
?>
</ body>
</ h t m l>
INSA - ASI TechnoWeb : PHP 73/79

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")
INSA - ASI TechnoWeb : PHP 74/79

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>
<body>
<? php
$xml = s i m p l e x m l _ l o a d _ f i l e ( " d a t a / b i b . xml " ) ;
$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 . xml " ) )
echo " E n r e g i s t r e m e n t r é a l i s é " ;
?>
</ body>
</ h t m l>
INSA - ASI TechnoWeb : PHP 75/79

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/
INSA - ASI TechnoWeb : PHP 76/79

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) ;
try {
/∗ c r e a t i o n de 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 de 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
}
?>
INSA - ASI TechnoWeb : PHP 77/79

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) ;
try
{
$ 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 de 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 de 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 ) ;
echo ’ Table 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 ( ) ;
}
?>
</ body>
INSA - ASI TechnoWeb : PHP 78/79

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) ;
try
{
/∗ c r e a t i o n de 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 de 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 ( ’ John ’ ) ; " ) ;
$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 ) ;
echo ’ 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 ( ) ; }
?>
</ body>
INSA - ASI TechnoWeb : PHP 79/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) ;
try
{
/∗ c r e a t i o n de 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 de 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 ( ) ;
}
?>
</ body>

Vous aimerez peut-être aussi