You are on page 1of 184

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
1
Références
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
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
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
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
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

7
Références

8
Références

9
Références

10
Editeurs
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.fr
11
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

12
Comment ça fonctionne sans PHP

public/www
2
Serveur http
client 3
index.html

support
Le répertoire

13
Comment ça fonctionne avec PHP/MySQL

1 SGBD
MySQL
public/www
client
4

fichier.php
2

Serveur http
3
Module PHP

Génération Fichier_bis.php
du code html
14
Serveur http

• 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, …

15
Introduction
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.).

16
H. Mouncif, Dep. Info. FSAC 2005 Notes de cours : Technologies du web
Serveur Web locale: EasyPHP

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

17
Serveur Web locale: EasyPHP

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.

18
Serveur Web locale: EasyPHP

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.

19
Serveur Web locale: EasyPHP

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.

20
Serveur Web locale: EasyPHP

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
21
Syntaxe de base

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.

22
Syntaxe de base

Le code de base Affichage du texte


PHP 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> 23
</html>
Syntaxe de base

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");
?>
24
Les commentaires

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

25
Constantes

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

26
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

27
Fonctions utiles

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

28
Variables

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.

29
Variables

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

30
Fonctions utiles

•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()…
31
Fonctions utiles

• 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.

32
Fonctions utiles
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)

33
Fonctions utiles

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

34
Variables

 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;
?>
35
Variables

• Le type d’une variable est à liaison superficielle


<?php
$a = 100;
echo $a;
$a = "une chaine de caracteres";
echo $a;
?>

36
Les chaînes de caractères
• 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’’; 37
Les chaînes de caractères

• 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…’’;
38
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 39
Portée des variables

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

40
Portée des variables

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.

41
Portée des variables
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. 42
Portée des variables
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 <?php
function test() { function test() {
$a = 0; static $a = 0;
echo $a; echo $a;
$a++; $a++;
} }
?> ?>

Cette fonction est un peu Pour faire une fonction de


inutile car à chaque fois comptage utile, c'est−à−dire
qu'elle est appelée, elle qui ne perdra pas la trace du
initialise $a à 0 et affiche "0". compteur, la variable $a est
L'incrémentation de la déclarée comme une variable
variable ($a++) ne sert pas à statique (voir script au-
grand chose, car dès que la dessus). L’appel de la fonction
fonction est terminée la Test() affichera une valeur de
variable disparaît. $a incrémentée de 1. 43
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 44
Conversion de type

 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" );
?>
45
Les opérateurs arithmétiques

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é.

46
Les opérateurs d’assignation

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!";
?> 47
Les opérateurs de comparaison

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. 48
Les structures de contrôles

 if, else, elseif

 switch, case, default

 For

 While

 do…while

 foreach(PHP4)

 break, continue

49
Les structures de contrôles

If else elseif

Syntaxe:
If(expression)
{
bloc;
}
Elseif(expression 2)
{
bloc2;
}
………..
else
{
dernier block
}

50
Les tableaux
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

51
Les tableaux

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

52
Les tableaux

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

53
Les tableaux

Parcours d’un tableau : for


<?php
$couleur[] = "blanc"; $couleur[] = "bleu"; $couleur[] = "rouge";
for($index=0; $index < count($couleur); $index++)
{
echo "<br />indic $index=> $couleur[$index]";
}
?>

54
Les tableaux

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;
?>
55
Les tableaux

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

56
Les tableaux

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"));
?>
57
Les tableaux

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.
58
Les tableaux

Exemple d’utilisation de la structure foreach


<?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 /> ";
}
?>

59
Les tableaux

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.

60
Les tableaux

Les tableaux Exemple d’utilisation de la structure while


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

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.

61
Les tableaux
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,

62
Les tableaux

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

63
Fonctions
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

64
Fonctions
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


65
Fonctions
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();
?> 66
Fonctions
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 />" ;
?>

67
Fonctions
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
?>

68
Fonctions
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 :
<?php
function somme($arg1,$arg2){ function calculer($opération, $arg1,$arg2)
return $arg1+$arg2; {
} return $opération($arg1,$arg2) ;
}
function division($arg1,$arg2){
if($arg2==0) // utilisation de la fonction calculer
echo "division par zero !!! echo
<br />";calculer("somme",1,2)
else echo "<br />";
return $arg1/$arg2; echo calculer("division",1,2);
} ?>

69
Fonctions
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");
?> 70
Fonctions
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.

<?php <?php
function incr_valeur($cmp){ function incr_valeur(&$cmp){
$cmp++; //incrémentation $cmp++ ; // incrémentation
echo "\$cmp =$cmp <br />"; echo "\$cmp = $cmp <br />";
} }
$i=1 ; $i=1 ; // initialisation
echo "\$i avant appel = $i <br />"; echo "\$i avant appel = $i <br />";
incr_valeur($i) ; incr_valeur($i) ;
echo "\$i après appel =$i <br >"; echo "\$i après appel =$i <br />";
?> ?>

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

72
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.
73
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 74
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"; 75
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>

76
Formulaires
PHP : Les bases

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.

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

78
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.

79
Formulaires
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>");
?> 80
Formulaires
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));
?>

81
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 {
?>

82
Formulaires
<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
}
?>

83
POO en PHP
 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 objet
est 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.

84
POO en PHP
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.

85
POO en PHP
Introduction des méthodes
class 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,

86
POO en PHP
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().

87
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

88
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. 89
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 90
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…

91
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
92
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.");
}
?> 93
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:password@cia.gov/’’, ‘’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.

94
Fichiers
<?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.";
}
?> 95
Fichiers
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 length
octets, ou à la fin de la chaîne (le premier des deux).

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

96
Fichiers
<?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.

97
Fichiers
<?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.

98
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.

99
Accès aux dossiers (I)
<?php
// dossier courant
echo getcwd() . "<br/>";

chdir('home');

// dossier courant
echo getcwd() . "<br/>";
?>

Description

bool chdir ( string $directory )

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

100
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(".");
?>

101
Accès aux dossiers (I)
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

102
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()

103
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.

104
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

105
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’

106
Dates et heures (III)
Les formats pour date : • h Heure au format 12h [01..12]
• d Jour du mois sur deux chiffres • g Heure au format 12h sans les zéros initiaux
[01..31] • H Heure au format 24h [00..23]
• j Jour du mois sans les zéros • G Heure au format 24h sans les zéros initiaux
initiaux
• i Minutes [00..59]
• l Jour de la semaine textuel en
• s Secondes [00.59]
version longue et en anglais
• a am ou pm
• D Jour de la semaine textuel en
trois lettres et en anglais • A AM ou PM
• w Jour de la semaine numérique • L Booléen pour savoir si l'année est bisextile (1)
[0..6] (0: dimanche) ou pas (0)
• z Jour de l'année [0..365] • S Suffixe ordinal anglais d'un nombre (ex: nd
pour 2)
• m Mois de l'année sur deux
chiffres [01..12] • t Nombre de jour dans le mois donné [28..31]
• n Mois sans les zéros initiaux • U Secondes depuis une époque
• F Mois textuel en version longue et • Z Décalage horaire en secondes [-
en anglais 43200..43200]
• M Mois textuel en trois lettres
• Y Année sur 4 chiffres 107
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

108
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.
109
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’.

110
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.
111
Sessions
 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
112
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.

113
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. 114
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.

115
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. . .


116
Sessions (Effacement)
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>

117
Sessions (Effacement Total)
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.

118
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. . . 119
Sessions (Destruction)
Page5.php
<?php
session_start();
session_destroy();
?>
<html>
<body>
votre session a été détruite
</body>
</html>

Session détruite. . .

120
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).

121
Expressions régulières
<?php
if(eregi(‘’Paris’’, $adresse))
echo ‘’Vous habitez Paris.’’;

$string = 'XYZ';
if(eregi('z', $string)) {
echo "'$string' contient un 'z' ou un 'Z'!";
}
?>

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.

122
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

123
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 "moi@ici.fr" en "moi-nospam@ici.fr".

124
Mail (I)
La fonction mail envoie un message électronique.

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

Exemple :
• $message = "salam tout le monde.";
• mail("vous@labas.fr", "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.

125
Mail (II)
Exemple plus complet :
<?php
$recipient = ‘’Toy <toy@labas.com>, ‘’;
$recipient .= ‘’Pais <pais@pwet.net>’’;
$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 <site@network.com>\n’’;
$headers .= ‘’Content-Type: text/html; charset=iso-8859-1\n’’ ;
$headers .= ‘’Cc: bruno@ici.fr\n’’;
mail($recipient, $subject, $message, $headers);
?>

126
Mail (III)
Quelques entêtes :
• From: Hugo Etiévant <theboss@php-help.com>\n
• X-Mailer: PHP\n // maileur
• X-Priority: 1\n // Message urgent!
• X-Files: Truth is out there\n // entête fantaisiste !
• Return-Path: <deamon@php-help.com>\n// @ retour pour erreurs
• Content-Type: text/html; charset=iso-8859-1\n // Type MIME
• Cc: archives@php-help.com\n // Champs CC
• Bcc: bill@php.net, tony@phpinfo.net\n // Champs BCC
• Reply-To: <hugo@php-help.com> // @ de retour

Format général des entêtes :


• Nom-Entete: valeur\n

127
É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’

128
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.

129
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;
130
?>
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 mots réservés
Couleur des chaînes

131
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:0478@ftp.download.net

• 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é.

132
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.

133
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

134
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.

135
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

136
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 137
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[]=moi@ici.fr&email[]=moi@labas.com’’;
• parse_str($str);
• echo $nom, $email[0], $email[1];

138
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 !!!
139
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.
140
Fonctions de hachage (II)
• Il existe différents algorithmes de hachage :

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

• 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. 141
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).

142
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>’’;

143
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.

144
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.
145
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).

146
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 147
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
148
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";

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

150
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.

151
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à !

152
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.

153
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

154
Exercice 2 : compteur de visites (III)
Phase 2 : généralisation aux autres <?
pages function Mon_Compteur($page) {
• Comme les internautes peuvent $fichier = $page.".cpt";
atterrir sur des pages internes à if(!file_exists($fichier)) {
votre site sans passer par l’accueil, $fp = fopen($fichier,"w");
il peut être intéressant de pouvoir
comptabilité des visites des autres fputs($fp,"0");
pages. Cela permettra aussi de fclose($fp);
comparer la popularité relative de }
vos différentes rubriques. $fp = fopen($fichier,"r+");
• Créons donc une fonction que l’on $hits = fgets($fp,10);
placera dans un fichier à part par
$hits++;
exemple compteur.php et que l’on
appellera par inclusion comme ceci fseek($fp,0);
: fputs($fp,$hits);
<?php include("compteur.php"); fclose($fp);
Mon_Compteur("ma_page") ?> }
• Remplacez "ma_page" par un ?>
identifiant unique pour chaque
page.
155
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
• ?>
156
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); // 157
ajout de la page en cours
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…

158
PHP et les bases de données

159
Présentation
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.

• 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

160
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/.

161
Gestion du BD avec MySQL
 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

162
A l’aide des commandes en ligne

163
164
165
166
167
En utilisant des scripts PHP

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

168
169
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.

170
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.");
}
?>
171
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é…

172
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.

173
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.

174
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 : mysql_num_fields($res) //Nb_champs


$requet = "SELECT * FROM users";
mysql_field_name($res) //nom_champs
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.

175
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.

176
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.

177
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

178
Classe de base : SGBD
<?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

179
Classe de base : SGBD
// Définition du constructeur
function SGBD ($login, $password, $host, $base)
{
// Vérification des variables
if (empty ($login) || empty ($host) || empty ($base))
{
// Affichage du message d'erreur
echo"<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;
}
}
}
?>
180
Classe MySQL expansion de la classe SGBD
<?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()

181
Classe MySQL expansion de la classe SGBD

function requete ($requete)


{
// Exécution de la requête
$result = mysql_query ($requete, $this->connect);
// Vérification de la requête
if (!$result)
{
// Affichage du message d'erreur
echo "<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
?> 182
Classe MySQL expansion de la classe SGBD
<?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 correspondant
include ($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();

183
Classe MySQL expansion de la classe SGBD

/* 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();
?>

184

You might also like