184
1 SOMMAIRE Vue d’ensemble de PHP Structure de base Prog. Orientée Objet Formulaires et Superglobales Ressources et Supports de données Cockies et Sessions Modélisation UML pour PHP XML et PHP Sécurité Frameworks

Cours Web php

Embed Size (px)

Citation preview

Page 1: Cours Web php

1

SOMMAIRE

• Vue d’ensemble de PHP

• Structure de base

• Prog. Orientée Objet

• Formulaires et Superglobales

• Ressources et Supports de données

• Cockies et Sessions

• Modélisation UML pour PHP

• XML et PHP

• Sécurité

• Frameworks

Page 2: Cours Web php

Ressources d’aide francophones

• L’Afup (Association française des utilisateurs de PHP) est une association dont le

principal objectif est de promouvoir le langage PHP auprès des professionnels. (site

Internet : http://www.afup.org).

2

Références

Page 3: Cours Web php

PHPFrance.com

• PHPFrance est l’espace avec lequel de nombreux développeurs PHP d’aujourd’hui

se sont formés il y a quelques années. (site Internet : http://www.phpfrance.com).

3

Références

Page 4: Cours Web php

PHPIndex.com

• PHPIndex est l’un des sites pionniers français sur le PHP. Ce portail propose de

nombreuses ressources et informations sur des sujets pointus (site Internet :

http://www.phpindex.com).

4

Références

Page 5: Cours Web php

PHPScripts-fr.net

• PHPScripts offre de nombreuses ressources sur le PHP. Son principal atout est son

annuaire de scripts. Il contient des ressources dans tous les domaines :

administration de base de données, agenda, annuaire, authentification, etc.

• site Internet : http://www.phpscripts-fr.net).

5

Références

Page 6: Cours Web php

PHP Solutions

• PHP Solutions est un magazine papier dédié à PHP et MySQL. Il rassemble de

nombreux articles intéressants en français. D’origine polonaise, le magazine est

traduit dans de nombreuses langues (site Internet : http://www.phpsolmag.org).

6

Références

Page 7: Cours Web php

7

Références

Page 8: Cours Web php

8

Références

Page 9: Cours Web php

9

Références

Page 10: Cours Web php

10

Références

Page 11: Cours Web php

Eclipse

• L’éditeur Eclipse accompagné du plug-in PHP Eclipse constitue une des solutions les

plus complètes à disposition des développeurs de projets de grande taille.

• http://www.phpeclipse.de

Zend Studio

• Un éditeur similaire à Eclipse, également écrit en Java par la société Zend

Technologies.

• http://www.zend.com/store/products/zend-studio/

Maguma Open Studio/Maguma Studio

• Un bon éditeur, qui existe maintenant en deux versions, une open-source et une

commerciale.

• http://www.maguma.com

Komodo Professional

• Komodo est un éditeur stable, qui possède une interface agréable et intuitive

• http://www.activestate.com/Products/Komodo/

PHPEdit

• PHPEdit est un bon éditeur commercial spécialisé pour PHP.

• http://www.waterproof.fr11

Editeurs

Page 12: Cours Web php

12

Documentation en ligne

• Pour obtenir en ligne toute la documentation officielle

(en français) sur une commande, tapez l’URL suivante

dans la barre d’adresse de votre navigateur Internet :

• http://fr.php.net/

• Et rajouter en fin d’URL le nom de la commande.

• Exemple :

• http://fr.php.net/echo

Page 13: Cours Web php

13

support

public/www

index.html

Le répertoire

3

2

Serveur http

1

4

client

Comment ça fonctionne sans PHP

Page 14: Cours Web php

14

public/www

Module PHP3

2

1

4

fichier.php

Fichier_bis.php

Serveur http

client

SGBD

MySQL

Génération

du code html

Comment ça fonctionne avec PHP/MySQL

Page 15: Cours Web php

15

• Il existe différents serveurs http

– Apache

• http://httpd.apache.org

– IIS

• www.microsoft.com

– Information sur le protocole http

• www.w3.org/Protocols/

• Echange d’information entre serveur et clients

– Pour echanger des informations entre le serveur et, les clients on

utilise le protocole HTTP (ensemble de règles de codes).

– Nestcape Navigator, Microsoft Internet Explorer, lynx, iCab, …

Serveur http

Page 16: Cours Web php

16

PHP est un langage interprété (un langage de script) exécuté du côté serveur (comme les scripts CGI, ASP, ...) et non du côté client (un script écrit en Javascript ou une applet Java s'exécute sur votre ordinateur...). La syntaxe du langage provient de celles du langage C, du Perl et de Java. Ses principaux atouts sont:

Une grande communauté de développeurs partageant des centaines de milliers d'exemples de script PHP

La gratuité et la disponibilité du code source (PHP 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 (contrairement aux scripts CGi, pour lesquels il faut écrire des lignes de code pour afficher chaque ligne en langage HTML)

La simplicité d'interfaçage avec des bases de données (de nombreux SGBD sont supportés, mais le plus utilisé avec ce langage est MySQL, un SGBD gratuit disponible sur de nombreuses plateformes : Unix, Linux, Windows, MacOs X, Solaris, etc...)

L'intégration au sein de nombreux serveurs web (Apache, Microsoft IIS, etc.).

Introduction

H. Mouncif, Dep. Info.FSAC 2005 Notes de cours : Technologies du web

Page 17: Cours Web php

17

Pourquoi EasyPHP?

Seul un serveur web peut générer le PHP. Le client ne

peut pas interpréter les scripts PHP.

Il va donc falloir trouver un moyen pour compiler les

scripts PHP localement. Vous pourrez alors travailler

dessus pour réaliser votre site en PHP.

EasyPHP est en fait un "package" qui contient tous les

programmes nécessaires pour pouvoir traiter du PHP !

Le site web de EasyPHP est : www.easyphp.org

Serveur Web locale: EasyPHP

Page 18: Cours Web php

18

voici les programmes qu'installe EasyPHP :

• Apache : c'est le programme qu'utilisent les serveurs. Il permet au serveur de distribuer des pages web... mais il ne connaît que le HTML !

• PHP : PHP est comme un "plugin" de Apache. Il a besoin d'Apache pour fonctionner, et grâce à lui Apache saura travailler sur des pages PHP. En clair, Apache + PHP = un serveur PHP

• MySQL : c'est un SGBD(OPEN) pour la gestions des bases de données.

• PHPmyAdmin : Interface utilisateur qui permette de faciliter la gestion des bases de données.

Serveur Web locale: EasyPHP

Page 19: Cours Web php

19

Installez le programme qui se trouve dans le ZIP, comme vous le feriez pour n'importe quel autre programme. A la fin, on vous proposera deux options. Moi tout ce que je vous demande c'est de lancer EasyPHP, alors vous pouvez cocher la case "Lancer EasyPHP".

Configurer EasyPHP

Dernière étape : il faut configurer EasyPHP. Je vous rassure de suite c'est très rapide et très simple.

Faites un clic droit sur l'icône EasyPHP dans la barre des tâches. Un petit menu s'ouvre :

C'est "Administration" qui va nous servir. Cela permet de configurer EasyPHP.

Serveur Web locale: EasyPHP

Page 20: Cours Web php

20

1. Apache > Alias : c'est là qu'on va se rendre pour configurer EasyPHP. Cela permet d'indiquer les sites web que vous avez sur votre disque dur, pour que EasyPHP les reconnaisse.

2. PhpMyAdmin > Gestion BDD : c'est par ici que vous pourrez gérer votre base de données. On verra ce que c'est dans la partie II de ce cours.

Serveur Web locale: EasyPHP

Page 21: Cours Web php

21

1. Nom de l'alias : c'est le nom de votre site. Il faut bien lui donner un nom quoi :p. Dans notre exemple, on mettra "TestsPHP".

2. Le chemin du répertoire : il faut indiquer dans quel dossier se trouve votre site. Si vous avez fait comme je vous l'ai dit, vous devriez avoir créé un dossier "Tests PHP" dans "Mes documents".

3. Paramètres par défaut du répertoire : dès que vous voyez des mots bizarres en anglais, vous faites comme moi : vous n'y touchez pas

4. OK : une fois que tout est rempli, cliquez sur ce petit bouton et c'est bon

Serveur Web locale: EasyPHP

Page 22: Cours Web php

22

Les instructions PHP peuvent être insérées dans les commandes HTML, ce qui facilite le développement des sites web dynamiques. Lorsque PHP commence à traiter un fichier, il ne fait qu'afficher le texte HTML qu'il rencontre. Un fichier, qu’il soit « .html » ou « .php », fonctionnera exactement de la même façon. Si on veut insérer des commandes PHP dans un fichier, il faut indiquer à PHP le début d'une telle séquence, en passant en mode PHP comme tel :

<?php /* Instructions PHP */ ?>

Ou

<? /* Instructions PHP */ ?> (short_open_tag = on)

Autres syntaxes d’intégration :

<script language= "php" >……< /script>

Ou

<%..... %> (asp_tags = on)

Tout ce qui se trouve entre ces balaises sera considéré par le serveur Web comme étant des commandes PHP.

Syntaxe de base

Page 23: Cours Web php

23

Code Source 1: Affichage du texte

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"

"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">

<head>

<title>Notre première instruction : echo</title>

<meta http-equiv="Content-Type" content="text/html; charset=iso-

8859-1" />

</head>

<body>

<h2>Affichage de texte avec PHP</h2>

<p>

Cette ligne a été écrite entièrement en (x)HTML.<br />

<?php

echo ‘Hello world';

print"Hello world";

echo("Hello PHP");

print("Bienvenue sur ma page PHP");

?>

</p>

</body>

</html>

Affichage du texte

Syntaxe de base

Le code de base

PHP

Page 24: Cours Web php

24

La fonction echo

La fonction echo est la fonction de base de toute page PHP. Elle permet

d’afficher une ou plusieurs chaînes et donc d’inclure du texte dans la page

HTML envoyée au navigateur.

Syntaxe :

echo (texte)

echo texte1, texte2

Le séparateur d’instruction

En PHP, toutes les instructions doivent se terminer par un point-virgule.

Exemple :

<?php

echo ("Bonjour");

echo("Olivier");

?>

Syntaxe de base

Page 25: Cours Web php

25

Plusieurs manières de définir des zones de commentaires :

/*forme de commentaires 1 */

Attention pas d’imbrication

Comme en langage C

# formme de commentaires 2

Ce type de commentaire à la Unix est très peux utilisé

// forme de commentaires 3

Comme en langage C++

Les commentaires

Page 26: Cours Web php

26

Définition

• La fonction define permet de définir une constante. Une constante

est une zone mémoire identifié par un nom qui contient une valeur

lisible mais non modifiable.

Syntaxe

Booléen define(Identificateur, valeur, booleén)

– Identificateur : Nom de la constante

– Valeur : valeur de la constante

– booleén : indique si le nom de la constante est sensible à la casse

(TRUE – Valeur par défaut), ou non (FALSE).

La fonction define retourne true en cas de succés et false en cas

d’erreur.c

Constantes

Page 27: Cours Web php

27

Constantes

•L’utilisateur peut définir des constantes dont la valeur est fixée une fois

pour toute. Les constantes ne portent pas le symbole $ (dollars) en début

d’identificateur et ne sont pas modifiables.

•define(‘’var’’,valeur) : définit la constante var (sans $) de valeur valeur

•Exemple 1 :

•define(‘’author’’,’’Foobar’’);

•echo author; // affiche ‘Foobar’

•Exemple 2 :

•define(MY_YEAR,1980);

•echo MY_YEAR; // affiche 1980

Page 28: Cours Web php

28

La fonction defined

• La fonction defined permet de savoir si une constante est définie ou non.

Syntaxe

– Booléen defined(texte)

– Defined retourne TRUE si la constante est définie et FALSE dans le cas contraire.

La fonction constant

• La fonction constant permet de retourner la valeur d’une constante dont le nom est passé en paramètre.

Syntaxe

– Constant(Identificateur)

Identificateur : Nom de la constante

Fonctions utiles

Page 29: Cours Web php

29

Les variables

Une variable est un objet repéré par son nom, qui peut être nombre,

texte ou autre. Les variables conservent temporairement des valeurs,

qui pourront être modifiées lors de l'exécution du programme.

PHP supporte quatre types scalaires :

Booléen, entier, nombre à virgule flottante, chaîne de

caractères.

PHP supporte deux types composés :

Tableau, objet.

PHP supporte deux types spéciaux :

Ressource, null.

Variables

Page 30: Cours Web php

30

Le typage des variables est implicite en PHP. Il n’y a donc pas besoin de

les déclarer ni même de les initialiser avant leur utilisation, toutefois, les

noms de variables doivent répondre à certaines règles syntaxiques:

Tout nom de variable doit obligatoirement être précédé du caractère

dollar ($).

Tout nom de variable doit commencer par une lettre (majuscule ou

minuscule) ou un "_", mais jamais un chiffre.

Un nom de variable peut comporter des lettres, des chiffres et le

caractère _ (les espaces ne sont pas autorisés).

Les noms de variables sont sensibles à la casse.

On affecte des valeurs aux variables à l’aide du signe égale (=)

En PHP3 les variables sont assignées uniquement par valeurs

En PHP4 les variables peuvent être assignées par références

Elles deviennent un alias

Variables

Page 31: Cours Web php

31

•empty($var) : renvoie vrai si la variable est vide

•isset($var) : renvoie vrai si la variable existe

•unset($var) : supprime une variable

•var_dump($var):affiche des informations sur une variable

•gettype($var) : retourne le type de la variable

•settype($var, ’’type’’) : convertit la variable en type type (cast)

•is_long(), is_double(), is_string(), is_array(), is_object(), is_bool(),

is_float(), is_numeric(), is_integer(), is_int()…

Fonctions utiles

Page 32: Cours Web php

32

• Il existe quelques fonctions ayant attrait au type des variables :

– string gettype(var) : renvoie le type de la variable sous forme de chaîne

<?php

$var1 = "hello";

$var2 = 12;

$var3 = TRUE;

echo gettype($var1);

echo gettype($var2);

echo gettype($var3);

?>

Le code ci-dessus affichera string integer boolean.

Fonctions utiles

Page 33: Cours Web php

33

bool is_type(var) : renvoie True si la variable testée est du type

<?php

$var = 12;

is_int($var); //true

Is_string($var); //false

?>

var_dump(var) : retourne les informations structurées d’une variable, y

compris sont type et sa valeur.

<?php

$var = 12;

var_dump($var);

?>

Le code ci-dessus affichera int(15)

Fonctions utiles

Page 34: Cours Web php

34

• Il existe une miriade de fonctions mathématiques.

• abs($x) : valeur absolue

• ceil($x) : arrondi supérieur

• floor($x) : arrondi inférieur

• pow($x,$y) : x exposant y

• round($x,$i) : arrondi de x à la ième décimale

• max($a, $b, $c …) : retourne l’argument de valeur maximum

• pi() : retourne la valeur de Pi

• Et aussi : cos, sin, tan, exp, log, min, pi, sqrt…

• Quelques constantes :

• M_PI : valeur de pi (3.14159265358979323846)

• M_E : valeur de e (2.7182818284590452354)

Fonctions utiles

Page 35: Cours Web php

35

Les variables sont précédées du signe $

$bonjour = "Hello";

$nom = "Hello";

$nomcomplet = "Paul &nom";

$email = "kilain". "."."kilain";

Les variables référencées (&)

$nomcomplet = "Paul".&$nom; en PHP4

Exemple :

<?php

$foo = 'Pierre'; // Assigne la valeur 'Pierre' à $foo

$bar = &$foo; // Référence $foo avec $bar.

$bar = "Mon nom est Pierre"; // Modifie $bar...

echo $foo; // $foo est aussi modifiée

echo $bar;

?>

Variables

Page 36: Cours Web php

36

• Le type d’une variable est à liaison superficielle

<?php

$a = 100;

echo $a;

$a = "une chaine de caracteres";

echo $a;

?>

Variables

Page 37: Cours Web php

37

• Une variable chaîne de caractères n’est pas limitée en nombre de

caractères. Elle est toujours délimitée par des simples quotes ou des doubles

quotes.

• Exemples :

• $nom = ‘’Etiévant’’;

• $prenom = ‘Hugo’;

• Les doubles quotes permettent l’évaluation des variables et caractères

spéciaux contenus dans la chaîne (comme en C ou en Shell) alors que les

simples ne le permettent pas.

• Exemples :

• echo ‘’Nom: $nom‘’; // affiche Nom: Etiévant

• echo ’Nom: $nom‘; // affiche Nom: $nom

• Quelques caractères spéciaux : \n (nouvelle ligne), \r (retour à la ligne), \t

(tabulation horizontale), \\ (antislash), \$ (caractère dollars), \’’ (double

quote).

• Exemple : echo ‘’Hello Word !\n’’;

Les chaînes de caractères

Page 38: Cours Web php

38

• Opérateur de concaténation de chaînes : . (point)

• Exemple 1 :

• $foo = ‘’Hello’’;

• $bar = ‘’Word’’;

• echo $foo.$bar;

• Exemple 2 :

• $name = ‘’Henry’’;

• $whoiam = $name.‘’IV’’;

• Exemple 3 :

• $out = ‘Patati’;

• $out .= ‘’ et patata…’’;

Les chaînes de caractères

Page 39: Cours Web php

39

Les chaînes de caractères

• Affichage d’une chaîne avec echo:

• Exemples:

• echo ‘Hello Word.’;

• echo ‘’Hello ${name}\n’’;

• echo ’’Nom : ’’, $name;

• echo(‘’Bonjour’’);

• Quelques fonctions:

• strlen($str) : retourne le nombre de caractères d’une chaîne

• strtolower($str) : conversion en minuscules

• strtoupper($str) : conversion en majuscules

• trim($str) : suppression des espaces de début et de fin de chaîne

• substr($str,$i,$j) : retourne une sous chaîne de $str de taille $j et

débutant à la position $i

• strnatcmp($str1,$str2) : comparaison de 2 chaînes

• addslashes($str) : déspécialise les caractères spéciaux (‘, ‘’, \)

• ord($char) : retourne la valeur ASCII du caractère $char

Page 40: Cours Web php

40

La portée d'une variable dépend du contexte dans lequel la variable est définie.

Les constantes, les fonctions et classes sont partout visible donc accessible.

Variable globales

Les variables globales ne peuvent être utilisées telles quelles au niveau du corps des fonctions.

Une variable globale ne peut être au sein d’une fonction que si elle est précédée du mot réservé global.

Variable locales

Elles sont définies au niveau du corps des fonctions

Portée des variables

Page 41: Cours Web php

41

Toute variable utilisée dans une fonction est par définition, locale. Par exemple :

<?php

$a = 1;

function test() {

echo $a; /* portée locale */

}

test();

?>

Le script n'affichera rien à l'écran car la fonction echo utilise la variable

locale $a, et celle−ci n'a pas été assignée préalablement dans la

fonction.

Portée des variables

Page 42: Cours Web php

42

En PHP, une variable globale doit être déclarée à l'intérieur de chaque fonction afin de pouvoir être utilisée dans cette fonction. Par exemple:

<?php

$a = 1;

$b = 2;

function somme() {

global $a, $b;

$b = $a + $b;

}

somme();

echo $b;

?>

Le script ci−dessus va afficher la valeur "3". En déclarant

globales les variables $a et $b locales de la fonction

somme(), toutes les références à ces variables concerneront

les variables globales. Il n'y a aucune limite au nombre de

variables globales qui peuvent être manipulées par une

fonction.

Portée des variables

Page 43: Cours Web php

43

Une autre caractéristique importante de la portée des variables est la notion de variable static . Une variable statique a une portée locale uniquement, mais elle ne perd pas sa valeur lorsque le script appelle la fonction. Prenons l'exemple suivant:

<?php

function test() {

$a = 0;

echo $a;

$a++;

}

?>

Cette fonction est un peu

inutile car à chaque fois

qu'elle est appelée, elle

initialise $a à 0 et affiche "0".

L'incrémentation de la

variable ($a++) ne sert pas à

grand chose, car dès que la

fonction est terminée la

variable disparaît.

<?php

function test() {

static $a = 0;

echo $a;

$a++;

}

?>

Pour faire une fonction de

comptage utile, c'est−à−dire

qui ne perdra pas la trace du

compteur, la variable $a est

déclarée comme une variable

statique (voir script au-

dessus). L’appel de la fonction

Test() affichera une valeur de

$a incrémentée de 1.

Portée des variables

Page 44: Cours Web php

44

Référence sur une variable

•On peut à la manière des pointeurs en C faire référence à une variable

grâce à l’opérateur & (ET commercial).

•Exemple 1 :

•$toto = 100; // la variable $toto est initialisée à la valeur 100

•$foobar = &$toto; // la variable $foobar fait référence à $toto

•$toto++; // on change la valeur de $toto

•echo $foobar; // qui est répercutée sur $foobar qui vaut alors 101

•Exemple 2 :

•function change($var) {

• $var++; // la fonction incrémente en local l’argument

•}

•$nbr = 1; // la variable $nbr est initialisée à 1

•change(&$nbr); // passage de la variable par référence

•echo $nbr; // sa valeur a donc été modifiée

Page 45: Cours Web php

45

La fonction gettype() permet de lire le type d’une variable.

On peut assigner les types suivants Array

Class

Double

Integer

String

La fonction settype() permet de changer le type d’une variable

<?php

$a = 3.14;

If(gettype($a)=="double")

settype($a, "integer" );

?>

Conversion de type

Page 46: Cours Web php

46

Avec PHP on peut utiliser les différents opérateurs arithmétiques comme dans

les exemples suivants :

Exemple Nom Résultat

$a + $b Addition Somme de $a et $b.

$a − $b Soustraction Différence de $a et $b.

$a * $b Multiplication Produit de $a et $b.

$a / $b Division Quotient de $a et $b.

$a % $b Modulo Reste de $a divisé par $b.

L'opérateur de division ("/") retourne une valeur entière (le résultat d'une

division entière) si les deux opérandes sont entiers (ou bien des chaînes

converties en entier. Si l'un des opérandes est un nombre à virgule flottante, ou

bien le résultat d'une opération qui retourne une valeur non entière, un nombre

à virgule flottante sera retourné.

Les opérateurs arithmétiques

Page 47: Cours Web php

47

L'opérateur d'assignation est le signe "=". Il signifie que l'opérande de gauche se voit

affecter la valeur de l'expression qui est à droite du signe égal. En plus, il existe des

"opérateurs combinés" pour tous les opérateurs arithmétiques et pour les opérateurs

sur les chaînes de caractères. Cela permet d'utiliser la valeur d'une variable dans

une expression et d'affecter le résultat de cette expression à cette variable. Par

exemple:

<?php

$a = 3;

$a += 5; // affecte la valeur 8 à la variable $a.

// correspond à l'instruction '$a = $a + 5');

$b = "Bonjour";

$b .= "tout le monde!"; // affecte la valeur "Bonjour tout le

//monde!" à la variable $b

// identique à $b = $b." tout le monde!";

?>

Les opérateurs d’assignation

Page 48: Cours Web php

48

Les opérateurs de comparaison, comme leur nom l'indique, vous permettent de

comparer deux valeurs.

Exemple Nom Résultat

$a == $b Égal Vrai si $a est égal à $b.

$a != $b Différent Vrai si $a est différent de $b.

$a < $b inférieur Vrai si $a est inférieur strict à $b.

$a > $b grand Vrai si $a grand strict à $b.

$a <= $b Inf ou égal Vrai si $a est inf ou égal à $b.

$a >= $b Sup ou égal Vrai si $a est sup ou égal à $b.

Un autre opérateur conditionnel est l'opérateur ternaire (":?"), qui fonctionne

comme en langage C<?php

(expr1) ? (expr2) : (expr3);

?>

Cette expression renvoie la valeur de l'expression expr2 si l'expression expr1

est vraie, et l'expression expr3 si l'expression expr1 est fausse.

Les opérateurs de comparaison

Page 49: Cours Web php

49

if, else, elseif

switch, case, default

For

While

do…while

foreach(PHP4)

break, continue

Les structures de contrôles

Page 50: Cours Web php

50

If else elseif

Syntaxe:

If(expression)

{

bloc;

}

Elseif(expression 2)

{

bloc2;

}

………..

else

{

dernier block

}

Les structures de contrôles

Page 51: Cours Web php

51

Les tableaux

Les tableau (array) représentent la structure de données la plus importante du

langage PHP

Les tableaux sont en PHP d’une seule dimension

La seule manière de construire des tableaux multidimensionnel est d’utiliser

des tableaux de pointeurs.

L’indexation d’un tableau commence toujours à l’indice 0 (zéro)

Deux types d’indexation:

indexage numérique

indexage associatif

Les tableaux

Page 52: Cours Web php

52

Indexation numérique

Indexation explicite

• $couleur[0] = "blanc", $couleur[1] = "bleu", $couleur[2] = "rouge";

Indexation automatique

• $couleur[] = "blanc", $couleur[] = "bleu", $couleur[] = "rouge";

Avec array sans indice

• $couleur = array("blanc", "bleu", "rouge");

Avec array + indice

• $couleur = array(5=>"blanc", "bleu", "rouge");

Indexation associative

$personne = array("nom" =>"LeMouel", "prenom"=>"Yann",

"age"=>30);

$couleur = array(1=>"blanc", 3=>"bleu", 5=>"rouge");

Les tableaux

Page 53: Cours Web php

53

<?php

$couleur[] = "blanc"; $couleur[] = "bleu"; $couleur[] = "rouge";

echo "$couleur[2]";

$couleur2 = array("blanc", "bleu", "rouge");

echo "<br /> $couleur2[2]";

$couleur3 = array(5=> "blanc", "bleu", "rouge");

echo "<br /> $couleur3[6]";

$personne = array("nom"=> "LeMouel", "prenom"=> "Yann", "age"=> 30);

echo "<br />$personne[prenom]";

$couleur4 = array(1=> "blanc", 3=> "bleu", 5=> "rouge");

echo "<br />$couleur4[5]";

?>

Les tableaux

Page 54: Cours Web php

54

<?php

$couleur[] = "blanc"; $couleur[] = "bleu"; $couleur[] = "rouge";

for($index=0; $index < count($couleur); $index++)

{

echo "<br />indic $index=> $couleur[$index]";

}

?>

Parcours d’un tableau : for

Les tableaux

Page 55: Cours Web php

55

Tableaux multidimensionnels

Deux notations peuvent être utilisées pour construire un tableau multidimensionnel, sous forme

$tableau[…]=$tableau_intérieur ou,

$tableau[…][…]=valeur.

Méthode 1 :

<?php//création d’un tableau contenant les villes du Maroc

$villes_maroc[]= "Rabat";

$villes_maroc[]= "Temara";

$villes_maroc[]= "Casablanca";// stockage du tableau des villes de Maroc dans le tableau des villes

$villes["Maroc"]=$villes_maroc; //tableau de tableau

//viles de France

$villes_france[]= "Paris";

$villes_france[]= "Brest";

$villes_france[]= "Quimper";// stockage du ville de France

$villes["France"]=$villes_france;

?>

Les tableaux

Page 56: Cours Web php

56

Tableaux multidimensionnels

Méthode 2 :<?php

//villes du maroc

$villes["Maroc"][]= "Rabat";

$villes["Maroc"][]= "Temara";

$villes["Maroc"][]= "Casablanca";

//villes de france

$villes["France"][]= "Paris";

$villes["France"][]= "Brest";

$villes["France"][]= "Quimper";

?>

Les tableaux

Page 57: Cours Web php

57

Tableau multidimensionnels

En utilisant la fonction array:

Méthode 1 :

<?php

$villes_maroc[]= array("Rabat", "Temara", "Casablanca");

$villes_france[]= array("Paris", "Brest", "Quimper");

$villes=array("Maroc"=>$villes_maroc,"France"=>$villes_france);

?>

Méthode 2 :

<?php

$villes=array("Maroc"=>array("Rabat", "Temara", "Casablanca"),

"France"=>array("Paris", "Brest", "Quimper"));

?>

Les tableaux

Page 58: Cours Web php

58

La structure de parcours de tableau foreach

La forme foreach reste la plus adaptée pour passer en revue les éléments d’un

tableau. Il y a deux syntaxes possibles :

Première syntaxe :

<?php

foreach($tableau as $value)

instructions;

?>

A chaque itération de la boucle, $valeur contient la valeur de l’élément du

tableau $tableau. Cette syntaxe permet de parcourir le tableau de début à la fin.

Deuxième syntaxe :

<?php

foreach($tableau as $clé=>$value)

instructions;

?>

la clé courante est stockée dans la variable $clé et la valeur dans la variable dans

$valeur.

Les tableaux

Page 59: Cours Web php

59

Les tableaux

<?php

$tab=array("zéro", "un", "deux", "zéro"=>0, "un"=>1, "deux"=>2);

echo "Première syntaxe :<br />";

foreach($tab as $nombre)

{

echo " $nombre <br /> ";

}

echo "deuxième syntaxe :<br />";

foreach($tab as $cle=>$nombre)

{

echo " $clé=>$nombre <br /> ";

}

?>

Exemple d’utilisation de la structure foreach

Page 60: Cours Web php

60

La structure de parcours de tableau while

Syntaxe :

While(list(variable_clé, variable_valeur)=each(tableau))

{

instructions ;

}

Pour passer en revue les éléments d’un tableau, nous devrons le

faire à l’aide de trois fonctions complémentaires :

– reset permet de pointer sur le premier élément du tableau

– list permet d’affecter une série de variables à un tableau ou l’inverse (affecter un tableau

à une série de variables).

– each retourne le couple clé/valeur en cours, et pointe sur l’élément suivant du tableau.

Les tableaux

Page 61: Cours Web php

61

<?php

$tab=array("zéro", "un", "deux", "zéro"=>0, "un"=>1, "deux"=>2);

reset($tab);

While (list($clé, $valeur) = each ($tab))

echo "$clé=>$valeur<br />";

?>

Les tableaux

La fonction each permet de passer d’un élément à l’autre en pointant

sur un élément différent à chaque itération. La fonction list permet de

récupérer la valeur et la clé de l’élément courant.

Exemple d’utilisation de la structure whileLes tableaux

Page 62: Cours Web php

62

La structure de parcours do ..while

synatxe:

do

{

instructions…

} while(next(tableau))

Pour parcourir le tableau, nous avons besoin des fonctions suivantes:

La fonction key (nom du tableau) renvoie le nom de la clé de la paire clé/valeur

courante,

La fonction current (nom du tableau) renvoie la valeur de l’élément courant. Le

pointeur est initialement sur l’indice de la première paire clé/valeur,

La fonction next(nom du tableau) déplace le pointeur interne vers l’élément

suivant et renvoie la valeur de cet élément. A la fin du tableau false est

renvoyée,

Les tableaux

Page 63: Cours Web php

63

Exemple d’utilisation de la structure do …while

<?php

$personne = array("nom"=>"Mouel", "prenom"=>"Yann", "age"=>30);

do

{

echo "<br />indice" , key($personne), "==>", current($personne);

} while(next($personne))

?>

Les tableaux

Page 64: Cours Web php

64

1 Introduction

PHP offre la possibilité de définir des fonctions avec tous les avantages associés.

Les fonctions en PHP peuvent prendre des arguments sans spécifier leurs types.

Elles peuvent de façon optionnelle retourner une valeur.

2 Déclaration et appel

Le mot clé function permet d’introduire la définition d’une fonction

qui peut être définie selon la syntaxe suivante :

<?php

function nom_function($paramètre0, $paramètre1, $paramètre2, …)

{

instructions ;

}

?>

nom_function doit respecter les règles des noms de variable

Fonctions

Page 65: Cours Web php

65

1 Introduction

PHP offre la possibilité de définir des fonctions avec tous les avantages

associés.

Les fonctions en PHP peuvent prendre des arguments sans spécifier leurs

types.

Elles peuvent de façon optionnelle retourner une valeur.

2 Déclaration et appel

Le mot clé function permet d’introduire la définition d’une fonction

qui peut être définie selon la syntaxe suivante :

<?php

function nom_function($paramètre0, $paramètre1, $paramètre2, …)

{

instructions ;

}

?>

nom_function doit respecter les règles des noms de variable

Fonctions

Page 66: Cours Web php

66

Exemple:

<?php

// fonction avec 2 paramètres retourne la somme des deux paramètres

function Somme($a, $b) {

return $a+$b;

}

$res = Somme(10, 11); echo "$res= " , $res;

// fonction avec un tableau comme paramètre

function takes_array($input) {

echo "$input[0] + $input[1] = ", $input[0]+$input[1];

}

//fonction sans paramètre qui affiche “Ceci est un exemple“

function Afficher_message(){

echo "ceci est un message <br />";

}

Afficher_message();

?>

Fonctions

Page 67: Cours Web php

67

Valeurs de retour

Il est possible de retourner plusieurs valeurs d’une fonction sous forme d’un

tableau. Dans l’appel de cette fonction, il faudra affecter le tableau retourner à la

procédure list() qui prend en paramètre la taille de ce tableau. On affecte à list() le

retour de la fonction.

<?php

function opération($arg1,$arg2){

return array ($arg1+$arg2, $arg1-$arg2, $arg1*$arg2 ) ;

}

$a=5 ; $b=3 ;

list($a1,$a2,$a3)= opération($a,$b) ;

echo " somme : $a1 <br />" ;

echo " soustraction : $a2 <br />" ;

echo " produit : $a3 <br />" ;

?>

Fonctions

Page 68: Cours Web php

68

Visibilité de la fonction

Une fonction est utilisable uniquement dans le script où elle est définie. Pour l’employer dans

plusieurs scripts, il faut, soit recopier sa définition dans les différents scripts, soit la définir dans

un fichier inclus partout où la fonction est nécessaire.

Exemple :

Fichier fonctions.inc contenant des définitions de fonctions :

<?php

function somme($arg1,$arg2){

return $arg1+$arg2;

}

?>

Script utilisant les fonctions définies dans fonctions.inc :

<?php

include("fonctions.inc") ; //inclusion du fichier fonctions.inc

echo somme(3,3) ; //utilisations de la fonction somme

?>

Fonctions

Page 69: Cours Web php

69

Fonction variable

PHP propose une fonction variable qui permet de stocker un nom de fonction

dans une variable, et d’appeler la variable dans une instruction. Dans ce cas,

PHP remplace la variable par sa valeur et cherche à exécuter la fonction

correspondante.

Exemple :

Fonctions

<?php

function somme($arg1,$arg2){

return $arg1+$arg2;

}

function division($arg1,$arg2){

if($arg2==0)

echo "division par zero !!! <br />";

else

return $arg1/$arg2;

}

function calculer($opération, $arg1,$arg2)

{

return $opération($arg1,$arg2) ;

}

// utilisation de la fonction calculer

echo calculer("somme",1,2)

echo "<br />";

echo calculer("division",1,2);

?>

Page 70: Cours Web php

70

Paramètres avec valeur par défaut

Les paramètres sont passés par copie et les résultas sont retournés par copie.

Même sans paramètre, un entête de fonction doit en porter. Comme en C++, il

est possible d’indiquer qu’un paramètre possède une valeur par défaut grâce à

la syntaxe suivante :

<?php

function nom_function($arg1 = valdeft1, $arg2= valdef2,..., $argn=valdeft){

instructions ; }

?>

La valeur par défaut d’un paramètre doit être une expression littérale et ne

peut être, ni une variable, ni une fonction, ni une expression composée.

<?php

function affiche($titre, $couleur="black"){

echo("<h1 style=\"color:$couleur\">$titre</h1>"); }

affiche("couleur noire"); affiche("couleur bleu", "red"); affiche("couleur!",

"#aaff55");

?>

Fonctions

Page 71: Cours Web php

71

Passage d’arguments par valeur, par référence

Le passage d’arguments par référence permet à une fonction de modifier les

variables passées en paramètres. Pour passer un argument par référence, il

suffit d’utiliser l’opérateur de référence & devant le nom du paramètre dans

la déclaration de la fonction.

Fonctions

<?php

function incr_valeur($cmp){

$cmp++; //incrémentation

echo "\$cmp =$cmp <br />";

}

$i=1 ;

echo "\$i avant appel = $i <br />";

incr_valeur($i) ;

echo "\$i après appel =$i <br >";

?>

<?php

function incr_valeur(&$cmp){

$cmp++ ; // incrémentation

echo "\$cmp = $cmp <br />";

}

$i=1 ; // initialisation

echo "\$i avant appel = $i <br />";

incr_valeur($i) ;

echo "\$i après appel =$i <br />";

?>

Page 72: Cours Web php

72

Fonctions

Récursivité

PHP permet d’utiliser la récursivité, c-à-d, la possibilité d’une fonction de

s’appeler par elle-même.

Exemple :

<?php

function factoriel($n){

if($n==0) return 1 ;

else return $n*(factoriel($n-1));

}

$nombre=3 ;

echo "factoriel($nombre)=", factoriel($nombre);

?>

Page 73: Cours Web php

73

Formulaires

1 Introduction

Les formulaires servent essentiellement pour la gestion interactive d’un

site.

Les formulaires sont à la base des pages web dynamiques.

2 Mise en œuvre d’un formulaire

Un formulaire XHTML est défini entre les balises <form> et </from>

Exemple:

<form method="post" action="traitement.php">

<p>Texte à l'intérieur du formulaire</p>

</form>

action : le script qui va traiter le formulaire.

method : Mode de transmission vers le serveur des informations

saisies dans le formulaire.

Get : les données du formulaire sont transmises dans l’URL.

Post : les données du formulaire sont transmises dans le corps de la

requête.

Page 74: Cours Web php

74

Formulaires

3 Les méthodes Get et Post

La transmission d’un formulaire s’effectue selon l’une des deux méthodes d’envoi :

GET ou POST.

Si l’option register_globals est activée, lors de la soumission du formulaire à 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.

Si, au contraire, l’option register_globals est invalidée, chaque élément de

saisie est assimilé à une variable PHP au sein du tableau associatif dépendant de

la méthode d’envoi employée.

- Si la méthode GET a été choisie, on retrouve les variables au

sein de la superglobale $_GET.

- Si la méthode POST a été choisie, les variables sont contenues

au sein de la superglobale $_POST.

Pour obtenir les valeurs des variables en utilisant les superglobale, procédez comme

suit :

Syntaxe

$valarg =$_GET[‘nomarg’]; //GET

$valarg =$_POST[‘nomarg’]; //POST

Page 75: Cours Web php

75

Formulaires

La méthode Get

La méthode GET envoie les données sous forme d’une suite de couples

nom/valeur ajoutés à l’URL de la page appelée.

La partie d’une URL précédée par le caractère point d’interrogation (?) est

appelée chaîne de requête. Si la chaîne de requête contient plusieurs

éléments, alors chaque élément/valeur doit être séparé par le caractère

&amp;. Par ailleurs, elle ne peut pas dépasser 255 caractères. Les données

transmises au serveur par la méthode GET sont visibles par les utilisateurs

directement dans la barre d’adresse du navigateur.

Exemple:

http://www.monsite.com/infos.php?jour=27&amp;mois=07&amp;annee=20

03&amp;titre=Informations

4 variables seront créées :

$_GET['jour'] = 27;

$_GET['mois'] = 07;

$_GET['annee'] = 2003;

$_GET['titre'] = "Informations";

Page 76: Cours Web php

76

Formulaires

Exemple :

infos.php

<html><body>

<p>Lien vers la page appel.php, avec des variables aux valeurs

différentes:</p>

<p><a href="appel.php?nom=Yossef&amp;prenom=Amine">Lien vers

cible.php?nom=YossefDupont&prenom=Amine</a></p>

</body></html>

appel.php

<p>Bonjour !</p>

<p>Votre nom est <?php echo $_GET['nom']; ?> , et votre prénom est <?php

echo $_GET['prenom']; ?>.</p>

<p>Faites un autre essai, <a href="infos.php">cliquez ici</a> pour revenir à

infos.php</p>

Page 77: Cours Web php

77

PHP : Les bases Formulaires

La méthode Post

La méthode POST place les informations directement à la suite de

l’adresse URL de la page appelée.

La partie d’une URL regroupe les informations dans l’en-tête d’une

requête HTTP. Ainsi, les données transmises par un formulaire restent

confidentielles et n’apparaissent pas dans l’URL. La fonction isset() est

très pratique lorsqu’on écrit des traitements de formulaires. Elle permet

de déterminer si une variable est affectée (0 compris mais ni NULL ni

FALSE). En utilisant cette fonction, il est possible de déterminer les

champs d’un formulaire n’ayant pas été renseignés par l’utilisateur. Mais

isset() présente une difficulté : le test d’une chaîne de caractères vide

renvoie TRUE.

Page 78: Cours Web php

78

Formulaires

Exemple : Transmettre en utilisant un formulaire

form.php

<form action="cible.php" method="post">

<label>Entrer votre nom:

<input type="text" name="prenom" /> <input type="submit" value="Valider"

/>

</label></form>

cible.php

<p>Bonjour !</p>

<p>Je sais comment tu t'appelles. Tu t'appelles <?php echo

$_POST['prenom']; ?> !</p>

<p>Si tu veux changer de prénom, <a href="form.php">clique ici</a> pour

revenir à form.php</p>

Page 79: Cours Web php

79

Formulaires

4 LE FORMULAIRE ET LE SCRIPT PHP

PHP peut intervenir à deux endroits par rapport au formulaire :

Pour la construction du formulaire, si ce dernier doit contenir des

informations dynamiques ;

Pour le traitement du formulaire ;

Les méthodes utilisables pour faire interagir un formulaire et un script PHP

sont :

Placer le formulaire dans un document xHTML, dans ce cas le formulaire ne

contient aucun élément dynamique, et indiquer le nom de script qui doit

traiter le formulaire dans l’option action de la balise <form>

Placer le formulaire dans un script PHP et faire traiter le formulaire par un

autre script PHP ;

Placer le formulaire dans un script PHP et le faire traiter par le même script

PHP.

Page 80: Cours Web php

80

Exemple :

<?php

echo ("<html>");

echo ("<head>");

echo ("<title> calcul du factoriel </title>");

echo ("</head>");

echo ("<body>");

echo ("<head>");

echo ("<form method=\"post\" action=\"traitement.php\">");

echo("<label> Entrer entier:

<input type=\"text\" name=\"nombre\" size=\"30\"/>

</label>");

echo("<input type=\"submit\" /> <input type=\"reset\" />");

echo("</form>");

echo("</html>");

?>

Formulaires

Page 81: Cours Web php

81

traitement.php

<?php

function factoriel($n){

if($n==0) return 1 ;

else return $n*(factoriel($n-1));

}

$var=$_POST['nombre'];

print("factoriel($var)=");

print(factoriel($var));

?>

Formulaires

Page 82: Cours Web php

82

Formulaires

Exemple: Variables de formulaires complexes

<?php

if (isset($_POST['action']) && $_POST['action'] == 'submitted') {

echo '<pre>';

print_r($_POST);

echo '<a href="'. $_SERVER['PHP_SELF'] .'">Essayez à nouveau</a>';

echo '</pre>';

} else {

?>

Page 83: Cours Web php

83

<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">

Nom : <input type="text" name="personal[name]" /><br />

Email : <input type="text" name="personal[email]" /><br />

ville : <br />

<select multiple name="ville[]">

<option value="casa">casa</option>

<option value="fes">fes</option>

<option value="meknes">meknes</option>

</select><br />

<input type="hidden" name="action" value="submitted" />

<input type="submit" name="submit" value="submit me!" />

</form>

<?php

}

?>

Formulaires

Page 84: Cours Web php

84

La notion d'objet dans le langage du PHP à un aspect très limité contrairement au langages de référence tel que le C++.

Le concept objet doit être pris dans le sens de "module", sous ce nom, se cache un ensemble de commandes visant à exécuter des actions, un objetest une entité, un peu comme si l'on voulait diviser notre programme en sous-tâches.

Vocabulaire du concept objet en PHP

• Objet :Représentant de la classe dans l'application, il se nomme instance de classe.

• Classe : Entité contenant toutes les méthodes et attributs.

• Méthode : Nom donné aux fonctions contenu dans la classe.

• Attribut : Nom donné aux variables globales de la classe, définis aux début.

• constructeur: Nom donné à la méthode lancé lors de l'instanciation de la classe, elle porte le même nom que la classe.

• destructeur:Nom donné à la méthode lancé lors de la destruction de la classe, cet notion, n'existe pas vraiment dans l'implémentation du concept objet en PHP.

POO en PHP

Page 85: Cours Web php

85

Déclaration d’une classe en PHP

class nom_classe{

var $variable1; // Variable sans valeur

var $variable2 = "Variable 2"; // Variable avec valeur

var $tableau = array(); // Tableau ...}

On utilise le mot clé var pour introduire un attribut, vous pouvez laissez cette variable indéfini, ou lui donner une valeur.

POO en PHP

Page 86: Cours Web php

86

Introduction des méthodesclass nom_class {

var $variable1;var $variable2 = "Variable 2";var $tableau = array()

function nom_classe ($var, $autre_var) // Le constructeur de la classe{

...}

function Fonction1 () // Fonction1

{...

}

}

La définition de méthodes dans une classe se fait de la même manière que les

fonctions dans le code source PHP,

POO en PHP

Page 87: Cours Web php

87

Mise en œuvre de la classe

<?php$objet = new nom_classe ("valeur, valeur2");$objet->variable1 = "Variable 1";$objet->fonction2("valeur");

?>

• La création d’une instance de la classe nom_classe utilise le mot-clé new.

• Pour initialiser l’attribut $variable1, on utilise l'objet suivi d'un tiret - puis d'un signe supérieur > et on ajoute le nom de la variable (qui est à l'intérieur de la classe) sans le signe dollar $.

• L'utilisation des fonctions (méthodes) de la classe se fait de la même manière que les variables (attributs) comme nous le voyons pour la méthode fonction2().

POO en PHP

Page 88: Cours Web php

88

POO en PHP

Exemple :

class Voiture { // déclaration de la classe

var $couleur; // déclaration d’un attribut

var $belle = TRUE; // initialisation d’un attribut

function voiture() { // constructeur

$this->couleur = ‘’noire’’;

} // le mot clé $this faisant référence à l’objet est obligatoire

function Set_Couleur($couleur) {

$this->couleur = $couleur;

}

}

$mavoiture = new Voiture(); // création d’une instance

$mavoiture->Set_Couleur(‘’blanche’’); // appel d’une méthode

$coul = $mavoiture->couleur; // appel d’un attribut

Page 89: Cours Web php

89

POO en PHP

Le système de classes de PHP est très succinct, il ne gère que l’héritage simple.

Exemple :

class Voituredeluxe extends Voiture { // déclaration de la sous classe

var $couleur;

function voituredeluxe() { // constructeur

$this->Voiture();

}

function Set_Couleur($couleur) {

$this->couleur = $couleur;

}

function Get_Couleur() {

return $this->couleur;

}

}

La nouvelle classe Voituredeluxe hérite de tous les attributs et méthodes de la

classe parente Voiture dont elle est une extension (extends). Il est possible de

surcharger les méthodes, d’en déclarer de nouvelles, etc.

Page 90: Cours Web php

90

POO en PHP

Quelques fonctions :

get_declared_classes() : retourne un tableau listant toutes les classes définies

class_exists($str) : vérifie qu'une classe dont le nom est passé en argument a été

définie

get_class($obj): retournent le nom de la classe de l’objet $obj

get_class_methods($str) : retourne les noms des méthodes de la classe $str dans un

tableau

get_class_vars($str) : retourne les valeurs par défaut des attributs de la classe $str

dans un tableau associatif

get_object_vars($obj) : retourne un tableau associatif des attributs de l’objet $obj

les clés sont les noms des attributs et les valeurs sont celles des attributs si elles

Existent.

is_subclass_of($obj,$str) : détermine si l’objet $obj est une instanciation d’une

sous-classe de $str, retourne VRAI ou FAUX

method_exists($obj,$str) : vérifie que la méthode $str existe pour une classe dont

$obj est une instance, retourne VRAI ou FAUX

Page 91: Cours Web php

91

POO en PHP

• Tout objet instancié est une variable et peut à se titre être passé en

argument à une fonction ou bien être un retour de fonction ou encore

être sauvegardée en donnée de session.

• Il n’existe pas de destructeur : comme en C++, les objets qui cessent

d’être utilisés sont automatiquement détruits.

• Il n’y a pas de notion de visibilité : tous les attributs et méthodes sont

publiques et une classe hérite forcément de tous les attributs et

méthodes de sa classe mère.

• Une classe fille hérite de tous les attributs et méthodes de la classe

parente dont elle est une extension (d’ou la syntaxe extends). Il est

possible de surcharger les méthodes, d’en définir de nouvelles…

Page 92: Cours Web php

92

Fichiers

Nom Rôle

fopen Ouvrir un fichier

fclose Fermer un ficheir

fread Lire le contenu d’un fichier (dans une

chaîne)

file Lire le contenu d’un fichier (dans un

tableau)

fwrite Ecrire dans un fichier

file_get_contents Ouvrir, lire et fermer un fichier

file_put_contents Ouvrir, ecrire et fermer un fichier

copy Copier un fichier

unlink Supprimer un fichier

rename Renommer un fichier

file_exists Tester l’existence d’un fichier

filesize Lire la taille d’un fichier

Page 93: Cours Web php

93

Fichiers

Exemple typique d’affichage du contenu d’un fichier :

<?php

$file = "c:\data\info.txt" ;

$str="";

if( $fd = fopen($file, "r")) { // ouverture du fichier en lecture

while ( ! feof($fd) ) { // teste la fin de fichier

$str .= fgets($fd, 1024);

/* lecture jusqu’à fin de ligne où des 1024 premiers caractères */

}

fclose ($fd); // fermeture du fichier

echo $str; // affichage

} else {

die("Ouverture du fichier <b>$file</b> impossible.");

}

?>

Page 94: Cours Web php

94

Fichiers

La fonction fopen permet d’ouvrir des fichiers dont le chemin est relatif ou absolu. Elle permet aussi d’ouvrir des ressources avec les protocoles HTTP ou FTP. Elle renvoie FALSE si l’ouverture échoue.

Exemples :

$fp = fopen(‘’../docs/faq.txt’’, ‘’r’’);

$fp = fopen(‘’http://www.php.net/’’, ’’r’’);

$fp = fopen(’’ftp://user:[email protected]/’’, ‘’w’’);

Les modes d’ouverture

• 'r' Ouvre en lecture seule, 'r+' Ouvre en lecture et écriture

(pointeur est placé au début)

• 'w' Ouvre en écriture seule, 'w+' Ouvre en lecture et écriture;

(pointeur est placé au début avec création du fichier si il n’existe pas)

• 'a' Ouvre en écriture seule; place le pointeur de fichier à la fin du fichier file. Si le fichier n'existe pas, on tente de le créer.

• 'a+' Ouvre en lecture et écriture; place le pointeur de fichier à la fin du fichier. Si le fichier n'existe pas, on tente de le créer.

Page 95: Cours Web php

95

<?php

$filename = 'c:\data\info.txt';

$somecontent = "ceci a été ajoutée dans le fichier\n";

// Assurons nous que le fichier est accessible en écriture

if (is_writable($filename)) {

// Dans notre exemple, nous ouvrons le fichier $filename en mode d'ajout

// Le pointeur de fichier est placé à la fin du fichier

// c'est là que $somecontent sera placé

if (!$handle = fopen($filename, 'a')) {

echo "Impossible d'ouvrir le fichier ($filename)";

exit;

}

// Ecrivons quelque chose dans notre fichier.

if (fwrite($handle, $somecontent) === FALSE) {

echo "Impossible d'écrire dans le fichier ($filename)";

exit;

}

echo "L'écriture de ($somecontent) dans le fichier ($filename) a réussi";

fclose($handle);

} else {

echo "Le fichier $filename n'est pas accessible en écriture.";

}

?>

Fichiers

Page 96: Cours Web php

96

Description

• int fwrite ( resource $handle , string $string [, int $length ] )

• fwrite() écrit le contenu de la chaîne string dans le fichier pointé par handle . Si la longueur length est fournie, l'écriture s'arrêtera après lengthoctets, ou à la fin de la chaîne (le premier des deux).

• fwrite() retourne le nombre d'octets écrits ou FALSE en cas d'erreur

Fichiers

Page 97: Cours Web php

97

<?php

// Lit un fichier, et le place dans une chaîne

$filename = 'c:\data\info.txt';

$handle = fopen ($filename, "r");

$contents = fread ($handle, filesize($filename));

echo $contents;

fclose($handle);

?>

Description

string fread ( resource $handle , int $length )

fread() lit jusqu'à length octets dans le fichier référencé par handle . La

lecture s'arrête lorsque length octets ont été lus, ou que l'on a atteint la fin

du fichier.

Retourne la chaîne lue ou FALSE si une erreur survient.

Fichiers

Page 98: Cours Web php

98

<?php

$filename = 'c:\data\info.txt';

$file = 'c:\data\info1.txt';

if (!copy($filename, $file)) {

echo "La copie du fichier $file n'a pas réussi...\n";

}

?>

Description

bool copy ( string $source , string $dest )

copy() fait une copie du fichier source vers le fichier dest . Cette fonction

retourne TRUE en cas de succès, FALSE en cas d'échec.

Fichiers

Page 99: Cours Web php

99

Accès aux dossiers (I)

Il est possible de parcourir les répertoires grâce à ces quelques fonctions :

chdir($str) : Change le dossier courant en $str. Retourne TRUE si succès,

sinon FALSE.

getcwd() : Retourne le nom du dossier courant (en format chaîne de

caractères).

opendir($str) : Ouvre le dossier $str, et récupère un pointeur $d dessus si

succès, FALSE sinon et génère alors une erreur PHP .

closedir($d) : Ferme le pointeur de dossier $d.

readdir($d) : Lit une entrée du dossier identifié par $d. C’est-à-dire

retourne un nom de fichier de la liste des fichiers du dossier pointé. Les

fichiers ne sont pas triés. Ou bien retourne FALSE s’il n’y a plus de fichier.

rewinddir($d) : Retourne à la première entrée du dossier identifié par $d.

Page 100: Cours Web php

100

<?php

// dossier courant

echo getcwd() . "<br/>";

chdir('home');

// dossier courant

echo getcwd() . "<br/>";

?>

Accès aux dossiers (I)

Description

bool chdir ( string $directory )

chdir() change le dossier courant de PHP en directory .

Page 101: Cours Web php

101

Accès aux dossiers (I)

Exemple :

<?php

function list_dir($name) {

if($dir = opendir($name)) {

while($file = readdir($dir)) {

echo "$file<br>\n";

if(is_dir($file) && !in_array($file, array(".",".."))) {

list_dir($file);

}

}

closedir($dir);

}

}

list_dir(".");

?>

Page 102: Cours Web php

102

La classe dir

La classe dir contient les propriétés et méthodes permettant de parcourir un

dossier pour en lister les fichiers.

Propriété Description

Handle Valeur du pointeur vers le dossier

Path Chemin du dossier ouvert (chaîne de caractères)

Méthode Description

dir($str) Constructeur de la classe, ouvre le dossier défini par le

chemin $str (chaîne de caractères) et retourne une instance de

la classe dir.

read() Lecture d'une entrée du dossier ouvert

close() Fermeture du dossier

Accès aux dossiers (I)

Page 103: Cours Web php

103

Accès aux dossiers (II)

Exemple 1:

<?php

if ($dir = opendir(".")) {

echo "Pointeur: ".$dir."<br>\n";

echo "Chemin: ".getcwd()."<br>\n";

while($file = readdir($dir)) {

echo "$file<br>\n";

}

closedir($dir);

}

?>

$dir est un pointeur vers la ressource dossier

$file est une chaîne de caractères qui prend pour valeur chacun des noms

de fichiers retournés par readdir()

Page 104: Cours Web php

104

Accès aux dossiers (IV)

Exemple 2 :

<?php

$d = dir('.'); // ouverture du dossier courant

echo ‘’Pointeur: ‘’.$d->handle.’’<br />’’;

echo ‘’Chemin: ‘’.$d->path.’’<br />’’;

while($entry = $d->read()) { // lecture d’une entrée

echo $entry.’’<br />’’;

}

$d->close(); // fermeture du dossier

?>

Cet exemple est équivalent au précédent. Ils listent tous les deux les

fichiers et sous répertoires du dossier courant.

Page 105: Cours Web php

105

Dates et heures (I)

Les fonctions de dates et heures sont incontournables sur Internet et

sont indispensables pour la conversion en français des dates fournies

par la base de données MySQL qui les code au format anglophone

(YYYY-DD-MM hh:mm:ss).

Quelques fonctions :

date("$format") : retourne une chaîne de caractères contenant la date

et/ou l’heure locale au format spécifié

getdate() : retourne un tableau associatif contenant la date et l’heure

checkdate($month, $day, $year) : vérifie la validité d’une date

mktime($hour, $minute, $second, $month, $day, $year) : retourne le

timestamp UNIX correspondant aux arguments fournis c’est-à-dire le

nombre de secondes entre le début de l'époque UNIX (1er Janvier

1970) et le temps spécifié

time() : retourne le timestamp UNIX de l’heure locale

Page 106: Cours Web php

106

Dates et heures (II)

Exemple 1 :

echo date(''Y-m-d H:i:s'');

/* affiche la date au format MySQL : ‘2002-03-31 22:30:29’ */

Exemple 2 :

if(checkdate(12, 31,2001))

echo"La St Sylvestre existe même chez les anglais !!!";

Exemple 3 :

$aujourdhui = getdate();

$mois = $aujourdhui['mon'];

$jour = $aujourdhui['mday'];

$annee = $aujourdhui['year'];

echo ''$jour/$mois/$annee''; // affiche ‘31/3/2002’

Page 107: Cours Web php

107

Dates et heures (III)

Les formats pour date :

• d Jour du mois sur deux chiffres

[01..31]

• j Jour du mois sans les zéros

initiaux

• l Jour de la semaine textuel en

version longue et en anglais

• D Jour de la semaine textuel en

trois lettres et en anglais

• w Jour de la semaine numérique

[0..6] (0: dimanche)

• z Jour de l'année [0..365]

• m Mois de l'année sur deux

chiffres [01..12]

• n Mois sans les zéros initiaux

• F Mois textuel en version longue et

en anglais

• M Mois textuel en trois lettres

• Y Année sur 4 chiffres

• h Heure au format 12h [01..12]

• g Heure au format 12h sans les zéros initiaux

• H Heure au format 24h [00..23]

• G Heure au format 24h sans les zéros initiaux

• i Minutes [00..59]

• s Secondes [00.59]

• a am ou pm

• A AM ou PM

• L Booléen pour savoir si l'année est bisextile (1)

ou pas (0)

• S Suffixe ordinal anglais d'un nombre (ex: nd

pour 2)

• t Nombre de jour dans le mois donné [28..31]

• U Secondes depuis une époque

• Z Décalage horaire en secondes [-

43200..43200]

Page 108: Cours Web php

108

Dates et heures (IV)

Les clés du tableau associatif retourné par getdate :

seconds secondes

minutes minutes

hours heures

mday jour du mois

wday jour de la semaine, numérique

mon mois de l'année, numérique

year année, numérique

yday jour de l'année, numérique

weekday jour de la semaine, textuel complet en anglais

month mois, textuel complet en anglais

Page 109: Cours Web php

109

Entêtes HTTP (I)

Le rôle des entêtes est d’échanger des méta informations entre serveur et

client à Propos du document, de la connexion, etc. Il est possible d’envoyer

des entêtes particuliers du protocole HTTP grâce à la commande header.

Description

void header ( string $string [, bool $replace [, int $http_response_code ]] )

header() permet de spécifier l'en-tête HTTP string lors de l'envoi des fichiers HTML. Reportez-vous à « HTTP/1.1 Specification » pour plus d'informations sur les en-têtes HTTP.

Les entêtes doivent obligatoirement être envoyées avant l’affichage de tout

caractère dans la page en cours. Car l’affichage force l’envoi des entêtes de

base.

• headers_sent() : Retourne TRUE si les entêtes ont déjà été envoyées, FALSE sinon.

Page 110: Cours Web php

110

Entêtes HTTP (III)

Exemple pratique 1 :

<?php

header(‘’Location: home2.php’’);

exit();

?>

Ce script effectue une redirection vers une autre page. C’est-à-dire que le

navigateur du client en voyant cet entête Location va charger

directement la page indiquée sans regarder la suite du script. La fonction

exit est là pour parer au cas impossible où le script continuerait son

exécution.

Note: en règle générale, le format d’un entête est le suivant

• Champ: valeur

• Avec un espace entre les deux points ‘:‘ et la ‘valeur’.

Page 111: Cours Web php

111

Entêtes HTTP

Exemple pratique 2 :

<?php

if(!isset($_SERVER["PHP_AUTH_USER"])) {

header(‘’WWW-Authenticate: Basic realm=\’’Mon domaine\’’’’);

echo ‘’Echec de l’identification.’’;

exit();

} else {

echo "Bonjour".$_SERVER["PHP_AUTH_USER"]."<br />";

echo "Votre mot de passe :".$_SERVER["PHP_AUTH_PW"];}

?>

• Cet exemple fait intervenir les variables d’environnement $PHP_AUTH_USER et $PHP_AUTH_PW qui contiennent le login et mot de passe d’un utilisateur préalablement identifié. Si l’utilisateur n’est pas identifié, alors on demande au navigateur d’afficher une boite de saisie de mot de passe et on spécifie que l’accès est interdit. Une fois que l’utilisateur est identifié on peut contrôler la validité des login et mot de passe et s’ils sont corrects afficher des données sensibles.

• Attention, cette méthode ne fonctionne pas lorsque PHP est installé en tant que module d’Apache mais seulement lorsqu’il est compilé en même temps que le serveur Apache.

Page 112: Cours Web php

112

Les sessions sont un moyen de sauvegarder et de modifier des variables

tout au cours de la visite d’un internaute sans qu’elles ne soient visibles

dans l’URL et quelque soient leurs types (tableau, objet…).

Cette méthode permet de sécuriser un site, d’espionner le visiteur, de

sauvegarder son panier (e-commerce), etc.

Les informations de sessions sont conservées en local sur le serveur

tandis qu’un identifiant de session est posté sous la forme d’un cookie

chez le client (ou via l’URL si le client refuse les cookies).

Quelques fonctions :

session_start() : démarre une session

session_destroy() : détruit les données de session et ferme la session

session_register("var") : enregistre la variable $var dans la session en

cours, attention!!!, ne pas mettre le signe $ (dollars) devant le nom de

variable

session_unregister("var") : détruit la variable $var de la session en cours

Sessions

Page 113: Cours Web php

113

Sessions

Le mécanisme des sessions est vraiment extrêmement simple. Prenons un

premier exemple pour voir comment s'enregistre une variable dans une

session avec un formulaire simple pour sauvegarder le nom du client qui

s'est connecté.

<html>

<body>

<form method="POST" action="page2.php">

Entrez votre nom : <input type="TEXT" name="nom">

<input type="SUBMIT" value="OK">

</form>

</body>

</html>

Vous avez un simple formulaire HTML qui va poster au script page2.php le

contenu de la variable nom.

Page 114: Cours Web php

114

Sessions

page2.php

<?php

session_start();

$nom = $_POST['nom'];

$_SESSION['nom'] = $nom;

?>

<html>

<body>

Bienvenue sur ce site <?php echo $nom; ?>.<br />Regardons ce qui se passe

sur la <a href="page3.php">page</a> suivante.<br />

</body>

</html>

Dans ce script, nous avons donc le démarrage de la session puis l'enregistrement

dans une variable $nom de la valeur postée par le formulaire. Enfin, nous

enregistrons $nom dans une variable de session.

Page 115: Cours Web php

115

Sessions(Initialisation)

Page 3.php

<?php

session_start();

$nom = $_SESSION['nom'];

?>

<html>

<body>

Vous êtes toujours parmi nous<?php echo $nom; ?>.<br />

</body>

</html>

Dans ce script nous avons toujours le démarrage de session avec cette fois, la

récupération de la variable nom depuis le tableau superglobal de session.

Page 116: Cours Web php

116

Sessions (Effacement)

Nous avons vu que l'enregistrement de variables était vraiment très facile. Pour effacer une variable de session, c'est tout aussi simple.

Page3.php

<?php

session_start();

if ( isset ($_SESSION['nom']) ) {$nom = $_SESSION['nom'];}

else {$nom = "mais votre nom a été effacé"; }

?>

<html>

<body>

Vous êtes toujours parmi nous

<?php echo $nom; ?>.<br /> Effacement de votre nom en cliquant

<a href="page4.php">ici</a>.<br />

</body>

</html>

Continuons en créant notre 4 script. . .

Page 117: Cours Web php

117

L'effacement d'une variable de session se fait de la même manière

qu'avec une variable classique. Vous utilisez la commande unset() suivie

du tableau superglobal et de l'index contenant votre variable :

Page4.php

<?php

session_start();

?>

<html><body>

<?php

unset ($_SESSION['nom']);

if (isset ($_SESSION['nom'])) {$resultat = "La suppression a échouée ."; }

else {$resultat = "Votre nom a été effacé."; }

echo $resultat;

?>

<br />Repartons en <a href="page3.php">arrière</a>.<br/></body></html>

Sessions (Effacement)

Page 118: Cours Web php

118

Dans notre exemple, nous n'avons qu'une seule valeur stockée dans notre

session.

Cependant, il peut arriver de vouloir réinitialiser toutes les variables sans

pour autant vouloir changer de session.

Pour effacer l'ensemble des valeurs d'une session, vous avez deux

possibilités :

Utiliser la commande session_unset() qui ne prend aucun paramètre et ne retourne aucune valeur.

session_unset();

Vider le tableau superglobal des sessions.

$_SESSION = array();

Remarque :

Il est recommandé par la Communauté PHP d'utiliser la seconde possibilité

avec l'effacement du tableau superglobal.

Sessions (Effacement Total)

Page 119: Cours Web php

119

Sessions (Destruction)

Nous avons vu que l'enregistrement de variables était vraiment très facile. Pour effacer une variable de session, c'est tout aussi simple.

Page3.php

<?php

session_start();

if( isset($_SESSION['nom']) ) {$nom = $_SESSION['nom'];}

else{$nom = "mais votre nom a été effacé"; }

?>

<html>

<body>

Vous êtes toujours parmi nous<?php echo $nom; ?>.<br />

Effacement de votre nom en cliquant<a href="page4.php">ici</a>.<br />

Effacement de votre session en cliquant<a href="page5.php">ici</a>.

</body>

</html>

– Continuons en créant notre 5 script. . .

Page 120: Cours Web php

120

Sessions (Destruction)

Page5.php

<?php

session_start();

session_destroy();

?>

<html>

<body>

votre session a été détruite

</body>

</html>

Session détruite. . .

Page 121: Cours Web php

121

Expressions régulières

Les expressions régulières sont un outil puissant pour la recherche de motifs

dans une chaîne de caractères.

Fonctions :

eregi($motif, $str) : teste l’existence du motif $motif dans la chaîne $str

eregi_replace($motif, $newstr, $str) : remplace les occurrences de $motif

dans $str par la chaîne $newstr

split($motif, $str) : retourne un tableau des sous-chaînes de $str délimitées

par les occurrences de $motif

Les fonctions eregi, eregi_replace et split sont insensibles à la casse (c’est-

à-dire ne différencient pas les majuscules et minuscules).

Page 122: Cours Web php

122

<?php

if(eregi(‘’Paris’’, $adresse))

echo ‘’Vous habitez Paris.’’;

$string = 'XYZ';

if(eregi('z', $string)) {

echo "'$string' contient un 'z' ou un 'Z'!";

}

?>

Expressions régulières

Description

int eregi ( string $pattern , string $string )

eregi() est identique à ereg(), hormis le fait qu'elle ignore la casse des

caractères lors de la recherche sur les caractères alphabétiques.

Page 123: Cours Web php

123

Expressions régulières

Les motifs peuvent être très complexes et contenir des caractères spéciaux:

[abcdef] : intervalle de caractères, teste si l’un d’eux est présent

[a-f] : plage des caractères, teste la présence de tous les caractères minuscules entre

‘a’ et ‘f’

[^0-9] : exclusion des caractères de ‘0’ à ‘9’

\^ : recherche du caractère ’^’ que l’on déspécialise par l’antislash \

. : remplace un caractère

? : rend facultatif le caractère qu’il précède

+ : indique que le caractère précédent peut apparaître une ou plusieurs fois

* : pareil que + Mais le caractère précédent peut ne pas apparaître du tout

{i,j} : retrouve une chaîne contenant entre au minimum i et au maximum j fois le

motif qu’il précède

{i,} : idem mais pas de limite maximum

{i} : retrouve une séquence d’exactement i fois le motif qu’il précède

^ : le motif suivant doit apparaître en début de chaîne

$ : le motif suivant doit apparaître en fin de chaîne

Page 124: Cours Web php

124

Expressions régulières

Exemples de motifs :

‘’[A-Z]’’ : recherche toutes les majuscules

‘’[a-zA-Z]’’ : recherche toutes les lettres de l’alphabet minuscules ou majuscules

‘’[^aeyuio]’’ : exclu les voyelles

‘’^Le ’’ : toute chaîne commençant par le mot ‘’Le‘‘ suivi d’un espace

‘’$\.com’’ : toute chaîne se terminant par ’’.com’’ (déspécialise le point)

Exemples :

if( ereg("^.*@wanadoo\.fr", $email) ) {

echo"Vous êtes chez Wanadoo de France Télécom.";

}

$email = eregi_replace("@", "-nospam@", $email);

Ce dernier exemple remplace "[email protected]" en "[email protected]".

Page 125: Cours Web php

125

Mail (I)

La fonction mail envoie un message électronique.

Syntaxe :

• mail($recipient, $subject, $message[, $headers, $params]);

Exemple :

• $message = "salam tout le monde.";

• mail("[email protected]", "Aide sur PHP", $message);

Les arguments obligatoires sont le destinataire, le sujet du message ainsi que le

message proprement dit. Les entêtes et paramètres additionnels sont facultatifs.

Note: cette fonction ne marche que si un programme de messagerie électronique

(appelé « mailer ») est préalablement installé sur le serveur.

Page 126: Cours Web php

126

Mail (II)

Exemple plus complet :

<?php

$recipient = ‘’Toy <[email protected]>, ‘’;

$recipient .= ‘’Pais <[email protected]>’’;

$subject = ‘’Notre rendez-vous’’;

$message = ‘’Je vous propose le samedi 15 juin \n’’;

$message .= ’’--\r\n’’; // Délimiteur de signature

$message .= ‘’salam terre’’;

$headers = ‘’From: Huto Etiopant <[email protected]>\n’’;

$headers .= ‘’Content-Type: text/html; charset=iso-8859-1\n’’ ;

$headers .= ‘’Cc: [email protected]\n’’;

mail($recipient, $subject, $message, $headers);

?>

Page 127: Cours Web php

127

Mail (III)

Quelques entêtes :

• From: Hugo Etiévant <[email protected]>\n

• X-Mailer: PHP\n // maileur

• X-Priority: 1\n // Message urgent!

• X-Files: Truth is out there\n // entête fantaisiste !

• Return-Path: <[email protected]>\n// @ retour pour erreurs

• Content-Type: text/html; charset=iso-8859-1\n // Type MIME

• Cc: [email protected]\n // Champs CC

• Bcc: [email protected], [email protected]\n // Champs BCC

• Reply-To: <[email protected]> // @ de retour

Format général des entêtes :

• Nom-Entete: valeur\n

Page 128: Cours Web php

128

Évaluation d’une portion de code PHP

La fonction eval($str) évalue la chaîne de caractères $str comme du code

php. Les variables éventuellement définies dans cette chaîne seront connues

dans le reste du programme principal.

Grâce à cette fonction, on peut conserver dans une base de données, des

portions de code utilisables ultérieurement.

Le code de la chaîne $str doit respecter les mêmes contraintes que le code

normal. Notamment :

• - point virgule après chaque instruction

• - respect des séquences d’échappement

• - etc…

• Exemple :

• $foobar = ‘’Hello Word’’;

• eval(‘echo $foobar;’); // affiche ’Hello Word’

Page 129: Cours Web php

129

Colorisation syntaxique (I)

• PHP dispose de fonctions qui permettent d’afficher le code source de

scripts php et d’en coloriser la syntaxe.

• Il n’est pas recommandé d’utiliser les fonctions suivantes afin que vos

visiteurs ne connaissent pas votre code source et ne puissent ainsi pas

exploiter des vulnérabilité de votre application web.

• highlight_file($file), show_source : Colorisation de la syntaxe d'un

fichier. Affiche la syntaxe colorisée du fichier $file, en utilisant les

couleurs définies dans le moteur interne de PHP.

• highlight_string($str) : Colorisation d'une chaîne de caractères

contenant du code php.

Page 130: Cours Web php

130

Colorisation syntaxique (II)

• Exemple :

• <?php highlight_file(‘’sondage.php’’); ?>

• Résultat affiché :

<?php

$out = "<html><body>";

ConnexionSQL();

echo date("D, d M Y H:i:s");

if($action == "add") {

AddNew();

} elseif($action == "stats") {

ShowStats();

}

/* ShowSubmitForm(); */

ShowStats();

$out .= "</body></html>";

echo $out;

?>

Page 131: Cours Web php

131

Colorisation syntaxique (III)• La configuration de la colorisation se trouve dans le fichier php.ini :

• Et voici comment la commande phpinfo() affiche ces informations :

Couleur de fond

Couleur des commentaires

Couleur par défaut

Couleur des balises HTML

Couleur des chaînes

Couleur des mots réservés

Page 132: Cours Web php

132

URL (I)

• Les URL (Uniform Ressource Location) sont les chemins de ressources sur

internet.

• Exemples d’URL:

• http://www.google.fr/?q=cours+php

• http://cyberzoide.developpez.com/php/php4_mysql.ppt

• ftp://foo:[email protected]

• Leur format spécifique leur interdit de comporter n’importe quel caractère

(comme l’espace par exemple).

• Une URL est une chaîne de caractères composée uniquemment de caractères

alphanumériques incluant des lettres, des chiffres et les caractères : - (tirêt), _

(souligné), . (point).

• Tous les autres caractères doivent êtres codés. On utilise le code suivant : %xx.

Où % introduit le code qui le suit et xx est le numéro hexadécimal du caractère

codé.

Page 133: Cours Web php

133

URL (II)

• Le passage de valeur d’un script à l’autre se fait soit par les sessions, soit par

les formulaires ou encore par l’URL.

• Exemple par l’URL :

• <a href=‘’index.php?imprim=yes&user_id=75’’>Version imprimable</a>

• Dans cet exemple on transmet deux variables au script index.php : $imprim de

valeur ‘’yes’’ et $user_id de valeur ‘’75’’. Les valeurs sont des chaînes de

caractères qui pouront être castées implicitement en entier.

• Le caractère ? Indique que la suite de l’URL sont des paramètres et ne font pas

partie du nom de fichier. Le caractère = sépare un nom de paramètre et sa

valeur transmise. Le caractère & séparer deux paramètres.

• Pour faire face au cas général d’un paramètre dont la valeur contient des

caractères interdits, on utilise les fonction de codage.

Page 134: Cours Web php

134

URL (III)

• Quelques fonctions de codage sur l’URL :

• Codage de base :

• urlencode : Encode une chaîne en URL.

• urldecode : Décode une chaîne encodée URL.

• Codage complet :

• rawurlencode : Encode une chaîne en URL, selon la RFC1738.

• rawurldecode : Décode une chaîne URL, selon la RFC1738.

• Codage plus évolué :

• base64_encode : Encode une chaîne en MIME base64.

• base64_decode : Décode une chaîne en MIME base64

Page 135: Cours Web php

135

URL (IV)

• urlencode($str) : code la chaîne $str. Les espaces sont remplacés par des signes

plus (+). Ce codage est celui qui est utilisé pour poster des informations dans les

formulaires HTML. Le type MIME utilisé est application/x-www-form-

urlencoded.

• Exemple 1 :

• echo <a href=\‘’$PHP_SELF?foo=‘’.urlencode($foo).’’\’’>Foo</a>’’;

• rawurlencode($str) : code la chaîne $str. Remplace tous les caractères interdits

par leur codage équivalent hexadécimal.

• Exemple 2 :

• echo <a href=\‘’$PHP_SELF?foo=‘’.rawurlencode($foo).’’\’’>Foo</a>’’;

• Pour être accessible, la valeur du paramètre devra par la suite être décodée

dans le script d’arrivé par la fonction réciproque adéquate.

Page 136: Cours Web php

136

URL (V)

• base64_encode($str) : code la chaîne $str en base 64. Cet encodage permet à

des informations binaires d'être manipulées par les systèmes qui ne gèrent pas

correctement les codes 8 bits (code ASCII 7 bit étendu aux accents européens),

comme par exemple, les corps de mail qui en général sont américains et ne

gère que les 7 bits. Une chaîne encodée en base 64 a une taille d’environ 33%

supérieure à celle des données initiales.

• Exemple 3 :

• echo <a href=\‘’$PHP_SELF?foo=‘’.base64_encode($foo).’’\’’>Foo</a>’’;

• Comparatif des trois encodages :

• Sans codage : René & Cie : 30%-5*20

• urlencode : Ren%E9+%26+Cie+%3A+30%25-5%2A20

• rawurlencode : Ren%E9%20%26%20Cie%20%3A%2030%25-5%2A20

• base64_encode : UmVu6SAmIENpZSA6IDMwJS01KjIw

Page 137: Cours Web php

137

URL (VI)

• parse_url($str) : retourne un tableau associatif contenant les différents

éléments de l’URL passée en paramètre. Les champs sont les suivants :

‘’scheme’’ (protocol), ‘’host’’ (domaine), ‘’port’’ (n° de port), ‘’user’’

(nom d’utilisateur ftp), ‘’pass’’ (mot de passe ftp), ‘’path’’ (chemin de la

ressource), ‘’query’’ (paramètres et valeurs), et ‘’fragment’’.

• Exemple :

• $tab = parse_url(’’http://www.cia.gov:8080/form.php?var=val’’);

• Cet exemple retourne le tableau suivant : Champ Valeur

scheme http

host www.cia.gov

port 8080

path form.php

query var=val

Page 138: Cours Web php

138

URL (VII)

• parse_str($str) : analyse la chaîne $str comme si c’était une URL et en

extrait les variables et valeurs respectives qui seront alors connues

dans la suite du script.

• Cette fonction évite d’avoir à créer ses propres fonctions d’analyse de

champs de base de données où l’on aurait sauvegardé une url.

• Exemple :

• $str =

‘’nom=jean+pierre&email[][email protected]&email[][email protected]’’;

• parse_str($str);

• echo $nom, $email[0], $email[1];

Page 139: Cours Web php

139

Cryptage et autres réjouissances

• crypt($str [, $salt]) : Retourne une chaîne de caractères. Crypte la chaîne de caractères $str. La chaîne optionnelle $salt sert de base au cryptage. Cet argument optionnel est appelé « grain de sel » à l’image des germes de nucléation à l’origine des dendrites. L’algorythme de cryptage utilisé par PHP n’est a priori pas défini (il peut varier d’un système à un autre), mais c’est en général le DES standard ou bien encore MD5. On sait aussi que le système utilisé – quel qu’il soit – est injectif, c’est-à-dire qu’il n’existe pas d’algorithme symétrique pour décrypter la chaîne codée résultante (du moins officiellement, il est toujours possible que la NSA ait pu le faire et aurait alors tout intérêt à garder cela secret).

• md5($str) : Crypte la chaîne $str en utilisant la méthode MD5.

• crc32($str) : Retourne la somme de vérification de redondance cyclique (32-bit) de la chaîne $str. Cette valeur sert généralement à vérifier l'intégrité de données transmises.

• uniqid($str [, $lcg]) : Retourne un identifiant en chaîne de caractères préfixé unique, basé sur l'heure courante, en micro-secondes. Si le paramètre optionnel booléen $lcg est vrai, uniqid() ajoutera une entropie « combined LCG » à la fin de la valeur retournée, ce qui renforcera encore l'unicité de l'identifiant.

• $x = md5 (uniqid (rand())); // $x est une chaîne difficile à prédire !!!

Page 140: Cours Web php

140

Fonctions de hachage (I)

• Les fonctions de hachage s’appliquent à des données afin d’en produire un

condensat (dit aussi hashcode). Ce condensat est calculé à partir des données

d’origine grâce à un algorithme injectif. C’est-à-dire que l’application de cet

algorithme produira toujours le même condensat si on utilise les mêmes

données de départ. Par contre, deux condensats égaux ne proviennent pas

forcément des mêmes données. Les fonctions de hachage sont généralement

utilisées pour créer des sommes de vérification ou signer des messages. La

génération de condensats joints aux données est une méthode très utilisée pour

assurer l’intégrité des données contre le piratage.

• Méthodologie : X veux envoyer un message à Y de façon a s’assurer que

personne ne pourra altérer le message (le modifier) sans que Y s’en rende

compte. X va calculer un condensat C du message et l’envoier à Y avec le

message. A réception du message, Y calcul lui aussi un condensat K du message

et le comparé au condensat C envoyé par X. Si K est différent de C, alors le

message reçu est différent du message envoyé !

• mhash($hash,$data) : retourne le condensat (binaire) de la chaîne $data,

calculé à partir de l’algorithme d’identifiant numérique $hash.

Page 141: Cours Web php

141

Fonctions de hachage (II)

• Il existe différents algorithmes de hachage :

• L’identifiant numérique passé en paramètre à mhash() est une constante. Les

algorithmes agissent sur les données par bloc de x octets. Cette taille x est

spécifiée dans le tableau ci-dessus.

Algorithme Constante (identifiant) Valeur Taille du bloc

CRC32 MHASH_CRC32 0 4

MD5 MHASH_MD5 1 16

SHA1 MHASH_ SHA1 2 20

HAVAL256 MHASH_HAVAL256 3 32

RIPEMD160 MHASH_RIPEMD160 5 20

TIGER MHASH_TIGER 7 24

GOST MHASH_GOST 8 32

CRC32B MHASH_CRC32B 9 4

HAVAL224 MHASH_HAVAL224 10 28

HAVAL192 MHASH_HAVAL192 11 24

HAVAL160 MHASH_HAVAL160 12 20

Page 142: Cours Web php

142

Fonctions de hachage (III)

• Exemple :

• $data = ‘’TOP SECRET : mise en alerte des missiles nucléaires.’’;

• $condensat = mhash(MHASH_SHA1, $data);

• echo bin2hex($condensat);

• /* affiche : ‘’28424f16ae4a53ae865601372a3462a014614c3b’’

• (la fonction bin2hex() convertit le binaire en hexadécimal) */

• mhash_get_hash_name($hash) : retourne le nom de l’algorithme dont

l’identifiant numérique est passé en paramètre.

• mhash_get_block_size() : retourne la taille des blocs utilisés par l’algorithme

dont l’identifiant numérique est passé en paramètre.

• mhash_count() : retourne le plus grand identifiant d’algorithme de hachage

connu par l’interpréteur PHP.

• mhash_keygen_s2k($hash, $pass, $salt, $nbr) : retourne une clef de $nbr

octets à partir du mot de passe $pass et du grain de sel $salt (chaîne de 8 octets

complétée par des zéros s’il le faut) en utilisant l’algorithme d’identifiant $hash

associé à l’algorithme Salted S2K spécifié dans OpenPGP (RFC 2440).

Page 143: Cours Web php

143

Fonctions de hachage (IV)

• Pour connaître les algorithmes disponibles sur votre système, vous

pouvez procéder ainsi :

• $nbr = mhash_count();

• echo ‘’<table>’’;

• for($i = 0; $i <= $nbr; $i++) {

• if(mhash_get_hash_name($i))

• echo

‘’<tr><td>$i</td><td>’’.mhash_get_hash_name($i).’’</td><td>’’.

• mhash_get_block_size($i).’’</td></tr>’’;

• }

• echo ‘’</table>’’;

Page 144: Cours Web php

144

Divers

• defined($str) : Vérifie qu'une constante existe. Renvoie VRAI si la

constante dont le nom est passé en paramètre existe ou FAUX sinon.

• sleep($nbr) : Retarde l'exécution du script durant $nbr secondes.

Attention, Apache peut être configurer pour limiter la durée d’exécution

des scripts.

• usleep($nbr) : Retarde l'exécution du script durant $nbr microsecondes.

Page 145: Cours Web php

145

Requêtes Apache (I)

• getallheaders() : renvoie un tableau associatif contant tous les entêtes de la requête en cours.

• Exemple :

• $headers = getallheaders() ;

• foreach($headers as $key => $elem) // affichage des entêtes recueillies

• echo ‘’$key : $elem<br />\n’’ ;

• Cet exemple affiche :

• Accept : */*

• Accept-Encoding : gzip, deflate

• Accept-Language : fr

• Connection : Keep-Alive

• Host : 127.0.0.1

• User-Agent : Mozilla/4.0 (compatible; MSIE 5.5; Windows 98;)

• Les fonctions décrites ici de fonctionnent que si PHP est installé en tant que module du serveur HTTP Apache.

Page 146: Cours Web php

146

Requêtes Apache (II)

• apache_lookup_uri($str) : effectue une requête partielle sur l'URI

spécifiée en paramètre et retourne un objet contenant toutes les

informations importantes la concernant.

• Les propriétés de l’objet retourné sont : status (n° erreur HTTP),

the_request (requête HTTP complète), status_line, method (méthode

HTTP utilisée), content_type (type MIME de la ressource), handler, uri,

filename (nom et chemin de la ressource en local sur le serveur),

path_info (chemin du répertoire distant), args, boundary, no_cache (vaut

‘1’ si mise en cache interdite), no_local_copy (vaut ‘1’ si copie locale

interdite), allowed, send_bodyct, bytes_sent, byterange, clength,

unparsed_uri, mtime, request_time (date de la requête au format

timestamp UNIX).

Page 147: Cours Web php

147

Requêtes Apache (III)• Exemple :

• $obj = apache_lookup_uri('http://127.0.0.1/cyberzoide/essai.php') ;

• $tab = get_object_vars($obj) ;

• foreach($tab as $key => $elem)

• echo ‘’$key : $elem <br />\n’’ ;

• Cet exemple affiche :

• status : 403

• the_request : GET /cyberzoide/essai.php HTTP/1.1

• method : GET

• uri : /cyberzoide/http://127.0.0.1/cyberzoide/essai.php

• filename : d:/internet/cyberzoide/http:

• path_info : //127.0.0.1/cyberzoide/essai.php

• no_cache : 0

• no_local_copy : 1

• allowed : 0

• sent_bodyct : 0

• bytes_sent : 0

• byterange : 0

• clength : 0

• unparsed_uri : /cyberzoide/http://127.0.0.1/cyberzoide/essai.php

• request_time : 1034444645

Page 148: Cours Web php

148

Réseau

• checkdnsrr — Résolution DNS d'une adresse IP.

• gethostbyaddr — Retourne le nom d'hôte correspondant à une IP.

• gethostbyname — Retourne l'adresse IP correspondant à un hôte.

• gethostbynamel — Retourne la liste d'IP correspondants à un hôte.

• getprotobyname — Retourne le numéro de protocole associé au nom de

protocole

• getprotobynumber — Retourne le nom de protocole associé au numéro de

protocole

• getservbyname — Retourne le numéro de port associé à un service

Internet, et un protocole.

• getservbyport — Retourne le service Internet qui correspond au port et

protocole.

• ip2long — Convertit une chaîne contenant une adresse (IPv4) IP numérique

en adresse littérale.

• long2ip — Convertit une adresse IP (IPv4) en adresse IP numérique

Page 149: Cours Web php

149

Exercice 1 : conversion de date (I)

Étudions l’exemple complet de la conversion d’une date au format anglophone MySQL

en format francophone.

Une date MySQL se présente ainsi : "YYYY-DD-MM hh:mm:ss"

YYYY : l’année numérique avec 4 chiffres, DD : le jour numérique, MM : le mois

numérique, hh : heures, mm : minutes, ss : secondes

Tous les nombres sur 2 chiffres prennent un zéro devant si nécessaire.

Par exemple : "2002-20-04 15:08:20" correspond au 20 avril 2002 à 15h08 et 20

secondes.

Ce format correspond au type DATETIME. Soit lastmodified un attribut d’une table

MySQL.

La requête suivante permet d’extraire la date de dernière modification d’un

enregistrement.

SELECT lastmodified

FROM citations

WHERE id="$id";

Page 150: Cours Web php

150

Exercice 1 : conversion de date (II)

Etape 1 : extraction de la date d’une base de données MySQL

$requet = "SELECT lastmodified FROM citations WHERE id=\‘’$id\’’’’;

if($result = mysql_query($requet)) {

if($ligne = mysql_fetch_row($result)) {

$lastmodifed = $ligne[0];

} else die(‘’Erreur base de données’’);

} else die(‘’Erreur base de données’’);

Etape 2 : séparation de la date et de l’heure

Le seul espace de la chaîne de caractères qui constitue la variable

$lastmodified est un séparateur entre la date et l’heure. On va donc la

scindée en ses deux morceaux grâce à la fonction explode qui renvoie les

sous chaînes dans un tableau dont est extrait grâce à list les deux

variables $date et $time.

list($date, $time) = explode(‘’ ’’, $lastmodified);

Page 151: Cours Web php

151

Exercice 1 : conversion de date (III)

Etape 3 : extraction des jour, mois, année

On procède selon le même schéma que précédemment sauf qu’ici c’est le tiret qui est séparateur dans la date.

list($year, $day, $month) = explode(‘’-’’, $date);

Etape 4 : extraction facultative des heure, minute, seconde

Ici, le séparateur sont les deux points.

list($hour, $min, $sec) = explode(‘’:’’, $time);

Etape 5 : affichage au format francophone

echo $lastmodified = ‘’$day/$month/$year $time’’;

Affiche ‘’20/04/2002 15:08:20’’.

On a donc transcrit en français notre date anglaise.

On peut aller encore plus loin en affichant les mois en toutes lettres et en français.

Page 152: Cours Web php

152

Exercice 1 : conversion de date

(IV)• Etape 6 : affichage en toutes lettres du mois

• On crée d’abord le tableau des mois de l’année.

• $months = array("janvier", "février", "mars", "avril", "mai", "juin",

"juillet", "août", "septembre", "octobre", "novembre", "décembre");

• Ensuite, on affiche l’élément du tableau des mois de l’année dont l’indice

est égale au numéro du mois. Comme l’indice du tableau commence à

zéro, il faut soustraire 1 à $month, cela aura aussi pour effet de caster

cette chaîne en entier (et de supprimer le zéro éventuel en première

position).

• echo $lastmodified = ‘’le $day ‘’.$months[$month-1].’’ $year à

${hour}h${min}m${sec}s’’;

• Affiche ‘’le 20 avril 2002 à 15h08m20s’’.

• Et voilà !

Page 153: Cours Web php

153

Exercice 2 : compteur de visites (I)

• On souhaite comptabilisé le nombre de chargement d’une page (la page d’accueil par exemple). On va procéder de la façon suivante : le compteur numérique sera stocké dans un fichier, à la première ligne. Ce fichier contiendra seulement un nombre, celui des visites.

• Phase 1 : incrémenter la valeur dans le fichier

• Ce fichier va s’appeler compteur.cpt.

• Principe de l’algorithme : si le fichier n’existe pas encore (file_exists), alors on le crée et on l’ouvre en écriture (fopen w) et on initialise le compteur à zéro en écrivant la chaîne ‘0’ en première ligne (fputs) et on le referme (fclose). Ensuite, ouverture du fichier en lecture plus écriture (fopen r+), lecture du nombre (fgets), incrémentation d’une unité du nombre (++), positionnement du pointeur courant du fichier en première ligne (fseek 0) et réécriture du nombre (fputs) puis fermeture (fclose).

• Cet algorithme (écrit dans la diapo suivante) est écrit directement dans le code source de la page d’accueil.

Page 154: Cours Web php

154

Exercice 2 : compteur de visites (II)

Algorithme :

$fichier = "compteur.cpt"; // affectation du nom de fichier

if( ! file_exists($fichier)) { // test d’existence

// initialisation du fichier si n’existe pas encore

$fp = fopen($fichier,"w"); // ouverture en écriture

fputs($fp,"0"); // écriture

fclose($fp); // fermeture

}

$fp = fopen($fichier,"r+"); // ouverture

$hits = fgets($fp,10); // lecture

$hits++; // incrémentation

fseek($fp,0); // positionnement

fputs($fp,$hits); // écriture

fclose($fp); // lecture

Page 155: Cours Web php

155

Exercice 2 : compteur de visites (III)Phase 2 : généralisation aux autres

pages

• Comme les internautes peuvent atterrir sur des pages internes à votre site sans passer par l’accueil, il peut être intéressant de pouvoir comptabilité des visites des autres pages. Cela permettra aussi de comparer la popularité relative de vos différentes rubriques.

• Créons donc une fonction que l’on placera dans un fichier à part par exemple compteur.php et que l’on appellera par inclusion comme ceci :

<?php include("compteur.php");

Mon_Compteur("ma_page") ?>

• Remplacez "ma_page" par un identifiant unique pour chaque page.

<?

function Mon_Compteur($page) {

$fichier = $page.".cpt";

if(!file_exists($fichier)) {

$fp = fopen($fichier,"w");

fputs($fp,"0");

fclose($fp);

}

$fp = fopen($fichier,"r+");

$hits = fgets($fp,10);

$hits++;

fseek($fp,0);

fputs($fp,$hits);

fclose($fp);

}

?>

Page 156: Cours Web php

156

Exercice 2 : compteur de visites (IV)

• Phase 3 : protection contre la redondance

• Comme un visiteur peut charger plusieurs fois la même page au cours d’une même visite, ce mode de décompte n’est pas assez précis et va surestimé le nombre réel de visiteurs. Il faut donc garder en mémoire le fait qu’un visiteur est déjà passé par la page et incrémenter le compteur seulement si ce n’est pas le cas. On va donc créer une variable de session : un tableau contenant la liste des pages visitées.

• Principe du nouvel algorithme : on teste l’existence de la variable de session $PAGES_LIST, si elle n’existe pas on la crée, on y ajoute la page en cours et on appelle la fonction Mon_Compteur. Si elle existe, on teste la présence de la page en cours dans ce tableau, si elle n’y est pas alors on l’y met et on appelle Mon_Compteur.

• L’appel est légèrement différent :

• <?php

• $page = "ma_page"; // définition du nom de la page

• include("compteur.php"); // chargement de l’algorithme

• ?>

Page 157: Cours Web php

157

Exercice 2 : compteur de visites

(V)• Voici le code à rajouter dans le fichier

compteur.php :

• session_start(); // démarrage de

la session

• if( ! isset($PAGES_LIST)) { // test de

l’existence de la variable de session

• $PAGES_LIST = array($page); //

création de la variable

• session_register($PAGES_LIST); //

ajout de la page en cours

Page 158: Cours Web php

158

Le phénomène PHP

• Sa gratuité et le libre accès à ses sources en fait un langage très populaire

surtout auprès de la communauté GNU Linux.

• Sa syntaxe C universellement connue, et sa programmation intuitive en

font le langage qui a fait la plus grande percée auprès des webdesigners

en 2001.

• De nombreux sites lui sont consacrés, on y trouve des scripts, des astuces

et même des concours de logos…

Page 159: Cours Web php

159

PHP et les bases de données

Page 160: Cours Web php

160

PHP offre un interfaçage très simple entre plusieurs base de données :

– Oracle, MySQL, SQLServer

– Sybase, Empress, FilePro

– Interbase, mSQL, PostgreSQL

– ODBC(Acess, MS-SQL, …)

La communication avec les bases de données se fait à l’aide du langage

SQL.

Présentation

• CREATE TABLE : Pour la création d’une table

• DELETE : Pour la suppression de lignes d’une table

• INSERT : Pour l’insertion d’une nouvelle ligne

• SELECT : Pour récupérer des lignes d’une table ou d’une vue

• UPDATE : Pour modifier les valeurs dans des champs

Page 161: Cours Web php

161

MySQL

• MySQL est une base de données implémentant le langage de requête SQL un

langage relationnel très connu. Cette partie suppose connue les principes des

bases de données relationnelles.

• Il existe un outil libre et gratuit développé par la communauté des programmeurs

libres : phpMyAdmin qui permet l’administration aisée des bases de données

MySQL avec php. Il est disponible sur :

http://sourceforge.net/projects/phpmyadmin/ et http://www.phpmyadmin.net.

• Avec MySQL vous pouvez créer plusieurs bases de données sur un serveur. Une

base est composée de tables contenant des enregistrements.

• Plus d'informations sont disponibles à http://www.mysql.com/.

• La documentation de MySQL est disponibles à

http://www.mysql.com/documentation/, ainsi qu'en français chez nexen :

http://dev.nexen.net/docs/mysql/.

Page 162: Cours Web php

162

Pour traiter une base de données, MySQL offre trois manières :

Utilisation des lignes de commandes

Utilisation de l’interface phpMyAdmin

Utilisation du langage php

Les opérations de base :

Création d’une base de données

Création de différentes tables

Gestion du BD avec MySQL

Page 163: Cours Web php

163

A l’aide des commandes en ligne

Page 164: Cours Web php

164

Page 165: Cours Web php

165

Page 166: Cours Web php

166

Page 167: Cours Web php

167

Page 168: Cours Web php

168

Création d’une nouvelle table dans la base stock

<?

$c = mysql_connect("localhost", "root", "");

$db = mysql_select_db("stock", $c);

$req = "create table stock.Prod_Alimentaire(

id_PA int unsigned not null auto_increment primary key,

nom varchar(32) not null,

date_limite date,

commentaire text,

prix float not null)";

mysql_query($req, $c);

?>

En utilisant des scripts PHP

Page 169: Cours Web php

169

Page 170: Cours Web php

170

Connexion (I)

Pour se connecter à une base depuis php, il faut spécifier un nom de serveur, un

nom d’utilisateur, un mot de passe et un nom de base.

Les fonctions de connexion :

• mysql_connect($server,$user,$password) : permet de se connecter au

serveur $server en tant qu’utilisateur $user avec le mot de passe $password,

retourne l’identifiant de connexion si succès, FALSE sinon

• mysql_select_db($base[,$id]) : permet de choisir la base $base, retourne

TRUE en cas de succès, sinon FALSE

• mysql_close([$id]) : permet de fermer la connexion

Les identifiants de connexion ne sont pas nécessaires si on ne se connecte qu’à une

seule base à la fois, ils permettent seulement de lever toute ambiguïté en cas de

connexions multiples.

Page 171: Cours Web php

171

Connexion (II)

Exemple 1 :

<?

if( $id = mysql_connect("localhost", "root"," ") ) {

if( $id_db = mysql_select_db("gigabase") ) {

echo "Succès de connexion.";

/* code du script … */

} else {

die("Echec de connexion à la base.");

}

mysql_close($id);

} else {

die("Echec de connexion au serveur de base de données.");

}

?>

Page 172: Cours Web php

172

Connexion (III)

Exemple 2 :

• @mysql_connect(‘’localhost’’,’’foobar’’,’’0478’’) or die(‘’Echec de connexion

au serveur.’’);

• @mysql_select_db(‘’gigabase’’) or die(‘’Echec de sélection de la base.’’);

• Cet exemple est équivalent au précédent mais plus court à écrire. Le symbole

@ (arobase) permet d’éviter le renvoie de valeur par la fonction qu’il précède.

• On pourra avantageusement intégrer ce code dans un fichier que l’on pourra

joindre par include(). C’est aussi un moyen de sécuriser le mot de passe de

connexion.

• Une connexion persistante évite d’avoir à rouvrir une connexion dans chaque

script. Les connexions sont automatiquement fermées au bout d’un certain

temps en cas d’absence de toute activité…

Page 173: Cours Web php

173

Interrogation

• Pour envoyer une requête à une base de donnée, il existe la fonction :

mysql_query($str) qui prend pour paramètre une chaîne de caractères qui

contient la requête écrite en SQL et retourne un identificateur de résultat ou

FALSE si échec.

• Les requêtes les plus couramment utilisées sont : CREATE (création d’une

table), SELECT (sélection), INSERT (insertion), UPDATE (mise à jour des

données), DELETE (suppression), ALTER (modification d’une table), etc.

Exemple :

$res = mysql_query("SELECT * FROM Table");

• L’identificateur de résultat $result permettra à d’autres fonctions d’extraire

ligne par ligne les données retournées par le serveur.

Page 174: Cours Web php

174

Extraction des données (I)

Une fois la requête effectuée et l’identificateur de résultat acquis, il ne reste plus

qu’à extraire les données retournées par le serveur.

Sous MySQL, l’affichage des résultats d’une requête se fait ligne par ligne. Une boucle

permettra de recueillir chacune des lignes à partir de l’identifiant de résultat.

SQL > SELECT * FROM users;

ID NAME ADDRESS

----------------------------

1 Boris Moscou 1ère ligne

2 Bill Washington 2ème ligne

3 William London 3è ligne

Une ligne contient (sauf cas particulier) plusieurs valeurs correspondants aux

différents attributs retournés par la requête. Ainsi, une ligne de résultat pourra

être sous la forme d’un tableau, d’un tableau associatif, ou d’un objet.

Page 175: Cours Web php

175

Extraction des données (II)

mysql_fetch_row($result) : retourne une ligne de résultat sous la forme d’un

tableau. Les éléments du tableau étant les valeurs des attributs de la ligne.

Retourne FALSE s’il n’y a plus aucune ligne.

Exemple 1 :

$requet = "SELECT * FROM users";

if($res = mysql_query($requet)) {

while($ligne = mysql_fetch_row($res)) {

$id = $ligne[0];

$name = $ligne[1];

$address = $ligne[2];

echo "$id - $name, $address <br />";

}

} else {

echo "Erreur de requête de base de données.";

}

Ici, on accède aux valeurs de la ligne par leur indice dans le tableau.

mysql_num_fields($res) //Nb_champs

mysql_field_name($res) //nom_champs

Page 176: Cours Web php

176

Extraction des données (III)

mysql_fetch_array($result) : retourne un tableau associatif. Les clés étant

les noms des attributs et leurs valeurs associées leurs valeurs respectives.

Retourne FALSE s’il n’y a plus aucune ligne.

Exemple 2 :

$requet = "SELECT * FROM users";

if($res = mysql_query($requet)) {

while($ligne = mysql_fetch_array($res)) {

$id = $ligne["id"];

$name = $ligne["name"];

$address = $ligne["address"];

echo "$id - $name, $address <br />";

}

} else { echo "Erreur de requête de base de données.";}

Ici, on accède aux valeurs de la ligne par l’attribut dans le tableau associatif.

Page 177: Cours Web php

177

Extraction des données (IV)

mysql_fetch_object($result) : retourne un objet. Les attributs de l’objet

correspondent à ceux de la ligne de résultat. Et les valeurs des attributs de

l’objet correspondent à ceux de la ligne de résultat. Retourne FALSE s’il n’y a

plus aucune ligne.

Exemple 3 :

$requet = "SELECT * FROM users";

if($result = mysql_query($requet)) {

while($ligne = mysql_fetch_object($result)) {

$id = $ligne->id;

$name = $ligne->name;

$address = $ligne->address;

echo "$id - $name, $address <br />";

}

} else {

echo "Erreur de requête de base de données.";

}

Ici, on accède aux valeurs par leur attribut dans l’objet.

Page 178: Cours Web php

178

Application : Création de classe SGBD

Tableau des différentes classes, attributs et méthodes :

class SGBD Nom de la classe mère.

class MySQL Nom de la classe fille, destinée pour le SGBD MySQL.

var $SGBD_login Attribut contenant le login de la base de donnée

var $SGBD_password Attribut contenant le password de la base de donnée

var $SGBD_host Attribut contenant l'hôte de la base de donnée

var $SGBD_base Attribut contenant le nom de la base de donnée

function connect() Méthode de connection au SGBD

function requete() Méthode d'envoi de requête au SGBD

function deconnect() Méthode de déconnection au SGBD

var $connect Attribut contenant la connection au SGBD

Page 179: Cours Web php

179

<?php/* Fichier : SGBD.class.php */

class SGBD // Création de la classe mère{

var $SGBD_login; // Attribut du login du SGBD

var $SGBD_password; // Attribut du password du SGBD

var $SGBD_host; // Attribut de l'hôte du SGBD

var $SGBD_base; // Attribut du nom de la BD

var $connect; // Attribut de connection

var $requete; // Attribut de requête

Classe de base : SGBD

Page 180: Cours Web php

180

// Définition du constructeurfunction SGBD ($login, $password, $host, $base)

{// Vérification des variablesif (empty ($login) || empty ($host) || empty ($base))

{// Affichage du message d'erreurecho"<b>Erreur :</b> Variable(s) non renseignées!!!";exit;

}

else {// Initialisation des attributs$this->SGBD_login = $login;$this->SGBD_password = $password;$this->SGBD_host = $host;$this->SGBD_base = $base;

}}

}?>

Classe de base : SGBD

Page 181: Cours Web php

181

<?php

/* Fichier : MySQL.SGBD.class.php */class MySQL extends SGBD // Création de la classe fille

{function connect (){

$connect = mysql_pconnect ($this->SGBD_host, $this->SGBD_login,

$this->SGBD_password);if (!$connect)

{echo "<b>Erreur :</b> Connection à MySQL impossible.";exit;

}if (!mysql_select_db ($this->SGBD_base, $connect))

{echo "<b>Erreur :</b> Connection à la base de données impossible.";exit;

}

$this->connect = $connect; }

}//Fin de la fonction connect()

Classe MySQL expansion de la classe SGBD

Page 182: Cours Web php

182

function requete ($requete){

// Exécution de la requête$result = mysql_query ($requete, $this->connect);

// Vérification de la requêteif (!$result)

{// Affichage du message d'erreurecho "<b>Erreur :</b> Impossible d'effectuer la requête.";exit;

}else {

// Initialisation de l'attribut de requête$this->requete = $result;

}} //Fin de la fonction requete()

function deconnect (){

mysql_close ($this->connect); // Déconnection de la base de données

} //Fin de la fonction deconnect()

} //Fin de la classe MySQL?>

Classe MySQL expansion de la classe SGBD

Page 183: Cours Web php

183

<?php/* Fichier : SGBD.php */

include ("SGBD.class.php"); // Inclusion de la classe mère

/* Initialisation de la variable du SGBD correspondant */$SQL = "MySQL";

// Inclusion de la classe fille du SGBD correspondantinclude ($SQL.".SGBD.class.php");

/* Création d'un nouvel objet de la classe fille + lancement du constructeur */ /* Les informations sont adaptés à mon serveur, à vous de les modifier pour quelles correspondent avec votre SGBD */

$database = new $SQL('root', '', 'localhost', 'test');

// Connection à la base de données$database->connect();

Classe MySQL expansion de la classe SGBD

Page 184: Cours Web php

184

/* Exécution d'une requête (création d'une nouvelle base de données). Attention, pour créer une nouvelle base de données, il faut que votre utilisateur ai touts les droits. Ceci n'est qu'un exemple parmi tant d'autres, vous pouvez effectuer n'importe quel requête MySQL avec cette méthode */

$database->requete ("CREATE DATABASE newBase");

// Déconnection de la base de données$database->deconnect();?>

Classe MySQL expansion de la classe SGBD