232
Création de pages Web Création de pages Web Dynamiques Dynamiques Côté serveur (en PHP) Côté serveur (en PHP) Djamel-Abdelhak SERIAI Djamel-Abdelhak SERIAI Email : Email : seriai seriai @ @ ensm ensm -douai. -douai. fr fr Web : Web : http://csl.ensm-douai.fr/seriai http://csl.ensm-douai.fr/seriai

1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : [email protected] [email protected] Web :

Embed Size (px)

Citation preview

Page 1: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

1

Création de pages Web DynamiquesCréation de pages Web DynamiquesCôté serveur (en PHP)Côté serveur (en PHP)

Djamel-Abdelhak SERIAIDjamel-Abdelhak SERIAI

Email : Email : seriaiseriai@@ensmensm-douai.-douai.frfr

Web :Web : http://csl.ensm-douai.fr/seriaihttp://csl.ensm-douai.fr/seriai

Page 2: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

2

Objectif du coursObjectif du cours

Maîtriser les principes de la création de pages Maîtriser les principes de la création de pages web dynamiquesweb dynamiques Le Quoi ?Le Quoi ? Le Pourquoi ? Le Pourquoi ?

Maîtriser le langage PHPMaîtriser le langage PHP PrincipePrincipe SyntaxeSyntaxe DéveloppementDéveloppement

Réalisation de développement PHPRéalisation de développement PHP TPsTPs Mini-ProjetMini-Projet

Page 3: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

3

Organisation du cours

Organisation du cours

PHP PHP PHP PHP PHP

Cours

TP

Mini-Projet

Mini-Projet en PHP

29/11/2002 13/11/2002 19/12/2002 20/12/2002

Page 4: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

4

Introduction(1)Introduction(1)

Internet et les pages webInternet et les pages web

Internet : utilisation informative, commercial ou ludiqueInternet : utilisation informative, commercial ou ludique

HTML : conception de pages destinées à être publiées sur InternetHTML : conception de pages destinées à être publiées sur Internet

Page html : contient le texte à afficher et des instructions de mise Page html : contient le texte à afficher et des instructions de mise en pageen page

HTML est un langage de description de page et non pas un langage HTML est un langage de description de page et non pas un langage de programmationde programmation

pas d’instructions de calcul ou pour faire des traitements suivant des pas d’instructions de calcul ou pour faire des traitements suivant des conditionsconditions

Des sites de plus en plus riches en informationsDes sites de plus en plus riches en informations Nécessité croissante d’améliorer le contenu de sitesNécessité croissante d’améliorer le contenu de sites Mises à jour manuelles trop complexes Mises à jour manuelles trop complexes

– Pourquoi ne pas automatiser les mises à jour ?

Page 5: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

5

Introduction(2)Introduction(2)

Pages web statiques : fonctionnementPages web statiques : fonctionnement

Leurs contenus ne changent ni en fonction du demandeur ni en Leurs contenus ne changent ni en fonction du demandeur ni en fonction d’autres paramètres éventuellement inclus dans la requête fonction d’autres paramètres éventuellement inclus dans la requête adressée au serveur. Toujours le même résultat.adressée au serveur. Toujours le même résultat.

Rôle du serveur : localiser le fichier correspondant au document Rôle du serveur : localiser le fichier correspondant au document demandé et répond au navigateur en lui envoyant le contenu de demandé et répond au navigateur en lui envoyant le contenu de ce fichierce fichier

Pages web statiques : limitesPages web statiques : limites

Besoin de réponses spécifiques : passage de pages statiques à Besoin de réponses spécifiques : passage de pages statiques à pages dynamiquespages dynamiques

Page 6: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

6

Introduction(3)Introduction(3)

Tous les documents sont dans le serveur

Requête pour un fichier html

Document réclamé .html

Serveur

Page 7: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

7

Introduction(3)Introduction(3)

Les langages de script : les origines Deux types de programmation : les langages séquentiels et

les langages événementiels

Langages séquentiels : exécuter une série d’instructions, les unes à la suite des autres, jusqu’à ce que le programme rencontre une instruction finale

Langages événementielle : réagir à des évènements. Apparus avec les interfaces graphiques

Les langages de scripts sont des interfaces utilisées pour appeler d’autres programmes et capables de traduire les requêtes en un contenu exécutables.

L’interface CGI (Common Gateway Interface)

Le langage Perl

Page 8: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

8

Introduction(4)Introduction(4)

Les langages de script : Définition Un langage de script est :

un programme stocké sur un serveur et exécuté par celui-ci,

qui passe en revue les lignes d’un fichier source pour en modifier une partie du contenu,

avant de renvoyer à l’appelant ( un navigateur par exemple) le résultat du traitement.

La tâche d’interprétation des ordres à exécuter est déléguée à un composant, souvent appelé moteur,

installé sur le serveur,

qui est doté d’une API et d’un fonctionnement identique quel que soit la plate-forme utilisée pour gérer le serveur

Page 9: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

9

Introduction(5)Introduction(5)

Des pages web statiques aux pages web dynamiques

Pourquoi faire manuellement ce qu’on peut automatiser ?

La génération de contenu dynamique requiert du serveur qu’il traite les requêtes lors de l’exécution, afin de construire une réponse au cas par cas.

L’utilisation de langages particuliers et si besoin d’une base de données permet d’automatiser les mises à jour.

Pages web dynamiques avec PERL, C, JSP, ASP, PHP, etc.

Avantages

Des mises à jour automatiques– Des tri, des ajouts et des suppressions automatiques

Une maintenance facilitée

Des pages web plus utiles et plus conséquentes

Page 10: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

10

Introduction(6)Introduction(6)

Le programme utilise l’information brute d’une base de données

Pour composer une page HTML ad hoc

Qui sera envoyée au requérant

Requête pour un fichier .asp ou. php

Document réclamé .html

Page 11: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

11

Introduction(7)Introduction(7)

Le réseau matériel d’Internet

TCP/IP

HTTP

HTML

CSS – Feuilles de style

DOM

Javascript ASP JSP PHP

WEB

Languages de programmation des serveurs Web

Page 12: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

12

Introduction(8)Introduction(8)

Pages web dynamiques côté serveur ou côté Pages web dynamiques côté serveur ou côté client client Langage côté client :Langage côté client : traité par la machine qui accueille le traité par la machine qui accueille le

logiciel de navigation.logiciel de navigation.

Ses résultats peuvent varier en fonction de plate-forme utilisée. Ses résultats peuvent varier en fonction de plate-forme utilisée. Un programme en JavaScript pourra fonctionner sous Netscape Un programme en JavaScript pourra fonctionner sous Netscape et poser problème sous Internet explorer. et poser problème sous Internet explorer.

Les résultats peuvent être différents suivant la machine (PC, Les résultats peuvent être différents suivant la machine (PC, Mac)Mac)

Nécessité de tests importants Nécessité de tests importants

Ne permettent pas de masquer les sources du programmeNe permettent pas de masquer les sources du programme

Sont indépendants du serveur et donc de l’hébergent Sont indépendants du serveur et donc de l’hébergent

Page 13: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

13

Introduction(9)Introduction(9)

Pages web dynamiques côté serveur ou côté clientPages web dynamiques côté serveur ou côté client Langage côté serveur : le travail d’interprétation du programme Langage côté serveur : le travail d’interprétation du programme

est réalisé par le serveurest réalisé par le serveur

Sont indépendants de la machine et du logiciel de navigation utilisés Sont indépendants de la machine et du logiciel de navigation utilisés pour la consultation.pour la consultation.

Sont compatibles avec tous les navigateurs et Toutes leurs versions.Sont compatibles avec tous les navigateurs et Toutes leurs versions.

Permettent de masquer les sources de ses programmesPermettent de masquer les sources de ses programmes

Nécessitent de recharger la page chaque fois que celle-ci est Nécessitent de recharger la page chaque fois que celle-ci est modifiée. modifiée.

Pages côté serveur et côté client : Pages côté serveur et côté client :

Script côté client pour des calculs et des traitement simplesScript côté client pour des calculs et des traitement simples

Scripts côté serveur pour des calculs, des traitements et des mises à Scripts côté serveur pour des calculs, des traitements et des mises à jours plus conséquentsjours plus conséquents

Page 14: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

14

Introduction(10)Introduction(10)

Les langages de création de pages web dynamiques Les langages de création de pages web dynamiques côté serveurcôté serveur Les CGI

Sont des composants exécutables (fichiers .exe ou .dll) qui produisent sur le serveur des contenus html à envoyer aux clients.

Les CGI sont compilés. Ils sont rapides mais fortement liés à la plate-forme sur laquelle ils tournent.

PERL PERL – Surcharge rapide du serveur par la création de plusieurs processus– Employé sur de nombreux serveurs. Il tourne sur de nombreuses

plateformes : Unix, Linux, Windows, Mac

– Prévu à l'origine pour la manipulation de chaînes de caractères, il est rapidement devenu un véritable langage orienté objet.

– Abord difficile et faible lisibilité.

Page 15: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

15

Introduction(11)Introduction(11)

Les langages de création de pages web Les langages de création de pages web dynamiques côté serveurdynamiques côté serveur

ASPASP

Basé sur des scripts écrits en VBscript, Jscript ou Basé sur des scripts écrits en VBscript, Jscript ou Javascript. Javascript.

Largement répandu,Largement répandu,

Facilité de mise en œuvreFacilité de mise en œuvre

Évolutif et performantÉvolutif et performant Plusieurs outils de développement intégrés (Macromédia Plusieurs outils de développement intégrés (Macromédia

Ultradev, Microsoft Visual Interdev). Ultradev, Microsoft Visual Interdev).

Intimement liée à l'environnement Windows NT/2000 et Intimement liée à l'environnement Windows NT/2000 et au serveur IIS (Internet Information Server) de Microsoft.au serveur IIS (Internet Information Server) de Microsoft.

– L’environnement Microsoft est nécessaireL’environnement Microsoft est nécessaire

Page 16: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

16

Introduction(12)Introduction(12)

Les langages de création de pages web Les langages de création de pages web dynamiques côté serveurdynamiques côté serveur

JSPJSP

Constitue la réponse de Sun aux ASP de MicrosoftConstitue la réponse de Sun aux ASP de Microsoft

Utilisation de JavaUtilisation de Java

– Au départ simple extension du langage JavaAu départ simple extension du langage Java– Est devenu un véritable langage de développement webEst devenu un véritable langage de développement web

Possède une interface de qualitéPossède une interface de qualité

Lenteur relativeLenteur relative

Page 17: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

17

Introduction(13)Introduction(13)

Les langages de création de page web Les langages de création de page web dynamiques côté serveurdynamiques côté serveur PHPPHP

Connaît un succès toujours croissant sur le Web et se Connaît un succès toujours croissant sur le Web et se positionne comme un rival important pour ASPpositionne comme un rival important pour ASP

L'environnement Linux est sa plateforme de prédilectionL'environnement Linux est sa plateforme de prédilection

Combiné avec le serveur Web Apache et la base de Combiné avec le serveur Web Apache et la base de données MySQL, PHP offre une solution particulièrement données MySQL, PHP offre une solution particulièrement robuste, stable et efficacerobuste, stable et efficace

Gratuité : Tous les logiciels sont issus du monde des Gratuité : Tous les logiciels sont issus du monde des logiciels libres (Open Source). logiciels libres (Open Source).

Page 18: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

18

PHP : de A à ZPHP : de A à Z

Page 19: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

19

Un peu d’histoireUn peu d’histoire

Histoire et Origine PHP : Hypertext PreProcessor

Première version de PHP a été mis au point au début d'automne par Rasmus Lerdorf en 1994

Version appelée à l'époque Personal Home Pages

Pour conserver la trace des utilisateurs venant consulter son CV sur son site, grâce à l'accès à une base de données par l'intermédiaire de requêtes SQL

La version 3.0 de PHP fut disponible le 6 juin 1998

A la fin de l'année 1999, une version bêta de PHP, baptisée PHP4 est apparue

En 2001 cinq millions de domaines utilisent PHP trois fois plus que l’année 2000

Page 20: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

20

PHP : C’est QUOI ?PHP : C’est QUOI ?

Définition Un langage de scripts permettant la création d’applications Web

Indépendant de la plate-forme utilisée puisqu’il est exécuté côté serveur et non côté client.

La syntaxe du langage provient de celles du langage C, du Perl et de Java.

Ses principaux atouts sont:

La gratuité et la disponibilité du code source (PHP4 est distribué sous licence GNU GPL)

La simplicité d'écriture de scripts La possibilité d'inclure le script PHP au sein d'une page HTML La simplicité d'interfaçage avec des bases de données L'intégration au sein de nombreux serveurs web (Apache,

Microsoft IIS, ...)

Page 21: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

21

Intégration PHP et HTML (1)Intégration PHP et HTML (1)

Principe

Les scripts PHP sont généralement intégrés dans le code d’un document HTML

L’intégration nécessite l’utilisation de balises

avec le style xml : <? ligne de code PHP  ?>

Avec le style php: <?php ligne de code PHP  ?>

avec le style JavaScript : <script language=«php»> ligne de code PHP

</script>

avec le style des ASP : : <% ligne de code PHP %>

Page 22: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

22

Intégration PHP et HTML (2)Intégration PHP et HTML (2)

Forme d’une page PHP Intégration directe

< ?php//ligne de code PHP?>

<html><head> <title> Mon script PHP </title> </head><body>//ligne de code HTML

< ?php//ligne de code PHP?>//ligne de code HTML….</body> </html>

Page 23: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

23

Intégration PHP et HTML (3)Intégration PHP et HTML (3)

Forme d’une page PHP Inclure un fichier PHP dans un fichier HTML : include()

Fichier Prinipal

<html><head><title> Fichier d’appel </title></head><body><?php$salut = “ BONJOUR” ;include “information.inc” ;?></body></html>

Fichier à inclure : information.inc

<html><head><title> fichier .inc </title></head><body> <?php$chaine=$salut.” , C’est PHP” ;echo « <table border=\” 3\” <tr> <td width = \” 100%\”> <h2> $chaine</h2> </td> </tr></table>”;?></body></html>

Page 24: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

24

Intégration PHP et HTML (4)Intégration PHP et HTML (4)

Envoi du code HTML par PHPEnvoi du code HTML par PHP

La fonction echo : La fonction echo : echo Expression; echo "Chaine de caracteres"; echo (1+2)*87;

La fonction printLa fonction print : : print(expression); print("Chaine de caracteres"); print ((1+2)*87);

La fonction printf :La fonction printf : printf (chaîne formatée); printf ("Le périmètre du cercle est %d",

$Perimetre);

Page 25: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

25

Plan du coursPlan du cours

Partie I : Les notions de base Introduction2 PHP : Syntaxe de base3 La gestion des fichiers avec PHP4 Autres fonctions PHP

Partie II : L’interactivité5 PHP et les formulaires6 Les cookies7 Interfaçage avec une base de données8 Les sessions9 La gestion des connexions aux sites web10 Les en-têtes HTTP11 Fonction Mail et Imap

Partie III : Un peu plus loin12 JavaScript dans PHP13 Navigation entre pages14 Parser un document XML avec PHP 15 La gestion des erreurs

Page 26: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

26

Le langage PHPLe langage PHPPARTIE 1 : Syntaxe de basePARTIE 1 : Syntaxe de base

Page 27: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

27

PHP : Syntaxe de basePHP : Syntaxe de base

2.12.1 IntroductionIntroduction

2.22.2 Les constantes et les variablesLes constantes et les variables

2.32.3 Les types de donnéesLes types de données

2.42.4 Les tableauxLes tableaux

2.52.5 Les chaînes de caractèresLes chaînes de caractères

2.62.6 Les opérateursLes opérateurs

2.72.7 Les instructions conditionnellesLes instructions conditionnelles

2.82.8 Les fonctionsLes fonctions

2.92.9 Les classes et les objetsLes classes et les objets

Page 28: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

28

Syntaxe de base : Syntaxe de base : IntroductionIntroduction

Typologie

Toute instruction se termine par un point-virgule

Sensible à la casse Sauf par rapport aux fonctions

Les commentaires

/* Voici un commentaire! */

// un commentaire sur une ligne

Page 29: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

29

Syntaxe de base :Syntaxe de base : Les constantes et les Les constantes et les variables variables (1)(1)

Les constantes

Define("nom_constante", valeur_constante ) define (“ma_const”, “Vive PHP4”) ; define (“an”, 2002) ;

Les constantes prédéfinies NULL _FILE_ _LINE_ PHP_VERSION PHP_OS TRUE et FALSE E_ERROR

Page 30: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

30

Syntaxe de base :Syntaxe de base : Les constantes et les Les constantes et les variables variables (2)(2)

Les variables Principe

Commencent par le caractère $ N'ont pas besoin d'être déclarées

Fonctions de vérifications de variables

Doubleval(), empty(), gettype(), intval(), is_array(), is_bool(), is_double(), is_float(), is_int(), is_integer,

is_long(), is_object(), is_real(), is_numeric(), is_string() Isset(), settype(), strval(), unset()

Affectation par valeur et par référence Affectation par valeur : $b=$a Affectation par (référence) variable : $c = &$a

Page 31: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

31

Syntaxe de base :Syntaxe de base : Les constantes et les Les constantes et les variables(3)variables(3)

Les variables Visibilité des variables

Variable locale – Visible uniquement à l’intérieur d’un contexte d’utilisation

Variable globale– Visible dans tout le script– Utilisation de l’instruction global() dans des contextes locales

<?$var = 100;function test(){global $var;return $var;}$resultat = test();if ($resultat) echo « $resultat »; else echo « erreur »;?>

Page 32: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

32

Syntaxe de base :Syntaxe de base : Les constantes et les Les constantes et les variables(4)variables(4)

Les variables

Visibilité des variables L’accès aux variables globales par le tableau associatif

$GLOBALS

<?$var = 100;function test(){return $GLOBALS[var];}$resultat = test();echo « $resultat »;?>

Page 33: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

33

Syntaxe de base :Syntaxe de base : Les constantes et les Les constantes et les variables(5)variables(5)

Les variables Variables statiques

Les variables déclarées locales et statiques peuvent garder leurs valeurs lors du retour aux contexte locale

Utilisation du mot-clé static<?function test(){static $var=0;++$var;return $var;}$resultat1 = test();$resultst2=test(); echo « $resultat2 »; // affiche 2 avec static $var et 1 sinon?>

Page 34: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

34

Syntaxe de base :Syntaxe de base : Les constantes et les Les constantes et les variables(6)variables(6)

Les variables Les variables dynamiques Les variables dynamiques

Permettent d'affecter un nom différent à une autre variablePermettent d'affecter un nom différent à une autre variable

$nom_variable = 'nom_var'; $$nom_variable = valeur; // équivaut à $nom_var = valeur;

Les variables tableaux sont également capables de supporter les noms Les variables tableaux sont également capables de supporter les noms dynamiquesdynamiques

$nom_variable = array("val0", "val1", ...,"valN"); ${$nom_variable[0]} = valeur; $val0 = valeur; $nom_variable = "nom_var"; ${$nom_variable}[0] = valeur; $nom_var[0] = valeur;

Les accolades servent aussi à éviter toute confusion lors du rendu Les accolades servent aussi à éviter toute confusion lors du rendu d'une variable dynamiqued'une variable dynamique

echo "Nom : $nom_variable - Valeur : ${$nom_variable}"; // équivaut à echo "Nom : $nom_variable - Valeur : $nom_var";

Page 35: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

35

Syntaxe de base :Syntaxe de base : Les constantes et les Les constantes et les variables variables (7)(7)

Les variables Variables prédéfiniesVariables prédéfinies

Les variables d'environnement dépendant du clientLes variables d'environnement dépendant du client VariableVariable DescriptionDescription

$HTTP_HOST$HTTP_HOST Nom d'hôte de la machine du client Nom d'hôte de la machine du client (associée à l'adresse IP)(associée à l'adresse IP)

$HTTP_REFERER$HTTP_REFERER URL de la page qui a appelé le script URL de la page qui a appelé le script PHPPHP

$HTTP_ACCEPT_LANGUAGE$HTTP_ACCEPT_LANGUAGE Langue utilisée par le serveur (par Langue utilisée par le serveur (par défaut en-us)défaut en-us)

$HTTP_ACCEPT$HTTP_ACCEPT Types MIME reconnus par le serveur Types MIME reconnus par le serveur (séparés par des virgules)(séparés par des virgules)

$CONTENT_TYPE$CONTENT_TYPE Type de données contenu présent dans Type de données contenu présent dans le corps de la requête. Il s'agit du type le corps de la requête. Il s'agit du type MIME des donnéesMIME des données

$REMOTE_ADDR$REMOTE_ADDR L'adresse IP du client appelant le script L'adresse IP du client appelant le script CGICGI

$PHP_SELF$PHP_SELF Nom du script PHPNom du script PHP

Page 36: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

36

Syntaxe de base :Syntaxe de base : Les constantes et les Les constantes et les variables variables (8)(8)

Les variables Variables prédéfiniesVariables prédéfinies

Les variables d'environnement dépendant du Les variables d'environnement dépendant du serveurserveur

VariableVariable DescriptionDescription

$SERVER_NAME$SERVER_NAME Le nom du serveurLe nom du serveur

$HTTP_HOST$HTTP_HOST Nom de domaine du serveurNom de domaine du serveur

$SERVER_ADDR$SERVER_ADDR Adresse IP du serveurAdresse IP du serveur

$SERVER_PROTOCOL$SERVER_PROTOCOL Nom et version du protocole Nom et version du protocole utilisé pour envoyer la requête utilisé pour envoyer la requête au script PHPau script PHP

$DATE_GMT$DATE_GMT Date actuelle au format GMTDate actuelle au format GMT

$DATE_LOCAL$DATE_LOCAL Date actuelle au format localDate actuelle au format local

$DOCUMENT_ROOT$DOCUMENT_ROOT Racine des documents Web Racine des documents Web sur le sur le

serveurserveur

Page 37: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

37

Syntaxe de base :Syntaxe de base : Les constantes et les variables Les constantes et les variables (9)(9)

Les variables

Variables prédéfiniesVariables prédéfinies

Affichage des variables d'environnementAffichage des variables d'environnement– la fonction phpinfo()

• <? phpinfo(); ?>• echo phpinfo(constante);

INFO_CONFIGURATION affiche les informations de configuration.INFO_CREDITS affiche les informations sur les auteurs du module PHPINFO_ENVIRONMENT affiche les variables d'environnement.INFO_GENERAL affiche les informations sur la version de PHP.INFO_LICENSE affiche la licence GNU PublicINFO_MODULES affiche les informations sur les modules associés à

PHPINFO_VARIABLES affiche les variables PHP prédéfinies.

– la fonction getenv() • <? echo getenv("HTTP_USER_AGENT");?>

Page 38: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

38

Syntaxe de base :Syntaxe de base : Les types de donnéesLes types de données (1) (1)

Principe

Pas besoin d’affecter un type à une variable avant de l’utiliser

La même variable peut changer de type en cours de script

Les variables issues de l’envoi des données d’un formulaire sont du type string

Les différents types de données Les entiers : le type Integer

Les flottants : le type Double

 $decim1 = 52.21 ; // notation décimal

 $decim2 = 1.25E4 ;//=1.25 * 104 notation scientifique (exponentielle)  $decim3 = log(52) ; //affectation de logarithme de 52 à $decim3

Page 39: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

39

Syntaxe de base :Syntaxe de base : Les types de donnéesLes types de données (2) (2)

Les différents types de données Les tableaux : le typeLes tableaux : le type array

Les chaînes de caractères : le type string

Délimitée par des guillemets simple (‘) ou double (“)

– les guillemets simples : avec echo() ou print(), : les variables dans la chaîne ne seront pas évaluées 

– des guillemets doubles, les variables seront évaluées

Les caractères $, ‘, “, \, … sont précédés du caractère anti slash (\)

$prenom =’Pierre’ ; //ou $prenom =“Pierre”echo ‘Bonjour $prenom’ ; print (‘Bonjour $prenom’) ;$prenom = ‘Pierre’ ; // ou $prenom = “Pierre”echo “Bonjour $prenom” ; print (“Bonjour $prenom”) ;

Les objets Les objets

Page 40: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

40

Syntaxe de base :Syntaxe de base : Les types de donnéesLes types de données (3) (3)

Le transtypage La fonction settype() permet de convertir le type auquel

appartient une variable

<? $nbre=10;Settype($nbre, " double ");Echo " la variable $nbre est de type " , gettype($nbre); ?>

Transtypage explicite : le castTranstypage explicite : le cast ((int), (integer) ; (real), (double), (float); (string); (array); (object)int), (integer) ; (real), (double), (float); (string); (array); (object)

<? $var=" 100 FRF ";Echo " pour commencer, le type de la variable est $var,

gettype($var);$var =(double) $var;Echo <br> Après le cast, le type de la variable est $var ",

gettype($var);Echo "<br> et a la valeur $var "; ?>

Détermination du type de donnéesDétermination du type de données Gettype(), Is_long(), Is_double(), Is_string(), Is_array(), Is_object(), Is_bool()Gettype(), Is_long(), Is_double(), Is_string(), Is_array(), Is_object(), Is_bool()

Page 41: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

41

Syntaxe de base :Syntaxe de base : Les tableauxLes tableaux(1)(1)

PrincipePrincipe

Création à l’aide de la fonction Création à l’aide de la fonction array()array()

Uniquement des tableaux à une dimensionUniquement des tableaux à une dimension

Les éléments d’un tableau peuvent pointer vers d’autres Les éléments d’un tableau peuvent pointer vers d’autres tableauxtableaux

Les éléments d’un tableau peuvent appartenir à des types Les éléments d’un tableau peuvent appartenir à des types distinctsdistincts

L’index d’un tableau en PHP commence de 0L’index d’un tableau en PHP commence de 0

Pas de limites supérieures pour les tableauxPas de limites supérieures pour les tableaux

La fonction La fonction count()count() pour avoir le nombre d’éléments d’un pour avoir le nombre d’éléments d’un tableautableau

Page 42: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

42

Syntaxe de base :Syntaxe de base : Les tableaux(2)Les tableaux(2)

Les tableaux indicés et les tableaux Les tableaux indicés et les tableaux associatifsassociatifs

Tableau indicéTableau indicé– Accéder aux éléments par l’intermédiaire de numérosAccéder aux éléments par l’intermédiaire de numéros

$tableau[indice] = valeur; $tableau[indice] = valeur; $jour[3] = "Mercredi"; $jour[3] = "Mercredi"; $note[0] = 20;$note[0] = 20;

$tableau = array(valeur0, valeur1,..., valeurN); $tableau = array(valeur0, valeur1,..., valeurN); $jour = array("Dimanche", "Lundi", "Mardi", "Mercredi", "Jeudi", $jour = array("Dimanche", "Lundi", "Mardi", "Mercredi", "Jeudi",

"Vendredi", "Samedi"); "Vendredi", "Samedi"); $note = array(20, 15, 12.6, 17, 10, 20, 11, 18, 19); $note = array(20, 15, 12.6, 17, 10, 20, 11, 18, 19);

$variable = $tableau[indice]; $variable = $tableau[indice]; $JJ = $jour[6]; // affecte "Samedi" à $JJ $JJ = $jour[6]; // affecte "Samedi" à $JJ echo $note[1] + $note[5];echo $note[1] + $note[5];

Page 43: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

43

Syntaxe de base :Syntaxe de base : Les tableaux(3)Les tableaux(3)

Les tableaux indicés et les tableaux associatifsLes tableaux indicés et les tableaux associatifs Tableau associatifTableau associatif (ou table de hachage) (ou table de hachage)

– Les éléments sont référencés par des chaînes de Les éléments sont référencés par des chaînes de caractères associatives en guise de nom: la clé caractères associatives en guise de nom: la clé d’indexd’index

$tableau["indice"] = valeur; $tableau["indice"] = valeur; $jour["Dimanche"] = 7 $jour["Dimanche"] = 7 $jour["Mercredi"] = "Le jour des enfants" $jour["Mercredi"] = "Le jour des enfants"

$tableau = array(ind0 => val0, ind1 => val1,..., indN => valN);$tableau = array(ind0 => val0, ind1 => val1,..., indN => valN); $jour = array("Dimanche" => 1, "Lundi" => 2, "Mardi" => 3, $jour = array("Dimanche" => 1, "Lundi" => 2, "Mardi" => 3,

"Mercredi" => 4, "Jeudi" => 5, "Vendredi" => 6, "Samedi" => 7);"Mercredi" => 4, "Jeudi" => 5, "Vendredi" => 6, "Samedi" => 7);

$variable = $tableau["indice"];$variable = $tableau["indice"]; $JJ = $jour["Vendredi"]; //affecte 6 à $JJ $JJ = $jour["Vendredi"]; //affecte 6 à $JJ echo $jour["Lundi"]; //retourne la valeur 2echo $jour["Lundi"]; //retourne la valeur 2

Page 44: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

44

Tableaux multidimensionnelsTableaux multidimensionnels Pas d'outils pour créer directement des tableaux Pas d'outils pour créer directement des tableaux

multidimensionnelsmultidimensionnels L'imbrication des tableaux est possibleL'imbrication des tableaux est possible

tab1 = array(Val0, Val1,..., ValN); $tab2 = array(Val0, Val1,..., ValN); // Création d'un tableau à deux dimensions $tableau = array($tab1, $tab2); &mois = array("Janvier", "Février", "Mars", "Avril", "Mai", "Juin", "Juillet", "Août",

"Septembre", "Octobre", "Novembre", "Décembre"); $jour = array("Dimanche", "Lundi", "Mardi", "Mercredi", "Jeudi", "Vendredi",

"Samedi"); &element_date = array(&mois, &jour);

$variable = $tableau[indice][indice]; $MM = $element_date[0][0]; //affecte "Janvier" à $MM echo $element_date[1][5] . " 7 " . $element_date[0][2] . "2002"; // retourne

"Jeudi 7 Mars 2002"

Syntaxe de base :Syntaxe de base : Les tableaux(4)Les tableaux(4)

Page 45: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

45

Syntaxe de base :Syntaxe de base : Les tableaux(5)Les tableaux(5)

Lecture des éléments d’un tableauLecture des éléments d’un tableau Avec une boucle forAvec une boucle for

for ($i=0; $i<count($tab) ; $i++){$tamp=$tab[$i];if ($tamp[0]== "a") {echo $tamp, "<br />"; }}

Avec une boucle whileAvec une boucle while $i=0;while ($tab[$i]){if ($tab[$i][0] =="a" ) {echo $tab[$I], "<br />

"; }}

Page 46: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

46

Syntaxe de base :Syntaxe de base : Les tableaux(6)Les tableaux(6)

Lecture des éléments d’un tableauLecture des éléments d’un tableau Avec La boucle foreachAvec La boucle foreach

$tableau = array(val1, val2, ..., valN);foreach($tableau as $valeur) { echo "Valeur: $valeur"; } $jour = array("Dimanche", "Lundi", "Mardi", "Mercredi", "Jeudi", "Vendredi",

"Samedi"); $i = 0; foreach($jour as $JJ) { echo "La cellule n° ". $i . " : " . $JJ . "<br>"; $i++; }

Page 47: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

47

Syntaxe de base :Syntaxe de base : Les tableaux(7)Les tableaux(7)

Lecture des éléments d’un tableauLecture des éléments d’un tableau Parcours d'un tableau associatifParcours d'un tableau associatif

Réalisable en ajoutant avant la variable Réalisable en ajoutant avant la variable $valeur$valeur, la clé , la clé associéeassociée

$tableau = array(clé1 => val1, clé2 => val2, ..., cléN => valN); foreach($tableau as $clé => $valeur) { echo "Valeur ($clé): $valeur"; } $jour = array("Dimanche" => 7, "Lundi" => 1, "Mardi" => 2, "Mercredi"

=> 3, "Jeudi" => 4, "Vendredi" => 5, "Samedi" => 6); foreach($jour as $sJJ => $nJJ) { echo "Le jour de la semaine n° ". $nJJ . " : " . $sJJ . "<br>"; }

Page 48: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

48

Syntaxe de base :Syntaxe de base : Les tableaux(8)Les tableaux(8)

Fonctions de triFonctions de tri Tri selon les valeursTri selon les valeurs

La fonction La fonction sort() effectue un tri sur les valeurs des éléments d’un effectue un tri sur les valeurs des éléments d’un tableau selon un critère alphanumérique :selon les codes ASCII : tableau selon un critère alphanumérique :selon les codes ASCII :

– « a » est après « Z » et « 10 » est avant « 9 ») – Le tableau initial est modifié et non récupérables dans son ordre original – Pour les tableaux associatifs les clés seront perdues et remplacées par un

indice créé après le tri et commencant à 0

La fonction La fonction rsort() effectue la même action mais en ordre inverse des effectue la même action mais en ordre inverse des codes ASCII.codes ASCII.

La fonction La fonction asort() trie également les valeurs selon le critère des trie également les valeurs selon le critère des codes ASCII, mais en préservant les clés pour les tableaux associatifscodes ASCII, mais en préservant les clés pour les tableaux associatifs

La fonction La fonction arsort() la même action mais en ordre inverse des codes la même action mais en ordre inverse des codes ASCIIASCII

la fonction la fonction natcasesort() effectue un tri dans l’ordre alphabétique non effectue un tri dans l’ordre alphabétique non ASCII (« a » est avant « z » et « 10 » est après « 9 ») ASCII (« a » est avant « z » et « 10 » est après « 9 »)

Page 49: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

49

Syntaxe de base :Syntaxe de base : Les tableaux(9)Les tableaux(9)

Fonctions de triFonctions de tri

<?php$tab1 = array ("Molière ", " Hugo", "Vian ", "Sartre ");$tab2 = array

("1622"=>"Molière","1802"=>"Hugo","1920"=>"Vian","1905"=>"Sartre");//***tri de $tab1 ******asort ($tab1) ;echo "<h3< Tri sur les valeurs de \$tab1 </h3> " ;foreach ($tab1 as $ind=> $valeur){echo "<b> L’élement a pour indice : $ind; et pour valeur : $valeur </b> <br /> " ;}// **tri du tableau $tab2 ****arsort ($tab2) ;echo "<h3> Tri sur les valeurs de \$tab2 </h3> " ;foreach ($tab2 as $cle => $valeur ){echo "<b> l’élément a pour clé : $cle ; et pour valeur : $valeur </b> <br /> " ;}?>

Page 50: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

50

Syntaxe de base :Syntaxe de base : Les tableaux(10)Les tableaux(10)

Fonctions de triFonctions de tri Tri sur les clésTri sur les clés

La fonction ksort() trie les clés du tableau selon le critère des codes ASCII, et préserve les associations clé /valeur

La fonction krsort() effectue la même action mais en ordre inverse des codes ASCII

<?php$tab2 = array

("1622"=>"Molière","1802"=>"Hugo","1920"=>"Vian","1905"=>"Sartre") ;ksort ($tab2);echo "<h3 > Tri sur les clés de \$tab2 </h3>" ;foreach ($tab2 as $cle=>$valeur) {echo "<b> l’élément a pour clé : $clé; et pour valeur : $ cvaleur </b> <br

/>";}?>

Page 51: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

51

Syntaxe de base :Syntaxe de base : Les tableaux(11)Les tableaux(11)

Les fonctions de tableauxLes fonctions de tableaux

$tableau = array_count_values($variable);retourne un tableau comptant le nombre d'occurrences des valeurs d'un

tableau.

$tableau = array_diff($var_1, $var_2, ..., $var_N);retourne dans un tableau contenant les valeurs différentes entre deux ou

plusieurs tableaux.

$tableau = array_filter($variable, "fonction")retourne un tableau contenant les enregistrements filtrés d'un tableau à

partir d'une fonction.

$tableau = array_flip($variable);intervertit les paires clé/valeur dans un tableau.

$tableau = array_intersect($var_1, $var_2, ..., $var_N);retourne un tableau contenant les enregistrements communs aux tableaux

entrés en argument.

Page 52: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

52

Syntaxe de base :Syntaxe de base : Les tableaux(12)Les tableaux(12)

Les fonctions de tableauxLes fonctions de tableaux

tableau = array_keys($variable [, valeur]);retourne toutes les clés d'un tableau ou les emplacements d'une valeur dans

un tableau.

$tableau = array_map($var_1 [, $var_2, ..., $var_N], 'fonction');applique une fonction à un ou plusieurs tableaux.

$tableau = array_merge($var_1, $var_2, ..., $var_N);enchaîne des tableaux entrés en argument afin d'en retourner un unique.

$tableau = array_merge_recursive($var_1, $var_2, ..., $var_N);enchaîne des tableaux en conservant l'ordre des éléments dans le tableau

résultant. Dans le cas de clés communes, les valeurs sont placées dans un tableau.

true | false = array_multisort($var, critère1, critère2 [, ..., $var_N, critère1, critère2])trie un ou plusieurs tableaux selon un ordre croissant ou décroissant

(SORT_ASC ou SORT_DESC) et selon une comparaison alphabétique, numérique ou de chaîne de caractères (SORT_REGULAR, SORT_NUMERIC ou SORT_STRING).

$tableau = array_pad($variable, taille, valeur);recopie tout un tableau en ajustant sa taille à l'argument correspondant et en

bourrant d'une valeur spécifiée les éléments vides.

Page 53: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

53

Syntaxe de base :Syntaxe de base : Les chaînes de Les chaînes de caractères(1)caractères(1)

PrincipePrincipe Peuvent être constituées de n'importe quel caractère alphanumérique et de Peuvent être constituées de n'importe quel caractère alphanumérique et de

ponctuation, y compris les caractères spéciauxponctuation, y compris les caractères spéciaux

\tLa nouvelle monnaie unique, l' €uro, est enfin là...\n\r Une chaîne de caractères doit être toujours entourée par des guillemets simples (')ou Une chaîne de caractères doit être toujours entourée par des guillemets simples (')ou

doubles (")doubles (")

" Ceci est une chaîne de caractères valide." 'Ceci est une chaîne de caractères valide.' "Ceci est une chaîne de caractères invalide.'

Des caractères spéciaux à insérer directement dans le texte, permettent de créer directement certains effets comme des césures de lignes

Car Code ASCII Code hex Description \car échappe un caractère spécifique. " " 32 0x20 un espace simple. \t 9 0x09 tabulation horizontale

\n 13 0x0D nouvelle ligne \r 10 0x0A retour à chariot \0 0 0x00 caractère NUL \v 11 0x0B tabulation verticale

Page 54: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

54

Syntaxe de base :Syntaxe de base : Les chaînes de Les chaînes de caractères(2)caractères(2)

PrincipePrincipe Placer le caractère d'échappement anti-slash (\) devant un guillemet Placer le caractère d'échappement anti-slash (\) devant un guillemet

évite d'une part que le moteur de script interprète le caractère et évite d'une part que le moteur de script interprète le caractère et d'autre part l'insérer dans le texte.d'autre part l'insérer dans le texte.

echo "Il l'avait nommé \"le langage PHP\" !" echo 'Il l\'avait nommé "le langage PHP" !‘

Il existe de nombreuses instructions permettant de manipuler les chaînes de caractères

//recherche le texte dans le paragraphe $txt = stristr($para, $texte);

//compare le texte au paragraphe $nombre = strcasecmp($para, $texte);

//remplace l'ancien texte par le nouveau dans le paragraphe $para_temp = str_replace($texte_nouveau, $texte_ancien, $para);

Page 55: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

55

Syntaxe de base :Syntaxe de base : Les chaînes de Les chaînes de caractères(3)caractères(3)

Quelques fonctions de manipulationQuelques fonctions de manipulationchaîne_result = addCSlashes(chaîne, liste_caractères);ajoute des slashs dans une chaîne

chaîne_result = addSlashes(chaîne);ajoute un slash devant tous les caractères spéciaux.

chaîne_result = chop(chaîne);supprime les espaces blancs en fin de chaîne.

caractère = chr(nombre);retourne un caractère en mode ASCII

chaîne_result = crypt(chaîne [, chaîne_code])code une chaîne avec une base de codage.

echo expression_chaîne;affiche à l'écran une ou plusieurs chaînes de caractères.

$tableau = explode(délimiteur, chaîne);scinde une chaîne en fragments à l'aide d'un délimiteur et retourne un tableau.

Page 56: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

56

Syntaxe de base :Syntaxe de base : Les chaînes de Les chaînes de caractères(4)caractères(4)

Les expressions régulièresLes expressions régulières

Sont des modèles créés à l'aide de caractères ASCII, Sont des modèles créés à l'aide de caractères ASCII, permettant de :permettant de :

Trouver les portions de la chaîne correspondant au Trouver les portions de la chaîne correspondant au modèlemodèle

Les symboles de délimitation Les symboles Les symboles ^ et et $$ indiquent le début ou la fin d'une indiquent le début ou la fin d'une

chaîne, et permettent donc de la délimiterchaîne, et permettent donc de la délimiter

– "^debut": chaîne qui commence par « debut » – "fin$": chaîne qui se termine par "fin" – "^chaine$": chaîne qui commence et se termine par « chaîne » – "abc": chaîne contenant la chaîne "abc"

Page 57: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

57

Syntaxe de base :Syntaxe de base : Les chaînes de Les chaînes de caractères(5)caractères(5)

Les expressions régulièresLes expressions régulières Les symboles de délimitation

^: : indiquant le début d'une chaîne de caractères,indiquant le début d'une chaîne de caractères,

$$:: indiquant la fin d'une chaîne de caractères. indiquant la fin d'une chaîne de caractères.

\b\b: : indiquant une limite de mot d'une chaîne de caractères, soit la indiquant une limite de mot d'une chaîne de caractères, soit la position entre position entre un mot (\w) et un espace ou un caractère de ponctuation (\un mot (\w) et un espace ou un caractère de ponctuation (\W).W).

\B\B: : indiquant ce qui n'est pas une limite de mot dans une chaîne de caractères.indiquant ce qui n'est pas une limite de mot dans une chaîne de caractères.

\d\d: : indique un chiffre comprenant les caractères suivants [0-9].indique un chiffre comprenant les caractères suivants [0-9].

\D\D: : indique ce qui n'est pas un chiffre [^0-9].indique ce qui n'est pas un chiffre [^0-9].

\n\n: : indique une nouvelle ligne.indique une nouvelle ligne.

\r\r: : indique un retour charriot.indique un retour charriot.

\s\s: : indique un espace blanc comme \t, \n, \r, ou \f.indique un espace blanc comme \t, \n, \r, ou \f.

\S\S: : indique ce qui n'est pas un espace blanc (\t|\n|\r|\f).indique ce qui n'est pas un espace blanc (\t|\n|\r|\f).

\t\t: : indique une tabulation verticale.indique une tabulation verticale.

\w\w: : indique un mot comprenant le caractères suivants [0-9a-zA-Z_].indique un mot comprenant le caractères suivants [0-9a-zA-Z_].

\W\W: : indique ce qui n'est pas un mot [^0-9a-zA-Z_]indique ce qui n'est pas un mot [^0-9a-zA-Z_]

Page 58: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

58

Syntaxe de base :Syntaxe de base : Les chaînes de Les chaînes de caractères(6)caractères(6)

Les expressions régulièresLes expressions régulières

Nombre d'occurrences

Les symboles suivants fournissent des solutions pour signifier un certain nombre d'occurrences possible d'un caractère dans une expression régulière.

– * : zero ou plusieurs – + : un ou plusieurs– ? : un ou aucun

"abc+": chaine qui contient "ab" suivie de un ou plusieurs "c" ("abc", "abcc" etc..)

"abc*": chaine qui contient "ab" suivie de zero ou plusieurs "c" ("ab", "abc" etc..)

"abc?": chaine qui contient "ab" suivie de zero ou un "c" ("ab" ou "abc")

"^abc+": chaine qui commence par "ab" suivie de un ou plusieurs "c" ("abc", "abcc" etc..)

Page 59: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

59

Syntaxe de base :Syntaxe de base : Les chaînes de Les chaînes de caractères(7)caractères(7)

Les expressions régulièresLes expressions régulières

Regroupement et alternative

Les accolades {X,Y} permettent de donner des limites de nombre

"abc{2}": chaine qui contient "ab" suivie de deux "c" ("abcc")"abc{2,}": chaine qui contient "ab" suivie de deux "c" ou plus ("abcc"

etc..)"abc{2,4}": chaine qui contient "ab" suivie 2, 3 ou 4 "c" ("abcc" ..

"abcccc")

La barre verticale | se comporte en tant qu'opérateur OU

"un|le": chaine qui contient "un" ou "le""(un|le) langage": chaîne qui contient "un langage" ou "le langage"

Page 60: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

60

Syntaxe de base :Syntaxe de base : Les chaînes de Les chaînes de caractères(8)caractères(8)

Les expressions régulièresLes expressions régulières Mise en correspondance des caractères

Le point : n'importe quel caractère (une fois)Le point : n'importe quel caractère (une fois)

"^.{3}$": chaîne qui contient 3 caractères

Les crochets Les crochets [ ] : une liste de caractères autorisés (ou : une liste de caractères autorisés (ou interdits). interdits).

– Le signe - permet de définir un intervalle– Le caractère ^ après le premier crochet indique une interdiction

"[abc]": chaîne qui contient un "a", un "b", ou un "c""[a-z]": chaîne qui contient un caractère compris entre "a" et "z""[^a-zA-Z]": chaîne qui ne commence pas par une lettre

Pour rechercher un caractère spécial : le faire précéder d'un Pour rechercher un caractère spécial : le faire précéder d'un antislash (sauf entre crochets)antislash (sauf entre crochets)

"[\+?{}.]": chaîne qui contient un de ces six caractères"[]-]": chaîne qui contient le caractère "]" ou le caractère "-"

Page 61: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

61

Syntaxe de base :Syntaxe de base : Les chaînes de Les chaînes de caractères(9)caractères(9)

Les expressions régulièresLes expressions régulières Les classes de caractèresLes classes de caractères

Permettent de vérifier si une chaîne contient des Permettent de vérifier si une chaîne contient des caractères d'un certain type (numérique, caractères d'un certain type (numérique, alphanumérique, ...) sans avoir à les énuméreralphanumérique, ...) sans avoir à les énumérer

la syntaxe est [:classe:]la syntaxe est [:classe:]

Nom de la classeNom de la classe DescriptionDescription

[:alnum:][:alnum:] caractères alphanumériques (équivalent à [A-Za-z0-9])caractères alphanumériques (équivalent à [A-Za-z0-9])

[:alpha:][:alpha:] caractères alphabétiques ([A-Za-z])caractères alphabétiques ([A-Za-z])

[:blank:][:blank:] caractères blanc (espace, tabulation)caractères blanc (espace, tabulation)

[:ctrl:][:ctrl:] caractères de contrôle (les premiers du code ASCIIcaractères de contrôle (les premiers du code ASCII

[:graph:][:graph:] caractère d'imprimerie (qui fait une marque sur l'écran en quelque sorte)caractère d'imprimerie (qui fait une marque sur l'écran en quelque sorte)

[:print:][:print:] caractère imprimable (qui passe à l'imprimante ... tout sauf les caractères de contrôle)caractère imprimable (qui passe à l'imprimante ... tout sauf les caractères de contrôle)

[:digit:][:digit:] chiffre ([0-9])chiffre ([0-9])

[:space:][:space:] caractère d'espacementcaractère d'espacement

[:upper:][:upper:] caractère majusculecaractère majuscule

Page 62: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

62

Syntaxe de base :Syntaxe de base : Les chaînes de Les chaînes de caractères(10)caractères(10)

Les expressions régulièresLes expressions régulières

Les classes de caractèresLes classes de caractères ExempleExemple

– chaîne composée d'un ou plusieurs caractère(s) alphanumerique(s)

"^[:alnum:]+$" 

– chaîne contenant un caractère de ponctuation ou un caractère d'espacement

"[:punct:]|[:space:] "  

– chaîne contenant un nombre

"^[:digit:]+$"

Page 63: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

63

Syntaxe de base :Syntaxe de base : Les chaînes de Les chaînes de caractères(11)caractères(11)

Les expressions régulièresLes expressions régulières Les fonctions de manipulation d'expressions régulièresLes fonctions de manipulation d'expressions régulières

La fonction ereg()La fonction ereg()

Booleen ereg(chaine modele,chaine texte[,tableau occurences])

La fonction La fonction eregi()eregi() Booleen eregi(chaine modele,chaine texte[,tableau occurences])

<?$fp = fopen("http://www.enm-douai.fr","r"); //lecture du fichierwhile (!feof($fp)) { //on parcoure toutes les lignes $page .= fgets($fp, 4096); // lecture du contenu de la ligne} $titre = eregi("<title>(.*)</title>",$page,$regs); //on isole le titre/* Le titre commence par <title>, puis contient n'importe quelle chaine, et se termine par </title> */echo $regs[1]; // on retourne la premiere occurence trouvée // Les occurences se trouvent entre parenthèses// $regs[0] renvoie toute la chainefclose($fp); ?>

Page 64: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

64

Syntaxe de base :Syntaxe de base : Les chaînes de Les chaînes de caractères(12)caractères(12)

Les expressions régulièresLes expressions régulières

Les fonctions de manipulation d'expressions régulièresLes fonctions de manipulation d'expressions régulières

fonctions fonctions ereg_replace() ereg_replace()

chaine ereg_replace(chaine modele,chaine remplacement,chaine texte)

$Texte = "Bienvenue a Toto dans le mondes des expressions régulières";$Texte = ereg_replace("To(to)","<b>\\1ti \\0</b>",$texte);$Texte = "Bienvenue sur http://www.enm-douai.fr cher ami";$Texte = ereg_replace("((http://)([[:punct:]]|[[:alnum:]])*)",   " <a href=\"\\0\">\\2</a>",$corps);

fonction fonction eregi_replace()eregi_replace()

chaine eregi_replace(chaine modele,chaine remplacement,chaine texte)

Page 65: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

65

Syntaxe de base :Syntaxe de base : Les chaînes de Les chaînes de caractères(13)caractères(13)

Les expressions régulièresLes expressions régulières

Les fonctions de manipulation d'expressions régulièresLes fonctions de manipulation d'expressions régulières

La fonction split()La fonction split() tableau split (chaîne expression, chaîne texte [, entier limite])

<?// découpe une phrase en un tableau de mots// on utilise split au cas ou plusieurs espaces séparent les mots$phrase = "Ceci est une phrase avec trois espaces ici";$tableau_mots = split(" +",trim($phrase)); // un espace ou plus?>

La fonction sql_regcase()La fonction sql_regcase() chaine sql_regcase (chaine texte)

<?echo sql_regcase("un test"); // affiche [Uu][Nn][ ][Tt][Ee][Ss][Tt]?>

Page 66: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

66

Syntaxe de base :Syntaxe de base : Les chaînes de Les chaînes de caractères(14)caractères(14)

Les fonctions de manipulation d'expressions Les fonctions de manipulation d'expressions régulièresrégulières

nombre = ereg(modèle, chaîne [, $tableau]);recherche un modèle dans une chaîne de caractères et enregistre les résultats dans le tableau.

chaîne_result = ereg_replace(modèle, chaîne_remplacement, chaîne);remplace le fragment de chaîne correspondant au modèle par la chaîne de substitution.

nombre = eregi(modèle, chaîne [, $tableau]);recherche en ignorant la casse, un modèle dans la chaîne de caractères puis enregistre les

résultats dans le tableau.

chaîne_result = eregi_replace(modèle, chaîne_remplacement, chaîne);remplace le fragment de chaîne correspondant au modèle par la chaîne de substitution en

ignorant la casse.

$tableau = split(modèle, chaîne [, nombre]);scinde une chaîne de caractères selon un modèle et éventuellement une longueur limite.

chaîne_result = spliti(modèle, chaîne [, nombre]);scinde en ignorant la casse, une chaîne de caractères selon un modèle et éventuellement une

longueur limite.

Page 67: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

67

Syntaxe de base : Syntaxe de base : les opérateurs (1)les opérateurs (1)

Les opérateurs les opérateurs de calcul les opérateurs d'assignation les opérateurs d'incrémentation les opérateurs de comparaison les opérateurs logiques les opérateurs bit-à-dit les opérateurs de rotation de bit

Page 68: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

68

Syntaxe de base :Syntaxe de base : Les opérateurs(2)

Les opérateurs de calcul Opérateur Dénomination Effet Exemple Résultat + opérateur d'addition Ajoute deux valeurs $x+3 10 - opérateur de soustraction Soustrait deux valeurs $x-3 4

* opérateur de multiplication

Multiplie deux valeurs $x*3 21

/ plus: opérateur de division

Divise deux valeurs $x/ 3 2.3333333

= opérateur d'affectation Affecte une valeur à une variable

$x=3 Met la valeur 3 dans la variable $x

Page 69: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

69

Syntaxe de base :Syntaxe de base : Les opérateurs(3)

Les opérateurs d'assignation

Opérateur Effet += addition deux valeurs et stocke le résultat dans la variable (à gauche) -= soustrait deux valeurs et stocke le résultat dans la variable *= multiplie deux valeurs et stocke le résultat dans la variable /= divise deux valeurs et stocke le résultat dans la variable %= donne le reste de la division deux valeurs et stocke le résultat dans la variable | = Effectue un OU logique entre deux valeurs et stocke le résultat dans la variable = Effectue un OU exclusif entre deux valeurs et stocke le résultat dans la variable

&= Effectue un Et logique entre deux valeurs et stocke le résultat dans la variable .= Concatène deux chaînes et stocke le résultat dans la variable

Page 70: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

70

Syntaxe de base :Syntaxe de base : Les opérateurs(4)

Les opérateurs d'incrémentation

Les opérateurs de comparaison

Opérateur Dénomination Effet Syntaxe Résultat (avec x valant 7) ++ Incrémentation Augmente d'une unité la variable $x++ 8 -- Décrémentation Diminue d'une unité la variable $x-- 6

Opérateur Dénomination Effet Exemple Résultat ==

opérateur d'égalité Compare deux valeurs et vérifie leur égalité

$x==3 Retourne 1 si $X est égal à 3, sinon 0

< opérateur d'infériorité stricte

Vérifie qu'une variable est strictement inférieure à une valeur

$x<3 Retourne 1 si $X est inférieur à 3, sinon 0

<= opérateur d'infériorité Vérifie qu'une variable est inférieure ou égale à une valeur

$x<=3 Retourne 1 si $X est inférieur à 3, sinon 0

> opérateur de supériorité stricte

Vérifie qu'une variable est strictement supérieure à une valeur

$x>3 Retourne 1 si $X est supérieur à 3, sinon 0

>= opérateur de supériorité Vérifie qu'une variable est supérieure ou égale à une valeur

$x>=3 Retourne 1 si $X est supérieur ou égal à 3, sinon 0

!= opérateur de différence Vérifie qu'une variable est différente d'une valeur

$x!=3 Retourne 1 si $X est différent de 3, sinon 0

Page 71: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

71

Syntaxe de base :Syntaxe de base : Les opérateurs(5)

Les opérateurs logiques

Les opérateurs bit-à-bit

Opérateur Dénomination Effet Syntaxe | | ou OR OU logique Vérifie qu'une des conditions est réalisée ((condition1)| | (condition2)) && ou AND

ET logique Vérifie que toutes les conditions sont réalisées ((condition1)&&(condition2))

XOR OU exclusif Opposé du OU logique ((condition1)XOR(condition2))

! NON logique Inverse l'état d'une variable booléenne (retourne la valeur 1 si la variable vaut 0, 0 si elle vaut 1)

(!condition)

Opérateur Dénomination Effet Syntaxe Résultat

& ET bit-à-bit Retourne 1 si les deux bits de même poids sont à 1 9 & 12 (1001 & 1100)

8 (1000)

| OU bit-à-bit Retourne 1 si l'un ou l'autre des deux bits de même poids est à 1 (ou les deux)

9 | 12 (1001 | 1100)

13 (1101)

OU bit-à-bit Retourne 1 si l'un des deux bits de même poids est à 1 (mais pas les deux)

9 12 (1001 1100)

5 (0101)

~ Complément (NON)

Retourne 1 si le bit est à 0 (et inversement) ~9 (~1001) 6 (0110)

Page 72: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

72

Syntaxe de base :Syntaxe de base : Les opérateurs(6)

Les opérateurs de rotation de bit

Autres opérateurs

Opérateur Dénomination Effet Syntaxe Résultat

<< Rotation à gauche

Décale les bits vers la gauche (multiplie par 2 à chaque décalage). Les zéros qui sortent à gauche sont perdus, tandis que des zéros sont insérés à droite

6 << 1 (110 << 1)

12 (1100)

>> Rotation à droite avec conservation du signe

Décale les bits vers la droite (divise par 2 à chaque décalage). Les zéros qui sortent à droite sont perdus, tandis que le bit non-nul de poids plus fort est recopié à gauche

6 >> 1 (0110 >> 1)

3 (0011)

Opérateur Dénomination Effet Syntaxe Résultat

. Concaténation Joint deux chaînes bout à bout "Bonjour"."Au revoir"

"BonjourAu revoir"

$ Référencement de variable

Permet de définir une variable $MaVariable = 2;

-> Propriété d'un objet Permet d'accéder aux données membres d'une classe

$MonObjet->Propriete

Page 73: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

73

Syntaxe de base :Syntaxe de base : Les opérateurs(7)

Les priorités Priorité des opérateurs () [] -- ++ ! ~ - * / % + - < <= >= > == != & | && | | ? : = += -= *= / = %= <<= >>= >>>= &= = | = AND XOR

Page 74: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

74

Syntaxe de base :Syntaxe de base : Les instructions Les instructions conditionnelles(1)conditionnelles(1)

L'instruction if if (condition réalisée) { liste d'instructions }

L'instruction if ... Else if (condition réalisée) {liste d'instructions}

else { autre série d'instructions }

L'instruction if ... elseif ... Else if (condition réalisée) {liste d'instructions}

elseif (autre condition ) {autre série d'instructions } else (dernière condition réalisée) { série d'instructions }

Opérateur ternaire (condition) ? instruction si vrai : instruction si faux

Page 75: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

75

Syntaxe de base :Syntaxe de base : Les instructions Les instructions conditionnelles(2)conditionnelles(2)

L'instruction switch

switch (Variable) { case Valeur1: Liste d'instructions break; case Valeur1: Liste d'instructions break; case Valeurs...: Liste d'instructions break; default: Liste d'instructions break; }

Page 76: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

76

Syntaxe de base :Syntaxe de base : Les instructions Les instructions conditionnelles(3)conditionnelles(3)

La boucle for for ($i=1; $i<6; $i++) { echo "$i<br>"; }

La boucle while While(condition) {bloc d’instructions ;} While (condition) :Instruction1 ;Instruction2 ; …. endwhile ;

La boucle do…while Do {bloc d’instructions ;}while(condition) ;

La boucle foreach (PHP4) Foreach ($tableau as $valeur) {insts utilisant $valeur ;}

Page 77: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

77

Syntaxe de base :Syntaxe de base : Les instructions Les instructions conditionnelles(4)conditionnelles(4)

Saut inconditionnel $x=1

while ($x<=10) { if ($x == 7) { echo "division par 0"; $x++; continue; } $a = 1/($x-7); echo "$a<br>"; $x++ }

Arrêt inconditionnelfor ($x=1; $x<=10; $x++) { $a = $x-7; if ($a == 0) { echo "division par 0";

break; } echo "1/$a<br>"; }

Arrêt d'exécution du script : commande exit

Page 78: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

78

Syntaxe de base :Syntaxe de base : Les fonctions(1)Les fonctions(1)

Déclaration et appel d’une fonctionDéclaration et appel d’une fonction Function nom_fonction($arg1, $arg2, …$argn){déclaration des variables ;bloc d’instructions ;//fin du corps de la fonctionreturn $resultat ;}

Fonction avec nombre d’arguments inconnuFonction avec nombre d’arguments inconnu func_num_args() : fournit le nombre d’arguments qui ont été fournit le nombre d’arguments qui ont été

passés lors de l’appel de la fonctionpassés lors de l’appel de la fonction

func_get_arg($i) : retourne la valeur de la variable située à la retourne la valeur de la variable située à la position $i dans la liste des arguments passés en paramètres. position $i dans la liste des arguments passés en paramètres.

Ces arguments sont numérotés à partir de 0Ces arguments sont numérotés à partir de 0

Page 79: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

79

Syntaxe de base :Syntaxe de base : Les fonctions(2)Les fonctions(2)

Fonction avec nombre d’arguments inconnuFonction avec nombre d’arguments inconnu

<?phpfunction produit(){$nbarg = func_num_args() ;$prod=1 ;// la fonction produit a ici $nbarg argumentsfor ($i=0 ; $i <$nbarg ; $i++){$prod *= func_get_arg($i)}return $prod;}echo "le  produit est : ", produit (3, 77, 10, 5, 81, 9), "<br />" ;// affiche le produit est 8 419 950?>

Page 80: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

80

Syntaxe de base :Syntaxe de base : Les fonctions(3)Les fonctions(3)

Passage de paramètre par référencePassage de paramètre par référence Pour passer une variable par référence, il faut que son nom soit Pour passer une variable par référence, il faut que son nom soit

précédé du symbole & (exemple &$a)précédé du symbole & (exemple &$a)

<? function dire_texte($qui, &$texte){ $texte = "Bienvenue $qui";}$chaine = "Bonjour ";dire_texte("cher phpeur",$chaine);echo $chaine; // affiche "Bienvenue cher phpeur"?>

La liaison tardiveLa liaison tardive Sous PHP3, les fonctions sont définies avant un premier appelSous PHP3, les fonctions sont définies avant un premier appel Sous PHP4, les fonctions peuvent être définies après leur premier Sous PHP4, les fonctions peuvent être définies après leur premier

appelappel

L’appel récursifL’appel récursif PHP admet les appels récursifs de fonctionsPHP admet les appels récursifs de fonctions

Page 81: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

81

Syntaxe de base :Syntaxe de base : Les fonctions(4)Les fonctions(4)

Appel dynamique de fonctionsAppel dynamique de fonctions

Exécuter une fonction dont le nom n’est pas forcément connu à Exécuter une fonction dont le nom n’est pas forcément connu à l’avance par le programmeur du scriptl’avance par le programmeur du script

L’appel dynamique d’une fonction s’effectue en suivant le nom d’une L’appel dynamique d’une fonction s’effectue en suivant le nom d’une variable contenant le nom de la fonction par des parenthèses variable contenant le nom de la fonction par des parenthèses

<?php $datejour = getdate() ; // date actuelle//récupération des heures et minutes actuelles$heure = $datejour[hours] ; $minute=$datejour[minutes] ;function bonjour(){ global $heure; global $minute;echo "<b> BONJOUR A VOUS IL EST : ", $heure, " H ", $minute, "</b> <br />" ;}function bonsoir (){global $heure ; global $minute ;echo "<b> BONSOIR A VOUS IL EST : ", $heure, " H ", $minute , "</ b> <br />" ;}if ($heure <= 17) {$salut = "bonjour" ; } else $salut="bonsoir" ;//appel dynamique de la fonction$salut() ; ?>

Page 82: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

82

Syntaxe de base :Syntaxe de base : Les fonctions(5)Les fonctions(5)

Variables locales et variables globalesVariables locales et variables globales variables en PHPvariables en PHP : : global, static, localglobal, static, local

toute variable déclarée en dehors d’une fonction est globale toute variable déclarée en dehors d’une fonction est globale

utiliser une variable globale dans une fonction, l’instruction utiliser une variable globale dans une fonction, l’instruction globalglobal suivie du nom de la variable suivie du nom de la variable

Pour conserver la valeur acquise par une variable entre deux Pour conserver la valeur acquise par une variable entre deux appels de la même fonction : l’instruction static. appels de la même fonction : l’instruction static.

Les variables statiques restent locales à la fonction et ne sont pas Les variables statiques restent locales à la fonction et ne sont pas réutilisables à l’extérieur.réutilisables à l’extérieur.

<?phpfunction cumul ($prix) { static $cumul = 0 ; static $i = 1 ;echo "Total des achats $i = ";$cumul += $prix; $i++ ;return $cumul ; }echo cumul (175), "<br />" ;echo cumul (65), "<br />" ;echo cumul (69),

"<br />" ; ?>

Page 83: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

83

Syntaxe de base :Syntaxe de base : Les fonctions(6)Les fonctions(6)

Les fonctions des fonctionsLes fonctions des fonctionsvaleur = call_user_func_array(nom_fontion [, $tableau_paramètres]);appelle une fonction utilisateur avec des paramètres rassemblés en

tableau

valeur = call_user_func(nom_fonction [, $param_1, ..., $param_N]);appelle une fonction utilisateur avec zéro ou plusieurs paramètres

$nom_fonction = create_function('$param_1 [, ..., $param_N]', 'return instruction...');

crée une fonction avec un ou plusieurs paramètres et un code simple

valeur = func_get_arg(numéro_argument);retourne un élément de la liste des arguments

$tableau = func_get_args();retourne la liste des arguments sous forme de tableau

nombre = func_num_args();retourne le nombre d'arguments dans une fonction

Page 84: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

84

Syntaxe de base :Syntaxe de base : Les fonctions(7)Les fonctions(7)

Les fonctions des fonctionsLes fonctions des fonctionstrue | false = function_exists(nom_fonction);vérifie si la fonction existe

$tableau = get_defined_functions();retourne un tableau multidimensionnel contenant la liste de toutes les

fonctions définies dans le programme

entier = register_shutdown_function(nom_fonction);enregistre une fonction pour une exécution à l'extinction du script

register_tick_function(nom_fonction [, argument]);enregistre une fonction à chaque événement intervenant à chaque

commande de bas niveau exécutées par l'analyseur dans le bloc de directive declare

unregister_tick_function();annule la fonction à chaque événement intervenant à chaque commande de

bas niveau exécutées par l'analyseur dans le bloc de directive declare

Page 85: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

85

Syntaxe de base :Syntaxe de base : Les classes et les objets(1)Les classes et les objets(1)

Création d’une classe et d’un objetCréation d’une classe et d’un objet Une classe est composée de deux parties:Une classe est composée de deux parties:

Les attributs: il s'agit des données représentant l'état de l'objet Les méthodes : il s'agit des opérations applicables aux objets

<?php class client {var $nom; var $ville; var $naiss ;function age() {$jour = getdate(); $an=$jour["year"]; $age = $an - $this->naiss;echo "Il a $age ans cette année <br />" ;}}//création d’un objet$client1 = new client() ;//affectation des propriétés de l’objet$client1 -> nom = "Dupont" ; $client1-> naiss = "1961" ; $client1->ville = "Angers" ;//utilisation des propriétésecho "le nom du client1 est ", $client1->nom, "<br />" ;echo "la ville du client1 est ", $client1-> ville, "<br />" ;echo "le client1 est né en ", $client1->naiss, "<br />" ;//appel de la méthode age()$client1->age() ;?>

Page 86: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

86

Syntaxe de base :Syntaxe de base : Les classes et les Les classes et les objets(2)objets(2)

Manipulation des classes et des objetsManipulation des classes et des objets Php n'inclue pas dans sa version 4 de niveaux de visibilité

des éléments de la classe, il n'y a donc pas de concept d'encapsulation

Instanciation de la classe $Nom_de_l_objet = new Nom_de_la_classe;

Accéder aux propriétés d'un objet $Nom_de_l_objet->Nom_de_la_donnee_membre = Valeur;

Accéder aux méthodes d'un objet $Nom_de_l_objet-

>Nom_de_la_fonction_membre(parametre1,parametre2,...);

La variable $this $this->age = $Age;

Page 87: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

87

Syntaxe de base :Syntaxe de base : Les classes et les objets(3)Les classes et les objets(3)

Manipulation des classes et des objetsManipulation des classes et des objets L’héritageL’héritage

Instruction extendsInstruction extends– class nouvelle_classe extends super_classe

La nouvelle classe hérite des attributs et des méthodes appartenant à la super-classe tout en définissant ses propres fonctions et variables.

Le langage PHP ne supporte pas l'héritage multiple

Le constructeurLe constructeur Une fonction qui est appelée automatiquement par la classe lors de

son instanciation avec l'opérateur new

Doit posséder un nom identique à celle de la classe

Avec PHP 3, une fonction définie dans une classe héritée devient un constructeur si son nom est similaire à celle de la nouvelle classe

Avec PHP 4, une fonction constructeur ne peut être définie que dans sa propre classe

Page 88: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

88

Syntaxe de base :Syntaxe de base : Les classes et les objets(4)Les classes et les objets(4)

Manipulation des classes et des objetsManipulation des classes et des objets L’héritageL’héritage

Avec PHP 4, lorsqu'une classe héritant d'une autre est instanciée et si Avec PHP 4, lorsqu'une classe héritant d'une autre est instanciée et si aucun constructeur n'est défini dans cette classe, alors la fonction aucun constructeur n'est défini dans cette classe, alors la fonction constructeur sollicitée sera celle de la super-classe, si elle même constructeur sollicitée sera celle de la super-classe, si elle même existeexiste

L'opérateur L'opérateur :::: – faire référence à une fonction définie dans une super-classe à partir d'une

classe héritant de cette dernière – appeler une fonction définie dans une classe avant l'instanciation de cette

dernière dans le corps du programme.

class nouvelle_classe extends super_classe{ function fonction() { echo "Blocs d'instructions de la fonction fonction() . " dans la nouvelle-classe."; super_classe::fonction(); }}

Page 89: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

89

Syntaxe de base :Syntaxe de base : Les classes et les objets(5)Les classes et les objets(5)

Manipulation des classes et des objetsManipulation des classes et des objets

L’héritageL’héritage

L'opérateur parentL'opérateur parent – permet de faire référence à des variables ou des fonctions

présentes dans la super-classe à partir d'une autre classe héritant de cette dernière

class nouvelle_classe extends super_classe{ function fonction() { echo "Blocs d'instructions de la fonction fonction()" . " dans la nouvelle-classe."; // se référe à la fonction fonction() de la super_classe parent::fonction(); }}

Page 90: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

90

Syntaxe de base :Syntaxe de base : Les classes et les objets(6)Les classes et les objets(6)

Manipulation des classes et des objetsManipulation des classes et des objets Sauvegarde des objetsSauvegarde des objets

La sauvegarde et la relecture des objets s'effectuent La sauvegarde et la relecture des objets s'effectuent respectivement par respectivement par serialize serialize et et unserializeunserialize

serializeserialize permet de transformer un objet en une chaîne permet de transformer un objet en une chaîne de caractères pouvant être facilement transmise à une de caractères pouvant être facilement transmise à une autre page lors d'une sessionautre page lors d'une session

unserializeunserialize permet de reconstituer l'objet à partir de la permet de reconstituer l'objet à partir de la chaîne de caractères précitéechaîne de caractères précitée

Page 91: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

91

Syntaxe de base :Syntaxe de base : Les classes et les objets(7)Les classes et les objets(7)

Manipulation des classes et des objetsManipulation des classes et des objets Sauvegarde des objets : exempleSauvegarde des objets : exemple

<?php// Page de définition de la classe trigo.inc class trigonometrie { var $AB; var $BC; var $AC; function hypothenuse() { $resultat = sqrt(pow($this->BC, 2) + pow($this->AC, 2)); return number_format($resultat, 2, ',', ' '); } }?>

Page 92: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

92

Syntaxe de base :Syntaxe de base : Les classes et les objets(8)Les classes et les objets(8)

Manipulation des classes et des objetsManipulation des classes et des objets Sauvegarde des objets : exempleSauvegarde des objets : exemple

<?php // Première page : saisie.php

include("trigo.inc"); // inclusion de la définition de classe

$trigo = new trigonometrie; // crée une instance de l'objet

$objet_chaine = serialize($trigo); // sérialise l'objet

$fichier = fopen("fic", "w"); // ouvre un fichier en écriture seule

fputs($fichier, $objet_chaine); // écrit l'objet linéarisé dans le fichier

fclose($fichier); // ferme le fichier

?>

Page 93: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

93

Syntaxe de base :Syntaxe de base : Les classes et les objets(9)Les classes et les objets(9)

Manipulation des classes et des objetsManipulation des classes et des objets Sauvegarde des objets : exempleSauvegarde des objets : exemple

<form action="resultat.php" method="post"> <table border="0"> <tr> <th colspan="2"> <h3>Calcul de l'hypoténuse d'un triangle rectangle</h3> </th></tr> <tr> <td><u>longueur :</u></td> <td><input type="text" name="longueur" size="10"

maxlength="10"></td></tr> <tr> <td><u>hauteur :</u></td> <td><input type="text" name="hauteur" size="10" maxlength="10"></td></tr> <tr> <th colspan="2"><input type="submit" value="Calculer"></th></tr> </table></form>

Page 94: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

94

Syntaxe de base :Syntaxe de base : Les classes et les objets(10)Les classes et les objets(10)<?php // Seconde page : resultat.php include("trigo.inc"); // inclusion de la définition de classe/* regroupe tous les éléments du tableau retourné par la fonction file dans une chaîne */ $objet_chaine = implode("", file("fic")); $trigo = unserialize($objet_chaine); // désérialise l'objet // appelle deux propriétés et une méthode de l'objet $trigo->BC = $hauteur; $trigo->AC = $longueur;?><table border="0"> <tr><th><h3>Calcul de l'hypothénuse d'un triangle rectangle</h3></th></tr> <tr><td>hauteur (BC)</td><td>=</td> <td><?php echo $trigo->BC ?></td></tr> <tr><td>longueur (AC)</td> <td>=</td> <td><?php echo $trigo->AC ?></td></tr> <tr><td>hypothénuse (AB)</td> <td>=</td> <td><?php echo $trigo->hypothenuse() ?></td></tr></table>

Page 95: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

95

Syntaxe de base :Syntaxe de base : Les classes et les objets(11)Les classes et les objets(11)

Manipulation des classes et des objetsManipulation des classes et des objets

Les fonctions __sleep et __wakeupLes fonctions __sleep et __wakeup Les fonctions __sleep et __wakeup sont appelées resp. par les

commandes serialize et unserialize afin de traiter l'objet ou la chaîne de caractères représentant un objet avant la linéarisation ou délinéarisation

class nom_classe{ function __sleep() {Instructions à accomplir avant serialize()...}

function __wakeup() { Instructions à accomplir avant unserialize()...}}

Page 96: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

96

Syntaxe de base :Syntaxe de base : Les classes et les objets(12)Les classes et les objets(12)

Manipulation des classes et des objetsManipulation des classes et des objets Les fonctions __sleep et __wakeupLes fonctions __sleep et __wakeup

La fonction La fonction serializeserialize recherche la méthode recherche la méthode __sleep__sleep dans une dans une classe afin de la lancer avant le processus de linéarisation.classe afin de la lancer avant le processus de linéarisation.

– Effectuer un traitement préliminaire de l'objet dans le but de Effectuer un traitement préliminaire de l'objet dans le but de terminer proprement toutes les opérations relatives à cet objet, terminer proprement toutes les opérations relatives à cet objet,

• la fermeture des connexions sur des bases de données,la fermeture des connexions sur des bases de données,• suppression des informations superflues ne nécessitant pas de suppression des informations superflues ne nécessitant pas de

sauvegarde, etc..sauvegarde, etc..

La fonction La fonction unserializeunserialize recherche la méthode recherche la méthode __wakeup__wakeup dans dans une classe afin de la lancer avant le processus de une classe afin de la lancer avant le processus de délinéarisationdélinéarisation

– Accomplir des opérations de reconstruction de l'objet Accomplir des opérations de reconstruction de l'objet • en ajoutant des informations, en ajoutant des informations, • en réouvrant des connexions vers des bases de données,en réouvrant des connexions vers des bases de données,• en initialisant des actions, etc..en initialisant des actions, etc..

Page 97: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

97

Les fonctions __sleep et __wakeupLes fonctions __sleep et __wakeup

Syntaxe de base :Syntaxe de base : Les classes et les objets(13)Les classes et les objets(13)

$this->jour[4] .= "dre".$d; $this->jour[5] .= "e".$d; $this->jour[6] .= "anche"; } } 

$objet = new semaine();?><br><h3>Objet initial :</h3><?php print_r($objet);  $obj_linearise = serialize($objet);?><br><h3>Objet linéarisé :</h3><?php print_r($obj_linearise);?><br><h3>Objet délinéarisé :</h3><?php $obj_delinerarise = unserialize($obj_linearise); print_r($obj_delinerarise);?>

<?php class semaine {

var $erreur; var $jour;  function semaine(){ $this->jour = array("lundi", "mardi", "mercredi", "jeudi", "vendredi", "samedi", dimanche"); }  function __sleep() { for($i = 0; $i < sizeof($this->jour); $i++) { $chaine_result = substr($this->jour[$i], 0, 3); $this->jour[$i] = $chaine_result; } return array('jour'); }  function __wakeup() { $d = "di"; $this->jour[0] .= $d; $this->jour[1] .= $d; $this->jour[2] .= "cre".$d; $this->jour[3] .= $d;

Page 98: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

98

Syntaxe de base :Syntaxe de base : Les classes et les objets(14)Les classes et les objets(14)

Manipulation des classes et des objetsManipulation des classes et des objets

Les informations méta sur les classes et les objetsLes informations méta sur les classes et les objets

Get_class()Get_class() détermination de la classe d’un objetdétermination de la classe d’un objet Get_parent_class()Get_parent_class() détermination des super-classes d’un objetdétermination des super-classes d’un objet Method_exists()Method_exists() détermination de la présence d’une méthode détermination de la présence d’une méthode

dans un objetdans un objet Class_exists()Class_exists() Détermination de la présence d’une définition Détermination de la présence d’une définition

de de classe classe Is_subclass_of()Is_subclass_of() Vérifie si une classe est une sous classe d’une Vérifie si une classe est une sous classe d’une

autreautre Get_class_methods()Get_class_methods() Retourne les méthodes d’une classe dans un Retourne les méthodes d’une classe dans un

tableautableau Get_declared_classes()Get_declared_classes() Retourne les classes déclarées dans un tableauRetourne les classes déclarées dans un tableau Get_class_vars()Get_class_vars() Retourne les variables de classe dans un Retourne les variables de classe dans un

tableautableau Get_object_vars()Get_object_vars() Retourne les variables d’un objet dans un Retourne les variables d’un objet dans un

tableautableau

Page 99: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

99

Syntaxe de base :Syntaxe de base : Les classes et les objets(15)Les classes et les objets(15)

Manipulation des classes et des objetsManipulation des classes et des objets Les objets PHP sont des tableaux associatifsLes objets PHP sont des tableaux associatifs

Les noms des variables sont conçus comme des mots-clés Les noms des variables sont conçus comme des mots-clés Les valeurs des variables comme les éléments d’un tableau Les valeurs des variables comme les éléments d’un tableau

associatifassociatif

<?Class ClasseTest {

var $col = "#0000E0" ;var $txt= "Salut PHP" ;var $ft = "Arial" ;function ClasseTest() {echo "<FONT FACE=\ " COLOR=\"$this->col\" >$this->txt</FONT><br>;}};

$obj = new ClasseTest;Reset($obj);Foreach ($obj as $key=>$elem){Echo "$key=>$elem<br>" ;} ?>

Page 100: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

100

La gestion des fichiers avec PHP (1)La gestion des fichiers avec PHP (1)

PrincipePrincipe

PHP prend en charge l’accès au système de fichiers du système PHP prend en charge l’accès au système de fichiers du système d’exploitation du serveurd’exploitation du serveur

Les opérations sur les fichiers concernent la création, Les opérations sur les fichiers concernent la création, l’ouverture, la suppression, la copie, la lecture et l’écriture de l’ouverture, la suppression, la copie, la lecture et l’écriture de fichiersfichiers

Les possibilités d’accès au système de fichiers du serveur sont Les possibilités d’accès au système de fichiers du serveur sont réglementées par les différents droits d’accès accordés au réglementées par les différents droits d’accès accordés au propriétaire, à son groupe et aux autres utilisateurspropriétaire, à son groupe et aux autres utilisateurs

La communication entre le script PHP et le fichier est repérée La communication entre le script PHP et le fichier est repérée par une variable, indiquant l'état du fichier et qui est passée en par une variable, indiquant l'état du fichier et qui est passée en paramètre aux fonctions spécialisées pour le manipulerparamètre aux fonctions spécialisées pour le manipuler

Page 101: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

101

La gestion des fichiers avec PHP (2)La gestion des fichiers avec PHP (2)

Ouverture de fichiersOuverture de fichiers La fonction La fonction fopen()fopen() permet d'ouvrir un fichier, que ce soit pour le lire, le permet d'ouvrir un fichier, que ce soit pour le lire, le

créer ou y écrirecréer ou y écrire : : entier fopen(chaine nom du fichier, chaine mode);

– mode : indique le type d'opération qu'il sera possible d'effectuer sur le fichier après ouverture. Il s'agit d'une lettre (en réalité une chaîne de caractères) indiquant l'opération possible:

• r (comme read) indique une ouverture en lecture seulement • w (comme write) indique une ouverture en écriture seulement (la

fonction crée le fichier s'il n'existe pas) • a (comme append) indique une ouverture en écriture seulement avec

ajout du contenu à la fin du fichier (la fonction crée le fichier s'il n'existe pas)

– lorsque le mode est suivie du caractère + celui-ci peut être lu et écrit

– le fait de faire suivre le mode par la lettre b entre crochets indique que le fichier est traité de façon binaire.

Page 102: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

102

La gestion des fichiers avec PHP La gestion des fichiers avec PHP (3)(3)

Ouverture de fichiersOuverture de fichiersMod

eDescription

r ouverture en lecture seulement

w ouverture en écriture seulement (la fonction crée le fichier s'il n'existe pas)

aouverture en écriture seulement avec ajout du contenu à la fin du fichier (la fonction crée le fichier s'il n'existe pas)

r+ ouverture en lecture et écriture

w+ ouverture en lecture et écriture (la fonction crée le fichier s'il n'existe pas)

a+ouverture en lecture et écriture avec ajout du contenu à la fin du fichier (la fonction crée le fichier s'il n'existe pas)

Page 103: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

103

La gestion des fichiers avec PHPLa gestion des fichiers avec PHP (4)(4)

Ouverture de fichiersOuverture de fichiers ExempleExemple

$fp = fopen("fichier.txt","r"); //lecture

$fp = fopen("fichier.txt","w"); //écriture depuis début du fichier

De plus, la fonction fopen permet d'ouvrir des fichiers De plus, la fonction fopen permet d'ouvrir des fichiers présents sur le web grâce à leur URL. présents sur le web grâce à leur URL.

Exemple : un script permettant de récupérer le contenu d'une Exemple : un script permettant de récupérer le contenu d'une page d'un site web: page d'un site web:

<? $fp = fopen("http://www.ensm-douai.fr","r"); //lecture du fichierwhile (!feof($fp)) { //on parcoure toutes les lignes $page .= fgets($fp, 4096); // lecture du contenu de la ligne} ?>

Page 104: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

104

La gestion des fichiers avec PHP (5)La gestion des fichiers avec PHP (5)

Ouverture de fichiersOuverture de fichiers Il est généralement utile de tester si l'ouverture de fichier Il est généralement utile de tester si l'ouverture de fichier

s'est bien déroulée ainsi que d'éventuellement stopper le s'est bien déroulée ainsi que d'éventuellement stopper le script PHP si cela n'est pas le casscript PHP si cela n'est pas le cas

<? if (!$fp = fopen("http://www.ensm-douai.fr","r")) {echo "Echec de l'ouverture du fichier";exit;}else {// votre code;}?>

Un fichier ouvert avec la fonction Un fichier ouvert avec la fonction fopen() doit être fermé, doit être fermé, à la fin de son utilisation, par la fonction à la fin de son utilisation, par la fonction fclose() en lui en lui passant en paramètre l'entier retourné par la fonction passant en paramètre l'entier retourné par la fonction fopen()fopen()

Page 105: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

105

La gestion des fichiers avec PHP (6)La gestion des fichiers avec PHP (6)

Lecture et écriture de fichiersLecture et écriture de fichiers

Il est possible de lire le contenu d’un fichier et d'y écrire des Il est possible de lire le contenu d’un fichier et d'y écrire des informations grâce aux fonctions: informations grâce aux fonctions:

fputs() (ou l’alias (ou l’alias fwrite() ) permet d'écrire une chaîne de ) permet d'écrire une chaîne de caractères dans le fichier. Elle renvoie 0 en cas d'échec, 1 dans le caractères dans le fichier. Elle renvoie 0 en cas d'échec, 1 dans le cas contrairecas contraire

– booléen fputs(entier Etat_du_fichier, chaine Sortie);

fgets()fgets() permet de récupérer une ligne du fichier. Elle renvoie 0 en permet de récupérer une ligne du fichier. Elle renvoie 0 en cas d'échec, 1 dans le cas contraire cas d'échec, 1 dans le cas contraire

– fgets(entier Etat_du_fichier, entier Longueur);

• Le paramètre Longueur désigne le nombre de caractères maximum que la fonction est sensée récupérer sur la ligne

• Pour récupérer l'intégralité du contenu d'un fichier, il faut insérer la fonction fgets() dans une boucle while. On utilise la fonction feof(), fonction testant la fin du fichier.

Page 106: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

106

La gestion des fichiers avec PHP (7)La gestion des fichiers avec PHP (7)

Lecture et écriture de fichiers

<? if (!$fp = fopen("fichier.txt","r")) {echo "Echec de l'ouverture du fichier";exit;}else {

while(!feof($fp)) {// On récupère une ligne

$Ligne = fgets($fp,255); // On affiche la ligne

echo $Ligne;// On stocke l'ensemble des lignes dans une variable

$Fichier .= $Ligne; }fclose($fp); // On ferme le fichier}

?>

Page 107: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

107

Lecture et écriture de fichiersLecture et écriture de fichiers Pour stocker des informations dans le fichier, il faut dans un Pour stocker des informations dans le fichier, il faut dans un

premier temps ouvrir le fichier en écriture en le créant s’il premier temps ouvrir le fichier en écriture en le créant s’il n'existe pasn'existe pas

Deux choix : le mode 'w' et le mode 'a'. Deux choix : le mode 'w' et le mode 'a'. – On préfère le second puisque le pointeur se trouve

en fin de fichier

<? $fp = fopen("php_8_fichier.txt","a"); // ouverture du fichier en

écriturefputs($fp, "\n"); // on va a la lignefputs($fp, "$nom|$email"); // on écrit le nom et email dans le fichierfclose($fp); ?>

La gestion des fichiers avec PHP (8)La gestion des fichiers avec PHP (8)

Page 108: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

108

La gestion des fichiers avec PHP (9)La gestion des fichiers avec PHP (9)

Les tests de fichiersLes tests de fichiers

is_dir()is_dir() permet de savoir si le fichier dont le nom est permet de savoir si le fichier dont le nom est passé en paramètre correspond à un répertoire. passé en paramètre correspond à un répertoire.

– La fonction is_dir() renvoie 1 s’il s'agit d'un répertoire, 0 dans le cas contraire

booléen is_dir(chaine Nom_du_fichier);

is_executable()is_executable() permet de savoir si le fichier dont le permet de savoir si le fichier dont le nom est passé en paramètre est exécutable. nom est passé en paramètre est exécutable.

– La fonction is_executable() renvoie 1 si le fichier est exécutable, 0 dans le cas contraire

booléen is_executable(chaine Nom_du_fichier);

Page 109: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

109

La gestion des fichiers avec PHP (10)La gestion des fichiers avec PHP (10)

Les tests de fichiersLes tests de fichiers

is_file()is_file() permet de savoir si le fichier dont le nom est permet de savoir si le fichier dont le nom est passé en paramètre ne correspond ni à un répertoire, ni passé en paramètre ne correspond ni à un répertoire, ni à un lien symbolique. à un lien symbolique.

– La fonction is_file() renvoie 1 s’il s'agit d'un fichier, 0 dans le cas contraire

booléen is_file(chaine Nom_du_fichier);

is_link()is_link() permet de savoir si le fichier dont le nom est permet de savoir si le fichier dont le nom est passé en paramètre correspond à un lien symbolique. La passé en paramètre correspond à un lien symbolique. La fonction is_link() renvoie 1 s’il s'agit d'un lien fonction is_link() renvoie 1 s’il s'agit d'un lien symbolique, 0 dans le cas contraire symbolique, 0 dans le cas contraire

booléen is_link(chaine Nom_du_fichier);

Page 110: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

110

D'autres façons de lire et écrireD'autres façons de lire et écrire La fonction La fonction file() permet de retourner dans un tableau l'intégralité permet de retourner dans un tableau l'intégralité

d'un fichier en mettant chacune de ces lignes dans un élément du d'un fichier en mettant chacune de ces lignes dans un élément du tableautableau

Tableau file(chaine nomdufichier);

Exemple : Exemple : parcourir l'ensemble du tableau afin d'afficher le fichierparcourir l'ensemble du tableau afin d'afficher le fichier

<? $Fichier = "fichier.txt";if (is_file($Fichier)) {

if ($TabFich = file($Fichier)) {for($i = 0; $i < count($TabFich); $i++)

echo $TabFich[$i];}else {echo "Le fichier ne peut être lu...<br>";}}

else {echo "Désolé le fichier n'est pas valide<br> "  ;}?>

La gestion des fichiers avec PHP (11)La gestion des fichiers avec PHP (11)

Page 111: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

111

La gestion des fichiers avec PHP (12)La gestion des fichiers avec PHP (12)

D'autres façons de lire et d’écrireD'autres façons de lire et d’écrire La fonction La fonction fpassthru()fpassthru() permet d'envoyer le contenu d’un permet d'envoyer le contenu d’un

fichier dans la fenêtre du navigateur. fichier dans la fenêtre du navigateur.

booléen fpassthru(entier etat);

Elle permet d'envoyer le contenu du fichier à partir de la Elle permet d'envoyer le contenu du fichier à partir de la position courante dans le fichier.position courante dans le fichier.

Elle n'ouvre pas automatiquement un fichier. Il faut donc Elle n'ouvre pas automatiquement un fichier. Il faut donc

l'utiliser avec fopen(). l'utiliser avec fopen().

Il est possible par exemple de lire quelques lignes avec Il est possible par exemple de lire quelques lignes avec fgets(), puis d'envoyer le reste au navigateur.fgets(), puis d'envoyer le reste au navigateur.

Page 112: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

112

La gestion des fichiers avec PHP (13)La gestion des fichiers avec PHP (13)ExempleExemple : : script permettant de parcourir tous les fichiers HTML script permettant de parcourir tous les fichiers HTML

contenus dans un site à la recherche de MetaTagscontenus dans un site à la recherche de MetaTags

<?function ScanDir($Directory){echo "<b>Processing</b>: $Directory<br>\n";if (is_dir($Directory) && is_readable($Directory)) {if($MyDirectory = opendir($Directory)) {

while($Entry = readdir($MyDirectory)) {if (is_dir($Directory."/".$Entry)) {

if (($Entry != ".") && ($Entry != "..")) { echo "<b>Repertoire</b>: $Directory/$Entry<br>\n"; ScanDir($Directory."/".$Entry);

}}else {echo"<b>Fichier</b>:$Directory/$Entry\n";

if (eregi("(\.html)|(\.htm)",$Entry)){$MetaTags = get_meta_tags($Directory."/".$Entry);

}}}}closedir($MyDirectory);}

}}ScanDir(".");?>

Page 113: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

113

La gestion des fichiers avec PHPLa gestion des fichiers avec PHP (14)(14)

Le téléchargement de fichierLe téléchargement de fichier

Le langage PHP4 dispose de plusieurs outils facilitant le Le langage PHP4 dispose de plusieurs outils facilitant le téléchargement vers le serveur et la gestion des fichiers téléchargement vers le serveur et la gestion des fichiers provenant d'un clientprovenant d'un client

Un simple formulaire comportant un champ de type file Un simple formulaire comportant un champ de type file suffit au téléchargement d'un fichier qui subséquemment, suffit au téléchargement d'un fichier qui subséquemment, devra être traité par un script PHP adaptédevra être traité par un script PHP adapté

<form method="POST" action="traitement.php" enctype="multipart/form-data"> <input type="hidden" name="MAX_FILE_SIZE" value="Taille_Octets"> <input type="file" name="fichier" size="30"><br> <input type="submit" name="telechargement" value="telecharger"></form>

Page 114: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

114

La gestion des fichiers avec PHP(15)La gestion des fichiers avec PHP(15)

Le téléchargement de fichierLe téléchargement de fichier

Un champ caché doit être présent dans le formulaire afin de Un champ caché doit être présent dans le formulaire afin de spécifier une taille maximum (MAX_FILE_SIZE) pour le fichier à spécifier une taille maximum (MAX_FILE_SIZE) pour le fichier à télécharger. Cette taille est par défaut égale à deux mégaoctets.télécharger. Cette taille est par défaut égale à deux mégaoctets.

En PHP 4, le tableau associatif global $HTTP_POST_FILES contient En PHP 4, le tableau associatif global $HTTP_POST_FILES contient plusieurs informations sur le fichier téléchargé.plusieurs informations sur le fichier téléchargé.

$HTTP_POST_FILES['fichier']['name'] :$HTTP_POST_FILES['fichier']['name'] : fournit le nom d'origine du fichier. fournit le nom d'origine du fichier. $HTTP_POST_FILES['fichier']['type'] :$HTTP_POST_FILES['fichier']['type'] : fournit le type MIME du fichier. fournit le type MIME du fichier. $HTTP_POST_FILES['fichier']['size'] :$HTTP_POST_FILES['fichier']['size'] : fournit la taille en octets du fichier. fournit la taille en octets du fichier. $HTTP_POST_FILES['fichier']['tmp_name'] :$HTTP_POST_FILES['fichier']['tmp_name'] : fournit le nom temporaire fournit le nom temporaire

du fichier. du fichier.

Page 115: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

115

La gestion des fichiers avec PHP(16)(à La gestion des fichiers avec PHP(16)(à revoir)revoir)

Le téléchargement de fichierLe téléchargement de fichier PHP 3 quant à lui, fait appel au variable globale ou/et au tableau PHP 3 quant à lui, fait appel au variable globale ou/et au tableau

associatif globale $HTTP_POST_VARS à condition que associatif globale $HTTP_POST_VARS à condition que respectivement les options de configuration register_globals et respectivement les options de configuration register_globals et track_vars soient activées dans le fichier php.ini.track_vars soient activées dans le fichier php.ini.

$fichier$fichier : : renvoie le nom temporaire du fichier. renvoie le nom temporaire du fichier. $fichier_name :$fichier_name : renvoie le nom d'origine du fichier. renvoie le nom d'origine du fichier. $fichier_size :$fichier_size : renvoie la taille en octets du fichier. renvoie la taille en octets du fichier. $fichier_type :$fichier_type : renvoie le type MIME du fichier. renvoie le type MIME du fichier. $HTTP_POST_VARS['fichier']$HTTP_POST_VARS['fichier'] : : fournit le nom temporaire du fichier. fournit le nom temporaire du fichier. $HTTP_POST_VARS['fichier_name']$HTTP_POST_VARS['fichier_name'] : : fournit le nom d'origine du fichier. fournit le nom d'origine du fichier. $HTTP_POST_VARS['fichier_type']$HTTP_POST_VARS['fichier_type'] : : fournit le type MIME du fichier. fournit le type MIME du fichier. $HTTP_POST_VARS['fichier_size'] :$HTTP_POST_VARS['fichier_size'] : fournit la taille en octets du fichier. fournit la taille en octets du fichier.

Page 116: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

116

La gestion des fichiers avec PHP(17)La gestion des fichiers avec PHP(17)

Le téléchargement de fichierLe téléchargement de fichier Par défaut, le fichier envoyé par le client est stocké directement dans le Par défaut, le fichier envoyé par le client est stocké directement dans le

répertoire indiqué par l'option de configuration upload_tmp_dir dans le répertoire indiqué par l'option de configuration upload_tmp_dir dans le fichier php.ini.fichier php.ini.

upload_tmp_dir = c:\PHP\uploadtemp

Plusieurs fonctions spécialisées permettent la validation d'un fichier Plusieurs fonctions spécialisées permettent la validation d'un fichier téléchargé pour son utilisation ultérieure.téléchargé pour son utilisation ultérieure.

La fonction is_uploaded_fileLa fonction is_uploaded_file indique si le fichier a bien été indique si le fichier a bien été téléchargé par la méthode HTTP POST.téléchargé par la méthode HTTP POST.

$booleen=is_uploaded_file($HTTP_POST_FILES['fichier']['tmp_name']);

La fonction move_uploaded_fileLa fonction move_uploaded_file vérifie si le fichier a été téléchargé par vérifie si le fichier a été téléchargé par la méthode HTTP POST, puis si c'est le cas le déplace vers l'emplacement la méthode HTTP POST, puis si c'est le cas le déplace vers l'emplacement spécifié.spécifié.

$booleen = move_uploaded_file($HTTP_POST_FILES['fichier']['tmp_name'], "c:\\temporaire\\fichier_telecharge\\");

Page 117: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

117

La gestion des fichiers avec PHP(18)La gestion des fichiers avec PHP(18)

Le téléchargement de fichier Il est possible de télécharger plusieurs fichiers en même temps, en

utilisant des crochets à la suite du nom du champ afin d'indiquer que les informations relatives aux fichiers seront stockées dans un tableau.

<form action="traitement.php" method="POST“ enctype="multipart/form-data">

<input type="file" name= "fichier[]“ ><br> ... <input type="file" name= "fichierN[]“ > <br> <input type="submit" value="Envoyer" name="soumission"></form>

for($i = 0; $i < sizeof($HTTP_POST_FILES['fichier']['name']); $i++){ echo "Nom du fichier : " . $HTTP_POST_FILES['fichier']['name'][$i];}

Les fichiers téléchargés sont automatiquement effacés du répertoire temporaire au terme du script. il est nécessaire de déplacer les fichiers vers un autre endroit ou de

les renommer si ceux-ci doivent être conservés.

Page 118: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

118

La gestion des fichiers avec PHP(19)La gestion des fichiers avec PHP(19)<!-- Fichier : formulaire.html --><html><body> <form method="POST" action="traitement.php" enctype="multipart/form-data"> <input type="hidden" name="MAX_FILE_SIZE" value="1000000"> <input type="file" name="fichier" size="30"><br> <input type="submit" name="telechargement" value="telecharger"> </form> </body></html>

<?php /* Fichier : traitement.html*/ $repertoire = "f:\\PHP\\uploadtemp"; if (is_uploaded_file($HTTP_POST_FILES['fichier']['tmp_name'])) { $fichier_temp = $HTTP_POST_FILES['fichier']['tmp_name']; echo "<h3>Le fichier a été téléchargé avec succès " . "à l'emplacement suivant : <br>'" . $fichier_temp . "'</h3>"; $nom_fichier = $HTTP_POST_FILES['fichier']['name']; echo "<h3>Le nom d'origine du fichier est '" . $nom_fichier . "'.</h3>"; echo "<h3>Le type du fichier est '" . $HTTP_POST_FILES['fichier']['type'] . "'.</h3>"; echo "<h3>La taille du fichier est de '" . $HTTP_POST_FILES['fichier']['size'] . " octets'.</h3>"; copy($HTTP_POST_FILES['fichier']['tmp_name'], $repertoire . $nom_fichier);} else { echo '<h3 style="color:#FF0000">ATTENTION, ce fichier peut être à l\'origine' . ' d\'une attaque : ' . $HTTP_POST_FILES['fichier']['name'] . "!</h3>";}?>

Page 119: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

119

La gestion des fichiers avec PHP(20)La gestion des fichiers avec PHP(20)

La manipulation de fichiers distantsLa manipulation de fichiers distants

Il peut être utile de manipuler des fichiers à distance, c'est-Il peut être utile de manipuler des fichiers à distance, c'est-à-dire par le biais des protocoles de transferts HTTP ou FTP. à-dire par le biais des protocoles de transferts HTTP ou FTP.

PHP autorise l'ouverture d'un fichier par l'intermédiaire PHP autorise l'ouverture d'un fichier par l'intermédiaire d'une adresse URL dans la fonction fopend'une adresse URL dans la fonction fopen

$id_fichier = fopen("http://www.site.com/index.html", "r");

A partir de ce moment, toutes les informations contenues A partir de ce moment, toutes les informations contenues dans le fichier sont accessibles en lecture seule dans une dans le fichier sont accessibles en lecture seule dans une application PHPapplication PHP

$taille = filesize("fichier.html");echo str_replace("<", "&lt;", fread($id_fichier, $taille));

L'écriture sur un fichier distant est possible, à condition de L'écriture sur un fichier distant est possible, à condition de passer en argument une adresse FTP à la fonction fopen() passer en argument une adresse FTP à la fonction fopen() et que ce fichier soit nouveau. et que ce fichier soit nouveau.

$id_fichier = fopen("ftp://ftp.site.com/nouvelle_page.html", "w");

Page 120: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

120

La gestion des fichiers avec PHP(21)La gestion des fichiers avec PHP(21)

La manipulation de fichiers distantsLa manipulation de fichiers distants L'accès en écriture directement sur un site, nécessite L'accès en écriture directement sur un site, nécessite

souvent, la saisie d'un nom d'utilisateur et d'un mot de souvent, la saisie d'un nom d'utilisateur et d'un mot de passe dans l'adresse afin d'éviter toutes intrusions passe dans l'adresse afin d'éviter toutes intrusions inopportunesinopportunes

ftp://nom_utilisateur:[email protected]/nouvelle_page.html

La modification d'un fichier distant n'est pas réalisable par La modification d'un fichier distant n'est pas réalisable par ce moyence moyen

Sous un environnement Windows, il est impossible d'utiliser Sous un environnement Windows, il est impossible d'utiliser les fichiers distants dans les expressions include et require.les fichiers distants dans les expressions include et require.

Page 121: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

121

La gestion des fichiers avec PHP(22)La gestion des fichiers avec PHP(22)

<?php function recherche_contenu($adresse){ $id_fichier = fopen($adresse, "r"); if ($id_fichier) { $regexp = "<!-- Début contenu -->.*<!-- Fin contenu -->"; $contenu = fread($id_fichier, filesize($adresse)); if (eregi($regexp, $contenu, $donnee)){ echo "<h3><u>Données contenu :</u></h3> " . str_replace("<", "&lt;", $donnee[0]); } else echo "<p>Impossible de trouver la chaîne.\n"; } else echo "<p>Impossible d'ouvrir le fichier distant.\n"; fclose($id_fichier); } recherche_contenu("http://www.site.com/page.html");?>

Page 122: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

122

La gestion des fichiers avec PHP(23)La gestion des fichiers avec PHP(23)

Les fonctions de système de fichiersLes fonctions de système de fichiers $chaine = basename(chemin_fichier);retourne le nom du fichier à partir de l'adresse du fichier spécifiée.

true | false = chgrp(nom_fichier, groupe_propriétaire);modifie le groupe propriétaire du fichier.

true | false = chmod(nom_fichier, $mode);modifie le mode exprimé en nombre octal, du fichier.

true | false = chown(nom_fichier, propriétaire);modifie le groupe propriétaire du fichier.

clearstatcache();efface la mémoire cache remplie par les fonctions lsat et stat.

true | false = copy(fichier, nouveau_fichier);copie un fichier vers une nouvelle destination.

Page 123: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

123

La gestion des fichiers avec PHP(24)La gestion des fichiers avec PHP(24)

Les fonctions de système de fichiersLes fonctions de système de fichiersdelete(fichier);efface le fichier.

$chaine = dirname(chemin);retourne le nom du dossier parent.

$nombre = disk_free_space(dossier);retourne l'espace disponible sur le disque sur lequel est le dossier.

$nombre = diskfreespace(dossier);identique à disk_free_space.

$nombre = disk_total_space(dossier);retourne la taille totale d'un dossier.

true | false = fclose(ID_fichier);ferme un fichier indiqué par un identificateur retourné par fopen ou fsockopen.

true | false = feof(ID_fichier);teste la fin du fichier.

Page 124: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

124

La gestion des fichiers avec PHP(25)La gestion des fichiers avec PHP(25)

Les fonctions de dossiersLes fonctions de dossiers

nombre = chroot($chaine);définit la chaîne de caractères comme la nouvelle racine

nombre = chdir($chaine);définit le dossier en cours comme celui précisé par la chaîne de caractères.

$objet = dir($chaine);crée un objet à partir du dossier spécifié.

closedir($identificateur_dossier);ferme le dossier à partir d'un identificateur retourné par opendir.

$chaine = getcwd();retourne le nom du dossier en cours.

$identificateur_dossier = opendir($chaine);ouvre un dossier et retourne un identificateur de l'objet.

$chaine = readdir($identificateur_dossier);retourne le fichier suivant dans le dossier spécifié par l'entremise de son identificateur.

Page 125: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

125

Autres Fonctions PHP(1)Autres Fonctions PHP(1)

Les dates et les heures Les fonctions de date et d’heure

true | false = checkdate(mois, jour, année);vérifie la validité d'une date.

$chaine = date(format [, nombre]);retourne une chaîne de caractères date/heure selon le format spécifié et représentant la

date courante par défaut.

$tableau = getdate([nombre]);retourne les éléments de date et d'heure dans un tableau associatif.

$tableau = gettimeofday();retourne l'heure courante dans un tableau associatif.

$chaine = gmdate(format [, nombre]);retourne une chaîne de caractères date/heure GMT/CUT selon le format spécifié et

représentant la date courante par défaut.

$nombre = gmmktime(heure, minute, seconde, mois, jour, année [, 1/0]);retourne l'instant UNIX d'une date GMT spécifiée et avec éventuellement une heure

d'hiver

Page 126: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

126

Autres Fonctions PHP(2)Autres Fonctions PHP(2)

Les dates et les heures Les fonctions de date et d’heure

$chaine = gmstrftime(format [, nombre]);formate une date/heure GMT/CUT en fonction des paramétrages locaux définis par

setlocale.

$tableau = localtime([nombre][, tab_associatif]);retourne l'heure locale dans un tableau indicé par défaut ou associatif (1)

$chaine = microtime();retourne l'instant UNIX courant en secondes et microsecondes (1 janvier 1970 à 0H00)

$nombre = mktime(heure, minute, seconde, mois, jour, année [, 1/0]);retourne l'instant UNIX d'une date spécifiée et avec éventuellement une heure d'hiver

(1)

$chaine = strftime(format [, instant]);formate une date/heure locale avec les options locales

$nombre = time();retourne l'instant UNIX courant

Page 127: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

127

Autres Fonctions PHP(3)Autres Fonctions PHP(3)

Les dates et les heures Les formats de date et d'heure

a représente am (matin) ou pm (après-midi).A représente AM (matin) ou PM (après-midi).B représente une heure Internet Swatch.d représente le jour du mois sur deux chiffres allant de 01 à 31.D représente le jour de la semaine en trois lettres et en anglais (Sun, ..., Sat).F représente le mois complet en anglais (January, ..., December).g représente une heure au format 12 heures allant de 1 à 12.G représente une heure au format 24 heures allant de 1 à 24.h représente une heure au format 12 heures avec un zéro de complément

allant de 00 à 11.H représente une heure au format 24 heures allant de 00 à 23.i représente les minutes allant de 00 à 59.I est égal à 1 si l'heure d'été est activée ou 0 pour l'heure d'hiver.j représente le jour du mois allant de 1 à 31.l représente le jour de la semaine complet et en anglais (Sunday, ...,

Saturday).L est égal à 1 si l'année est bissextile, sinon 0.m représente un mois allant de 01 à 12.M représente un mois en trois lettres et en anglais (Jan, ..., Dec).

Page 128: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

128

Autres Fonctions PHP(4)Autres Fonctions PHP(4)

Les dates et les heures Les formats de date et d'heur

n représente un mois allant de 1 à 12.

O représente la différence d'heures avec l'heure de Greenwich (+0100).

r représente un format de date conforme au RFC 822 (Mon, 25 Mar 2002 05:08:26 +0100).

s représente les secondes allant de 00 à 59.

S représente le suffixe ordinal d'un nombre en anglais et sur deux lettres th ou nd.

t représente le nombre de jours dans le mois (28, 29, 30 ou 31).

T représente le fuseau horaire.

U représente les secondes depuis une époque.

w représente le jour de la semaine allant de 0 (Dimanche) à 6 (Samedi).

Y représente une année sur quatre chiffres (2002).

y représente une année sur 2 chiffres (02).

z représente le jour de l'année allant de 0 à 365.

Z représente le décalage horaire en secondes.

Page 129: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

129

Autres Fonctions PHP(5)Autres Fonctions PHP(5)

Les dates et les heures ExempleExemple

<?php $tab_jour = array("Dimanche", "Lundi", "Mardi", "Mercredi", "Jeudi",

"Vendredi", "Samedi"); $tab_mois = array("Janvier", "Février", "Mars", "Avril", "Mai", "Juin", "Juillet",

"Août", "Septembre", "Octobre", "Novembre", "Décembre"); $format = "w"; $jour = date($format); $format = "n"; $mois = date($format); echo $tab_jour[$jour] . " " . date("d") . " " . $tab_mois[$mois-1] . " " .

date("Y"); $format = "l d F Y"; echo date($format); ?>

Page 130: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

130

PARTIE II : PARTIE II :

L’interactivité L’interactivité (La plus belle promesse du Web)

en PHPen PHP

Page 131: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

131

PHP et les formulairesPHP et les formulaires(1)(1)

Formulaire HTMLFormulaire HTML Retourne des informations saisies par un utilisateur vers une Retourne des informations saisies par un utilisateur vers une

application serveurapplication serveur La création d’un formulaire nécessite la connaissance de La création d’un formulaire nécessite la connaissance de

quelques balises HTML indispensables :quelques balises HTML indispensables :

Structure : un formulaire commence toujours par la balise Structure : un formulaire commence toujours par la balise <form><form> et se termine par la balise et se termine par la balise </form></form>

Champ de saisie de text en ligne : Champ de saisie de text en ligne : <input type = "text" name ="nom_du_champ" <input type = "text" name ="nom_du_champ"

value="chaîne">value="chaîne">

Boutons d’envoi et d’effacement :Boutons d’envoi et d’effacement :<input type=" submit " value = "Envoyer"><input type=" submit " value = "Envoyer"><input type = "reset" name ="efface" value = "Effacer"><input type = "reset" name ="efface" value = "Effacer">

Case à cocher et bouton radio :Case à cocher et bouton radio :<input type = "checkbox" name ="case1" value="valeur_case"><input type = "checkbox" name ="case1" value="valeur_case"><input type = "radio" name ="radio1" value ="valeur_radio"><input type = "radio" name ="radio1" value ="valeur_radio">

Page 132: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

132

PHP et les formulaires(2)PHP et les formulaires(2)

Formulaire HTMLFormulaire HTML Balises HTML

Liste de sélection avec options à choix unique :Liste de sélection avec options à choix unique :

<select name ="select" size="1"><option value = "un"> choix </option><option value ="deux"> choix2 </option></select>

Liste de sélection avec options à choix multiples :Liste de sélection avec options à choix multiples :

<select name ="select" size = "1" multiple><option value = "un"> choix1 </option><option value = "deux"> choix2 </option></select>

Page 133: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

133

PHP et les formulaires(3)PHP et les formulaires(3)

Formulaire HTMLFormulaire HTML Méthodes d’envoi get et postMéthodes d’envoi get et post

transmission selon une des deux méthodes d'envoi GET ou transmission selon une des deux méthodes d'envoi GET ou POSTPOST

– La méthode GET place les informations d'un formulaire

directement à la suite de l'adresse URL de la page appelée.• http://www.site.com/cible.php?champ=valeur&champ2=valeur

• inconvénients : - rendre visibles les données dans la barre d’adresse du navigateur. - De plus, la longueur totale est limitée à 255 caractères,

ce qui rend impossible la transmission d’un volume de données important

– La méthode POST regroupe les informations dans l'entête d'une requête HTTP

• Assure une confidentialité efficace des données

Page 134: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

134

PHP et les formulaires(4)PHP et les formulaires(4)

Formulaire HTMLFormulaire HTML Méthodes d’envoi get et postMéthodes d’envoi get et post

Les tableaux associatifs $HTTP_GET_VARS et Les tableaux associatifs $HTTP_GET_VARS et $HTTP_POST_VARS contiennent toutes les variables $HTTP_POST_VARS contiennent toutes les variables envoyées par un formulaireenvoyées par un formulaire

– Utiliser pour résoudre des problèmes de conflit de nom de Utiliser pour résoudre des problèmes de conflit de nom de variablesvariables

Il est possible de définir si et dans quel ordre les Il est possible de définir si et dans quel ordre les variables GET, POST et COOKIE sont automatiquement variables GET, POST et COOKIE sont automatiquement importées dans un script PHPimportées dans un script PHP

• Utiliser l’option de configuration gpc_order dans le Utiliser l’option de configuration gpc_order dans le fichier de configuration php.inifichier de configuration php.ini

• La sauvegarde est réalisée de gauche à droite, les La sauvegarde est réalisée de gauche à droite, les nouvelles valeurs écrase les anciennesnouvelles valeurs écrase les anciennes

Page 135: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

135

PHP et les formulaires(5)PHP et les formulaires(5)<<form method="GET | POST" action="page_cible.php"> <input type="text" name="Champ_saisie" value="Texte" <select name="Liste_Choix" size="3"> <option value="Option_1">Option_1</option> <option value="Option_2">Option_2</option> <option value="Option_3">Option_3</option> </select> <textarea name="Zone_Texte" cols="30" rows="5"> Texte par défaut </textarea>

<input type="checkbox" name="Case_Cocher[]" value="Case_1"> Case à cocher 1<br>

<input type="checkbox" name="Case_Cocher[]" value="Case_2"> Case à cocher 2<br>

<input type="checkbox" name="Case_Cocher[]" value="Case_3"> Case à cocher 3<br>

<input type="radio" name="Case_Radio" value="Case radio 1"> Case radio 1<br>

<input type="radio" name="Case_Radio" value="Case radio 2"> Case radio 2<br> <input type="radio" name="Case_Radio" value="Case radio 3"> Case radio 3<br> <input type="cancel" name="Annulation" value="Annuler"> <input type="submit" name="Soumission" value="Soumettre"> </form>

Page 136: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

136

PHP et les formulaires(6)PHP et les formulaires(6)

PHP et les formulairesPHP et les formulaires Lors de la soumission à une page de traitement, chaque

élément de saisie est assimilé à une variable PHP dont le nom est constitué par la valeur de l'attribut name et son contenu par la valeur de l'attribut value

<?php $resultat = $Champ_saisie . "<br>"; $resultat .= $Liste_Choix . "<br>"; $resultat .= $Zone_Texte . "<br>"; for ($i = 0; $i < count($Case_Cocher); $i++) { $resultat .= $Case_Cocher[$i] . "<br>"; } $resultat .= $Case_Radio . "<br>"; ?>

Page 137: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

137

PHP et les formulaires(7)PHP et les formulaires(7)

PHP et les formulairesPHP et les formulaires La plupart des éléments d'un formulaire n'acceptent qu'une

seule et unique valeur, laquelle est affectée à la variable correspondante dans le script de traitement.

$Champ_Saisie = "Ceci est une chaîne de caractères.";

Pour des cases à cocher et les listes à choix multiples, plusieurs valeurs peuvent être sélectionnées entraînant l'affectation d'un tableau de valeurs aux variables correspondantes.

$Case_Cocher[0] = "Case radio 1";$Case_Cocher[1] = "Case radio 3";

Page 138: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

138

Les cookiesLes cookies (1) (1)

PrincipePrincipe Un cookie est un fichier texte créé par un script et stocké sur Un cookie est un fichier texte créé par un script et stocké sur

l’ordinateur l’ordinateur des visiteurs d’un sitedes visiteurs d’un site

Les cookies permettent de conserver des renseignements Les cookies permettent de conserver des renseignements utiles sur chaque utilisateur, et de les réutiliser lors de sa utiles sur chaque utilisateur, et de les réutiliser lors de sa prochaine visiteprochaine visite

Exemple : personnaliser la page d’accueil ou les autres Exemple : personnaliser la page d’accueil ou les autres pages du site pages du site

– un message personnel comportant par exemple son nom, la date de sa dernière visite, ou tout autre particularité.

Les cookies étant stockés sur le poste client, l’identification Les cookies étant stockés sur le poste client, l’identification est immédiate et ne peuvent apparaître sur l’écran d’un est immédiate et ne peuvent apparaître sur l’écran d’un visiteur que les renseignements qui le concernentvisiteur que les renseignements qui le concernent

Pour des raisons de sécurité, les cookies ne peuvent être Pour des raisons de sécurité, les cookies ne peuvent être lus que par des pages issues du serveur qui les a crééslus que par des pages issues du serveur qui les a créés

Page 139: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

139

Les cookies(2)Les cookies(2)

PrincipePrincipe Le nombre de cookies qui peuvent être définis sur le même Le nombre de cookies qui peuvent être définis sur le même

poste client est limité à 20 et la taille de chacun est limitée poste client est limité à 20 et la taille de chacun est limitée à 4ko.à 4ko.

Un navigateur peut stocker un maximum de 300 cookiesUn navigateur peut stocker un maximum de 300 cookies

La date d’expiration des cookies est définie de manière La date d’expiration des cookies est définie de manière explicite par le serveur web chargé de les mettre en place.explicite par le serveur web chargé de les mettre en place.

Les cookies disponibles sont importés par PHP sous forme Les cookies disponibles sont importés par PHP sous forme de variables identifiées sous les noms utilisés par ces de variables identifiées sous les noms utilisés par ces cookiescookies

La variable globale du serveur $HTTP_COOKIES_VARS La variable globale du serveur $HTTP_COOKIES_VARS enregistre tous les cookies qui ont été définisenregistre tous les cookies qui ont été définis

Page 140: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

140

Les cookies(3)Les cookies(3)

Exemple d’application des cookiesExemple d’application des cookies Mémorisation des paniers dans les applications d’e-Mémorisation des paniers dans les applications d’e-

commercecommerce

Identification des utilisateursIdentification des utilisateurs

Des pages web individualiséesDes pages web individualisées

Afficher des menus personnalisés Afficher des menus personnalisés

Afficher des pages adaptées aux utilisateurs en fonction Afficher des pages adaptées aux utilisateurs en fonction de leurs précédents visitesde leurs précédents visites

Page 141: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

141

Les cookies(4)Les cookies(4)

Écrire des cookiesÉcrire des cookies L’écriture de cookies est possible grâce à la fonction L’écriture de cookies est possible grâce à la fonction setcookie()

il faut cette fonction dès le début du script avant l’envoi il faut cette fonction dès le début du script avant l’envoi d’aucune autre information de la part du serveur vers le d’aucune autre information de la part du serveur vers le poste client. poste client.

Setcookie("nom_var", "valeur_var", date_expiration, "chemin", "domain", " secure")

<?phpsetcookie (“PremierCookie", “Salut", time() +3600*24*60) ;…if (!$PremierCookie) {

echo “le cookie n’a pas été défini”;}else {echo $premierCookie, “<br>”;} ?>

Page 142: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

142

Les cookies(5)Les cookies(5)

Écriture de cookiesÉcriture de cookies Nom_var :Nom_var : nom de la variable qui va stocker l’information nom de la variable qui va stocker l’information

sur le poste client et qui sera utilisée pour récupérer cette sur le poste client et qui sera utilisée pour récupérer cette information dans la page qui lira le cookie. information dans la page qui lira le cookie.

C’est la seule indication obligatoire pour un cookieC’est la seule indication obligatoire pour un cookie

Valeur_var :Valeur_var : valeur stockée dans la variable. Par exemple valeur stockée dans la variable. Par exemple une chaîne de caractères ou une variable chaîne, en une chaîne de caractères ou une variable chaîne, en provenance d’un formulaireprovenance d’un formulaire

Date_expiration :Date_expiration : la date à laquelle le cookie ne sera plus la date à laquelle le cookie ne sera plus lisible et sera effacé du poste client lisible et sera effacé du poste client 

on utilise en général la date du jour, définie avec la on utilise en général la date du jour, définie avec la fonction time() à laquelle on ajoute la durée de validité fonction time() à laquelle on ajoute la durée de validité désiréedésirée

Si l’attribut n’est pas spécifié, le cokie expire à l’issue de Si l’attribut n’est pas spécifié, le cokie expire à l’issue de la sessionla session

Page 143: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

143

Les cookies(6)Les cookies(6)

Écriture de cookiesÉcriture de cookies

Chemin : Chemin : définit la destination (incluant les sous-définit la destination (incluant les sous-répertoire) à laquelle le navigateur doit envoyer le cookie.répertoire) à laquelle le navigateur doit envoyer le cookie.

Domain set :Domain set : le nom du domaine à partir duquel peuvent le nom du domaine à partir duquel peuvent être lus les cookies. être lus les cookies.

On peut aussi utiliser la variable d’environnement On peut aussi utiliser la variable d’environnement $SERVER_NAME à la place.$SERVER_NAME à la place.

Secure :Secure : un nombre qui vaut 0 si la connexion n’est pas un nombre qui vaut 0 si la connexion n’est pas sécurisée, sinon, il vaut 1 pour une connexion sécuriséesécurisée, sinon, il vaut 1 pour une connexion sécurisée

Page 144: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

144

Les cookies(7)Les cookies(7)

Lecture de cookiesLecture de cookies

Un cookie sera automatiquement passé en paramètre au script Un cookie sera automatiquement passé en paramètre au script et sa valeur sera directement accessible dans la variable et sa valeur sera directement accessible dans la variable $NomDuCookie..

Si celui-ci visite une des pages PHP de ce même domaine Si celui-ci visite une des pages PHP de ce même domaine dont le chemin est inclut dans le paramètre chemin (si le dont le chemin est inclut dans le paramètre chemin (si le chemin est / le cookie est valide pour toutes les pages de ce chemin est / le cookie est valide pour toutes les pages de ce site).site).

Il faut d’abord vérifier l’existence des variables dont les noms Il faut d’abord vérifier l’existence des variables dont les noms et les valeurs ont été définis lors de la création du cookie. et les valeurs ont été définis lors de la création du cookie.

– Cette vérification s’effectue grâce à la fonction isset($nom_var) qui renvoie true si la variable $nom_var existe et false sinon.

<?phpif (isset ($nom)) {echo "<h2> Bonjour $nom </h2>" ;}else echo "pas de cookie" ;?>

Page 145: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

145

Les cookies(8)Les cookies(8)

Écriture de plusieurs variables par un Écriture de plusieurs variables par un cookiecookie

Utilisation de la fonction Utilisation de la fonction compact()compact() pour transformer les pour transformer les variables en un tableauvariables en un tableau

Convertir le tableau en une chaîne de caractère à l’aide Convertir le tableau en une chaîne de caractère à l’aide de la fonction de la fonction implode()implode()

Affecter la chaîne créée à l’attribut « nom_cookie »Affecter la chaîne créée à l’attribut « nom_cookie »

<?$col="#FF0000" ;$size=24;$font="Arial" ;$text="Je suis le ookie« ;$arr=compact("col" , " size" , " font" , "text" );$val=implode(" &" , $arr);Setcookie("la_cookie" , $val, time()+600);

Page 146: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

146

Les cookies(9)Les cookies(9)

Lecture de plusieurs variables d’un cookieLecture de plusieurs variables d’un cookie Décomposé la chaîne stockée par la cookie et retrouver un Décomposé la chaîne stockée par la cookie et retrouver un

tableau en utilisant la fonction tableau en utilisant la fonction explode()explode()

<?phpecho " <b> voici le contenu de la chaîne cookie : </b><br>";echo $le_cookie, "<br> <br>";}$arr=explode("&", $la_cookie);echo "<b> ces variables ont été établies à partir de la chaîne cookie : </b>

<br> <br>";foreach ($arr as $k=>$elem) {echo "$k=>$elem <br>";}?>

Page 147: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

147

Les cookies(10)Les cookies(10)

Supprimer un cookieSupprimer un cookie Il suffit de renvoyer le cookie grâce à la fonction setcookie() Il suffit de renvoyer le cookie grâce à la fonction setcookie()

en spécifiant simplement l'argument NomDuCookieen spécifiant simplement l'argument NomDuCookie

<?phpsetcookie("Visites");?>

Une autre méthode consiste à envoyer un cookie dont la Une autre méthode consiste à envoyer un cookie dont la date d'expiration est passée: date d'expiration est passée:

  <?phpsetcookie("Visites","", )

Page 148: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

148

Les cookies(11)Les cookies(11)

Quelques précisions sur les cookiesQuelques précisions sur les cookies

Setcookie() doit être utilisée avant l’envoi de données HTML vers Setcookie() doit être utilisée avant l’envoi de données HTML vers le navigateur, même si ces données sont envoyées avec echo, le navigateur, même si ces données sont envoyées avec echo, print ou équivalentprint ou équivalent

Le cookie n'est pas visible avant le prochain chargement de pageLe cookie n'est pas visible avant le prochain chargement de page

Avec PHP3, si plusieurs cookies sont envoyées de suite, les appels Avec PHP3, si plusieurs cookies sont envoyées de suite, les appels seront traités en ordre inverse, alors qu'avec PHP4 il seront traités seront traités en ordre inverse, alors qu'avec PHP4 il seront traités dans l'ordredans l'ordre

Certains navigateurs ne traitent pas bien certains cas liés aux Certains navigateurs ne traitent pas bien certains cas liés aux cookies cookies

Microsoft Internet Explorer 4 avec le Service Pack 1 ne traite Microsoft Internet Explorer 4 avec le Service Pack 1 ne traite pas correctement les cookies qui ont le paramètre chemin pas correctement les cookies qui ont le paramètre chemin définidéfini

Netscape Communicator 4.05 et Microsoft Internet Explorer 3.x Netscape Communicator 4.05 et Microsoft Internet Explorer 3.x ne traitent pas correctement les cookies qui n'ont pas les ne traitent pas correctement les cookies qui n'ont pas les paramètres chemin et expiration définis.paramètres chemin et expiration définis.

Page 149: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

149

Les cookies(12) Les cookies(12)

Exemples d'utilisation de cookiesExemples d'utilisation de cookies //Un script permettant de savoir si un visiteur est déjà venu sur le site

pendant le moissetcookie("Visites","Oui",time()+2592000,"/", " .ensm-douai.fr",0); ?

// Envoi d'un cookie qui disparaitra après la fermeture du navigateurSetCookie("UserSessionCookie","$login:$pass"); 

// Envoi d'un cookie qui restera présent 24 heuresSetCookie("DejaVisite","1",time()+3600*24,"/",". ensm-douai.fr ",0); 

// Envoi d'un cookie qui s'effacera le 1er janvier 2003SetCookie("An2002","1",mktime(0,0,0,1,1,2003),"/",". ensm-douai.fr

",0);

//script permettant de compter le nombre de visite de la page par le visiteur

<?php$Visites++;setcookie("Visites",$Visites,time()+2592000,"/",". ensm-douai.fr

",0);?>

Page 150: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

150

Interfaçage avec une base de Interfaçage avec une base de données(1)données(1)

PrincipePrincipe PHP propose de nombreux outils permettant de travailler PHP propose de nombreux outils permettant de travailler

avec la plupart des SGBDR avec la plupart des SGBDR Oracle, Sybase, Microsoft SQL Server, PostgreSQL ou encore MySQLOracle, Sybase, Microsoft SQL Server, PostgreSQL ou encore MySQL

Lorsqu'une base de données n'est pas directement Lorsqu'une base de données n'est pas directement supportée par Php, il est possible d'utiliser un driver ODBC supportée par Php, il est possible d'utiliser un driver ODBC (pilote standard) pour communiquer avec les bases de (pilote standard) pour communiquer avec les bases de donnéesdonnées

Php fournit un grand choix de fonctions permettant de Php fournit un grand choix de fonctions permettant de manipuler les bases de données. manipuler les bases de données.

Quatre fonctions sont essentielles: Quatre fonctions sont essentielles:

– La fonction de connexion au serveur – La fonction de choix de la base de données – La fonction de requête – La fonction de déconnexion

Page 151: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

151

Interfaçage avec une base de Interfaçage avec une base de données(2)données(2)

PrincipePrincipe Avec le SGBD MySQL, les fonctions de Avec le SGBD MySQL, les fonctions de

manipulation sont : manipulation sont :

mysql_connect mysql_connect

mysql_select_db mysql_select_db

mysql_query mysql_query

mysql_closemysql_close

Page 152: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

152

Interfaçage avec une base de Interfaçage avec une base de données(3)données(3)

La connexion à un SGBDRLa connexion à un SGBDR

Déclarer les variables qui vont permettre la connexion à la Déclarer les variables qui vont permettre la connexion à la base de donnéesbase de données

Ce sont les paramètres (optionnels généralement) des Ce sont les paramètres (optionnels généralement) des fonctions de connexion à la base. Ces variables sont:fonctions de connexion à la base. Ces variables sont:

• $user : Le nom d'utilisateur

• $passwd : Le mot de passe

• $host : L'hôte (ordinateur sur lequel le SGBD est installé) • à défaut le nom d’hôte est localhost

• $bdd : Le nom de la base de données

Page 153: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

153

Interfaçage avec une base de Interfaçage avec une base de données(4)données(4)

La connexion à un SGBDRLa connexion à un SGBDR Déclarer les variables qui vont permettre la connexion à la Déclarer les variables qui vont permettre la connexion à la

base de donnéesbase de données Il est. utile de créer un script PHP contenant les Il est. utile de créer un script PHP contenant les

variables de connexion sous forme de variables et lier variables de connexion sous forme de variables et lier ce script aux autres scripts en utilisant l’instruction ce script aux autres scripts en utilisant l’instruction include().include().

<? // conexion_data.php4/* Accès au serveur de bases de données MySQL */$MySql_Hot=“localhost”;$MySql_User=“admin”;$MySql_Passw=“admin”;//$MySQL_Host=“localhost”;//$MySQL_USER=“root”;//$MySQL_Passw=“”;?>

Page 154: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

154

Interfaçage avec une base de Interfaçage avec une base de données(5)données(5)

La connexion à un SGBDRLa connexion à un SGBDR La connexion à (un serveur) un système de gestion de base La connexion à (un serveur) un système de gestion de base

de données s'effectue par l'entremise des fonctions de données s'effectue par l'entremise des fonctions spécialiséesspécialisées

mysql_connect("nom_serveur","nom_utilisateur","mot_passe");mysql_connect("nom_serveur","nom_utilisateur","mot_passe");– retourne une valeur de type Integer servant d’identificateur de retourne une valeur de type Integer servant d’identificateur de

connexion lorsque la connexion a été établieconnexion lorsque la connexion a été établie– retourne False si une erreur se produit lors de l ’établissement de la retourne False si une erreur se produit lors de l ’établissement de la

connexionconnexion

mssql_connect("nom_serveur","nom_utilisateur","mot_passe");mssql_connect("nom_serveur","nom_utilisateur","mot_passe");

ocilogon("nom_utilisateur","mot_passe", "nom_base");ocilogon("nom_utilisateur","mot_passe", "nom_base");

pg_connect("dbname=nom_base,host=nom_serveur pg_connect("dbname=nom_base,host=nom_serveur port=num_port" "user=nom_utilisateur port=num_port" "user=nom_utilisateur password=mot_passe");password=mot_passe");

sybase_connect("nom_serveur","nom_utilisateur","mot_passe");sybase_connect("nom_serveur","nom_utilisateur","mot_passe");

Page 155: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

155

La connexion à un SGBDRLa connexion à un SGBDR

<?Include(“connection_data.php4”)$dblk=connect();function connect() {global $MySQL_Host, $MySQL_User, $MySQL_Passw;if(!$linkid=mysql_connect(“$MySQL_Host”, “$MySQL_User”, “$MySQL_Passw”)) {

echo “Impossible d’établir la connexion à “ $MySQL_Host “ <br>”;exit;

}return $linkid;}?>

Interfaçage avec une base de Interfaçage avec une base de données(6)données(6)

Page 156: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

156

Interfaçage avec une base de Interfaçage avec une base de données(7)données(7)

La connexion à un SGBDRLa connexion à un SGBDR Il existe deux façons de se connecter à une base de Il existe deux façons de se connecter à une base de

donnéesdonnées

Les connexions non-persistantes (base_Les connexions non-persistantes (base_connectconnect))

Les connexions persistantes (base_Les connexions persistantes (base_pconnectpconnect). ).

Les deux types de connexions sont parfaitement identiques Les deux types de connexions sont parfaitement identiques au niveau des fonctionnalités qu'elles apportentau niveau des fonctionnalités qu'elles apportent

Néanmoins, les connexions persistantes ne se referment Néanmoins, les connexions persistantes ne se referment pas automatiquement à la fin du scriptpas automatiquement à la fin du script

PHP s'assure qu'il n'existe pas un processus semblable, déjà PHP s'assure qu'il n'existe pas un processus semblable, déjà ouvert avec les noms de serveur et d'utilisateur ainsi que le ouvert avec les noms de serveur et d'utilisateur ainsi que le mot de passe. Si tel est le cas, ce processus est réutilisé sinon mot de passe. Si tel est le cas, ce processus est réutilisé sinon un nouveau est ouvertun nouveau est ouvert

le principal avantage des connexions persistantes et leur le principal avantage des connexions persistantes et leur réutilisabilité et partant l'impossiblité d'ouvertures multiples de réutilisabilité et partant l'impossiblité d'ouvertures multiples de connexions à un SGBDRconnexions à un SGBDR

Page 157: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

157

Interfaçage avec une base de Interfaçage avec une base de données(8)données(8)

La connexion à un SGBDRLa connexion à un SGBDR La déconnexion des bases de données s'effectue par La déconnexion des bases de données s'effectue par

l'intermédiaire des fonctions de fermeturel'intermédiaire des fonctions de fermeture

mysql_connect($id_connexion);mysql_connect($id_connexion); mssql_close($id_connexion);mssql_close($id_connexion);

Plusieurs fonctions PHP permettent de retourner des Plusieurs fonctions PHP permettent de retourner des informations à propos de la connexion en coursinformations à propos de la connexion en cours

$chaine_numero_version = $chaine_numero_version = mysql_get_client_info()mysql_get_client_info();; $type_connexion = $type_connexion = mysql_get_host_info(mysql_get_host_info($id_connexion$id_connexion));; $protocole_connexion = $protocole_connexion =

mysql_get_proto_info(mysql_get_proto_info($id_connexion$id_connexion));; $chaine_version_serveur = $chaine_version_serveur =

mysql_get_server_info(mysql_get_server_info($id_connexion$id_connexion));; $nom_hote = $nom_hote = pg_host(pg_host($id_connexion);$id_connexion); $option_connexion = $option_connexion = pg_options(pg_options($id_connexion);$id_connexion); $num_port = $num_port = pg_port(pg_port($id_connexion);$id_connexion); $encodage = $encodage = pg_client_encoding(pg_client_encoding($id_connexion$id_connexion));;

Page 158: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

158

Interfaçage avec une base de Interfaçage avec une base de données(9)données(9)

<?php // Fichier : traitement.php

function connexion($sgbdr, $hote, $port, $utilisateur, $mot_passe,$param_sup){if ($type == "") {

echo ("Aucun SGBDR n'a été spécifié !"); return false; }

else { switch ($type) {

case "MySQL" : { if ($port != "") $hote .= ":". $port; $id_connexion = mysql_connect($hote, $utilisateur,

$mot_passe); } case "mSQL" : {

if ($port != "") $hote .= ":". $port; $id_connexion = msql_connect($hote, $utilisateur,

$mot_passe); } case "SQLSever" : {$id_connexion = mssql_connect($hote,$utilisateur,

$mot_passe); }

Page 159: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

159Interfaçage avec une base de Interfaçage avec une base de données(10)données(10)

case "ODBC" : {

if ($param_sup == "") $id_connexion = odbc_connect($hote, $utilisateur, $mot_passe);

else $id_connexion = odbc_connect($hote, $utilisateur, $mot_passe, $param_sup); }

case "Oracle" : { $id_connexion = ocilogon($utilisateur, $mot_passe); } case "PostgreSQL" : { $chaine_connexion = "host=" . $hote . " "; if ($port != "") $chaine_connexion .= "port=" . $port . " "; $chaine_connexion .= "user=" . $utilisateur ." password=" .

$mot_passe"; if ($param_sup != "") $chaine_connexion .= " ".$param_sup; $id_connexion = pg_connect($chaine_connexion); } case "Sybase" : {

if ($param_sup == "") $id_connexion = sybase_connect($hote,

$utilisateur, $mot_passe); else $id_connexion = sybase_connect($hote, $utilisateur, $mot_passe, $param_sup); }

default : { echo ("Le SGBDR " . $sgbdr . " n'est pas géré."); return false; } }

return true; } }  connexion($nom_sgbdr, $nom_serveur, $num_port, $nom_utilisateur,

$mot_de_passe, $autre_param);?>

Page 160: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

160Interfaçage avec une base de Interfaçage avec une base de données(11)données(11)<html> body> <!-- Fichier : formulaire.php -->

<form action="traitement.php" method="POST"> <table> <tr> <td>Nom </td>

<td> <input type="text" size="20" name="nom_utilisateur"></td> </tr> <tr> <td>Mot de passe</td>

<td>: <input type="password«  size="20"  name="mot_de_passe"></td> </tr>

<<tr> <td>Serveur hôte</td> <td> <input type="text" size="20" name="nom_serveur" value="<?php

echo $SERVER_NAME ?>“ ></td> </tr> <tr> <td>Numéro de port</td>

<td> <input type="text" size="20" name="num_port" value="<?php echo $SERVER_PORT ?>“ ></td> </tr>

<tr> <td>Nom SGBDR</td> <td> <input type="text" size="20" name="nom_sgbdr“ ></td> </tr>

<tr> <td>Autre paramètre </td> <td> <input type="text" size="20" name="autre_param“ ></td> </tr>

<tr> <td>  </td>

<td><input type="submit" name="Soumission“ value="Soumettre"> </td></tr>

</table> </form> </body></html>

Page 161: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

161

Interfaçage avec une base de Interfaçage avec une base de données(12)données(12)

L'accès aux bases de données Suite à la connexion à un SGBDR, il faut soit sélectionner la

base de données si elle existe déjà, soit la créer si ce n'est pas le cas.

La sélection de bases de données s'effectue par le truchement de fonctions adaptées :

msql_select_db($nom_base_donnee,$id_connexion); mysql_select_db($nom_base_donnee,$id_connexion); sybase_select_db($nom_base_donnee,$id_connexion); pg_connect( "dbname=nom_base " . "host=nom_serveur ". "port=num_port

" . "user=nom_utilisateur " ."password=mot_passe");

La création des bases de données peut être réalisée par des fonctions PHP dévolues à cette tâche

msql_create_db($nom_base_donnee,$id_connexion); mssql_create_db($nom_base_donnee,$id_connexion); mysql_create_db ($nom_base_donnee, $id_connexion);

Page 162: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

162

Interfaçage avec une base de Interfaçage avec une base de données(13)données(13)

L'accès aux bases de données Création d’une base de données

la fonction create_db() attend deux paramètres– Une variable de type String portant le nom de la base de

données à créer– L’identificateur de connexion de la connexion courante

function creatdb($db, $lkid) {if (! $res=mysql_create_db($db, $lkid) {echo mysql_error ($lkid);exit;}return $res;}?>

Page 163: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

163

Interfaçage avec une base de Interfaçage avec une base de données(14)données(14)

L'accès aux bases de données Si la création d'une base de données n'est pas possible à Si la création d'une base de données n'est pas possible à

l'aide de fonctions, il est possible de créer une base à l'aide l'aide de fonctions, il est possible de créer une base à l'aide d'une requête SQL.d'une requête SQL.

$requete = "CREATE DATABASE nom_base_donnee";$id_requete = ociparse($requete, $id_connexion);ociexecute($id_requete);

La suppression des bases de données est permise, de la La suppression des bases de données est permise, de la même façon qu'il est possible de les créer.même façon qu'il est possible de les créer.

msql_drop_db($nom_base_donnee, $id_connexion);msql_drop_db($nom_base_donnee, $id_connexion); mssql_drop_db($nom_base_donnee, $id_connexion);mssql_drop_db($nom_base_donnee, $id_connexion); mysql_drop_db ($nom_base_donnee, $id_connexion);mysql_drop_db ($nom_base_donnee, $id_connexion);

Page 164: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

164

Interfaçage avec une base de Interfaçage avec une base de données(15)données(15)

L'accès aux bases de données Certaines fonctions permettent de retourner la liste des Certaines fonctions permettent de retourner la liste des

bases de données et de leurs tables.bases de données et de leurs tables.

$id_connexion = mysql_connect('localhost', 'administrateur', 'md2N50Oml');

$liste_bases = mysql_list_dbs($id_connexion );$nb_bases = mysql_num_rows($liste_bases);echo "<h3>Liste des bases de données</h3>";for($i = 0; $i < $nb_bases; $i++){

$nom_base_donnee = mysql_db_name($liste_bases, $i) . "<br>";  $liste_tables = mysql_list_tables($nom_base_donnee,

$id_connexion); $nb_tables = mysql_num_rows($liste_tables);  echo "<h3>" . $nom_base_donnee . "</h3>"; echo "<h4>Liste des tables :</h4>"; for($j = 0; $j < $nb_tables; $j++) { echo mysql_tablename($liste_tables, $j) . "<br>"; }}

Page 165: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

165

Interfaçage avec une base de Interfaçage avec une base de données(16)données(16)

<!-- Formulaire --><html> <body> <form method="POST" action="traitement.php"> <input type="text" name="nom" size="20" value="nom"><br> <input type="text" name="prenom" size="20"

value="prenom"><br> <input type="text" name="email" size="20" value="email"><br> <input type="submit" name="soumission" value="Soumettre"> </form> </body></html>

Page 166: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

166

Interfaçage avec une base de Interfaçage avec une base de données(17)données(17)<?php

// fichier : traitement.php$id_connex = mysql_connect("localhost","root","emma") or die("La connexion a échoué !"); $id_liste_bases = mysql_list_dbs($id_connex); $trouve = false;for($i = 0; $i < mysql_num_rows($id_liste_bases); $i++) {

if(mysql_db_name($id_liste_bases, $i) == 'utilisateur') { $trouve = true;}

}if(!$trouve) { mysql_create_db("utilisateur") or die("La création de la base a échoué !"); } $id_select = mysql_select_db("utilisateur") or die("La sélection de la base a

échoué !"); $id_liste_tables = mysql_list_tables('utilisateur', $id_connex); $trouve = false; for($i = 0; $i < mysql_num_rows($id_liste_tables); $i++){ if (mysql_tablename($id_liste_tables, $i) == 'tbl_utilisateur') {$trouve =

true;}} if(!$trouve){ // création table, insertion et sélection de données} else{ echo "<h3>Impossible de sélectionner la table !</h3>";}}

Page 167: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

167

Interfaçage avec une base de Interfaçage avec une base de données(18)données(18)

Les requêtes SQLLes requêtes SQL Les requêtes doivent répondre à la syntaxe SQL en général et Les requêtes doivent répondre à la syntaxe SQL en général et

éventuellement aux singularités des différents éditeurs de SGBDR.éventuellement aux singularités des différents éditeurs de SGBDR.

Les requêtes SQL permettent d'accomplir une action sur une base Les requêtes SQL permettent d'accomplir une action sur une base de données comme de données comme

la sélection d'informations, la sélection d'informations, la création de tables, la création de tables, l'ajout, la suppression ou la modification des enregistrements.l'ajout, la suppression ou la modification des enregistrements.

Les requêtes SQL sont envoyées à la base de données définie par Les requêtes SQL sont envoyées à la base de données définie par un identificateur de connexionun identificateur de connexion

$requete = "SELECT * FROM table WHERE champ = \"valeur\""; $id_resultat = mssql_query($requete, $id_connexion); 

$id_resultat1 = mysql_query($requete, $id_connexion); //$id_resultat2 = mysql_db_query ($nom_base, $requête, $id_connexion);

Page 168: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

168

Interfaçage avec une base de Interfaçage avec une base de données(19)données(19)

Les requêtes SQLLes requêtes SQL

$requete = $requete = ""CREATE TABLECREATE TABLE tbl_nom (" tbl_nom ("

."nom_champ1 INTEGER PRIMARY KEY," ."nom_champ1 INTEGER PRIMARY KEY," . . "nom_champ2 CHAR(50) UNIQUE," "nom_champ2 CHAR(50) UNIQUE," . . "nom_champ3 DATETIME)";"nom_champ3 DATETIME)";

$requete =$requete = ""INSERT INTOINSERT INTO tbl_nom " tbl_nom "

. "(nom_champ1, nom_champ2,.nom_champ3) " . "(nom_champ1, nom_champ2,.nom_champ3) "

. "VALUES('valeur','valeur2','valeur3')"; . "VALUES('valeur','valeur2','valeur3')"; 

$requete = $requete = ""SELECT * FROMSELECT * FROM tbl_nom " tbl_nom "

. "WHERE nom_champ2 = 'valeur'"; . "WHERE nom_champ2 = 'valeur'"; 

$requete = $requete = ""DELETE FROMDELETE FROM tbl_nom " tbl_nom "

. "WHERE nom_champ3 < SYSDATE - 7";. "WHERE nom_champ3 < SYSDATE - 7";

Page 169: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

169

Interfaçage avec une base de Interfaçage avec une base de données(20)données(20) <?php// fichier : traitement.php $id_connex = mysql_connect("localhost","root","emma") or die("La connexion a échoué !"); $id_liste_bases = mysql_list_dbs($id_connex); $trouve = false; while($ligne = mysql_fetch_assoc($id_liste_bases)) { if ($ligne['Database'] == 'utilisateur') { $trouve = true; }} if(!$trouve) {mysql_create_db("utilisateur") or die("La création de la base a échoué !");} $id_select = mysql_select_db("utilisateur") or die("La sélection de la base a échoué !"); $id_liste_tables = mysql_list_tables('utilisateur', $id_connex); $i = 0; $trouve = false; while($ligne = mysql_fetch_array($id_liste_tables)){ if ($ligne[$i] == 'tbl_utilisateur'){$trouve = true;} $i++;}

Page 170: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

170Interfaçage avec une base de Interfaçage avec une base de données(21)données(21)if(!$trouve){

mysql_query("create table tbl_utilisateur " . "(date CHAR(30) NOT NULL, email CHAR(50) UNIQUE, " . "nom CHAR(50) NOT NULL)", $id_connex) or die("La création de la table a échoué !");} if($id_select) { mysql_query("insert into tbl_utilisateur (date, email, nom) " . "values ('" . date("d/m/Y H:i:s") . "', '" . $email . "', '" . $prenom . "

" . $nom . "')", $id_connex) or die("Impossible d'insérer les informations !"); else {echo "<h3>Impossible de sélectionner la table !</h3>"; } $id_requete = mysql_query("select * from tbl_utilisateur", $id_connex); if($id_requete) { echo '<table border="0">' .'<tr bgcolor="#000000" style="color:#FFFFFF">'.

'<th>Date</th><th>eMail</th><th>Nom</th></tr>'; while($ligne = mysql_fetch_array($id_requete)){ echo '<tr bgcolor ="#FFFF00">' . '<td>' . $ligne['date'] . '</td>' .

'<td>' . $ligne['email'] . '</td>‘ . '<td>' . $ligne['nom'] . '</td>'; echo '<tr>';} echo '</table>'; mysql_free_result($id_requete); } else { echo "<h3>Impossible d'exécuter la requête de sélection

!</h3>";} mysql_close();?>

Page 171: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

171

Interfaçage avec une base de Interfaçage avec une base de données(22)données(22)

Traitement des résultats d’une requêteTraitement des résultats d’une requête

La variable contenant l'ensemble des enregistrements La variable contenant l'ensemble des enregistrements retournés par une requête n'est pas exploitable telle quelle. retournés par une requête n'est pas exploitable telle quelle. On utilise la fonction On utilise la fonction mysql_fetch_row(),mysql_fetch_row(), qui découpe qui découpe

les lignes de résultat en colonnes (par exemple les lignes de résultat en colonnes (par exemple Nom,adresse,...) et les affecte à une variable tableau Nom,adresse,...) et les affecte à une variable tableau dans l'ordre où elles arrivent.dans l'ordre où elles arrivent.

Exemple: une table appelée liens contenant le nom et Exemple: une table appelée liens contenant le nom et l'URL de sites internet. l'URL de sites internet.

récupérer l'ensemble des enregistrements et de les récupérer l'ensemble des enregistrements et de les afficher dans un tableauafficher dans un tableau

Page 172: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

172

Interfaçage avec une base de Interfaçage avec une base de données(23)données(23)

<html><head><title>Liens</title></head><body><table border="1" cellpadding="0" cellspacing="0"><tr><th>Nom du site</th><th>URL</th></tr><?php// Déclaration des paramètres de connexion$host = la_machine; $user = votre_login;$bdd = Nom_de_la_base_de_donnees;$password = Mot_de_passe;// Connexion au serveurmysql_connect($host, $user,$password) or die("erreur de connexion au

serveur");mysql_select_db($bdd) or die("erreur de connexion a la base de donnees");

Page 173: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

173

Interfaçage avec une base de Interfaçage avec une base de données(24)données(24)

// Creation et envoi de la requete$query = "SELECT nom,url FROM sites ORDER BY nom";$result = mysql_query($query);// Recuperation des resultatswhile($row = mysql_fetch_row($result)){$Nom = $row[0];$Url = $row[1];echo "<tr>\n<td><a href=\"$Url\">$Nom</a></td>\n<td>$Url</td>\n</tr>\n";}// Déconnexion de la base de donnéesmysql_close();?></tr></table></body></html>

Page 174: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

174

Interfaçage avec une base de Interfaçage avec une base de données(25)données(25)

Les propriétés de colonnesLes propriétés de colonnes Certaines instructions permettent de récupérer diverses Certaines instructions permettent de récupérer diverses

informations à propos des champs d'une table résultant d'une informations à propos des champs d'une table résultant d'une requête SQL. requête SQL. LLe nom d'un champe nom d'un champ peut être retourné par l'intermédiaire de peut être retourné par l'intermédiaire de

certaines fonctions.certaines fonctions.

$nom = mssql_field_name($id_resultat, $num_champ);$nom = msql_fieldname($id_resultat, $num_champ);$nom = mysql_field_name($id_resultat, $num_champ);$nom = ociColumnName($id_resultat, $num_champ);$nom = pg_FieldName($id_resultat, $num_champ);

Le type du champLe type du champ est obtenu en utilisant des fonctions spécifiques. est obtenu en utilisant des fonctions spécifiques.

$type_donnee = msql_fieldtype($id_resultat, $num_champ);$type_donnee = mysql_field_type($id_resultat, $num_champ);$type_donnee = ociColumnType($id_resultat, $num_champ);$type_donnee = pg_FieldType($id_resultat, $num_champ);

Page 175: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

175

Interfaçage avec une base de Interfaçage avec une base de données(26)données(26)

Les propriétés de colonnesLes propriétés de colonnes D'autres fonctions renvoient la longueur d'un champD'autres fonctions renvoient la longueur d'un champ

$longueur = mssql_field_length($id_resultat, $num_champ);$longueur = msql_fieldlen($id_resultat, $num_champ);$longueur = mysql_field_len($id_resultat, $num_champ);$longueur = ociColumnSize($id_resultat, $num_champ);

  D'autres propriétés peuvent être recueillies par des instructions D'autres propriétés peuvent être recueillies par des instructions relatives à certains gestionnaires de bases de donnéesrelatives à certains gestionnaires de bases de données

// nom de la table parente de la colonne$nom_table = msql_fieldtable($id_resultat, $num_champ);$nom_table = msql_tablename($id_resultat, $num_champ);$nom_table = mysql_field_table($id_resultat, $num_champ);$nom_table = mysql_tablename($id_resultat, $num_champ);

// sémaphore du champ comme NOT NULL, PRIMARY KEY$semaphore = msql_fieldflags($id_resultat, $num_champ);$semaphore = mysql_field_flags($id_resultat, $num_champ);

Page 176: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

176

Interfaçage avec une base de Interfaçage avec une base de données(27)données(27)

<?php $id_connexion = mysql_connect("localhost","root","emma"); mysql_select_db("utilisateur"); $requete = "SELECT * FROM tbl_utilisateur"; $id_resultat = mysql_query($requete, $id_connexion) or die ("La requête est invalide : ".$requete."<br>"); $nb_champs = mysql_num_fields($id_resultat); $ligne = mysql_fetch_row($id_resultat); $type = array(); $propriete = array(); for ($i = 0; $i < $nb_champs; $i++) { $propriete[$i]['nom'] = mysql_field_name($id_resultat, $i); $propriete[$i]['type'] = mysql_field_type($id_resultat, $i); $propriete[$i]['longueur'] = mysql_field_len($id_resultat, $i);} for($i = 0; $i < $nb_champs; $i++) { echo "<h3>Colonne n°" . $nb_champs . "</h3>"; foreach($propriete[$i] as $cle => $valeur){ echo "<u>" . $cle . " :</u> <b>" . $valeur . "</b><br>";} }?>

Page 177: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

177

Interfaçage avec une base de Interfaçage avec une base de données(28)données(28)

L'exploitation des donnéesL'exploitation des données Le décompte total des enregistrements ou des champs d'une Le décompte total des enregistrements ou des champs d'une

table, peut être obtenu par l'intermédiaire de certaines fonctionstable, peut être obtenu par l'intermédiaire de certaines fonctions

$nb_champs = msql_num_fields($id_resultat);$nb_lignes = msql_num_rows($id_resultat); $nb_champs = mysql_num_fields($id_resultat);$nb_lignes = mysql_num_rows($id_resultat); $nb_champs = ociNumCols($id_resultat);$nb_lignes = ociRowCount($id_resultat); $nb_champs = pg_NumFields($id_resultat);$nb_lignes = pg_NumRows($id_resultat); $nb_champs = sybase_num_fields($id_resultat);$nb_lignes = sybase_num_rows($id_resultat);

Page 178: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

178

Interfaçage avec une base de Interfaçage avec une base de données(29)données(29)

L'exploitation des donnéesL'exploitation des données A partir des enregistrements, chacun des champs devient A partir des enregistrements, chacun des champs devient

accessible aisément par des fonctions appropriées. Certaines accessible aisément par des fonctions appropriées. Certaines fonctions sont capables d'extraire directement un champ fonctions sont capables d'extraire directement un champ déterminédéterminé

$valeur = mssql_result($id_resultat, $num_ligne, $num_col)$valeur = msql_result($id_resultat, $num_ligne, $num_col);$valeur = mysql_result($id_resultat, $num_ligne, $num_col);$valeur = pg_result($id_resultat, $num_ligne, $num_col);$valeur = sybase_result($id_resultat, $num_ligne, $num_col);

Afin d'éviter une surcharge de la suite au terme de leur utilisation. Afin d'éviter une surcharge de la suite au terme de leur utilisation. mémoire, des instructions PHP permettent de libérer les mémoire, des instructions PHP permettent de libérer les ressourcesressources

mssql_free_result($id_resultat);msql_free_result($id_resultat);mysql_free_result($id_resultat);sybase_free_result($id_resultat);

Page 179: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

179

Interfaçage avec une base de Interfaçage avec une base de données(30)données(30)

La gestion des erreursLa gestion des erreurs Les erreurs générées par la plupart des SGBDR ne sont plus Les erreurs générées par la plupart des SGBDR ne sont plus

traitées comme des alertes.Elles sont stockées et disponibles à traitées comme des alertes.Elles sont stockées et disponibles à partir d'une fonction spécifiquepartir d'une fonction spécifique

Il est possible d'interrompre le script afin d'éviter les erreurs en Il est possible d'interrompre le script afin d'éviter les erreurs en cascade. Deux méthodes permettent d'effectuer cette opérationcascade. Deux méthodes permettent d'effectuer cette opération

Le stockage du résultat de l'exécution de la fonction dans une variableLe stockage du résultat de l'exécution de la fonction dans une variable

$connect = mysql_connect($host,$user,$password);

L'utilisation de la fonction L'utilisation de la fonction die()die() en cas d'erreur d'exécution. Si la en cas d'erreur d'exécution. Si la fonction retourne la valeur 0 (c'est-à-dire s'il y a une erreur) la fonction retourne la valeur 0 (c'est-à-dire s'il y a une erreur) la fonction die() renvoie un message d'erreur.fonction die() renvoie un message d'erreur.

mysql_connect($host,$user,$password) or die("erreur de connexion au serveur mysql_connect($host,$user,$password) or die("erreur de connexion au serveur $host");$host");

En général, deux fonctions PHP retournent respectivement En général, deux fonctions PHP retournent respectivement le numéro et le le numéro et le message de l'erreur en coursmessage de l'erreur en cours. Certains SGBDR ne gèrent que le message . Certains SGBDR ne gèrent que le message d'erreur tels que PostgreSQL et Sybase.d'erreur tels que PostgreSQL et Sybase.

Page 180: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

180

Interfaçage avec une base de Interfaçage avec une base de données(31)données(31)

La gestion des erreursLa gestion des erreurs// message d'erreur généré par Microsoft SQL Server$message = mssql_get_last_message();

// numéro et message d'erreur due à la dernière action pour MySQL

$num_erreur = mysql_errno([$id_connexion]);$message = mysql_error([$id_connexion]);

// message d'erreur généré par mSQL$message = msql_error();

// message d'erreur pour une connexion ou une requête Oracle 8$message = ociError([$id_connexion | $id_requete]);

// message d'erreur généré par PostgreSQL$message = pg_ErrorMessage($id_connexion);

// message d'erreur généré par Sybase$message = sybase_get_last_message();

Page 181: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

181

Interfaçage avec une base de Interfaçage avec une base de données(32)données(32)

La gestion des erreursLa gestion des erreurs Quelques gestionnaires de bases de données autorisent le Quelques gestionnaires de bases de données autorisent le

paramétrage du niveau de sévérité des erreurs se paramétrage du niveau de sévérité des erreurs se produisant sur le serveur ou chez le client.produisant sur le serveur ou chez le client.

// niveau de sévérité des erreurs ou des messages // d'erreur sur Microsoft SQL Servermssql_min_error_severity($num_severite);mssql_min_message_severity($num_severite); // niveau de sévérité des erreurs du clientsybase_min_client_severity($num_severite);sybase_min_error_severity($num_severite);sybase_min_message_severity($num_severite);sybase_min_server_severity($num_severite);

Page 182: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

182

Interfaçage avec une base de Interfaçage avec une base de données(33)données(33)

<?php $id_connexion = mysql_connect("localhost", "root", "mot"); if (!$id_connexion) { $message = "<h3>Une erreur est survenue :</h3>" . "<b><u>Erreur

numéro " . mysql_errno() . ":</u> " . mysql_error() . "</b>"; echo $message;} else {$reussite = mysql_select_db("utilsateur"); if (!$reussite) { $message = "<h3>Une erreur est survenue :</h3>" . "<b><u>Erreur

numéro " . mysql_errno() . ":</u> " . mysql_error() . "</b>"; echo $message;} else{$id_requete = mysql_query("SELECT datte, email, nom " .

"FROM tbl_utilsateur"); if (!$id_requete) { $message = "<h3>Une erreur est survenue :</h3>" . "<b><u>Erreur

numéro " . mysql_errno() . ":</u> " . mysql_error() . "</b>"; echo $message; }}}?>

Page 183: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

183

Interfaçage avec une base de Interfaçage avec une base de données(34)données(34)

Les fonctions MySQLLes fonctions MySQL

$nb_enregistrements = mysql_affected_rows($id_resultat);retourne le nombre d'enregistrements affectés lors d'une requête SQL.

true | false = mysql_change_user($utilisateur, $mot_passe [, $nom_base [, $id_connexion]]);

modifie le nom de session de l'utilisateur actif.

true | false = mysql_close($id_connexion);ferme la connexion MySQL.

$id_connexion | false = mysql_connect([$nom_hote [, $utilisateur [, $mot_passe]]]);

ouvre une connexion sur un serveur MySQL.

true | false = mysql_create_db($nom_base, $id_connexion);crée une base de données MySQL.

Page 184: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

184

Interfaçage avec une base de Interfaçage avec une base de données(35)données(35)

Les fonctions MySQLLes fonctions MySQLtrue | false = mysql_data_seek($id_resultat, $num_enregistrement);déplace le pointeur vers l'enregistrement spécifié.

$nom | false = mysql_db_name($id_resultat, $num_enregistrements, $position_champs);

retourne le nom de la base de données par rapport à l'enregistrement et au champs spécifiés.

$id_resultat | false = mysql_db_query($nom_base, $requete [, $id_connexion]);envoie une requête SQL à un serveur MySQL et retourne un identifiant.

true | false = mysql_drop_db($nom_base [, $id_connexion]);supprime une base de données MySQL.

$num_erreur = mysql_errno([$id_connexion]);retourne le numéro de l'erreur MySQL.

$message = mysql_error([$id_connexion]);retourne le message de l'erreur MySQL.

$nouvelle_chaine = mysql_escape_string($chaine);échappe une chaîne pour la passer à mysql_query.

Page 185: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

185Interfaçage avec une base de Interfaçage avec une base de données(36)données(36)<?php function gestion_erreur($identifiant){ echo "Une erreur est survenue :<br>" . mysql_errno() . " : " . mysql_error(); mysql_close($identifiant); exit; } $id_connexion = mysql_connect("localhost","root","mpt"); if(!$id_connexion) gestion_erreur($id_connexion); $id_liste_bases = mysql_list_dbs($id_connexion); if(!$id_liste_bases) gestion_erreur($id_liste_bases); $nb_bases = mysql_num_rows($id_liste_bases); echo '<table width="640" border="1">'; for($i = 0; $i < $nb_bases; $i++){ $nom_base = mysql_db_name($id_liste_bases, $i); $id_liste_tables = mysql_list_tables($nom_base, $id_connexion); if(!$id_liste_tables) gestion_erreur($id_liste_tables); $nb_tables = mysql_num_rows($id_liste_tables); echo '<tr><th valign="top" width="140"><u>' . $nom_base . '</u></th><td valign="top" width="500">';

Page 186: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

186

Interfaçage avec une base de Interfaçage avec une base de données(37)données(37) for($j = 0; $j < $nb_tables; $j++){ $nom_table = mysql_tablename($id_liste_tables, $j); $id_liste_champs = mysql_list_fields($nom_base, $nom_table, $id_connexion); if(!$id_liste_champs) gestion_erreur($id_liste_champs); $nb_champs = mysql_num_fields($id_liste_champs); echo '<table width="500" border="1"><tr><th valign="top" width="200">' . $nom_table . '</th><td valign="top" width="300">'; for($k = 0; $k < $nb_champs; $k++){ $nom_champ = mysql_field_name($id_liste_champs, $k); $type_champ = mysql_field_type($id_liste_champs, $k); $longueur_champ = mysql_field_len($id_liste_champs, $k); $semaphore_champ = mysql_field_flags($id_liste_champs, $k); echo '<u>' . $nom_champ . '</u>(' . $type_champ . ' ' . $longueur_champ . ' ' . $semaphore_champ . ')<br>';} echo '</td></tr></table>';} echo '</td></tr>'; } echo '</table>'; mysql_free_result($id_liste_bases); mysql_free_result($id_liste_tables); mysql_free_result($id_liste_champs); mysql_close($id_connexion); ?>

Page 187: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

187

Interfaçage avec une base de Interfaçage avec une base de données(38)données(38)

Les fonctions ODBC fonctions permettant de travailler sur des bases de

données ODBC (Open DataBase Connectivity).

true | false = odbc_autocommit($id_connexion [, 0 | 1]);active (1) ou désactive (0) le mode d'auto-validation

= odbc_binmode($id_resultat, $mode);modifie la gestion des colonnes de données binaires selon un mode donné.

ODBC_BINMODE_PASSTHRUreprésente le mode Passthru

ODBC_BINMODE_RETURNretourne les données telles quelles

ODBC_BINMODE_CONVERTretourne les données converties en caractères

odbc_close($id_connexion);ferme une connexion ODBC.

Page 188: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

188

Les bases de données avec MySQL(1)Les bases de données avec MySQL(1)

Le modèle entité-relation (ER)Le modèle entité-relation (ER) Le modèle entité-relation analyse les relations existant entre les Le modèle entité-relation analyse les relations existant entre les

différents types d’objets du monde réeldifférents types d’objets du monde réel

Les objets de base du modèle ER sont :Les objets de base du modèle ER sont : EntitéEntité Type d’entitéType d’entité Type de relationType de relation

– Relation 1:1– Relation 1:N– Relation N:M

Attribut Attribut – Clé d’index : lorsqu’un attribut ou une combinaison minimale d’attributs

identifie de manière unique une entité appartenant à un type d’entité– Clé d’index primaire : s’il existe plusieurs clés pour un type d’entité, l’une

d’entre elles est marquée comme étant la clé d’index primaire

Page 189: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

189

Les bases de données avec MySQL(2)Les bases de données avec MySQL(2)

Du modèle ER au modèle relationnel de donnéesDu modèle ER au modèle relationnel de données

Le modèle relationnel de données permet de représenter les Le modèle relationnel de données permet de représenter les données du monde réel sous la forme de relationsdonnées du monde réel sous la forme de relations

L’ensemble des informations identifiées dans le modèle ER (riche L’ensemble des informations identifiées dans le modèle ER (riche sémantiquement) est enregistrer dans le monde relationnel de sémantiquement) est enregistrer dans le monde relationnel de données sous forme de relationsdonnées sous forme de relations

Dans le modèle relationnel : Dans le modèle relationnel : chaque relation est représentée par une tablechaque relation est représentée par une table Chaque enregistrement de la relation correspond à une ligne de Chaque enregistrement de la relation correspond à une ligne de

la tablela table Les colonnes de la table sont nommées d’après le nom des Les colonnes de la table sont nommées d’après le nom des

attributsattributs

Le résultat d’une requête relationnelle est une relationLe résultat d’une requête relationnelle est une relation

Page 190: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

190

Les bases de données avec MySQL(3)Les bases de données avec MySQL(3)

Du modèle ER au modèle relationnel de données Du modèle ER au modèle relationnel de données Les différentes types d’entités et de relations sont transformés en tablesLes différentes types d’entités et de relations sont transformés en tables

Transformation de types d’entités Transformation de types d’entités Chaque type d’entité d’un modèle ER est transposé en une table Chaque type d’entité d’un modèle ER est transposé en une table

correspondantecorrespondante

Transformation des types de relation n:mTransformation des types de relation n:m Pour représenter dans le modèle relationnel de données des types de Pour représenter dans le modèle relationnel de données des types de

relations n:m entre deux types d’entités, il est nécessaire d’utiliser une relations n:m entre deux types d’entités, il est nécessaire d’utiliser une table (relation) supplémentaire. table (relation) supplémentaire.

– Les clés d’index primaires des deux types d’entités transposées en tables servent de clé étrangère dans cette nouvelle table, la combinaison constituant l’index primaire de la nouvelle table.

Transformation des types de relations 1:nTransformation des types de relations 1:n La clé primaire de la table (relation) figure comme clé étrangère dans la La clé primaire de la table (relation) figure comme clé étrangère dans la

relation côté nrelation côté n

Transformation des types de relations 1:1Transformation des types de relations 1:1

Page 191: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

191

Les bases de données avec MySQL(4)Les bases de données avec MySQL(4)

Principe des bases de données MySQLPrincipe des bases de données MySQL MySql s’appuie sur le standard ANSI SQL92MySql s’appuie sur le standard ANSI SQL92

Par rapport au standard ANSI SQL92, il manque les instructions Par rapport au standard ANSI SQL92, il manque les instructions SELECT imbriquéesSELECT imbriquées

Par rapport au standard ANSI SQL92, il dispose d’un certain Par rapport au standard ANSI SQL92, il dispose d’un certain nombre de fonctions additionnelles (comparaison de chaînes, nombre de fonctions additionnelles (comparaison de chaînes, expressions régulières, arithmétique sur les dates)expressions régulières, arithmétique sur les dates)

Le cœur du système MySql affiche une performance remarquable, Le cœur du système MySql affiche une performance remarquable, tout particulièrement dans les accès indexéstout particulièrement dans les accès indexés

MySql utilise une architecture multiutilisateur, multitraitementMySql utilise une architecture multiutilisateur, multitraitement Permet d’établir des connexions rapides et d’utiliser la même Permet d’établir des connexions rapides et d’utiliser la même

mémoire cache pour plusieurs requêtesmémoire cache pour plusieurs requêtes

Page 192: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

192

Les bases de données avec MySQL(5)Les bases de données avec MySQL(5)

Syntaxe et conventionsSyntaxe et conventions Les chaînes de caractèresLes chaînes de caractères

Notées entre des guillemets simplesNotées entre des guillemets simples Notées entre des guillemets doubles dans le cas où la base utilise le Notées entre des guillemets doubles dans le cas où la base utilise le

mode ANSImode ANSI Les séquences d’échappementLes séquences d’échappement

– \0 \0 ASCII 0 (NUL)ASCII 0 (NUL)– \n\n Saut de ligne. Correspond au caractère ASCII CHR(13)Saut de ligne. Correspond au caractère ASCII CHR(13)– \t\t Tabulation. Correspond au caractère ASCII CHR(9)Tabulation. Correspond au caractère ASCII CHR(9)– \r\r Retour chariot. Correspond au caractère ASCII Retour chariot. Correspond au caractère ASCII

CHR(10)CHR(10)– \b\b Retour caractèreRetour caractère– \’\’ Guillemet simpleGuillemet simple– \ "   Guillemet double\ "   Guillemet double– \\\\ Barre oblique inverseBarre oblique inverse– %% PourcentagePourcentage– \_\_ caractère soulignécaractère souligné

Page 193: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

193

Les bases de données avec MySQL(6)Les bases de données avec MySQL(6)

Syntaxe et conventionsSyntaxe et conventions Les nombresLes nombres

Les nombres à virgule flottante utilisent le point(.) comme séparateur Les nombres à virgule flottante utilisent le point(.) comme séparateur décimaldécimal

Les valeur négatives sont précédées du signe moinsLes valeur négatives sont précédées du signe moins

Les nombres entiers utilisés en relation avec les nombres à virgule Les nombres entiers utilisés en relation avec les nombres à virgule flottante sont interprétés comme des nombres à virgule flottanteflottante sont interprétés comme des nombres à virgule flottante

Mysql prend en charge les nombres hexadécimauxMysql prend en charge les nombres hexadécimaux

NULL signifie « aucune donnée » et ne doit pas être confondu avec le NULL signifie « aucune donnée » et ne doit pas être confondu avec le nombre 0 ou la chaîne de caractère vide "" .nombre 0 ou la chaîne de caractère vide "" .

Page 194: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

194

Les bases de données avec MySQL(7)Les bases de données avec MySQL(7)

Syntaxe et conventionsSyntaxe et conventions Les variablesLes variables

Les variables peuvent contenir des nombres entiers, des nombres réels ou des Les variables peuvent contenir des nombres entiers, des nombres réels ou des chaînes de caractèreschaînes de caractères

Les noms des variables peuvent comporter des caractères alphanumériques Les noms des variables peuvent comporter des caractères alphanumériques ainsi que les caractères spéciaux . et _. ainsi que les caractères spéciaux . et _.

Il n’est pas nécessaire d’initialiser les variables, qui possède par défaut la valeur Il n’est pas nécessaire d’initialiser les variables, qui possède par défaut la valeur NULLNULL

Syntaxe de Définition de variablesSyntaxe de Définition de variables– SET @variable={integer | real |string} [,@variable=…]ou– @variable:=expression

Les types de donnéesLes types de données MySql connaît les types de données numériques, de date et d’heure MySql connaît les types de données numériques, de date et d’heure

ainsi que chaînesainsi que chaînes

Page 195: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

195

Les bases de données avec MySQL(8)Les bases de données avec MySQL(8)

Les types de donnéesLes types de données Les types de données numériquesLes types de données numériques

M : nombre maximal de chiffres affichésM : nombre maximal de chiffres affichés U (Unsigned) :le caractère de signe est omisU (Unsigned) :le caractère de signe est omis Z(Zerofill) : les valeurs manquantes sont sont remplies par NULLZ(Zerofill) : les valeurs manquantes sont sont remplies par NULL D : le nombre de décimales affichées pour les virgule flottanteD : le nombre de décimales affichées pour les virgule flottante

TINYINT[(M)] [UNSIGNED] [ZEROFILL] : très petit nombre entier SMALLINT[(M)] [UNSIGNED] [ZEROFILL] : petit nombre entier MEDIUMINT[(M)] [UNSIGNED] [ZEROFILL] : nombre entier myen INT[(M)] [UNSIGNED] [ZEROFILL] : nombre entier normal INTEGER[(M)] [UNSIGNED] [ZEROFILL] : synonyme de INT BIGINT[(M)] [UNSIGNED] [ZEROFILL] : grand nombre entier FLOAT(précision) [ZEROFILL] : nombre à virgule flottante signé FLOAT[(M,D)] [ZEROFILL] : petit nombre à virgule flottante signé

DOUBLE[(M,D)] [ZEROFILL] : petit nombre à virgule flottante normal, à double précision, signé

DOUBLE précision[(M,D)] [ZEROFILL] : synonyme de double REAL[(M,D)] [ZEROFILL] : synonyme de double DECIMAL[(M[,D])] [ZEROFILL] : nombre à virgule flottante signé NUMERIC(M,D) [ZEROFILL] : synonyme de DECIMAL

Page 196: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

196

Les bases de données avec MySQL(9)Les bases de données avec MySQL(9)

Les types de donnéesLes types de données Les types de données de date et d’heureLes types de données de date et d’heure

DATE : Date DATETIME : Date et heure TIMESTAMP[(M)] : Tampon horaire UNIX TIME : Heure YEAR[(2|4)] : Année

Page 197: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

197

Les bases de données avec MySQL(10)Les bases de données avec MySQL(10)

Les types de donnéesLes types de données Les types de données chaînes Les types de données chaînes

CHAR(M) : chaîne de caractère de longueur fixe M VARCHAR(M) :chaîne de caractère de longueur variable TINYBLOB, TINYTEXT : taille maximale 255 caractères BLOB, TEXT : taille maximale 65535 caractères MEDIUMBLOB, MEDIUMTEXT : taille maximale 16777215 caractères LONGBLOB, LONGTEXT : taille maximale 4294967295caractères ENUM('value1','value2',...) :Une chaîne de caractères qui n'a qu'une

seule valeur, issue d'une liste : ou encore la valeur NULL ou la valeur d'erreur spéciale "".

SET('value1','value2',...) :Une chaîne de caractères qui a zéro, un ou plusieurs valeurs issues d'une liste

Page 198: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

198

Les bases de données avec MySQL(11)Les bases de données avec MySQL(11)

Les Opérateurs de MySqlLes Opérateurs de MySql Les opérateurs arithmétiquesLes opérateurs arithmétiques

+, -, *, /+, -, *, / Les opérateurs logiquesLes opérateurs logiques

NOT (!), OR(||), AND(&&)NOT (!), OR(||), AND(&&) Les opérateurs de comparaisonLes opérateurs de comparaison

=, <> (!=), <=, <, >=, >=, <> (!=), <=, <, >=, >

Select NomArt, Select NomArt, PrixArt AS Prix,PrixArt * 0.196 AS ‘TVA’

PrixArt / 10 as ‘Marge’From article as A, From article as A,

groupeArticle as GgroupeArticle as GWhere A.NumGrArt=G.NumGrArt Where A.NumGrArt=G.NumGrArt And ( G.NumGrArt<>1 OR Not (A.type = 2))And ( G.NumGrArt<>1 OR Not (A.type = 2))

Page 199: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

199

Les bases de données avec MySQL(12)Les bases de données avec MySQL(12)

Définition et manipulation des donnéesDéfinition et manipulation des données

DDL : langage de définition de donnéesDDL : langage de définition de données Définition de tables et de domaine de valeursDéfinition de tables et de domaine de valeurs

DML : langage de manipulation de donnéesDML : langage de manipulation de données Modification et sélection d’enregistrement dans les Modification et sélection d’enregistrement dans les

tablestables

DCL : langage de contrôle de donnéesDCL : langage de contrôle de données

Contrôle des accès aux objets et aux opérations, Contrôle des accès aux objets et aux opérations, contrôle des transactionscontrôle des transactions

N’est pas pris en charge dans MySql (version 3.22.32)N’est pas pris en charge dans MySql (version 3.22.32)

Page 200: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

200

Les bases de données avec MySQL(13)Les bases de données avec MySQL(13)

Création, suppression et utilisation d’une base de donnéesCréation, suppression et utilisation d’une base de données Création de bases de donnéesCréation de bases de données

CREATE DATABASE nom_bdCREATE DATABASE nom_bd

Suppression de bases de donnéesSuppression de bases de données DROP DATABASE [IF EXISTS] nom_bdDROP DATABASE [IF EXISTS] nom_bd

– Le mot-clé IF EXISTS est utilisé pour éviter que la tentative de supprimer une base de données inexistante ne donne lieu à une erreur

Utilisation d’une base de donnéesUtilisation d’une base de données USE nom_bdUSE nom_bd

– Permet d’établir que la base de données spécifiées est la base de données par défaut. Toutes les requêtes suivantes se rapportent donc à cette base de données.

Page 201: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

201

Les bases de données avec MySQL(14)Les bases de données avec MySQL(14)

Définition et modification de la structure d’une tableDéfinition et modification de la structure d’une table Création d’une TableCréation d’une Table

CREATE TABLE : permet de créer une nouvelle table dans la base de CREATE TABLE : permet de créer une nouvelle table dans la base de données courantedonnées courante

Sybtaxe :Sybtaxe :– CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name [(create_definition, …))

[table_options] [select_statement]

– Create_definition :

• Col_name type [NOT NULL|NULL] [DEFAULT default_value] [AUTO_INCREMENT] [PRIMARY KEY] [reference_definition] OU

• PRMARY KEY (index_col_name, …) OU

• KEY [index_name](index_col_name, …) OU

• INDEX [index_name](index_col_name, …) OU

• UNIQUE [INDEX] [index_name] (index_col_name, …) OU

• [CONSTRAINT symbol] FOREIGN KEY index_name (index_col_name) OU

• [reference_definition] OU

• CHECK (expr)

Page 202: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

202

Les bases de données avec MySQL(15)Les bases de données avec MySQL(15)

Définition et modification de la structure d’une tableDéfinition et modification de la structure d’une table Création d’une TableCréation d’une Table

CREATE TABLE : permet de créer une nouvelle table dans la base de CREATE TABLE : permet de créer une nouvelle table dans la base de données courantedonnées courante

Syntaxe :Syntaxe :

– L’attribut AUTO_INCREMENT : signifie que le contenu d’un champ de type INTEGER est incrémenté automatiquement d’une unité après l’insertion d’un nouvel enregistrement.

• Ne peut être affecté qu’une seule fois à une table donnée

– L’attribut PRIMARY_KEY : définit une clé d’index primaire unique• Chaque table peut comporter au maximum une clé d’index primaire.• Une clé d’index primaire peut être formée à partir d’une

combinaison d’un maximum de 32 colonnes• Les colonnes d’une clé d’index primaire doivent être définies avec le

paramètre NOT NULL

Page 203: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

203

Les bases de données avec MySQL(16)Les bases de données avec MySQL(16)

Définition et modification de la structure d’une tableDéfinition et modification de la structure d’une table Création d’une TableCréation d’une Table

Syntaxe :Syntaxe :– L’attribut UNIQUE_KEY : définit une clé d’index. Elle ne peut

comporter que des valeurs uniques.

– L’attribut INDEX : définit un index.

• Les champs TEXT et BLOB ne peuvent pas être indexés

– Les clés étrangères : ne sont pas encore prises en charge par MySQL

Page 204: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

204

Les bases de données avec MySQL(17)Les bases de données avec MySQL(17)

Définition et modification de la structure d’une tableDéfinition et modification de la structure d’une table Création d’une TableCréation d’une Table

Exemple:Exemple:

CREATE TABLE article (NumArt BIGINT NOT NULL AUTO_INCREMENT PRIMARY

KEY,numCde VARCHAR(25) NOT BULL,NomART VARCHAR(100) NOT NULL,TexteArt MEDIUMTEXT NOT NULL,PrixArt DECIMAL(8,2) NOT NULLNumGrArt BIGINT NOT NULL,NumSGrArt BIGINT NOT NULL,);

Page 205: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

205

Les bases de données avec MySQL(18)Les bases de données avec MySQL(18)

Définition et modification de la structure d’une tableDéfinition et modification de la structure d’une table Suppression d’une TableSuppression d’une Table

DROP TABLE [IF EXISTS] tbl_name [, tbl_name, …]DROP TABLE [IF EXISTS] tbl_name [, tbl_name, …]

Modifier la structure d’une table existanteModifier la structure d’une table existante ALTER [IGNORE] TABLE tbl_name alter_spec [, alter_spec…]ALTER [IGNORE] TABLE tbl_name alter_spec [, alter_spec…] Alter_specificationAlter_specification

– ADD [COLUMN] create_definition [FIRST | AFTER column_name] OU – ADD PRIMARY KEY (index_col_name, …) OU– ADD UNIQUE [index_name] (index_col_name, …) OU– CHANGE [COLUMN] old_col_name create_definition OU– MODIFY [COLUMN] create_definition OU– DROP [COLUMN] col_name OU– DROP PRIMARY KEY OU– DROP INDEX index_name OU– RENAME [AS] new_tbl_name OU– Table_options– …

Page 206: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

206

Les bases de données avec MySQL(19)Les bases de données avec MySQL(19)

Saisie, modification et suppression d’enregistrementSaisie, modification et suppression d’enregistrement

Insérer de nouveaux enregistrementInsérer de nouveaux enregistrement

INSERT INTOINSERT INTO article (NumCde, NomArt, TexteArt, PrixArt, article (NumCde, NomArt, TexteArt, PrixArt, NumGrArt, NumSGrart) NumGrArt, NumSGrart)

VALUES (‘1-001-001-001’, ‘articl1’, ‘c’est un article’, 7.95, 1, 1);VALUES (‘1-001-001-001’, ‘articl1’, ‘c’est un article’, 7.95, 1, 1);

Remplacer un enregistrementRemplacer un enregistrement

Un ancien enregistrement dans la table, qui a la même valeur Un ancien enregistrement dans la table, qui a la même valeur qu’un nouvel enregistrement pour une clé, est supprimé de la qu’un nouvel enregistrement pour une clé, est supprimé de la table avant d’insérer un nouvel enregistrementtable avant d’insérer un nouvel enregistrement

REPLACE INTOREPLACE INTO article (NumCde, NomArt, TexteArt, PrixArt, article (NumCde, NomArt, TexteArt, PrixArt, NumGrArt, NumSGrart) NumGrArt, NumSGrart)

VALUES (‘1-999-999-999’, VALUES (‘1-999-999-999’, ‘articl1’‘articl1’, ‘c’est un autre artcile’, 12, 1, 1), ‘c’est un autre artcile’, 12, 1, 1)

Page 207: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

207

Les bases de données avec MySQL(20)Les bases de données avec MySQL(20)

Saisie, modification et suppression d’enregistrementSaisie, modification et suppression d’enregistrement Lecture d’enregistrements à partir d’un fichierLecture d’enregistrements à partir d’un fichier

LOAD DATA LOCAL INFILE ‘c:/apache/www3_docs/donnees.txt’ INTO LOAD DATA LOCAL INFILE ‘c:/apache/www3_docs/donnees.txt’ INTO TABLE article FIELDS TERMINATED BY ‘,’ (NUMcde, NomArt, TexteArt, TABLE article FIELDS TERMINATED BY ‘,’ (NUMcde, NomArt, TexteArt, PrixArt, NumGrArt, NumSGrArt);PrixArt, NumGrArt, NumSGrArt);

– Les données figurent dans le fichier donnees.txt – Les données sont séparées par des virgules– Les données ont \n comme caractère de fin de ligne– Le mot clé LOCAL indique que le fichier de données se trouve sur

l’hôte client dans le répertoire spécifié.

Modification des valeurs dans des champs d’une tableModification des valeurs dans des champs d’une table UPDATE tbl_name SET col_name=expr1, col_name2=expr2,UPDATE tbl_name SET col_name=expr1, col_name2=expr2, [WHERE section_condition_where][WHERE section_condition_where]

Suppression d’enregistrementsSuppression d’enregistrements DELETE FROM tbl_name [WHERE_definition]DELETE FROM tbl_name [WHERE_definition]

Page 208: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

208

Les bases de données avec MySQL(21)Les bases de données avec MySQL(21)

Sélection d’enregistrementSélection d’enregistrement SyntaxeSyntaxe

SELECT [DISTINCT|ALL] expression_de_selectionSELECT [DISTINCT|ALL] expression_de_selection

FROM teblesFROM tebles

WHERE expression_whereWHERE expression_where

GROUP BY col_name, …]GROUP BY col_name, …]

HAVING where_definition]HAVING where_definition]

[ORDER BY [ASC|DESC]][ORDER BY [ASC|DESC]]

ExemplesExemples SELECT * FROM article WHERE PrixArt > 50SELECT * FROM article WHERE PrixArt > 50 SELECT NumGrArt, AVG(PrixArt) FROM article GROUP BY SELECT NumGrArt, AVG(PrixArt) FROM article GROUP BY

NumArtNumArt

Page 209: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

209

Les bases de données avec MySQL(23)Les bases de données avec MySQL(23)

Page 210: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

210

Les bases de données avec MySQL(24)Les bases de données avec MySQL(24)

Page 211: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

211

Les bases de données avec MySQL(25)Les bases de données avec MySQL(25)

Page 212: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

212

Les bases de données avec MySQL(26)Les bases de données avec MySQL(26)

Page 213: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

213

Les sessions(1)Les sessions(1)

PrincipePrincipe Est un mécanisme permettant de mettre en relation les différentes Est un mécanisme permettant de mettre en relation les différentes

requêtes du même client sur une période de temps donnée.requêtes du même client sur une période de temps donnée.

Les sessions permettent de conserver des informations relatives à un Les sessions permettent de conserver des informations relatives à un utilisateur lors de son parcours sur un site webutilisateur lors de son parcours sur un site web

Des données spécifiques à un visiteur pourront être transmises de Des données spécifiques à un visiteur pourront être transmises de page en page afin d'adapter personnellement les réponses d'une page en page afin d'adapter personnellement les réponses d'une application PHPapplication PHP

Chaque visiteur en se connectant à un site reçoit un numéro Chaque visiteur en se connectant à un site reçoit un numéro d'identification dénommé identifiant de session (SID)d'identification dénommé identifiant de session (SID)

La fonction La fonction session_start()session_start() se charge de générer automatiquement cet se charge de générer automatiquement cet identifiant unique de session et de créer un répertoire.identifiant unique de session et de créer un répertoire. Elle Elle doit être doit être placée au début de chaque page afin de démarrer ou de continuer une placée au début de chaque page afin de démarrer ou de continuer une session.session.

<?php session_start(); $Session_ID = session_id(); // $Session_ID = 7edf48ca359ee24dbc5b3f6ed2557e90 ?>

Page 214: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

214

Les sessions(2)Les sessions(2)

PrincipePrincipe Un répertoire est créé sur le serveur à l'emplacement Un répertoire est créé sur le serveur à l'emplacement

désigné par le fichier de configuration php.ini, afin de désigné par le fichier de configuration php.ini, afin de recueillir les données de la nouvelle session.recueillir les données de la nouvelle session.

[Session]session.save_path= C:\PHP\sessiondata; Rép session = \sess_7edf48ca359ee24dbc5b3f6ed2557e90

Le fichier php.ini peut également préciser un nom de session Le fichier php.ini peut également préciser un nom de session par l'option par l'option session.namesession.name ou sa durée de vie par ou sa durée de vie par session.gc_maxlifetimesession.gc_maxlifetime

La session en cours peut être détruite par le truchement de La session en cours peut être détruite par le truchement de la fonction la fonction session_destroy().session_destroy(). Cette commande supprime Cette commande supprime toutes les informations relatives à l'utilisateur.toutes les informations relatives à l'utilisateur.

session_destroy();

Page 215: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

215

Les sessionsLes sessions(3)(3)

Le traitement des variables de sessionLe traitement des variables de session Les variables de session sont chargées dans une session Les variables de session sont chargées dans une session

par l'intermédiaire de la fonction par l'intermédiaire de la fonction session_register()session_register()

<?php session_start(); session_register("nom_variable"); ... session_register("nom_variableN");?>

Deux options de configuration déterminent le traitement Deux options de configuration déterminent le traitement des variables d'une session dans une application PHPdes variables d'une session dans une application PHP

Si l'option de configuration Si l'option de configuration track_varstrack_vars est activée et est activée et register_globalsregister_globals désactivée, les variables de la session seront désactivée, les variables de la session seront disponibles seulement à partir du tableau associatif global disponibles seulement à partir du tableau associatif global $HTTP_STATE_VARS$HTTP_STATE_VARS

session_register("nom_variable");...

echo $HTTP_SESSION_VARS["nom_variable"];

Page 216: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

216

Les sessionsLes sessions(4)(4)

Le traitement des variables de session Si l'option de configuration register_globals est activée, les variables de

la session seront disponibles à partir des variables globales correspondantes.

session_register("nom_variable");...

echo $nom_variable;

Si les options track_vars et register_globals sont activées, les variables globales et $HTTP_STATE_VARS contiendront les valeurs des variables de la session en cours.

Le transport des informations entre les documents est réalisé par l'entremise soit d'un cookie, soit d'une requête HTTP

La dernière solution est la plus fiable puisque les cookies peuvent ne pas être acceptés par le client ou celui-ci pourrait les détruire en cours de session.

Il suffit de concaténer l'identifiant de session à l'adresse URL de la page cible pour que cette dernière puisse accéder aux informations conservées par la session. De plus, un mot-clé spécial SID contient le nom de session et l'identifiant séparé par un signe égal.

Page 217: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

217

Les sessions(5)Les sessions(5)

Le traitement des variables de session

$Session_ID = session_id();$nom_session = session_name();$adresse = 'http://www.site.com/doc.html';$lien = 'Le prochain document';print_f('<a href="%s?%s=%s">%s</a>', $adresse_url, $nom_session,

$Session_ID, $lien);echo '<a href="' . $adresse_url . SID . '">' . $lien . '</a>‘ /* affichent <a href="http://www.site.com/ doc.html?PHPSESSID=

7edf48ca359ee24dbc5b3f6ed2557e90"> Le prochain document </a> */ // redirection automatiqueheader("Location:" . "$adresse . "?" . SID);

Page 218: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

218

Les sessions(6)Les sessions(6)

Le traitement des variables de sessionLe traitement des variables de session Si la directive de compilation Si la directive de compilation enable-trans-sid enable-trans-sid est activée, il est activée, il

sera possible de ne pas ajouter l'identifiant de session à sera possible de ne pas ajouter l'identifiant de session à l'adresse URL pointée. l'adresse URL pointée.

Pour savoir si cela est le cas, il suffit de rechercher la Pour savoir si cela est le cas, il suffit de rechercher la directive dans la page résultant de la fonction phpinfo.directive dans la page résultant de la fonction phpinfo.

Par défaut, PHP tente de passer par les cookies pour Par défaut, PHP tente de passer par les cookies pour sauvegarder l'identifiant de session dans le cas où le client sauvegarder l'identifiant de session dans le cas où le client les accepterait. Pour éviter cela, il suffit de désactiver les accepterait. Pour éviter cela, il suffit de désactiver l'option de configuration session.use_cookies dans le fichier l'option de configuration session.use_cookies dans le fichier php.ini.php.ini.

[Session]session.use_cookies 0; //désactive la gestion des sessions par cookie

Page 219: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

219

Les sessions(7)Les sessions(7)

<!-- Fichier : formulaire.html --><html><body> <form method="post" action="traitement.php"> <table border="0"> <tr> <td><u>Nom :</u></td> <td><input type="text" name="cNom" size="20"

value="RIVES"></td></tr> <tr> <td><u>Prénom :</u></td> <td><input type="text" name="cPrenom" size="20" value="Jean-

Pierre"></td></tr> <tr> <td><u>eMail :</u></td> <td><input type="text" name="cEmail" size="20"

value="[email protected]"></td></tr> <tr><td> </td> <td><input type="submit" name="soumettre"

value="Envoyer"></td></tr></table></form></body </html>

Page 220: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

220

Les sessions(8)Les sessions(8)

<!-- Fichier : traitement.php --><? session_start(); $nom = $cNom; $prenom = $cPrenom; $email = $cEmail; session_register("nom"); session_register("prenom"); session_register("email"); header("Location: session.php?" . session_name() . "=" .

session_id());?>

Page 221: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

221

Les sessions(9)Les sessions(9)

<!-- Fichier : session.php --><html> <body> <? session_start(); echo("<u>Identifiant de session :</u> <b>" . session_id() . "</b><br>"); echo("<u>Nom de la session :</u> <b>" . session_name() . "</b><br><br>"); echo("<u>Nom :</u> <b>". $nom . "</b><br>"); echo("<u>Prénom :</u> <b>" . $prenom . "</b><br>"); echo("<u>eMail :</u> <b>" . $email . "</b><br>"); session_destroy(); ?> </body></html>

Page 222: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

222

Les sessions(10)Les sessions(10)

Les fonctions de sessionsLes fonctions de sessions

true | false = session_start();initialise les données d'une session.

true | false = session_destroy();détruit les données d'une session en cours.

$chaine = session_name([$chaine]);retourne ou affecte le nom de la session en cours.

$chaine = session_module_name([$chaine]);retourne ou affecte le nom du module en cours de la session actuelle.

$chaine = session_save_path([$chaine]);retourne ou affecte le chemin de sauvegarde de la session en cours.

$chaine = session_id([$chaine]);retourne ou affecte l'identifiant de la session en cours.

Page 223: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

223

La gestion des connexions aux sites La gestion des connexions aux sites webweb (1)(1)

PrincipePrincipe Le langage PHP dispose de plusieurs outils permettant de Le langage PHP dispose de plusieurs outils permettant de

gérer les connexions des utilisateurs sur un site webgérer les connexions des utilisateurs sur un site web

Il existe trois états possibles en ce qui concerne le statut des Il existe trois états possibles en ce qui concerne le statut des connexions.connexions.

1.1. NORMALNORMAL : signifie que la connexion est ouverte et le script est en : signifie que la connexion est ouverte et le script est en cours d'exécution. cours d'exécution.

2.2. ABORTEDABORTED : signifie que le client a annulé la connexion et le script est : signifie que le client a annulé la connexion et le script est arrêté par défaut. arrêté par défaut.

3.3. TIMEOUTTIMEOUT : signifie que le script a provoqué une déconnexion due à la : signifie que le script a provoqué une déconnexion due à la fin de la durée d'exécution convenue.fin de la durée d'exécution convenue.

Les deux états ABORTED et TIMEOUT peuvent Les deux états ABORTED et TIMEOUT peuvent survenir en même tempssurvenir en même temps dans le cas ou d'une part si PHP dans le cas ou d'une part si PHP est configuré de telle sorte à ignorer les déconnexions et est configuré de telle sorte à ignorer les déconnexions et d'autre part lorsque le script arrive à expirationd'autre part lorsque le script arrive à expiration

Page 224: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

224

La gestion des connexions aux La gestion des connexions aux sites web(2)sites web(2)

PrincipePrincipe Le langage PHP dispose de plusieurs outils permettant de Le langage PHP dispose de plusieurs outils permettant de

gérer les connexions des utilisateurs sur un site webgérer les connexions des utilisateurs sur un site web

L'état ABORTED en principe interrompt logiquement le script L'état ABORTED en principe interrompt logiquement le script dès que l'utilisateur se déconnecte du site. Toutefois, il est dès que l'utilisateur se déconnecte du site. Toutefois, il est possible de modifier ce comportement en activant l'option de possible de modifier ce comportement en activant l'option de configuration ignore_user_abort dans le fichier php.ini.configuration ignore_user_abort dans le fichier php.ini.

Si une fonction de fermeture a été enregistrée avec Si une fonction de fermeture a été enregistrée avec l'instruction register_shutdown_function, le moteur de script se l'instruction register_shutdown_function, le moteur de script se rendra compte après que le client se soit déconnecté puis lors rendra compte après que le client se soit déconnecté puis lors de la prochaine exécution du script que celui ci n'est pas de la prochaine exécution du script que celui ci n'est pas terminé, ce qui provoquera l'appel de la fonction de fermeture terminé, ce qui provoquera l'appel de la fonction de fermeture mettant fin au script.mettant fin au script.

Lorsque le script se termine normalement, cette fonction sera Lorsque le script se termine normalement, cette fonction sera également appelée.également appelée.

Page 225: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

225

La gestion des connexions aux La gestion des connexions aux sites web (3)sites web (3)

PrincipePrincipe L'instruction L'instruction connection_aborted permet d'exécuter une fonction permet d'exécuter une fonction

spécifique à la déconnexion d'un client. Si la déconnexion est spécifique à la déconnexion d'un client. Si la déconnexion est effective, la fonction connection_aborted retourne true.effective, la fonction connection_aborted retourne true.

Un script expire par défaut après une durée de 30 secondes. Un script expire par défaut après une durée de 30 secondes. Néanmoins, ce temps peut être modifié par l'intermédiaire de Néanmoins, ce temps peut être modifié par l'intermédiaire de l'option de configuration l'option de configuration max_execution_time dans le fichier dans le fichier php.ini.php.ini.

Une fonction se chargeant de terminer le script sera appelée si Une fonction se chargeant de terminer le script sera appelée si le délai arrive à expiration ou si le client se déconnecte.le délai arrive à expiration ou si le client se déconnecte.

Les fonctions Les fonctions connection_timeout, , connection_aborted et et connection_status permettent respectivement de vérifier si l'état permettent respectivement de vérifier si l'état de la connexion est ABORTED, TIMEOUT et les trois états de la connexion est ABORTED, TIMEOUT et les trois états possibles.possibles.

Page 226: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

226

La gestion des connexions aux La gestion des connexions aux sites web (4)sites web (4)

Les fonctions de connexionsLes fonctions de connexions

$nombre = connection_aborted();vérifie si le client a abandonné la connexion.

$nombre = connection_status();retourne les bits représentant le statut de la connexion.

true | false = connection_timeout();vérifie l'expiration du script en cours.

$nombre = ignore_user_abort(paramètre);détermine si lors de la déconnexion d'un client, le script doit continuer ou arrêter sonexécution.

Le paramètre peut valoir soit '0' pour un comportement normal, '1' pour unabandon et '2' pour une expiration.

  

Page 227: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

227

Les en-têtes HTTPLes en-têtes HTTP (1) (1)

PrincipePrincipe Sont des informations envoyées lors de chaque échange par le Sont des informations envoyées lors de chaque échange par le

protocole HTTP entre un navigateur et un serveurprotocole HTTP entre un navigateur et un serveur Informations sur les données à envoyer dans le cas d'une Informations sur les données à envoyer dans le cas d'une

requêterequête

Permettent aussi d'effectuer des actions sur le navigateur Permettent aussi d'effectuer des actions sur le navigateur comme le transfert de cookies ou bien une redirection vers une comme le transfert de cookies ou bien une redirection vers une autre pageautre page

Sont les premières informations envoyées au navigateur (pour Sont les premières informations envoyées au navigateur (pour une réponse) ou au serveur (dans le cas d'une requête), une réponse) ou au serveur (dans le cas d'une requête),

– elles se présentent sous la forme: en-tête: valeur

la syntaxe doit être rigoureusement respectéela syntaxe doit être rigoureusement respectée aucun espace ne doit figurer entre le nom de l'en-tête et les aucun espace ne doit figurer entre le nom de l'en-tête et les

deux points (:). Un espace doit par contre figurer après celui-ci deux points (:). Un espace doit par contre figurer après celui-ci

Page 228: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

228

Les en-têtes HTTP (2)Les en-têtes HTTP (2)

PrincipePrincipe PHP fournit une fonction permettant d'envoyer des en-tête PHP fournit une fonction permettant d'envoyer des en-tête

HTTP manuellement du serveur au navigateur HTTP manuellement du serveur au navigateur

booléen header(chaîne en-tête HTTP)booléen header(chaîne en-tête HTTP)

La fonction header() doit être utilisée avant tout envoi de La fonction header() doit être utilisée avant tout envoi de données HTML au navigateurdonnées HTML au navigateur

Exemples Exemples Rediriger le navigateur vers une nouvelle page: Rediriger le navigateur vers une nouvelle page:

<?header("location: http://www.ensm-douai.fr/"); ?>

Pour envoyer au navigateur une image créé à la voléePour envoyer au navigateur une image créé à la volée

<?header("Content-Type: image/gif");imagegif($image); // envoi de l'image au navigateur // code

générant l'image?>

Page 229: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

229

Les en-têtes HTTP (3)Les en-têtes HTTP (3)

Récupérer les en-têtes de la requêteRécupérer les en-têtes de la requête Alors que la fonction header() permet d'envoyer des en-têtes Alors que la fonction header() permet d'envoyer des en-têtes

HTTP au navigateur, PHP fournit une seconde fonction permettant HTTP au navigateur, PHP fournit une seconde fonction permettant de récupérer dans un tableau l'ensemble des en-têtes HTTP de récupérer dans un tableau l'ensemble des en-têtes HTTP envoyées par le navigateurenvoyées par le navigateur

Tableau getallheaders();

Le tableau retourné par la fonction contient les en-têtes Le tableau retourné par la fonction contient les en-têtes indexés par leur nomindexés par leur nom

Exemple : un script permettant par exemple de récupérer des Exemple : un script permettant par exemple de récupérer des en-têtes particuliers. en-têtes particuliers.

<?$entetes = getallheaders;echo $entetes["location"];?>

Page 230: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

230

Les en-têtes HTTP (4)Les en-têtes HTTP (4)

Les fonctions HTTPLes fonctions HTTP

$nombre = header(chaîne);envoie une entête HTTP avant toute commande PHP.

true | false = headers_sent();vérifie si les entêtes HTTP ont bien été envoyés

$nombre = setcookie(nom, valeur [, date_expiration [, chemin [, domaine [, sécurisation]]]]);

envoie un cookie.

  

  

Page 231: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

231

Page 232: 1 Création de pages Web Dynamiques Côté serveur (en PHP) Djamel-Abdelhak SERIAI Email : seriai@ensm-douai.fr seriai@ensm-douai.fr Web :

232