79
INSA - ASI TechnoWeb : PHP 1/79 Technologie Web PHP Alexandre Pauchet INSA Rouen - Département ASI BO.B.RC.18, [email protected]

Technologie Web - PHP

  • Upload
    others

  • View
    2

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Technologie Web - PHP

INSA - ASI TechnoWeb : PHP 1/79

Technologie WebPHP

Alexandre Pauchet

INSA Rouen - Département ASI

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

Page 2: Technologie Web - PHP

INSA - ASI TechnoWeb : PHP 2/79

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

Page 3: Technologie Web - PHP

INSA - ASI TechnoWeb : PHP 3/79

Introduction (1/3)Description

PHP Hypertext PreprocessorLangage de script intégré à HTML/XHTML, côté serveurLe serveur parse les documents et interprète le code PHPLe 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 diversesFonctionnalités équivalentes aux autres langages de scripts CGISupport d’un important nombre de bases de donnéesNombreuses librairies :

gestion des protocoles mail (imap, pop)production de pdf, flashgestion de XML. . .

Page 4: Technologie Web - PHP

INSA - ASI TechnoWeb : PHP 4/79

Introduction (2/3)Fonctionnement

Client Web(navigateur) Serveur Web

exemple.php ?

exemple.php

Salut <?php echo $nom ?> !

Salut Martin !

Salut Martin !

Page 5: Technologie Web - PHP

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>

Page 6: Technologie Web - PHP

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/* ... */// ...# ...

Page 7: Technologie Web - PHP

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 casseassignation par :

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

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

<?php$var1 =10;$var2=& $var1;$var1 =20;echo "<p>".$var1." ".$var2."</p>";

?>

Affichera :20 20

Page 8: Technologie Web - PHP

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>

<?phpfunction affiche () {

global $var1;echo "<p>Hello ".$var1." !!!</p>\n";

}?><?php

$var1="John";affiche ();

?></body>

</html>

Page 9: Technologie Web - PHP

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’environnementd’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 POSTdu protocole HTTP$_COOKIE, $_REQUEST, $_SESSION, $_FILES, $_ENV

Page 10: Technologie Web - PHP

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 codene peuvent pas être rédéfiniesne peuvent contenir que des booléens, des entiers, des flottants etdes chaînes de caractères

Exemple

define("PHP","PHP Hypertext Preprocessor");echo PHP;

Page 11: Technologie Web - PHP

INSA - ASI TechnoWeb : PHP 11/79

Syntaxe (6/14)Les types

4 types simples :

entiers : integerréels : float, doublebooléens : boolean (TRUE ou FALSE)chaînes de caractères : string

2 types complexes :

tableaux : arrayobjets : object

2 types spéciaux :

ressources : resource (ex : connexion BD)absence de valeur : null

Page 12: Technologie Web - PHP

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+1la valeur peut être de n’importe quel type

fruits.php

$tab=array("fruit"=>"pomme" ,42,"légume"=>"salade" ,1.5e3);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>";

Page 13: Technologie Web - PHP

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émentssort($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’uneliste (i.e. fonctionne comme une pile)array_shift($array) : récupère et supprime le premier élément d’une listearray_unshift($array, $elem1, ...) : ajout d’éléments en début de liste

array_merge($array1, $array2, ...) : fusionne plusieurs tableauxin_array($elem, $array) : recherche d’un élément dans un tableauarray_key_exists($key, $array) : recherche une clef dans un tableauarray_flip($array) : inverse les clef et les valeurs d’un tableau

Page 14: Technologie Web - PHP

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 ala valeur NULL, TRUE sinon ;boolean empty($var); retourne TRUE si $var n’est pas initialisée, a lavaleur 0, "0", ou NULL, FALSE sinon ;boolean is_null($var); retourne TRUE si $var n’est pas initialisée ouvaut NULL, FALSE sinon (inverse de isset).

Page 15: Technologie Web - PHP

INSA - ASI TechnoWeb : PHP 15/79

Syntaxe (10/14)Exemple

Page 16: Technologie Web - PHP

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

Page 17: Technologie Web - PHP

INSA - ASI TechnoWeb : PHP 17/79

Syntaxe (12/14)Instructions de branchement

Proches du C/C++/Java :

Si-sinon-alors :if(condition) {

instructions}[elseif(condition) {

instructions}][else {

instructions}]

Switch-case :switch(expression) {

case ’valeur1 ’:Instructionsbreak;

...default:

Instructionsbreak;

}

Page 18: Technologie Web - PHP

INSA - ASI TechnoWeb : PHP 18/79

Syntaxe (13/14)Boucles

Proches du C/C++/Java :

Boucles for :for($i=0; $i<N; $i++) {

Instructions}

foreach($tab as $val) {Instructions

}

foreach($tab as $cle=>$val) {Instructions

}

Boucles while :while(condition) {

Instructions}

do {Instructions

} while(condition);

Page 19: Technologie Web - PHP

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>

Page 20: Technologie Web - PHP

INSA - ASI TechnoWeb : PHP 20/79

Fonctions et modularité (1/7)Les fonctions

Syntaxe

<?phpfunction nomDeFonction(arg1 , arg2 , ..., argN)[: type] {

instructions;[return VALEUR ;]

}?>

les noms de fonctions sont insensibles à la casseune fonction peut être utilisée avant sa définitionla valeur en retour d’une fonction peut être fixée (PHP7) ; elle seratranstypée si nécessaireles arguments sont non typés et supportent une valeur par défautla surcharge de fonctions n’est pas supportéepassage d’arguments par valeur et référence supporté (&)les fonctions supportent un nombre variable d’argumentsretour d’une unique valeur par la directive return

Page 21: Technologie Web - PHP

INSA - ASI TechnoWeb : PHP 21/79

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

fonctions-math.php

1 <?php2 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 else9 $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 ?>

Page 22: Technologie Web - PHP

INSA - ASI TechnoWeb : PHP 22/79

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

fonctions.php

1 <?php2 header("Content -Type: text/plain; charset=UTF -8");34 function formatterUneListeDeMessages($listeDeMessages , $listeAuteurs) {5 $chaine = "";6 foreach($listeDeMessages 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 }1415 function ajouterMessages (& $listeDeMessages , &$listeAuteurs , $messages) {16 foreach($messages as $id => $message) {17 array_push($listeDeMessages , $message [1]);18 if(array_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 }

. . .

Page 23: Technologie Web - PHP

INSA - ASI TechnoWeb : PHP 23/79

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

fonctions.php. . .

1 $messages = array ();2 $auteurs = array();3 $messagesRecus = 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 ..."));89 ajouterMessages($messages , $auteurs , $messagesRecus);

10 echo "Liste de messages :\n" . formatterUneListeDeMessages($messages , $auteurs);1112 // Affiche "Liste de messages :13 // Bob : Salut14 // Samantha : Tiens ? Ca faisait longtemps !15 // Rencontres.com : Salut Bob ! Rdv sur rencontres.com16 // Bob : Oui. Quoi de neuf , Samantha ?17 // Samantha : Rien de particulier ..."18 ?>

Page 24: Technologie Web - PHP

INSA - ASI TechnoWeb : PHP 24/79

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

fonction-nbArgsVariable.php

1 <?php2 header("Content -Type: text/plain; charset=UTF -8");34 function f($req , $opt=null , ... $params) {5 echo "req: $req; opt: $opt; nb args: " . count($params) . "\n";6 }78 f(1); // req: 1; opt: ; nb args: 09 f(1, 2); // req: 1; opt: 2; nb args: 0

10 f(1, 2, 3); // req: 1; opt: 2; nb args: 111 f(1, 2, 3, 4); // req: 1; opt: 2; nb args: 212 f(1, 2, 3, 4, 5); // req: 1; opt: 2; nb args: 31314 ?>

Page 25: Technologie Web - PHP

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 fichierrequire_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>

Page 26: Technologie Web - PHP

INSA - ASI TechnoWeb : PHP 26/79

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

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

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

Mauvaise pratique (par exemple) : .inc

Page 27: Technologie Web - PHP

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 lescaractères échappatoires sont interprétés

Exemples, pour $t="Mot";

Page 28: Technologie Web - PHP

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)

Page 29: Technologie Web - PHP

INSA - ASI TechnoWeb : PHP 29/79

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

traitementString.php

<!DOCTYPE html><html>

<head><meta http−equ i v=" content−t ype " con t en t=" t e x t / html ; c h a r s e t=ut f −8" />< t i t l e>Page PHP</ t i t l e>

</head><body>

<?php$prenom = " . . . JEan__" ;$nom = " BONNEAu" ;$ ad r e s s e = "10 rue abraham l i n c o l n " ;$ema i l = " jean−BONNEAU@asi . i n s a−rouen . f r " ;

$complet = u c f i r s t ( s t r t o l o w e r ( t r im ( $prenom , ’ ._ ’ ) ) ) ;$complet .= " " . s t r t o u p p e r ( l t r i m ($nom , ’ ’ ) ) ;$ e space s = s t r l e n ( $complet ) +3;echo $complet . " : " . ucwords ( $ ad r e s s e ) . "<br />" ;echo s t r_ r ep ea t ( " . " , $ e space s ) . s t r t o l o w e r ( $ema i l ) ;

?></body>

</html>

Page 30: Technologie Web - PHP

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 $chdepuis 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)

Page 31: Technologie Web - PHP

INSA - ASI TechnoWeb : PHP 31/79

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

traitementString2.php

<?php$ch = "Un pot de l a i t e t un pot de m i e l " ;

echo s t r s t r ( $ch , " pot " ) . "<br />" ;// a f f i c h e " pot de l a i t e t un pot de m i e l "

echo s u b s t r ( $ch , 18 , 6) . "<br />" ;// a f f i c h e "un pot "

echo subs t r_count ( $ch , " pot " ) . "<br />" ;// a f f i c h e "2"

echo s t r_ r e p l a c e ( " pot " , " broc " , $ch ) . "<br />" ;// a f f i c h e "Un broc de l a i t e t un broc de m i e l "

echo s t r p o s ( $ch , "un pot " ) . "<br />" ;// a f f i c h e "18"

?></body>

</html>

Page 32: Technologie Web - PHP

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 decaractè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

Page 33: Technologie Web - PHP

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

Page 34: Technologie Web - PHP

INSA - ASI TechnoWeb : PHP 34/79

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

Fonctions de rechercheint preg_match ( string $modeleregex , string $chaine

[, array &$matches ] )

Fonctions de remplacementmixed preg_replace ( mixed $modeleregex , mixed

$replacement , mixed $chaine )

RemarqueLe modèle d’une expression rationnelle est déclarée entre / /, à l’intérieurd’une chaîne de caractères.Ex : "/ftp:\/\/.*:.*/"

Page 35: Technologie Web - PHP

INSA - ASI TechnoWeb : PHP 35/79

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

expressionsRationelles.php

<!DOCTYPE html><html>

<head>< t i t l e>Page PHP</ t i t l e><meta http−equ i v=" content−t ype " con t en t=" t e x t / html ; c h a r s e t=ut f −8" />

</head><body>

<?php$cha i ne = "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 ) \ nVive l e PHP 4

" ;$cha i n e = preg_rep l a ce ( "/4/" , "5" , $cha i n e ) ;$ cha i n e = preg_rep l a ce ( "/\n/" , "<br />" , $cha i n e ) ;echo $cha i ne ;

?></body>

</html>

Page 36: Technologie Web - PHP

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ébutw, w+ : écriture et lecture/écriture, avec création ou effacement,pointeur au débuta, a+ : écriture et lecture/écriture, pointeur à la fin, avec créationx, x+ : création en écriture et lecture/écriture, pointeur au début,erreur en cas d’existence du fichierc, 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);

Page 37: Technologie Web - PHP

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

Page 38: Technologie Web - PHP

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>

Page 39: Technologie Web - PHP

INSA - ASI TechnoWeb : PHP 39/79

Les formulaires (1/3)GET/POST

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

Remarques :Si le submit est une image, les coordonnées du click sont transmisesvia $sub_x et $sub_y

Il est possible d’utiliser des tableaux à une dimension pour desformulaires ayant par exemple des listes à choix multiplesLes caractères spéciaux (&, ", ’, <, >) doivent être transformés encaractè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 lesespaces, tabulations et sauts de ligne.

Page 40: Technologie Web - PHP

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 = html_entity_decode($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/.

Page 41: Technologie Web - PHP

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>

<?phpif(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>

Page 42: Technologie Web - PHP

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 (...) [: type] { // méthode}

public/protected/private function methode2 (...) [: type] { // méthode}...

}

Seules les initialisations par constante sont autoriséesEncapsulation/Accessibilité :

public : accès universelprotected : accès réservé à la classe et aux classes dérivéesprivate : accès réservé à la classe

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

Page 43: Technologie Web - PHP

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->attributLa surcharge des méthodes dans une même classe n’est pas possible, maisla 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 ();

Page 44: Technologie Web - PHP

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 laclasse mère dans le corps du constructeur de la classe fille :

parent :: __construct ([ arguments ]);parent :: __destruct ();

Page 45: Technologie Web - PHP

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èreest appeléla propagation d’appel des constructeurs n’est pas automatiquel’opérateur de résolution de portée est “::”parent est un mot clef permettant l’accès à la classe mère

Page 46: Technologie Web - PHP

INSA - ASI TechnoWeb : PHP 46/79

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

Personne.class.php

<?phpclass Personne {

protected $nom;

public function __construct($nom) {$this ->nom = $nom;

}

public function info() {return $this ->nom;

}}

?>

Page 47: Technologie Web - PHP

INSA - ASI TechnoWeb : PHP 47/79

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

Etudiant.class.php

<?phpclass Etudiant extends Personne {

public $numero;

function __construct($num , $nom) {parent :: __construct($nom);$this ->numero = $num;

}

public function info() {return $this ->nom."(".$this ->numero.")";

}}

?>

Page 48: Technologie Web - PHP

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_once("Personne.class.php"); ?><?php require_once("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>

Page 49: Technologie Web - PHP

INSA - ASI TechnoWeb : PHP 49/79

Les classes (8/18)Les classes abstraites

Classes abstraites en PHP5PHP5 permet la création de classes abstraites, ne permettant pasl’instanciation d’objets mais servant de classe de base pour la créationde classes dérivées.abstract sert à déclarer les méthodes et classes abstraites.

Page 50: Technologie Web - PHP

INSA - ASI TechnoWeb : PHP 50/79

Les classes (9/18)Exemple de classe abstraite

compte.php

<?phpabstract 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’argumentspublic 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>";

?>

Page 51: Technologie Web - PHP

INSA - ASI TechnoWeb : PHP 51/79

Les classes (10/18)Les interfaces

Interfaces en PHP5déclarées par le mot clef interfacene contenant aucune déclaration d’attributne contenant aucune implémentation de méthodedont les déclarations de méthodes sont publicimplémentées par une classe par implements ; une classe peutimplémenter plusieurs interfaces.

Page 52: Technologie Web - PHP

INSA - ASI TechnoWeb : PHP 52/79

Les classes (11/18)Exemple d’interface

interface.php

<?phpinterface 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>

Page 53: Technologie Web - PHP

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 declasse, 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.

Page 54: Technologie Web - PHP

INSA - ASI TechnoWeb : PHP 54/79

Les classes (13/18)Clonage d’objet

Le clonage d’objet est possible en PHP5Les opérateurs d’affectation = et de référence & permettent de copierun objet, mais les modifications sur la copie sont répercutées surl’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éthodeprédéfinie __clone().

Page 55: Technologie Web - PHP

INSA - ASI TechnoWeb : PHP 55/79

Les classes (14/18)Exemple de clonage

Clonage.inc.php

<?phpclass 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;}

}?>

Page 56: Technologie Web - PHP

INSA - ASI TechnoWeb : PHP 56/79

Les classes (15/18)Exemple de clonage

Etudiant.class.php

<?phpclass Etudiant extends Personne {

public $numero;

function __construct($num , $nom) {parent :: __construct($nom);$this ->numero = $num;

}

public function info() {return $this ->nom."(".$this ->numero.")";

}}

?>

Page 57: Technologie Web - PHP

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>

Page 58: Technologie Web - PHP

INSA - ASI TechnoWeb : PHP 58/79

Les classes (17/18)Attributs et méthodes statiques (PHP5)

Déclaration par le mot clef staticAccè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>

<?phpStatique :: fonctionStatique ();Statique :: $varStatique = "var. stat.";Statique :: fonctionStatique ();

?></body>

</html>

Page 59: Technologie Web - PHP

INSA - ASI TechnoWeb : PHP 59/79

Les classes (18/18)Divers

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

Sérialisation d’objets : pour faciliter l’enregistrement d’objets dansdes fichiers il est conseillé d’utiliser les méthodes serialize etunserialize pour en enregistrer une représentation linéaire.

Page 60: Technologie Web - PHP

INSA - ASI TechnoWeb : PHP 60/79

Les exceptions (1/4)La classe Exception

PHP5 introduit la classe prédéfinie Exception2 attributs :

message : message d’erreur (string)code : code d’erreur facultatif (int)

Méthodes :getMessage() : accesseur sur le message de l’objetgetCode() : accesseur sur le code d’erreur de l’objetgetFile() : retourne le fichier contenant l’erreurgetLine() : retourne la ligne renvoyant l’exception__toString() : retourne une chaîne descriptive de l’exception

Page 61: Technologie Web - PHP

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

faitif(erreur prevue) {

throw new Exception ();}else {

// Résultat;}

}catch(Exception $except) {

// Gestion des erreurs}

Page 62: Technologie Web - PHP

INSA - ASI TechnoWeb : PHP 62/79

Les exceptions (3/4)Personnalisation

Héritage d’exception : le mécanisme de l’héritage permet d’étendrela 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 >";

}}

Page 63: Technologie Web - PHP

INSA - ASI TechnoWeb : PHP 63/79

Les exceptions (4/4)Exemple

exception.php

<head>< t i t l e>Page PHP</ t i t l e><meta http−equ i v=" content−t ype " con t en t=" t e x t / html ; c h a r s e t=ut f −8" /><?php

c l a s s MonException ex t end s Excep t i on{

p u b l i c f u n c t i o n a l e r t e ( ) {echo "<s c r i p t type=\" 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−>

getCode ( ) . "\\n" . $ t h i s−>getMessage ( ) . " ’ )</ s c r i p t >" ;}

}?>

</head><body>

<?php$num = 100 ; $denom = 0 ;t r y {

i f ( $denom==0) { throw new MonException ( " D i v i s i o n par 0" ) ; }e l s e { echo "$num/$denom = " ,$num/$denom ; }

}ca tch ( MonException $excep t ) {

$except−>a l e r t e ( ) ;}

?></body>

Page 64: Technologie Web - PHP

INSA - ASI TechnoWeb : PHP 64/79

Sessions et authentification (1/5)Session

La gestion de session permet de stocker des données entre lesdiffé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 devariables dans la session :

$_SESSION["nomdelavariable "]=x ajoute ou modifie une variableà/de la session en cours$_SESSION["nomdelavariable "] accède à la valeur d’une variablede la session en coursunset($_SESSION["nomdelavariable "]) retire la variable

session_destroy() détruit la session en cours

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

Page 65: Technologie Web - PHP

INSA - ASI TechnoWeb : PHP 65/79

Sessions et authentification (2/5)Authentification

2 méthodes d’authentificationpar HTTP : en utilisant le système d’identification, et la capacité desnavigateurs d’ouvrir une fenêtre de connexion

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

heade r ( ’WWW−Auth en t i c a t e : Bas i c rea lm="connex ion " ’ ) ;heade r ( ’HTTP/1 .1 401 Unautho r i z ed ’ ) ;echo " 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 pas secho "<p>l o g i n : {$_SERVER[ ’PHP_AUTH_USER’]}</p>" ;echo "<p>password : {$_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. Lesinformations peuvent être stockées dans un fichier simple ou une BD.

Page 66: Technologie Web - PHP

INSA - ASI TechnoWeb : PHP 66/79

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

authentification-form.php

<!DOCTYPE html><html>

<head>< t i t l e>a u t h e n t i f i c a t i o n −form</ t i t l e><meta http−equ i v=" content−t ype " con t en t=" t e x t / html ; c h a r s e t=ut f −8" />

</head><body>

<form a c t i o n=" a u t h e n t i f i c a t i o n −page1 . php" method="POST"><l a b e l>Username : </ l a b e l> <inpu t type=" t e x t " name=" l o g i n " s i z e="20"/><l a b e l>Password : </ l a b e l> <inpu t type="password " name="password " s i z e

="20"/><inpu t type=" submit " name=" submit " v a l u e="Log in "/>

</ form></body>

</html>

Page 67: Technologie Web - PHP

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 html><html>

<head>< t i t l e>a u t h e n t i f i c a t i o n −page1</ t i t l e><meta http−equ i v=" content−t ype " con t en t=" t e x t / html ; c h a r s e t=ut f −8" /><meta http−equ i v="Content−Sty l e−Type" con t en t=" t e x t / c s s " />

</head><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> page 1 </h1><a h r e f=" a u t h e n t i f i c a t i o n −page2 . php">page2</a><a h r e f=" l ogou t . php">l ogou t</a>

</body></html>

authentification-page2.php

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

Page 68: Technologie Web - PHP

INSA - ASI TechnoWeb : PHP 68/79

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

login.inc.php

<?phps e s s i o n_ s t a r t ( ) ;i f ( i s s e t ($_POST[ " submit " ] ) ) {

// r e c h e r c h e de 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 nA u t o r i s e=" a l e x " ;$pa s swo rdAu to r i s e=" andre " ;$ u s e r I dA u t o r i s e="1" ;

i f ( $_POST[ ’ l o g i n ’ ] == $ l o g i nA u t o r i s e && $_POST[ ’ password ’ ] ==$pa s swo rdAu to r i s e )

$_SESSION [ " u s e r I d " ] = $ u s e r I dA u t o r i s e ;e l s e heade r ( " Loca t i on : . / a u t h e n t i f i c a t i o n −form . php" ) ;

}e l s e i f ( ! i s s e t ($_SESSION [ " u s e r I d " ] ) ) heade r ( " Loca t i on : . / a u t h e n t i f i c a t i o n −form

. php" ) ;?>

logout.php

<?phpr e q u i r e ( " l o g i n . i n c . php" ) ;s e s s i o n_de s t r o y ( ) ;heade r ( " Loca t i on : . / a u t h e n t i f i c a t i o n −form . php" ) ;?>

Page 69: Technologie Web - PHP

INSA - ASI TechnoWeb : PHP 69/79

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

L’extension SimpleXML (PHP5) fournit les fonctions permettantd’accéder au contenu d’un fichier XML :simplexml_element simplexml_load_file(string $fileName)de lire des éléments :simplexml_element->elementsimplexml_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()

Page 70: Technologie Web - PHP

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 >

Page 71: Technologie Web - PHP

INSA - ASI TechnoWeb : PHP 71/79

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

XML1.php

<!DOCTYPE html><html>

<head><meta http−equ i v=" content−t ype " con t en t=" t e x t / html ; c h a r s e t=ut f −8" />< t i t l e>Page PHP</ t i t l e>

</head><body>

<?php$xml = s imp l e xm l_ l oad_f i l e ( " . / data / 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]−> auteu r . " ) " ;echo "2nd l i v r e : " . $ l i v r e . "<br />" ;echo " l i s t e des t i t r e s :<br />" ;$ i = 1 ;f o r e a c h ( $xml−>l i v r e as $ c l e=>$va l ) {

echo $ c l e . " " . $ i . " : " . $va l−>t i t r e . "<br />" ;$ i++;

}?>

</body></html>

Page 72: Technologie Web - PHP

INSA - ASI TechnoWeb : PHP 72/79

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

XML2.php

<!DOCTYPE html><html>

<head><meta http−equ i v=" content−t ype " con t en t=" t e x t / html ; c h a r s e t=ut f −8" />< t i t l e>Page PHP</ t i t l e>

</head><body>

<?php$xml = s imp l e xm l_ l oad_f i l e ( " data / b i b . xml" ) ;$ i = 1 ;f o r e a c h ( $xml−> l i v r e as $ l i v r e ) {

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 ( ) as $a t t=>$va l ) {

echo " $a t t=$va l " ;}echo "<br />" ;$ i++;

}?>

</body></html>

Page 73: Technologie Web - PHP

INSA - ASI TechnoWeb : PHP 73/79

PHP et XML (5/6)Modification et enregistrement des données

Modification d’un fichier XMLLes 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 valeurd’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")

Page 74: Technologie Web - PHP

INSA - ASI TechnoWeb : PHP 74/79

PHP et XML (6/6)Modification et enregistrement des données

XML3.php

<!DOCTYPE html><html>

<head>< t i t l e>Page PHP</ t i t l e><meta http−equ i v=" content−t ype " con t en t=" t e x t / html ; c h a r s e t=ut f −8" /><meta http−equ i v="Content−Sty l e−Type" con t en t=" t e x t / c s s " />

</head><body>

<?php$xml = s imp l e xm l_ l oad_f i l e ( " data / b i b . xml" ) ;$xml−> l i v r e [1]−> t i t r e = "Nouveau t i t r e " ;$xml−>add ch i l d ( " l i v r e " ) ;$xml−>l i v r e [2]−>addCh i l d ( " t i t r e " , "Un 3ème" ) ;$xml−>l i v r e [2]−>addCh i l d ( " au t eu r " , "Aude Haibu" ) ;$xml−>l i v r e [2]−> addAt t r i b u t e ( " p r i x " , " 7 .50 " ) ;i f ( $xml−>asxml ( " data /bibMODIFIED . xml" ) )

echo " En r eg i s t r emen t r é a l i s é " ;?>

</body></html>

Page 75: Technologie Web - PHP

INSA - ASI TechnoWeb : PHP 75/79

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

PHP supporte un grand nombre de bases de donnéesOracle, Sybase, Ingres II, MySQL, PostgreSQL, SQLite (inclus dans PHP5), . . .

Caractéristiques de SQLiteSGBD embarqué dans la distribution de PHP5⇒ pas de processus indépendantléger et rapide (pas d’architecture client-serveur)SQLite implémente la norme SQL 92classes facilitant son interaction avec PHPBD en un et un seul fichierpas d’insertions concurrentes (base verrouillée)accès concurrents en lecture seule

Documentation officiellehttp://fr.php.net/manual/fr/ref.sqlite.phphttp://sqlite.org/

Page 76: Technologie Web - PHP

INSA - ASI TechnoWeb : PHP 76/79

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

Accès à la baseOuverture : $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 de l a BD ∗/$db = new PDO(" s q l i t e : . / data /DATABASE/ pe r s onne s . s q l i t e " ) ;/∗ e r r o r s −> ex 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−>exec ( "INSERT . . . ) ; // Requête SQL ( i n s e r t i o n )$ r e s u l t = $db−>query ( "SELECT . . . " ) ; // Requête SQL ( s é l e c t i o n )$db−>beg i nT r an s a c t i o n ( ) ;. . . // S é r i e de r e q u ê t e s SQL$db−>commit ( ) ;un se t ( $db ) ;

}ca tch ( PDOException $e ) {

// Tra i t ement des Exc ep t i on s}

?>

Page 77: Technologie Web - PHP

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) ;t r y{

$ r eque t e = "CREATE TABLE IF NOT EXISTS pe r sonne 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 : . / data /DATABASE/ pe r s onne s . s q l i t e " ) ;/∗ e r r o r s −> ex 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 qu e t e de c r e a t i o n ∗/$db−>query ( $ r eque t e ) ;un se t ( $db ) ;echo ’ Table c r é é e ’ ;

}ca tch ( PDOException $e ){

echo $e−>getMessage ( ) ;}

?></body>

Page 78: Technologie Web - PHP

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) ;t r y{

/∗ c r e a t i o n de l a BD ∗/$db = new PDO(" s q l i t e : . / data /DATABASE/ pe r s onne s . s q l i t e " ) ;/∗ e r r o r s −> ex 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) ;/∗ debut de t r a n s a c t i o n ∗/$db−>beg i nT r an s a c t i o n ( ) ;$db−>exec ( "INSERT INTO pe r sonne s

( ’ nom ’ )VALUES ( ’ John ’ ) ; " ) ;

$db−>exec ( "INSERT INTO pe r sonne s( ’ nom ’ )VALUES ( ’ Samantha ’ ) ; " ) ;

/∗ commit des i n s e r t i o n s ∗/$db−>commit ( ) ;un se t ( $db ) ;echo ’ I n s e r t i o n s r é a l i s é e s ’ ;

}ca tch ( Excep t i on $e ){ echo $e−>getMessage ( ) ; }

?></body>

Page 79: Technologie Web - PHP

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

t r y{

/∗ c r e a t i o n de l a BD ∗/$db = new PDO(" s q l i t e : . / data /DATABASE/ pe r s onne s . s q l i t e " ) ;/∗ e r r o r s −> ex 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 qu e t e de s e l e c t i o n ∗/$ r eque t e = "SELECT ∗ FROM pe r sonne s " ;$ r e s u l t = $db−>query ( $ r eque t e ) ;un se t ( $db ) ;f o r e a c h ( $ r e s u l t as $row ){

echo ’<p>’ . $row [ ’ i d ’ ] . ’ : ’ . $row [ ’nom ’ ] . ’</p>’ ;}

}ca tch ( Excep t i on $e ){

echo $e−>getMessage ( ) ;}

?></body>