Développement Web
Préparé par : Tarek BEN MENA
3ème année Science de l’Informatique
TBM 2014-15
page 1
Plan
1- Introduction Générale 2- Web Statique
HTML, XHTML, DOM CSS Javascript et Ajax 3- Web Dynamique
PHP PHP orienté-objet 4- Le modèle MVC
TBM 2014-15
page 2
Objectifs
Revisiter PHP et les fonctionnalités associées au langage
dans le cadre du développement Web Fonctionnalités de base du langage accès aux bases de données (PDO) la couche objet (classe, héritage, réflexion, ...)
Plan
Le langage PHP La couche Objet PHP Récupération des données des formulaires Accès aux bases de données Utilisation des sessions
TBM 2014-15
page 3
Le langage PHP
TBM 2014-15
page 4
Caractéristiques du langage
PHP (Hypertext Processor) est un langage de script
(interprété)
Créé en 1994 par Rasmus Lerdorf Simple d’utilisation Utilisé pour produire facilement des pages web
dynamiques
PHP est un langage impératif, disposant depuis la version
5 de fonctionnalités objet
Structure proche du langage C (if, for, while, ...) Absence de typage des variables les variables sont
identifiées par le symbole $ en préfixe
tableaux associatifs
TBM 2014-15
page 5
Débugage
Manuellement – Visuellement
echo print_r(array) affiche un tableau var_dump(var) tout type de variable
Niveau d’erreur
error_reporting(int level) pour indiquer le niveau d’erreur qui sera signalé
0 : aucune E_ALL : toutes les erreurs E_WARNING : les avertissements E_ERROR : les erreurs
Outils de débugage
Studio Zend (extension commerciale) DBG APD (advanced PHP Debugger) Xdebug (xdebug.org)
TBM 2014-15
page 6
Inclusion / Importation
Pour faire référence à des fonctions stockées dans d’autres fichiers on utilise l’une des instructions suivantes : include importer un fichier PHP sans générer d’erreur si le fichier
n’existe pas
require génère une erreur fatale an cas d’absence require_once importe une seule fois le fichier
TBM 2014-15
page 7
Constantes et Types de variable
Constante
On utilise le mot clé define afin de définir une constante
• Vérification du type de variable Il existe un nombre important de fonctions :
• Convertir
is_int(var) ! is_float(var) ! is_array(var) ! is_numeric(var) ! is_null(var) ! is_string(var) ! is_bool(var)
• strval(var) convertir en chaîne de caractères • intval(var) convertir en entier • floatval(var) convertir en réel • settype(var, type) fixer le type (boolean, integer, float, string, array)
TBM 2014-15
page 8
Manipulation de chaines de caractères
La chaîne de caractères (string) est limitée par la taille de
la mémoire du système. Elle est introduite par : le symbole double quote : "une chaine » ou le symbole simple quote : ’une autre chaine’
On peut accéder à chaque caractère grâce à son indice,
le 1er caractère étant en position 0.
Concaténation
On utilise le point ‘.’ Pour l’affichage avec echo on peut utilisé la virgule ‘,’ qui ne réalise
pas la concaténation
TBM 2014-15
page 9
Longueur, position
int strlen(string)!
donne la longueur en nombre de caractères de la chaîne, on peut
utiliser la fonction empty pour tester si une chaîne est vide
int strpos(string chn, string motif [, int pos])!
donne la position de la chaîne motif dans chn en commençant au
début de la chaîne ou à la position pos si elle est spécifiée. Retourne false si le motif n’est pas trouvé.
TBM 2014-15
page 10
Sous-chaîne
string substr(string str, int start [, int
length])! retourne la sous-chaîne qui commence à la position start et de
longueur maximale length.
cas de length négatif dans ce cas on ne retourne pas les length
derniers caractères
Ex : echo substr("abcdef",2,-1) // affiche cde
Suppression des caractères inutiles
string trim(string, [, charlist]) supprime des caractères (espaces) inutiles en début et fin de chaîne l’espace ’ ’ (ASCII 32), la tabulation (ASCII 9), line feed (ASCII 10), cariage return (ASCII 13), vertical tabulation (ASCII 11)
ltrim supprime en début de chaîne rtrim supprime en fin de chaîne
TBM 2014-15
page 11
Conversion
Majuscule / minuscule string strtolower(string) string strtoupper(string) string ucfirst(string) string lcfirst(string) string ucwords(string) explode et implode
explode décompose une chaîne suivant un motif de découpe en un
Publicité
tableau de chaînes
implode réalise l’inverse et construit une chaîne à partir de chaînes
dans un tableau
TBM 2014-15
page 12
Les tableaux associatifs
Définition
Le tableau est un mapping qui associe une clé et une valeur.
Par défaut la clé est une valeur entière qui correspond à l’indice dans le
tableau
On peut également utiliser des indices sous forme de chaîne de caractères Note : le tableau peut être vu également comme une liste, une pile ou
une table de hashage.
Exemple
Déclaration d’un tableau
affiche
TBM 2014-15
page 13
Remplir un tableau
TBM 2014-15
page 14
Parcours d’élément
array_push : ajout en fin de tableau array_pop : suppression en fin de tableau array_unshift : ajout en début de tableau array_shift : suppression en début de tableau
TBM 2014-15
page 15
Trier un tableau
TBM 2014-15
page 16
Somme et produit et recherche
TBM 2014-15
page 17
Fonctions tableau
Il existe de nombreuses autres fonctions qui agissent sur
les tableaux : array_keys : Retourne toutes les clés ou un ensemble des clés d'un
tableau
array_values : Retourne toutes les valeurs d'un tableau array_diff : Calcule la différence entre des tableaux array_intersect : Calcule l'intersection de tableaux array_merge : Fusionne plusieurs tableaux en un seul array_fill : Remplit un tableau avec une même valeur array_flip : Remplace les clés par les valeurs, et les valeurs par les clés array_chunk : Sépare un tableau en tableaux de taille inférieure array_reduce : Réduit itérativement un tableau
Et beaucoup d’ autres ici : http://fr.php.net/manual/fr/book.array.php
TBM 2014-15
page 18
Utilisation des expressions régulières
Définition (Expression régulière)
modèle permettant de décrire un ensemble de chaînes de caractères.
Exemple
[a − z]+ un ensemble de lettres [a − z]n,m au moins n et au plus m lettres [0 − 9]+ un ensemble de chiffres
Caractère spéciaux
| : ou ^ : début $ : fin ? : la lettre est facultative. Elle peut y être 0 ou 1 fois + : la lettre est obligatoire. Elle peut apparaître 1 ou plusieurs fois. * : la lettre est facultative. Elle peut apparaître 0, 1 ou plusieurs fois. {i, j} : ici, on a plusieurs possibilités. On peut avoir la lettre de i à j fois.
TBM 2014-15
page 19
Exemples
TBM 2014-15
page 20
Expression régulière : Exemple
int preg_match ( string $pattern , string $subject [, array
&$matches]) Pattern : Le masque à chercher, sous la forme d'une chaîne de
caractères.
Subject : La chaîne d'entrée. matches : Si matches est fourni, il sera rempli par les résultats de la recherche. $matches[0] contiendra le texte qui satisfait le masque complet, $matches[1] contiendra le texte qui satisfait la première parenthèse capturante, etc.
TBM 2014-15
page 21
Gérer les exceptions
En PHP, on peut dorénavant gérer les exceptions comme
en C++ :
TBM 2014-15
page 22
La couche Objet
TBM 2014-15
page 23
La couche objet
On reprend les mêmes principes que ceux utilisés en
Java
Technologies
la class permet d’encapsuler les données et méthodes on définit l’accès grâce aux mots clés : public, protected et private on peut définir des données static pas d’héritage multiple : extends par défaut les méthodes sont surchargées (pas de mot-clé virtual)
TBM 2014-15
page 24
Exemple
TBM 2014-15
page 25
classe abstraite, interface
Différences entre classe abstraite et interface :
une classe abstraite permet de définir
des attributs des méthodes (prototype + corps) elle n’est pas instanciable
une interface ne définit que des méthodes (prototype)
TBM 2014-15
page 26
Héritage
Tout comme en Java :
En PHP Objet, on ne peut pas écrire :
class C extends A,B
car extends n’accepte qu’une seule classe héritée
TBM 2014-15
page 27
Héritage
Solution
class A extends O !
!
Publicité
!implements iA!
class B extends O!
!
!implements iBclass !
class C extends O !
!
!implements iA, iB!
TBM 2014-15
page 28
Attributs
Les données membres sont référencées par le mot-clé
$this-> à l’intérieur de la classe.
TBM 2014-15
page 29
Attributs statiques
Les données statiques sont référencées par le mot-clé
self::
TBM 2014-15
page 30
Méthodes
les méthodes sont introduites par le mot clé function elles peuvent être précédées d’un des qualificatifs de portée : public (par défaut), protected ou private.
TBM 2014-15
page 31
Méthode magique
Il s’agit de méthodes utilisées par PHP qui peuvent être
redéfinies : __construct : appel constructeur __destruct : appel destructeur __call accès à des méthodes inaccessibles __callStatic accès à des méthodes inaccessibles dans un contexte
statique
__get accès en lecture à des données membres inaccessibles __set accès en écriture à des données membres inaccessibles __isset : appel de isset sur des données inaccessibles __unset appel de unset sur des données inaccessibles __sleep appel avant sérialisation __wakeup appel avant récupération des données sérialisées __toString conversion en chaîne de caractères __set_state appel pour les classes exportées (var export) __clone crée une copie de l’objet
TBM 2014-15
page 32
Exemple
TBM 2014-15
page 33
Constructeur et destructeur
Constructeur et destructeur sont introduits par des
méthodes spécifiques :
Attention :
Dans les versions antérieures de PHP, le constructeur portait le nom de
la classe et il n’y avait pas de destructeur.
Construire une instance avec new
TBM 2014-15
page 34
Héritage
On utilise le mot clé extends pour déclarer l’héritage et
parent:: pour faire référence à la classe mère :
TBM 2014-15
page 35
Instanceof et is_subclass_of
On utilise le mot clé instanceof afin de vérifier si une variable est une instance de la classe spécifiée :
On utilise le mot clé is_subclass_of afin de vérifier si une
variable est une instance d’une sous-classe :
TBM 2014-15
page 36
Réflexion (Reflection)
Définition (Réflexion)
Capacité de pouvoir connaître ou examiner le contenu d’un objet :
Données membres (attributs) Méthodes
Depuis PHP 5, on dispose de classes et interfaces dédiées à la réflexion.
Réflexion simplifiée
string get_class(object) permet d’obtenir la classe d’un objet string get_parent_class(object) retourne le nom de classe
parent de l’objet
array get_class_vars(object) retourne les valeurs des attributs
d’une classe
array get_object_vars(object) récupère les attributs non
statiques accessibles de l’objet
array get_class methods(object) retourne les noms des
méthodes d’une classe
TBM 2014-15
page 37
Exemple get_object_vars
On note que l’utilisation de get_object_vars en dehors de la classe ne permet pas d’avoir accès aux données membres privées ou protégées
TBM 2014-15
page 38
Reflection avec ReflectionClass
TBM 2014-15
page 39
Obtenir les données d’un Formulaire
TBM 2014-15
page 40
Méthode POST et GET
On récupère les données du formulaire par $_POST s’il s’agit d’un passage au format POST $_GET s’il s’agit d’un passage au format GET
TBM 2014-15
page 41
Accès aux Bases de Données
TBM 2014-15
page 42
MySQL - ouverture de la connexion
On commence par établir la connexion avec le serveur
MySQL : En php 4
La variable link contient une ressource qui sera utilisée
pour récupérer certaines informations
TBM 2014-15
page 43
Publicité
MySQL
Création d’une base de données
Sélection d’un base de données
TBM 2014-15
page 44
MySQL – Insertion / Suppression d’un enregistrement
On effectue une requête d’insertion et on récupère
l’identifiant du nouvel enregistrement :
On effectue une requête de suppression grâce à l’identifiant :
TBM 2014-15
page 45
MySQL modifier un enregistrement
On effectue une requête de modification grâce à
l’identifiant :
TBM 2014-15
page 46
MySQL – sélection des enregistrements
On effectue une requête de sélection des auteurs dont le
nom contient un K :
TBM 2014-15
page 47
PDO
TBM 2014-15
page 48
La couche PDO
Définition
PDO – PHP Data Objects (PHP 5.1) PDO fournit une interface d’abstraction à l’accès de données utilisation des mêmes fonctions pour exécuter des requêtes ou récupérer les données quelque soit la base de données utilisée
Les SGBD supportés MySQL 3, 4, 5 (mysql) PostgreSQL (pg) SQLite 2, 3 (sqlite, SQLite3) ODBC Informix (ifx) Oracle (oci) Firebird/Interbase (ibase) FreeTDS/Sybase/MSSQL (sybase) …
TBM 2014-15
page 49
PDO - Ouverture de la base
MySQL
PostgreSQL
Gestion des erreurs
On dispose de deux fonctions pour récupérer les informations suite à
une erreur :
errorCode() retourne un identifiant alphanumérique de cinq caractères
défini dans le standard ANSI SQL
errorInfo() retourne un tableau contenant des informations sur l’erreur
survenue lors de la dernière opération exécutée
TBM 2014-15
page 50
PDO - Sélection
+ieurs possibilités pour la récupération des données :
tableau avec clés numériques tableau avec clés alphanumériques suivant nom du champ de la table deux premières possibilités au format objet
Traitement avec clé numérique
TBM 2014-15
page 51
PDO - Sélection
Traitement sur champ
Traitement sur indice et champ
TBM 2014-15
page 52
PDO-Sélection
Traitement sur objet
TBM 2014-15
page 53
PDO-Sélection
Traitement sur objet
TBM 2014-15
page 54
PDO-Sélection
Insertion dans un Objet
TBM 2014-15
page 55
PDO – sélection : fetchAll
La fonction fetchAll permet de récupérer tous les
enregistrements.
TBM 2014-15
page 56
PDO – Prepared Statement
offre la possibilité d’insérer des données en cascade.
TBM 2014-15
page 57
Session
TBM 2014-15
page 58
Session
Définition (Session)
une session est un espace de stockage permanent pendant la durée
d’une connexion.
elle permet de sauvegarder des données et de pouvoir y accéder
quelque soit la page web.
pour accéder aux variables de la session ou pour les enregistrer, on
utilise la variable globale $_SESSION.
TBM 2014-15
page 59
Utilisation des variable Session
TBM 2014-15
page 60