Vous êtes sur la page 1sur 99

Systme dInformation

Partie II
Programmation en PHP
http://www.agroparistech.fr/Systeme-d-Information

Laurent Orseau
UFR dInformatique
Dpartement MMIP
laurent.orseau@agroparistech.fr

AgroParisTech Grignon 1A
Anne 2010-2011

Table des matires


1

Introduction au PHP

Programmation en PHP
2.1 Bases de la programmation . . . . . . . . . . . . . . . . . . . . . .
2.2 Premier programme . . . . . . . . . . . . . . . . . . . . . . . . . .
2.2.1 Notion dexcution . . . . . . . . . . . . . . . . . . . . . .
2.3 Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.3.1 Types de variables . . . . . . . . . . . . . . . . . . . . . .
2.3.2 Affectation de valeur une variable . . . . . . . . . . . . .
2.3.3 Utilisation de la valeur dune variable . . . . . . . . . . . .
2.3.4 Autres oprateurs daffectations . . . . . . . . . . . . . . .
2.3.5 Conventions et nom de variables . . . . . . . . . . . . . . .
2.4 Notion de bloc dinstructions . . . . . . . . . . . . . . . . . . . . .
2.5 Structures de contrle . . . . . . . . . . . . . . . . . . . . . . . . .
2.6 La condition if . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.6.1 Utilisation du else . . . . . . . . . . . . . . . . . . . . . .
2.6.2 Imbrication des conditions . . . . . . . . . . . . . . . . . .
2.7 Les fonctions . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.7.1 Dfinition de fonction . . . . . . . . . . . . . . . . . . . .
2.7.2 Utilisation dune fonction . . . . . . . . . . . . . . . . . .
2.7.3 Valeur de retour par return et affichage lcran . . . . . . .
2.7.4 Porte des variables . . . . . . . . . . . . . . . . . . . . . .
2.7.5 Composition de fonctions . . . . . . . . . . . . . . . . . .
2.7.6 Labstraction : Ne jamais crire deux fois la mme chose . .
2.7.7 Mthode diviser pour rsoudre . . . . . . . . . . . . . . . .
2.7.8 Fonctions, Abstraction et Diviser pour rsoudre : Conclusion
2.8 La boucle while . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.8.1 Imbrications . . . . . . . . . . . . . . . . . . . . . . . . .
2.9 La boucle do...while . . . . . . . . . . . . . . . . . . . . . . . . . .
2.10 La boucle for . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.11 Tableaux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.11.1 Parcours en boucle . . . . . . . . . . . . . . . . . . . . . .
2.11.2 La boucle foreach . . . . . . . . . . . . . . . . . . . . . . .
3

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

8
8
9
10
11
11
11
12
14
15
15
16
16
16
17
20
20
21
23
24
25
26
29
34
35
37
37
38
40
41
41

2.11.3 Tableaux associatifs . . . . . . . . . . . . . . . . . . . . . . . .


3

Le paquetage AgroSIXPack
3.1 Introduction . . . . . . . . . . . . . . . . . .
3.2 Fonction principale . . . . . . . . . . . . . .
3.3 Affichage . . . . . . . . . . . . . . . . . . .
3.4 Formulaires : Interaction avec lutilisateur . .
3.4.1 Cration et affichage de formulaires .
3.4.2 Traitement des donnes de formulaire
3.5 Sessions . . . . . . . . . . . . . . . . . . . .
3.6 Modification du style . . . . . . . . . . . . .
3.6.1 Style agro par dfaut . . . . . . . . .
PHP/MySQL
4.1 Connexion la base de donnes . . .
4.1.1 Excution de requtes SQL . .
4.1.2 Requtes de type SELECT . .
4.1.3 Autres types requtes . . . . .
4.1.4 chappement des apostrophes
4.2 Fermeture de la connexion la base .
4.3 Exemple complet . . . . . . . . . . .
4.4 Pour aller plus loin . . . . . . . . . .

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

42

.
.
.
.
.
.
.
.
.

44
44
44
45
47
50
53
55
56
57

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

58
58
59
59
60
61
61
62
63

Travaux Dirigs PHP


TD 1 : Variables et fonctions . . . . . . . . . . . . . . . . . . . . . .
Exercice 1 : Premiers pas . . . . . . . . . . . . . . . . . . . . .
Exercice 2 : Variables . . . . . . . . . . . . . . . . . . . . . . .
Exercice 3 : Correction derreurs . . . . . . . . . . . . . . . . .
Exercice 4 : Fonction de concatnation de chanes de caractres .
Exercice 5 : Abstraction . . . . . . . . . . . . . . . . . . . . . .
Exercice 6 : Variables locales . . . . . . . . . . . . . . . . . . .
Exercice 7 : Multilinguisme . . . . . . . . . . . . . . . . . . . .
TD 2 : Boucles et tableaux . . . . . . . . . . . . . . . . . . . . . . .
Exercice 1 : 99 Bouteilles de bire . . . . . . . . . . . . . . . .
Exercice 2 : Triangle . . . . . . . . . . . . . . . . . . . . . . .
Exercice 3 : Jeux de mots . . . . . . . . . . . . . . . . . . . . .
Exercice 4 : Vente en ligne . . . . . . . . . . . . . . . . . . . .
TD 3 : Tableaux et formulaires . . . . . . . . . . . . . . . . . . . . .
Exercice 1 : Formulaires . . . . . . . . . . . . . . . . . . . . .
Exercice 2 : Formulaire auto-valid . . . . . . . . . . . . . . . .
TD 4 : Sessions et tableaux associatifs . . . . . . . . . . . . . . . . .
Exercice 1 : Compteur . . . . . . . . . . . . . . . . . . . . . .
Exercice 2 : Labyrinthe . . . . . . . . . . . . . . . . . . . . . .

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

64
65
65
66
66
66
67
67
68
70
70
70
71
73
76
76
78
80
80
80

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

5
TD 5 : PHP/MySQL . . . . . . .
Exercice 1 : Les Simpson . .
TD 6 : PHP/MySQL, Modlisation
Exercice 1 : Rseau social .

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

A PHP : Addendum
A.1 Signatures de fonctions . . . . . . . . . . . . . . . . . . . . . . .
A.2 Quelques fonctions et structures supplmentaires . . . . . . . . .
A.2.1 print_r . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A.2.2 rand . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A.2.3 include . . . . . . . . . . . . . . . . . . . . . . . . . . .
A.2.4 break . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A.2.5 isset . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A.2.6 array_key_exists . . . . . . . . . . . . . . . . . . . . . .
A.2.7 unset . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A.3 Chanes de caractres . . . . . . . . . . . . . . . . . . . . . . . .
A.3.1 Comparaison de chanes de caractres . . . . . . . . . . .
A.3.2 Guillemets simples et doubles, chappement de guillemet
A.4 Variables globales . . . . . . . . . . . . . . . . . . . . . . . . . .
A.5 Gestion des erreurs . . . . . . . . . . . . . . . . . . . . . . . . .

.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.

84
84
85
85

.
.
.
.
.
.
.
.
.
.
.
.
.
.

86
86
87
87
88
88
88
88
88
89
89
89
89
90
91

B Indentation en PHP

93

C Ressources et aide en ligne

95

D Utiliser Notepad++, PHP et MySQL chez vous


D.1 diteur de texte : Notepad++ . . . . . . . .
D.2 Navigateur : Firefox . . . . . . . . . . . . .
D.3 Serveur Apache/Base de donnes : EasyPHP
D.3.1 Configuration dEasyPHP . . . . .
D.4 Paquetage AgroSIXPack . . . . . . . . . .

96
96
96
96
97
97

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

Chapitre 1
Introduction au PHP
Que ce soit dans un rgulateur de chauffage, dans un tlphone portable, dans une
montre, dans une voiture, ou bien sr dans un ordinateur, ds quil y a un peu dlectronique, il y a de la programmation. Tout logiciel, que ce soient des tableurs, des jeux,
des logiciels de gestion, ou mme le systme dexploitation des ordinateurs, a t programm par des ingnieurs et des techniciens. De nombreux scientifiques voient mme le
cerveau humain comme un ordinateur (certes assez diffrent de ce quoi nous sommes
habitus), et la manire dont il fonctionne comme un gigantesque programme. Dailleurs,
des tudes sont faites pour tenter de simuler des parties du cerveau, ce qui ncessite de
bonnes connaissances en programmation.
La plupart du temps, les logiciels sont suffisamment bien faits pour que lon nait
pas savoir programmer. Mais comprendre la manire dont un ordinateur fonctionne
est un atout important pour nimporte quel utilisateur. Connatre la programmation est
aujourdhui une ncessit, surtout pour des ingnieurs.
Un langage de programmation est un langage, similairement au langage humain, permettant de transmettre des informations ou, en loccurrence, des instructions de lhomme
la machine. Ces langages existent pour faciliter le travail du programmeur, en lui permettant de dialoguer dans un langage que les 2 parties comprennent.
En 1994, Rasmus Lerdorf a cr le langage PHP (pour "PHP : Hypertext Preprocessor") pour grer son propre site Web. PHP savra fort utile et de nombreuses personnes
commencrent lutiliser. Il existe dautres langages pour la cration de sites Web dynamiques, comme Java, lASP, etc. Les avantages du PHP sont quil est libre 1 et gratuit,
aujourdhui trs rpandu, et assez facile dutilisation tout en restant relativement complet.
Le PHP est un langage de programmation au mme titre que Matlab ou C. Sa particularit est dtre trs pratique pour crer des sites Web ; cependant nous allons lutiliser
comme simple outil de programmation, laspect "site Web" ne nous intressant que pour
obtenir un rendu visuel.
Nous commencerons par voir les bases de la programmation en PHP, travers les
variables, les fonctions, les boucles et les tableaux. Ensuite nous fournissons le paquetage
1. Ce qui signifie principalement quon a le droit de le modifier et de le redistribuer librement, mais
attention cependant bien lire les termes de la licence.

7
AgroSIXPack qui permet de sabstraire de laspect technique et peu intressant dans ce
cours de la cration de site Web. Un certain nombre de fonctions y sont dfinies pour vous
permettre de vous focaliser sur laspect programmation. Enfin, nous utiliserons PHP avec
MySQL pour effectuer des requtes sur une base de donnes.

Chapitre 2
Programmation en PHP
PHP est avant tout un langage de programmation part entire, et il peut tout fait
tre utilis dans un contexte autre que celui des sites Web ; cest dailleurs de cette manire que nous allons lutiliser.
Commenons par donner le leitmotiv de la programmation :
Ne jamais crire deux fois la mme chose.
Cela implique quil faut chercher tout automatiser, et viter au maximum le copier/coller. Pourquoi ? Parce que que le copier/coller est une des causes derreurs les plus
frquentes en programmation, car on oublie facilement de modifier quelque chose qui aurait d ltre et, surtout, cela empche de rendre les programmes clairs, concis, structurs
et gnraux.
Tout automatiser signifie que lon fait faire lordinateur toutes les tches rptitives,
pendant que le programmeur peut se concentrer sur lessentiel : ajouter de nouvelles fonctionnalits au produit actuel.
Cest l le principe gnral de la programmation : dire lordinateur ce quil faut faire,
ainsi que dviter au maximum de faire plusieurs fois " la main" toute tche rptitive. Il
fera tout ce quon lui demande, condition de le lui demander de la bonne manire. Il est
trs serviable, mais comme personne nest parfait, il est un peu pointilleux sur les dtails.
Heureusement, avec une once de rigueur, on apprend vite comment dialoguer avec lui.

2.1

Bases de la programmation

La plupart des langages de programmation possdent les lments suivants :


des variables, permettant de stocker des valeurs,
des tableaux ou des listes, qui sont une succession de variables que lon peut parcourir automatiquement,
des instructions de base (des primitives), qui permettent dafficher des valeurs
lcran, lire/crire dans des fichiers, faire des calculs arithmtiques, etc.,
8

2.2. PREMIER PROGRAMME

des branchements conditionnels, permettant deffectuer certaines instructions selon


la valeur de certaines variables,
des boucles ditration, permettant deffectuer un mme bloc dinstructions plusieurs fois de suite, jusqu ce quune condition darrt soit vrifie,
des fonctions, qui sont des suites dinstructions paramtres permettant entre autres
dviter dcrire plusieurs fois les mmes choses.
PHP possde ces lments et nous les dtaillerons un par un dans la suite.
Il faut cependant bien retenir que llment considr le plus important aujourdhui
est la fonction, car elle permet davoir une programmation structure, permettant une
modification, une extension, et un maintient facile du programme. Nous verrons comment
utiliser les fonctions dans la suite.

2.2

Premier programme

Le code dun programme est un texte lisible la fois par un humain et par lordinateur.
Il sagit dune suite dinstructions que lordinateur excutera de la mme manire quune
recette de cuisine, cest--dire en lisant les lignes une par une, dans lordre, et en excutant
une action (ou plusieurs) chaque ligne.
Voici un tout premier programme PHP :
1
2
3
4
5
6

<?php
function main() {
// Message de bienvenue :
printline(Bonjour le monde !);
}
?>

Ce programme, une fois excut sur lordinateur, affiche lcran :


Bonjour le monde !

Remarquons plusieurs parties : <?php apparait toujours en dbut de programme et ?>


toujours la fin. Ces "balises" signifient qu lintrieur il y a du code PHP. Si elles ne
sont pas prsentes, le texte nest pas considr comme du PHP et ne peut donc pas tre
excut.
Nous dclarons la fonction main dont la porte est dfinie par les accolades. Il est
obligatoire de dclarer cette fonction main. Dans la suite de ce chapitre, nous lomettrons
la plupart du temps pour nous concentrer sur limportant, sauf dans les exemples de programmes entiers ; de mme, nous omettrons la plupart du temps les <?php ?>. noter
que lobligation de dclarer une fonction main est due au paquetage AgroSIXPack, que
nous dtaillerons dans un prochain chapitre.
lintrieur de la fonction main, une instruction fait appel la fonction prdfinie (la
primitive) 1 printline, qui affiche lcran ce qui lui est donn en paramtres, dans les
1. En ralit, printline nest pas une primitive car elle est dfinie partir de la fonction primitive

10

CHAPITRE 2. PROGRAMMATION EN PHP

parenthses, puis passe une ligne. Le texte afficher lcran est crit dans le programme
avec des guillemets car ce nest pas du code ; cela permet lordinateur de savoir quil ne
faut pas chercher interprter ce qui est entre guillemets comme des instructions, mais de
le considrer comme du texte simple, sans signification particulire pour le programme.
la fin de linstruction, il y a un point virgule " ;" pour signaler lordinateur que
linstruction courante sarrte l ; cest un point de repre permettant de sparer les instructions.
Le texte commenant par // est un commentaire, il nest donc pas interprt par PHP,
qui passe directement la suite. On peut mettre plusieurs lignes de commentaires entre
/* et */ :
1
2
3
4
5
6
7

// Commentaire sur une ligne


/*
Commentaire
sur plusieurs
lignes
*/

2.2.1

Notion dexcution

Lordinateur, lorsquil reoit une fichier PHP excuter, regarde chaque ligne lune
aprs lautre. Chaque ligne de code comprend une ou plusieurs instructions que lordinateur excute dans lordre.
Le programme suivant :
1
2
3
4
5
6

<?php
function main() {
printline(Bonjour le monde !);
printline(Au revoir.);
}
?>

affichera toujours :
Bonjour le monde !
Au revoir.

et jamais :
Au revoir.
Bonjour le monde !

Par la suite, nous suivrons le cours de lexcution dun programme PHP laide dun
pointeur dinstruction. Ici, le pointeur dinstruction est tout dabord positionn sur linsprint, mais de votre point de vue la diffrence na pas dimportance.

2.3. VARIABLES

11

truction de la ligne 2, laquelle est excute. Le pointeur se dplace ensuite sur linstruction
suivante, la ligne 3, qui est alors aussi excute, et ainsi de suite dans lordre jusqu la
fin du programme.
Aprs ce rapide exemple, nous expliquons maintenant le fonctionnement des variables,
avant de revenir sur celui des fonctions.

2.3

Variables

Les variables sont des cases mmoires de lordinateur dans lesquelles sont stockes
des valeurs. Il est possible de lire le contenu dune telle case ou de le modifier.
Ces valeurs peuvent donc changer au cours du temps (au cours des excutions des
instructions), et le comportement du programme dpendra de ces variables.
En PHP, une variable est identifie par le symbole $ suivi dune chane de caractres
reprsentant son nom, par exemple $couleur.

2.3.1

Types de variables

Les diffrentes sortes de valeurs que peuvent contenir les variables sont appeles des
types. Il y a notamment le type chane de caratres, le type nombre (avec les sous-types
entier, rel, etc.), le type boolen abrg en bool (soit true soit false) 2 , le type compos
array, le type resource, etc.
Le type dune variable dfinit lensemble des oprations que lon peut effectuer sur la
variable. Par exemple, il nest pas possible de multiplier 2 chanes de caractres.
PHP est un langage typage faible, cest--dire que lon ncrit pas explicitement le
type de la variable que lon utilise.

2.3.2

Affectation de valeur une variable

Pour modifier la valeur de la case mmoire dune variable, on utilise un affectation


avec le signe =.
gauche du signe =, on place la variable dont on veut modifier la valeur. droite du
signe =, on place la valeur :
1 $x = 42;

La valeur de $x ne sera modifie quune fois que le programme aura excut cette
instruction, cest--dire quune fois que le pointeur dinstruction sera pass sur cette ligne.
Attention ! Il ne sagit pas du signe = mathmatique, mais bien dune instruction de
modification dtat. Il serait plus correct de lire la place du signe = :
2. Daprs George Bool, qui inventa lalgbre de Bool au XIX sicle, permettant de faire des calculs
partir des seules valeurs true et false.

12

CHAPITRE 2. PROGRAMMATION EN PHP

1 $x 42;

ce qui signifierait "faire laction de mettre la valeur 42 dans la case mmoire de la variable
$x" ou plus simplement "$x reoit la valeur 42". Cette opration seffectue toujours de la
droite vers la gauche, jamais dans lautre sens.
Pour afficher la valeur que contient la variable, il suffit de faire :
1 $x = 42;
2 printline($x);

Ici, il ny a pas de guillemet autour de $x dans lappel au printline, car PHP doit
dabord transformer la variable $x en son contenu, ce qui revient transformer linstruction en :
1 printline(42);

Par exemple, dans le code :


1
2
3
4
5
6
7
8
9
10

$x = 42;
printline($x);
newline();
$x = 17;
printline($x);
newline();
$x = 23;
printline($x);

les instructions sont excutes dans lordre donc lordinateur affiche successivement
les valeurs 42, puis 17, puis 23. la fin de lexcution du programme, $x a donc la valeur
23.
On peut aussi mettre (stocker) des chanes de caractres, cest--dire du texte, dans
une variable :
1 $nom = Philip Kindred Dick;
2 printline($nom);

2.3.3

Utilisation de la valeur dune variable

Il est possible dutiliser la valeur dune variable dans un calcul :

2.3. VARIABLES

13

1 $x = 23;
2 $n = 42;
3 $y = $n*5+3+$x;

Un calcul peut tre utilis en partie droite du = ou dans le printline :


1
2
3
4
5

$x = 23;
$n = 42;
$longueur = 17;
$n = $x*2+$n;
printline(3*$x + $longueur);

La partie droite du = sappelle une expression. Une expression est une partie dune
instruction o lordinateur peut avoir besoin deffectuer plusieurs calculs avant darriver
au rsultat sous forme dune valeur simple (un nombre, une chane de caractres, etc.).
Un expression est toujours un calcul, dans le sens o il y a transformation de valeurs
(numriques, textuelles ou autres) en dautres valeurs. Au final, le rsultat dune expression, pour quil soit utile quelque chose, doit tre utilis dans une instruction (comme
printline ou une affectation).
Par exemple, linstruction suivante, seule, est inutile :
1 $x+2*$y;

car le rsultat du calcul nest utilis daucune faon. Cest un calcul "dans le vide". Sil
stait trouv en partie droite dune affectation par exemple, il aurait t utile.
Une expression peut tre aussi complexe quon le veut, mais il est prfrable de couper
les grands calculs en plusieurs petits.

Exercice 1 Que fera le programme suivant :

1
2
3
4
5
6
7
8
9
10
11
12

<?php
function main() {
$i = 5;
printline($i);
$i = i+1;
printline($i);
$i = i+10;
printline($i);
}
?>

14

CHAPITRE 2. PROGRAMMATION EN PHP

2.3.4

Autres oprateurs daffectations

Loprateur = est suffisant pour tout type daffectation, mais il existe dautres oprateurs qui permettent dcrire plus simplement certaines affectations courantes.
Voici quelques-uns des plus utiliss :

Oprateur Signification
$x++
$x-$x +=
$x -=
$s .=

A
A
C

$x
$x
$x
$x
$s

=
=
=
=
=

$x
$x
$x
$x
$s

+ 1
- 1
+A
-A
.C

Par exemple :
1 $x = 5;
2 $x++;
3 printline($x);

affichera 6.
Loprateur "." est loprateur de concatnation des chanes de caractres. Il permet
de "coller" deux chanes de caractres lune la suite de lautre :
1 $x = 42;
2 $x += 11;
3 printline(La val . eur de x est . $x . !);

affichera :
La valeur de x est 53 !

o $x a dabord t transform automatiquement de nombre en chane de caractres.


De mme :
1
2
3
4

$nom = Jean;
$nom .= -Sbastien;
$nom .= Bach;
printline(Votre nom : . $nom);

affichera :
Votre nom : Jean-Sbastien Bach

2.4. NOTION DE BLOC DINSTRUCTIONS

2.3.5

15

Conventions et nom de variables

Il est conseill de nutiliser que des caractres alphabtiques (pas de symbole particulier comme + ou @, etc.) dans les noms des variables. Les caractres accentus ne sont pas
recommands. Le symbole _ peut cependant tre utilis pour sparer les mots lorsque la
variable possde un nom compos : $vitesse_electron. Les chiffres peuvent apparatre,
mais jamais en dbut de nom.
Il est par ailleurs vivement conseill dutiliser des noms de variables explicites (par
exemple $hauteur ou $couleur_yeux) plutt que des noms abscons comme $toto ou
$a.

2.4

Notion de bloc dinstructions

Nous allons souvent avoir besoin de regrouper une suite donne dinstructions. Cest
ce que lon appelle un bloc dinstructions, et il commence toujours par une accolade
ouvrante { et finit toujours par une accolade fermante } :
1
2 {
3
4
5
6
7 }

instruction1
instruction2
instruction3
...

Voici un exemple de bloc dinstructions :


1
2 {
3
4
5
6
7 }

$taille = 79;
printline(la taille est . $taille);
$forme = rectangulaire;
printline(la forme est . $forme);

Notez le passage la ligne aprs la premire accolade ainsi quavant laccolade fermante. Notez aussi que tout ce qui se trouve lintrieur du bloc dinstructions a t dcal vers la droite dun nombre fixe despaces (4 semble une valeur convenable). Comme
nous le verrons par la suite, une fois que lon a ferm le bloc dinstructions, on revient au
mme niveau que les accolades.
Cela sappelle lindentation. On dit que les lignes ont t indentes, ou tabules. Lindentation est trs importante pour rendre un programme lisible par lhomme (gnralement la machine nen a pas besoin). Lire la section B pour plus de dtails sur la ncessit
de lindentation.
Les blocs dinstructions sont ncessaires aux structures de contrle.

16

CHAPITRE 2. PROGRAMMATION EN PHP

2.5

Structures de contrle

Les structures de contrle sont des lments de base des langages de programmation
qui permettent de modifier le comportement du programme selon la valeur des variables.
Normalement, les instructions sont excutes les unes la suite des autres, dans
lordre. Les structures de contrle (de lordre dexcution des instructions) permettent
de modifier cet ordre au moment de lexcution du programme.
Elles sont de trois sortes :
les conditions,
les boucles,
les fonctions.

2.6

La condition if

La condition 3 if permet dexcuter une suite dinstructions uniquement si un test


donn est vrifi. Par exemple :
1 if($x > 5) {
2
printline(x est suprieur 5);
3 }

Ce qui se trouve entre les parenthses qui suivent le if sappelle le test de la condition.
Un test est une expression dont le calcul doit arriver soit la valeur true, soit la valeur
false. Tout ce qui se trouve dans les accolades suivant le if sera trait uniquement si le
test de la condition est vrifi (sa valeur calcule vaut true).
Notez la tabulation ajoute sur la ligne suivant le if.
Les instructions du bloc dinstructions suivant le if seront soient toutes excutes, soit
aucune.

2.6.1

Utilisation du else

Il est possible dexcuter des instructions dans le cas o le test du if a chou (le test
vaut false). Il faut pour cela utiliser le mot-clef else :
1
2
3
4
5
6

$x = 3;
if($x > 5) {
printline(x est suprieur 5);
} else {
printline(x est infrieur ou gal 5);
}

Notez que le else se trouve entre laccolade fermante des instructions du cas o le test
est true, et laccolade ouvrante du cas false.
3. Le if nest en aucun cas une boucle !

2.6. LA CONDITION IF

2.6.2

17

Imbrication des conditions

Il est tout fait possible dimbriquer les conditions :


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

$max = 0;
if($x > $y) {
printline(x est
if($x > $z) {
printline(x
$max = $x;
} else {
printline(z
$max = $z;
}
} else {
printline(y est
if($y > $z) {
printline(y
$max = $y;
} else {
printline(z
$max = $z;
}
}

suprieur y);
est la plus grande valeur des trois);

est la plus grande valeur des trois);

suprieur x);
est la plus grande valeur des trois);

est la plus grande valeur des trois);

mais en gardant lesprit que le test if($x > $z) (par exemple) ne se fera que si la
condition du if($x > $y) est vrifie.
Lorsque beaucoup de if et de else senchanent, il est prfrable dutiliser des else
if, (ou elseif) successifs plutt que de multiplier les imbrications de blocs dinstructions. Cest--dire, au lieu de :
1 if($x < 0) {
2
printline(x est ngatif);
3 } else {
4
if($x < 10) {
5
printline(x est infrieur 10);
6
} else {
7
if($x < 100) {
8
printline(x est infrieur 100);
9
} else {
10
printline(x est suprieur ou gal 100);
11
}
12
}
13 }

il est prfrable dcrire :

18

1
2
3
4
5
6
7
8
9

CHAPITRE 2. PROGRAMMATION EN PHP

if($x < 0) {
printline(x est ngatif);
} else if($x < 10) {
printline(x est infrieur 10);
} else if($x < 100) {
printline(x est infrieur 100);
} else {
printline(x est suprieur ou gal 100);
}

La forme gnrale du if est donc la suivante :


1 if( test ) {
2
instruction
3
instruction
4
...
5 } else {
6
instruction
7
instruction
8
...
9 }

o les instructions peuvent contenir elles aussi des if.


Le test est une expression (un calcul) qui, une fois value (calcule), doit avoir la
valeur true ou false 4 .
Pour effectuer le test du if, on utilise des oprateurs de comparaison. Voici les plus
courants :
Oprateur
A == B
A != B
A<B
A>B
A <= B
A >= B

Signification
vaut true ssi lexpression A a la mme valeur calcule que B
true ssi A est diffrent de B
true ssi A est infrieur B
true ssi A est suprieur B
true ssi A est infrieur ou gal B
true ssi A est suprieur ou gal B

Par exemple :
1 if($x == 5) {
2
printline(x est gal 5);
3 }

4. En PHP, la valeur false est quivalente la chane de caractres vide ou la valeur null ou la
valeur 0 ; toutes les autres valeurs sont quivalentes true.

2.6. LA CONDITION IF

19

Note : Les oprateurs == et != peuvent aussi tre utiliss sur les chanes de caractres.
Ces oprateurs permettent aussi de comparer des expressions et non seulement des
variables ou des valeurs simples :
1 if($x+3 == $y*$z) {
2
printline(Ok);
3 }

Dans un telle expression, on peut combiner plusieurs comparaisons en une seule en utilisant des oprateurs logiques :
Oprateur
A and B
A or B
A xor B
A && B
A || B
!A

Signification
vaut true si la fois A et B ont la valeur true
vaut true si A ou B ou les deux ont la valeur true
vaut true si A ou B ont la valeur true, mais pas les deux la fois
comme and
comme or
non(A) : vaut true si A est false et rciproquement

Lutilisation de && et || est dconseille car moins facilement lisible, bien que courante.
Pour viter tout problme de priorit entre les oprateurs, cest--dire quels oprateurs
agissent en premier, il est conseill dentourer les expressions avec des parenthses :
Par exemple :
1 if( ( ($x > 100) and ($x < 200) ) or ($x > 500) ) {
2
printline(100 < x < 200 ou bien x > 500);
3 }

20

CHAPITRE 2. PROGRAMMATION EN PHP

2.7

Les fonctions

Une fonction est essentiellement un bloc dinstructions auquel on a donn un nom, qui
dpend de paramtres dentre, et qui renvoie une valeur de sortie.
Elle permet deffectuer un calcul ou une tche intermdiaire de manire peu prs
indpendante du reste du programme.
Les intrts des fonctions sont multiples :
faciliter la conception (la phase avant lcriture) du programme : on peut diviser le
problme en sous-problmes, et chacun sera rsolu par une fonction, cest ce que
lon appelle "diviser pour rsoudre" 5 ,
rendre le programme plus compact : on peut utiliser plusieurs fois une mme fonction pour effectuer des calculs similaires, au lieu de recopier le mme code diffrents endroits,
faciliter lcriture du programme, pour les mmes raisons,
rendre le programme plus lisible : il est bien plus pratique de lire
avancer_pion(case_source, case_destination)

quun long morceau de code faisant la mme chose,


faciliter la modification dun programme : on ne modifie quune seule fois la fonction alors que si le code se rpte, il faut le modifier dans chacune de ses rptitions.

2.7.1

Dfinition de fonction

Avant de pouvoir tre utilise dans le programme, il faut donner une dfinition de la
fonction, cest--dire que lon doit dire au programme ce quelle fait, en "fonction" de
quoi.
Voici un exemple de fonction qui fait simplement la somme de 3 valeurs :
1 function ajouter3($x, $y, $z) {
2
$somme = $x + $y + $z;
3
return $somme;
4 }

Anatomie dune fonction :


1 function nom(variable1, variable2...) {
2
corps
3
...
4
return expression;
5 }

Une fonction commence toujours par le mot clef function, suivi du nom quon lui donne,
suivi dune liste de variables nommes arguments ou paramtres dentre. Cette liste peut
tre vide.
5. Ou "diviser pour rgner".

2.7. LES FONCTIONS

21

Vient ensuite le corps de la fonction, qui correspond la suite dinstructions excute par la fonction lorsquelle est appele. Une fonction effectue une transformation des
valeurs dentre en une valeur de sortie. Cest pourquoi elle se termine par linstruction
return expression;, qui a pour objectif de renvoyer en sortie la valeur calcule de lexpression. Cette valeur calcule pourra ainsi tre rutilise dans un autre calcul en dehors
de la fonction.
Remarquez que le corps de fonction et le return sont ncessairement entours des
accolades de bloc dinstructions.
Une fonction doit toujours elle-mme tre dfinie en dehors de tout bloc dinstructions et de toute structure de contrle.
Contrairement aux autres parties du programme, lorsque PHP "lit" la dfinition de la
fonction, il nexcute pas les instructions qui se trouvent dans le corps de la fonction.
la place, il les garde quelque part dans sa mmoire et les excutera rellement que lors de
lappel de fonction.

2.7.2

Utilisation dune fonction

Une fois que la fonction est dfinie, on peut lutiliser en lappelant dans le reste du
programme :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

<?php
function ajouter3($x, $y, $z) {
$somme = $x + $y + $z;
return $somme;
}
function main() {
$n = 5;
printline(La valeur de n est . $n);
$n = ajouter3($n, 8, 27);
printline(La valeur de n est . $n);
$n = ajouter3(1, 0, 8);
printline(La valeur de n est . $n);
}
?>

Ce programme affichera :
La valeur de n est 5
La valeur de n est 40
La valeur de n est 9

Lors de lexcution du programme, le pointeur dinstruction parcourt la dfinition de


la fonction (ligne 2) jusqu arriver la fin de son corps. Ses instructions ne sont pas ex-

22

CHAPITRE 2. PROGRAMMATION EN PHP

cutes immdiatement, mais elles sont conserves en mmoire. Il en va de mme pour la


fonction spciale main, mais cette dernire est excute juste aprs la lecture complte du
fichier PHP, de sorte que le pointeur dinstruction arrive ensuite sur la premire affectation
(ligne 8).
Ceci affiche donc son rsultat et le pointeur dinstruction arrive sur la seconde affectation (ligne 11). Rappelons que laffectation possde toujours en partie droite une
expression. Ici, lexpression est un calcul effectu par un appel de fonction : on donne 3
valeurs cette fonction et on rcupre le rsultat :
11

$n = ajouter3($n, 8, 27);

Attention, ici, il ne faut pas considrer que cest la variable $n de droite elle-mme
qui sera envoye la fonction, mais uniquement sa valeur. Le $n de droite est donc
transform en sa valeur avant lappel de fonction, comme si lon avait :
11 $n = ajouter3(5, 8, 27);

La variable $n de droite napparatra donc pas dans lexcution de la fonction, et seule sa


valeur y sera. Ceci signifie que la fonction ne peut en aucun cas modifier le contenu de
$n.
cause de lappel de fonction ajouter3, le pointeur dinstruction saute alors jusqu la ligne 2 qui est le dbut de la fonction. Cependant, on mmorise quand mme le
numro de ligne o sest effectu le saut, pour pouvoir y revenir ensuite. Dans la fonction, tout se passe comme si on tait dans un petit programme (presque) indpendant du
programme principal : Les variables de la fonction nont aucun rapport avec les variables du programme principal. On les appelle des variables locales. La variable $x
prend alors la valeur 5, $y prend la valeur 8 et $z prend la valeur 27. linstruction suivante dans la fonction, on calcule la valeur de $somme, qui prend donc la valeur 40. On
arrive enfin sur linstruction :
4

return $somme;

Cette instruction renvoie ("retourne") la valeur contenue dans la variable $somme en sortie
de fonction. Cest la valeur de retour. On sort de la fonction, et les variables locales
perdent leur valeur : ces variables nexistent plus en dehors de la fonction.
Le pointeur dinstruction retourne alors sur la ligne 11 et la valeur de retour remplace
lappel de fonction. Lappel :
11 $n = ajouter3(5, 8, 27);

sest donc transform en, aprs calcul fait par la fonction :


11 $n = 40;

Lexpression droite du = tant un nombre, elle peut maintenant tre affecte la va-

2.7. LES FONCTIONS

23

riable $n. Aux instructions suivantes, PHP affiche le rsultat, affecte $n une autre valeur
calcule par appel de fonction et laffiche aussi.

2.7.3

Valeur de retour par return et affichage lcran

Il est important de bien faire la diffrence entre valeur de retour dune fonction et
affichage dun rsultat lcran.
Dans le retour dune fonction, il ny a aucune interaction avec lutilisateur qui regarde lcran. Tout se passe lintrieur du programme, o ce sont les instructions qui
"dialoguent", se passent des valeurs et les modifient. Il sagit uniquement dun "calcul".
Dans le cas de laffichage lcran de la valeur calcule par la fonction, il y a une interaction directe avec lutilisateur du programme. Cest--dire qu chaque fois que cette
fonction sera appele, il y aura un affichage lcran. Cela nest gnralement pas souhaitable, car les fonctions peuvent tre appeles de nombreuses fois (parfois des millions), ce
qui pourrait alors encombrer lcran dinformations parfaitement inutiles lutilisateur.
Reprenons lexemple du programme prcdent : il est possible (et fortement conseill,
pour toutes les raisons indiques plus haut) de crer une fonction spare ralisant laffichage lcran de la valeur de $n. Cela vitera entre autres dcrire plusieurs fois la
mme chose :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

<?php
function ajouter3($x, $y, $z) {
$somme = $x + $y + $z;
return $somme;
}
function afficher_n($val_n) {
printline(La valeur de n est . $val_n);
}
function main() {
$n = 0;
afficher_n($n);
$n = ajouter3(5, 8, 27);
afficher_n($n);
$n = ajouter3(1, 0, 8);
afficher_n($n);
}
?>

Remarquez que la fonction afficher_n nutilise pas le mot clef return, car lorsque
lon appelle cette fonction, on na pas besoin de rcuprer une valeur pour lutiliser dans
un calcul ou la mettre dans une variable. Cette fonction ne fait en effet quafficher quelque
chose lcran. De telles fonctions sans valeur de retour sont parfois appeles procdures.

24

CHAPITRE 2. PROGRAMMATION EN PHP


linverse, la fonction ajouter3 renvoie une valeur mais nutilise jamais le

printline.

Il est donc fortement recommand dappliquer la rgle suivante : Une fonction qui
retourne une valeur ne doit pas utiliser de printline.
Attention, linstruction return doit tre la dernire instruction que doit excuter la
fonction ! En effet, ds que le pointeur dinstruction arrive sur le return, il sort immdiatement de la fonction avec la valeur de retour. Les instructions suivantes sont alors
ignores.

2.7.4

Porte des variables

Reprenons le code de la fonction afficher_n :


1 function afficher_n($val_n) {
2
printline(La valeur de n est . $val_n);
3 }

Notez bien que dans cette fonction, ce nest pas la variable $n que lon utilise, mais bien
lautre variable $val_n, qui reoit la valeur de $n lors de lappel de fonction. La variable
$n napparait donc pas dans la fonction afficher_n.
Soit le programme suivant :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

<?php
function ajouter3($x, $y, $z)
$somme = $x + $y + $z;
return $somme;
}

function main() {
$somme = 12;
$x = 18;
printline($somme);
printline($x);
$n = ajouter3(23, 35, 42);
printline($n);
printline($somme);
printline($x);
printline($y);
}
?>

Une fois le pointeur dinstruction arriv sur linstruction de la ligne 8, la variable


$somme prend la valeur 12, puis la variable $x prend la valeur 18. On affiche ensuite leurs

valeurs.
la ligne 12, on appelle la fonction ajouter3. Le pointeur dinstruction se dplace
alors jusqu la ligne 1 qui est le dbut de la fonction. Ici sont introduites 3 variables
dentre $x, $y et $z.

2.7. LES FONCTIONS

25

Comme nous lavons dit plus haut, une fonction est un petit programme indpendant
du programme principal : les variables sont de nouvelles variables et mme si elles ont le
mme nom, ce ne sont pas les mmes. Ce sont des variables locales.
Ceci a pour avantage majeur que lon peut utiliser les fonctions que dautres programmeurs ont cr (et cela est extrmement courant et pratique) sans avoir connatre les
variables que ces fonctions utilisent, ni comment elles sont utilises. Mme si lon nutilise que nos propres fonctions, cela permet de grandement faciliter la dcomposition du
programme en sous-programmes plus simples. Une fois ces fonctions/sous-programmes
crs, il nest plus ncessaire de (entirement) se souvenir de la manire dont elles ont t
dfinies.
Pour le programme ci-dessus donc, une fois le pointeur dinstruction sur la ligne 2,
on sait que les variables $somme, $x, $y et $z sont locales la fonction ajouter3. Les
valeurs des variables $somme et $x du programme principal ne sont donc pas modifies. La
fonction calcule ensuite la valeur de $somme puis elle retourne la valeur de cette variable.
Lorsque lon sort de la fonction, on retourne directement en ligne 12, pour remplacer
lappel de fonction par sa valeur retourne :
12

$n = ajouter3(23, 35, 42);

se transforme alors en :
12 $n = 100;

et $n prend donc la valeur 100. Comme on est sorti de la fonction, les variables locales
de celle-ci nexistent plus et les variables $somme et $x ont maintenant les mmes valeurs
quavant lappel de fonction. Ce sont donc ces valeurs qui saffichent, cest--dire 12 et
18.
Enfin, la dernire ligne cherche crire la valeur de la variable $y. Mais comme
cette variable na jamais reu de valeur (par une affectation), elle nexiste pas dans le
programme principal. PHP affiche alors une erreur :
Notice: Undefined variable: y in mon_fichier.php on line 16

On retrouve dabord le type de lerreur, comprenant le nom de la variable non dfinie,


puis le nom de fichier impliqu et le numro de ligne o a t remarque lerreur.

2.7.5

Composition de fonctions

Dans une expression, on peut aussi composer les appels de fonctions pour utiliser la
valeur de sortie dune fonction pour la donner en argument en entre dune autre fonction.
Ceci est comparable la composition mathmatique des fonctions, comme g(f(5)).
Par exemple :
1 printline(ajouter3(3, 5, multiplier3(8, 6, 4));

26

CHAPITRE 2. PROGRAMMATION EN PHP

Ici, le troisime paramtre de la fonction ajouter3 est un autre appel la fonction


multiplier3, que lon suppose dfinie en dbut de programme. Pour dterminer quelle
valeur est envoye lappel de printline, on commence par calculer la valeur de retour
de lappel qui est le plus profond dans limbrication, soit multiplier3(8, 6, 4). Une
fois cette valeur calcule, celle-ci remplace lappel dans lexpression globale :
1 printline(ajouter3(3, 5, 192));

Notez bien quil est ncessaire que lappel multiplier3 retourne une valeur numrique,
car si elle retournait une chane de caractres ou rien du tout, cela naurait pas de sens vis-vis de ajouter3 :
1 printline(ajouter3(3, 5, ceci est une chane de caractres));

Remarquez quil est toujours possible de dcomposer les imbrications lors de lappel
en passant par des variables intermdiaires :
1 $n1 = multiplier3(8, 6, 4);
2 $n2 = ajouter3(3, 5, $n1);
3 printline($n2);

Ceci est dailleurs conseill pour clarifier des calculs qui seraient peu lisibles autrement.

2.7.6

Labstraction : Ne jamais crire deux fois la mme chose

Un des concepts les plus importants en programmation est labstraction, cest--dire


la capacit trouver des formes gnrales partir de plusieurs formes similaires 6 .
Mthode
La mthode de labstraction consiste dabord crire " la main" plusieurs exemples
du rsultat que lon souhaite obtenir. Une fois fait, ceci permet de :
i - Identifier les diffrences entre les exemples,
ii - Identifier les similarits entre les exemples,
iii - Utiliser une variable pour chacune des diffrences et rcrire le code en remplaant
les occurrences des diffrences par lutilisation des variables. Pour aider la cration
du code, donner aux variables les valeurs quelles doivent prendre sur le premier
exemple,
iv - Transformer le code prcdent en une fonction prenant en argument toutes les variables ainsi trouves, Les variables ne doivent donc plus avoir les valeurs du premier
exemple. La valeur de retour de la fonction est soit la valeur calcule, soit aucune
sil sagit dune fonction daffichage.
6. En intelligence artificielle, on parle aussi dinduction, qui est considre comme lun des mcanismes
centraux de lintelligence.

2.7. LES FONCTIONS

27

v - Si la fonction prcdente est une fonction daffichage, il est prfrable de la transformer pour lui faire retourner une chane de caractres,
vi - Finalement faire des appels cette fonction sur les diffrents exemples, en lui passant
en argument les diffrences des exemples.
Droulement sur un exemple
Nous possdons les deux exemples suivants que nous voulons afficher en sortie :
Nord, Nord-Nord-Ouest, Nord-Ouest, Ouest-Nord-Ouest, Ouest.

Sud, Sud-Sud-Est, Sud-Est, Est-Sud-Est, Est.

Commenons par crire le code qui permet dafficher ces deux chanes :
1 print(Nord, Nord-Nord-Ouest, Nord-Ouest, Ouest-Nord-Ouest, Ouest.);

et :
1 print(Sud, Sud-Sud-Est, Sud-Est, Est-Sud-Est, Est.);

Cest ce code que nous allons modifier pour obtenir une abstraction.
i - Identification des diffrences entre les exemples
Le mot Nord est remplac par le mot Sud et le mot Ouest est remplac par le mot
Est.
Ces mots seront donc remplacs par des variables $dir1 et $dir2.
ii - Identification des similarits entre les exemples
Ici, il sagit de lenchanement des mots et de la ponctuation.
iii - Utilisation de variables
Rcrivons le code ci-dessus en remplaant le premier exemple par les variables identifies :
1 $dir1 = Nord;
2 $dir2 = Ouest;
3 print($dir1., .
4
$dir1.-.$dir1.-.$dir2., .
5
$dir1.-.$dir2., .
6
$dir2.-.$dir1.-.$dir2., .
7
$dir2..);

iv - Cration de la fonction
Les deux variables passent en argument de notre nouvelle fonction, la quelle nous don-

28

CHAPITRE 2. PROGRAMMATION EN PHP

nons le nom de afficher_cardinaux :


1 function afficher_cardinaux($dir1, $dir2) { // string string -> none
2
print($dir1., .
3
$dir1.-.$dir1.-.$dir2., .
4
$dir1.-.$dir2., .
5
$dir2.-.$dir1.-.$dir2., .
6
$dir2..);
7 }

Notez le commentaire droite du nom de la fonction signalant que les deux arguments
sont de type "string", et que la fonction ne renvoie aucune valeur.
v - Valeur de retour
On supprime le print de la fonction :
1 function points_cardinaux($dir1, $dir2) { // string string -> string
2
return $dir1., .
3
$dir1.-.$dir1.-.$dir2., .
4
$dir1.-.$dir2., .
5
$dir2.-.$dir1.-.$dir2., .
6
$dir2.. ;
7 }

Notez :
lutilisation du return la place du print,
Le changement de nom de la fonction,
Le changement du commentaire droite du nom de fonction.

vi - Utilisation de la fonction
Il ne nous reste plus qu effectuer des appels notre nouvelle fonction :
1
2
3
4
5
6
7
8
9
10
11
12
13
14

<?php
function points_cardinaux($dir1, $dir2) { // string string -> string
return $dir1., .
$dir1.-.$dir1.-.$dir2., .
$dir1.-.$dir2., .
$dir2.-.$dir1.-.$dir2., .
$dir2.. ;
}
function main() {
printline( points_cardinaux(Nord, Ouest) );
printline( points_cardinaux(Sud, Est) );
}
?>

2.7. LES FONCTIONS

29

Avantages de labstraction
Maintenant que la fonction est cre, il est beaucoup plus facile deffectuer des modifications sur les ressemblances des exemples. Par exemple, si lon veut changer les "," par
des " ;", il suffit de les changer dans la fonction, indpendamment du nombre de fois o
cette fonction est apple. Sans cette abstraction, on aurait t oblig de le modifier dans
chaque exemple, avec un risque croissant derreur.
Leffort de modification et le risque derreur sont ainsi diminus, et la facilit de rutilisation ultrieure est grandement augment : au lieu de faire un copier/coller risquant une
fois de plus dengendrer des erreurs (gnralement des oublis de modification), il suffit de
faire un appel unique de fonction. La taille du programme sen trouve par la suite aussi
grandement diminue, ce qui contribue le rendre plus clair, de mme que de choisir un
nom de fonction adquat.
Gnralisation de labstraction
Mme lorsquil semble trop "lourd" de crer une fonction, il est nanmoins possible
deffectuer une abstraction, en utilisant par exemple des variables, ou des boucles comme
nous le verrons plus tard, contribuant ainsi ne jamais crire deux fois la mme chose.
Prenons le code suivant :
1 $chaine = philanthrope philanthrope;

bien que lon ne possde pas ici deux exemples pour dterminer les ressemblances et
les diffrences entre eux, on peut nanmoins noter la rutilisation dun mot. On peut ainsi
sabstraire de ce mot et crire plutt :
1 $mot = philanthrope;
2 $chaine = $mot . . $mot;

2.7.7

Mthode diviser pour rsoudre

Nous dtaillons ici une mthode gnrale pour modliser puis programmer la solution
un problme dont lnonc est donn.
Cette mthode est utile non seulement en informatique, mais aussi dans toute discipline o il est besoin de rsoudre un problme dune certaine complexit.
Supposez que vous avez un problme opratoire rsoudre, cest--dire un problme
ncessitant une squence dactions pour arriver la solution (ce qui, notez bien, est le cas
pour peu prs tous les problmes).
La programmation, grce sa capacit automatiser des oprations, sert rsoudre
des problmes gnraux, pour viter de rpter sa rsolution " la main" chaque fois
quune variante de ce problme survient.

30

CHAPITRE 2. PROGRAMMATION EN PHP

Lide principale est de dcomposer le problme en sous-problmes, en utilisant les


fonctions.
Nous allons expliquer la mthode de rsolution sur le problme suivant :
On souhaite pouvoir calculer le salaire net rel annuel dun employ temps plein de
la socit Cacoloc, tant donn son salaire horaire net et un indice des prix 7 .
Donner un nom la fonction
Commencez par donner un nom explicite la fonction qui doit rsoudre le problme.
Ajoutez un commentaire pour dire ce quest cense faire la fonction (description succinte du problme).
Pour notre exemple :
1
2
3
4

// Calcule le salaire annuel rel partir du salaire horaire net


// et dun indice des prix.
function salaire_annuel_reel() {
}

Identifier le type de retour de la fonction


Une fois cette fonction appele, celle-ci doit retourner une valeur. Quelle est le type
de cette valeur ? (chane de caractres, entier, rel, boolen, etc.)
Dans notre exemple, la fonction salaire_annuel_reel retourne un nombre rel :
1
2
3
4

// Calcule le salaire annuel rel partir du salaire horaire net


// et dun indice des prix.
function salaire_annuel_reel() { // -> real
}

Le signe -> real signifie que le type de retour de la fonction est un rel.
Identifier les arguments dentre de la fonction
Pour cela, il faut commencer par faire une liste des valeurs utilises dans la fonction.
Pour chacune des entres, dterminer si cest une valeur qui changera ou non selon les diffrentes versions du problme (les diffrents appels la fonction). Si cette valeur change,
alors cest un argument de la fonction.
Pour aider dterminer ces arguments, il est utile dcrire 2 ou 3 cas dutilisation de
la fonction, en mettant en commentaire la valeur que doit retourner la fonction. Quelles
sont les valeurs qui changent lors de ces diffrents appels ?
Il faut aussi identifier les types des arguments.
Arriv ici, on obtient une signature de fonction.
7. salaire rel annuel = salaire net annuel / indice des prix

2.7. LES FONCTIONS

31

Dans notre exemple :


1
2
3
4

// Calcule le salaire annuel rel partir du salaire horaire net


// et dun indice des prix.
function salaire_annuel_reel($sal_h, $ind_prix) { // real real -> real
}

Ici $sal_h et $ind_prix sont tous les deux des rels, do le nouveau commentaire de la
fonction : real real -> real.
Quelques cas dutilisation :
1 printline(salaire_annuel_reel(15.0, 1.2)); // -> 22750.0
2 printline(salaire_annuel_reel(49.5, 1.05)); // -> 85800.0

Les printline permettent de comparer la valeur affiche avec la valeur calcule la


main.

Indentifier les sous-problmes

Dcomposez votre problme en 1 ou 2 sous-problmes indpendants (ou plus si ncessaire). Chaque sous-problme est lui-mme rsolu par une fonction, donc pour chaque
sous-problme, rptez le processus ci-dessus :
Donner un nom la (sous-)fonction, accompagn dune description gnrale,
Identifier le type de retour de la fonction,
Identifier les arguments dentre, et crire 2 ou plus cas dutilisation, et crire la
signature de la fonction.
Notez bien que pour le moment on ne sintresse pas la manire dont ces sousproblmes sont rsolus !
Dans notre exemple, nous identifions deux sous-problmes :
Calculer le salaire net annuel partir du salaire net horaire,
Calculer le salaire rel partir du salaire annuel.

32

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28

CHAPITRE 2. PROGRAMMATION EN PHP

<?php
// Calcule le salaire net annuel partir du salaire net horaire.
function salaire_annuel_net($sal_h) { // real -> real
}
// Calcule le salaire rel partir du salaire net
// et dun indice des prix.
function net_vers_reel($sal_an, $ind_prix) { // real real -> real
}
// Calcule le salaire annuel rel partir du salaire horaire net
// et dun indice des prix.
function salaire_annuel_reel($sal_h, $ind_prix) { // real real -> real
}
function main() {
// Nouveaux cas dutilisation :
printline(salaire_annuel_net(10.0)); // -> 18200.0
printline(salaire_annuel_net(49.5)); // -> 90090.0
printline(net_vers_reel(22000, 1.6)); // -> 13750.0
printline(net_vers_reel(35000, 0.8)); // -> 43750.0
printline(salaire_annuel_reel(15.0, 1.2)); // -> 22750.0
printline(salaire_annuel_reel(49.5, 1.05)); // -> 85800.0
}
?>

Remplir le corps de la fonction

Bien que lon nait pas encore crit le code des sous-fonctions, on considre que lon
sait quelles fonctionnent correctement, sans avoir besoin de savoir comment.
Sachant cela, on remplit le corps de la fonction avec des appels aux diffrentes sousfonctions.
Ceci est la partie la plus dlicate, mais elle devrait tre largement simplifie si vous
avez suivi les tapes ci-dessus.

2.7. LES FONCTIONS

1
2
3
4
5
6
7
8
9
10
11
12
13

33

<?php
...
// Calcule le salaire annuel rel partir du salaire horaire net
// et dun indice des prix.
function salaire_annuel_reel($sal_h, $ind_prix) { // real real -> real
$sal_an = salaire_annuel_net($sal_h);
$sal_reel = net_vers_reel($sal_an, $ind_prix);
return $sal_reel;
}
...
?>

Dcomposer les sous-problmes


Enfin, les sous-problmes eux-mmes peuvent tre dcomposs en sous-problmes si
besoin (et ainsi de suite), de manire pouvoir remplir le code de leur fonction associe.
Dans notre exemple, les sous-problmes sont suffisamment simples pour tre rsolus
immdiatement. On obtient alors :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27

<?php
// Calcule le salaire net annuel partir du salaire net horaire.
function salaire_annuel_net($sal_h) { // real -> real
return $sal_h * 35 * 52; // 35h/semaine, 52 semaines
}
// Calcule le salaire rel partir du salaire net
// et dun indice des prix.
function net_vers_reel($sal_an, $ind_prix) { // real real -> real
return $sal_an / $ind_prix;
}
// Calcule le salaire annuel rel partir du salaire horaire net
// et dun indice des prix.
function salaire_annuel_reel($sal_h, $ind_prix) { // real real -> real
$sal_an = salaire_annuel_net($sal_h);
$sal_reel = net_vers_reel($sal_an, $ind_prix);
return $sal_reel;
}
function main() {
// Nouveaux cas dutilisation :
printline(salaire_annuel_net(10.0)); // -> 18200.0
printline(salaire_annuel_net(49.5)); // -> 90090.0
printline(net_vers_reel(22000, 1.6)); // -> 13750.0
printline(net_vers_reel(35000, 0.8)); // -> 43750.0

34
28
29
30
31
32 }
33 ?>

CHAPITRE 2. PROGRAMMATION EN PHP

printline(salaire_annuel_reel(15.0, 1.2)); // -> 22750.0


printline(salaire_annuel_reel(49.5, 1.05)); // -> 85800.0

Ds quun sous-problme est entirement rsolu, il faut le tester, cest--dire vrifier quil fonctionne correctement en excutant le fichier PHP et en vrifiant les valeurs
obtenues.

2.7.8

Fonctions, Abstraction et Diviser pour rsoudre : Conclusion

En combinant le raisonnement par abstraction (partir de quelques exemples dutilisation pour crer une mthode gnrale), et de la mthode diviser pour rsoudre, il
est possible de venir bout de tout problme de programmation, quelque soit sa complexit : lide majeure tant de dcomposer ce problme en sous-problmes, de rsoudre
les (sous-)problmes un par un en utilisant une fonction pour chaque.
Si vous acqurez bien cette mthode, vous aurez un srieux atout pour rsoudre aussi
nimporte quel problme dingnierie.

2.8. LA BOUCLE WHILE

2.8

35

La boucle while

"Comment afficher les nombres de 1 1000, sans les crire tous un par un ?"
Le principe des boucles est de rpter un mme schma un certain nombre de fois
daffil jusqu une condition darrt. Comme dans une recette de cuisine, "battre les
oeufs en neige" signifie "faire plusieurs fois (battre les oeufs) jusqu (les oeufs sont
monts en neige)", o ici le schma rptitif est le fait de battre une seule fois les oeufs.
Pour crer des boucles, il faut donc reprer le schma rptitif et identifier la condition darrt.
En PHP, toute tche rptitive peut se raliser avec la boucle while. Le schma gnral
de la boucle while est le suivant :
1 while(condition) {
2
instruction
3
instruction
4
...
5 }

On remarque immdiatement la similarit avec la condition if, mais contrairement


ce dernier qui nest pas une boucle, le while effectue plusieurs fois un groupe dinstructions, tant que la condition condition est vrifie.
En franais, while signifie tant que, et il faut rellement le penser comme cela :
1 tant que(la condition est vrifie) faire
2
des instructions

Pour battre les oeufs en neige, il faut crire :


1 tant que(les oeufs ne sont pas monts en neige) faire
2
battre les oeufs

o la condition est mise cette fois sous forme ngative : le "tant que" est la forme ngative
du "jusqu ce que". Rflchissez donc bien votre condition de boucle ; cela aide gnralement de lexprimer clairement en franais.
Voici en exemple la boucle permettant dafficher les nombres de 1 20 :
1
2
3
4
5
6
7
8

$i = 1;
while($i <= 20) {
print($i . );
$i++;
}
printline(Fin !);

36

CHAPITRE 2. PROGRAMMATION EN PHP

Ce qui produit le rsultat suivant :


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 Fin !

Juste avant la boucle, on commence par donner une valeur initiale la variable $i.
On arrive ensuite sur la boucle while.
Avant mme dentrer pour la premire fois dans la boucle pour excuter les instructions rptitives, on commence par tester la condition. Cest pour cela quelle se trouve
au dessus des instructions rptitives. Si la condition nest pas vrifie (sa valeur est false
), on sort immdiatement de la boucle, sans mme avoir effectu une seule fois les instructions de boucle.
Sortir de la boucle signifie passer aux instructions qui suivent linstruction ou le bloc
dinstructions de la boucle, en loccurrence printline(Fin !);.
Si par contre la condition est vrifie (la valeur calcule est true), on entre dans la
boucle pour excuter les instructions rptitives, toujours selon leur ordre : on commence
par afficher $i qui a la valeur 1, puis on incrmente $i, cest--dire quon lui ajoute 1.
Arriv l, les instructions rptitives de la boucle sont finies pour le moment.
Lorsque lon a excut une fois les instructions de boucle, on remonte sur la condition
et on la teste nouveau. Idem, si elle nest pas vrifie, on sort de la boucle et on arrte
dexcuter les instructions de boucle. Sinon, si la condition est vrifie, on excute nouveau les instructions de boucle, toujours dans le mme ordre. Puis on remonte nouveau
sur la condition, que lon teste nouveau, et ainsi de suite jusqu ce que la condition ne
soit plus vrifie.
Le programme excute donc les lignes dinstructions dans cet ordre prcis :
1, 3, 4, 5, 3, 4, 5, . . . 3, 4, 5, 8. Notez bien que la dernire instruction de la boucle while
qui est excute est la condition, puisque cest elle qui dit quand sarrter.
Si jamais on met une mauvaise condition la boucle, on risque soit de ne jamais entrer
dans la boucle :
1
2
3
4
5
6
7
8

$i = 1;
while($i < 0) {
print($i . );
$i++;
}
printline(la valeur de i est . $i);

ce qui affichera :
la valeur de i est 1

soit de ne jamais sortir de la boucle :

2.9. LA BOUCLE DO...WHILE

1
2
3
4
5
6
7
8

37

$i = 1;
while($i > 0) {
print($i . );
$i++;
}
printline(Ceci ne sera jamais affich.);

ce qui crira tous les nombres sans jamais arriver la dernire ligne du programme.

2.8.1

Imbrications

Dans un bloc dinstructions on peut mettre tout ce que lon a vu jusqu maintenant :
des affectations, des conditions, des affichages, des boucles, . . .Donc, tout comme pour le
if, on peut imbriquer des boucles et des conditions if, ou des boucles et des boucles, etc.
Exercice 2 Que fait alors le programme suivant ?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

<?php
function main() {
$x = 1;
while($x <= 1000) {
$n = 1;
while($n <= 5) {
print($x . );
$n++;
}
$x++;
}
}
?>

Remarquez bien que linstruction $n = 1; est place lintrieur de la premire


boucle while, et sera donc excute pour chaque nouvelle valeur de $x.
Si vous avez des difficults voir ce que fait ce programme, prenez un papier et un
crayon et excutez le programme la main (au moins pour les premires valeurs) et notez
chaque instruction les valeurs de $x et $n.

2.9

La boucle do...while

La boucle do...while fait exactement la mme chose que la boucle while, la seule
diffrence que la condition est teste aprs les instructions rptitives :

38

CHAPITRE 2. PROGRAMMATION EN PHP

1 do {
2
instruction
3
instruction
4
...
5 } while(condition);

Attention, cette fois il y a bien un ; la fin du while !


La boucle do...while garantit que lon excutera au moins une fois les instructions
de boucle, ce qui peut tre pratique dans certains cas pour viter de rcrire les instructions
au dessus de la boucle.
Elle nest cependant pas couramment utilise.

2.10

La boucle for

La boucle for nest pas ncessaire en soi, puisque lon pourrait toujours utiliser la
boucle while, mais cest une manire plus pratique et trs courante dcrire certains types
de boucles. Elle est gnralement utilise lorsque lon connat lavance le nombre de fois
o la boucle doit tre excute.
Sa forme gnrale est la suivante :
1 for(initialisation ; condition ; incrmentation) {
2
instruction
3
instruction
4
...
5 }

et elle est strictement quivalente la forme suivante du while :


1 initialisation
2
3 while(condition) {
4
instruction
5
instruction
6
...
7
incrmentation
8 }

Linitialisation et la condition sont donc excutes avant toute excution des instructions rptitives. Lincrmentation, elle, est excute aprs, juste avant de tester nouveau
la condition.
Par exemple, le code prcdent :

2.10. LA BOUCLE FOR

1
2
3
4
5
6
7
8

39

$i = 1;
while($i <= 1000) {
print($i . );
$i++;
}
printline(Fin !);

peut aussi scrire :


1 for($i = 1; $i <= 1000; $i++) {
2
print($i . );
3 }
4
5 printline(Fin !);

Comme pour le if et le while, il ny a pas de ; la fin de la ligne du for. Par contre,


notez bien les deux ; lintrieur des parenthses du for, pour sparer les diffrents types
dinstructions.
Exercice 3 Transformer le programme de lexercice 2 contenant les deux boucles while
en un programme nutilisant que des boucles for.

40

2.11

CHAPITRE 2. PROGRAMMATION EN PHP

Tableaux

Les tableaux sont le dernier lment essentiel des langages de programmation. Ce sont
des genres de variables spciales qui permettent de stocker une suite de variables.
On peut donc les voir comme une suite de cases mmoires, chacune contenant une valeur. Chaque case est associe un indice qui permet daccder la case correspondante.
En PHP comme dans de nombreux langages, le premier indice est 0.
Indice :
0
1 2 3 4 5
6 7 8
9
Valeur : 42 51 84 93 1 77 93 80 56 81
Un tableau, tout comme une variable, peut bien sr contenir autre chose que des valeurs numriques :
Indice :
0
1
2
Valeur : rouge vert bleu
En PHP, pour dclarer un tableau, on utilise le mot clef array.
1 // Dclaration et premier remplissage du tableau :
2 $nombres = array(42, 51, 84, 93, 1, 77, 93, 80, 56, 81);

Les valeurs sont ranges dans lordre o elles sont donnes, et les indices sont mis automatiquement. Le tableau $nombres est aussi une variable, bien quil contienne plusieurs
valeurs, cest pourquoi il est prcd du signe $.
Si plus tard on veut ajouter des valeurs la fin de ce tableau, on peut utiliser la notation
"[]" colle au nom du tableau gauche de laffectation :
1
2
3
4
5
6
7
8

// Dclaration et premier remplissage du tableau :


$couleurs = array(rouge, vert, bleu);
// Ajout de la valeur jaune en fin de tableau :
$couleurs[] = jaune;
// Ajout de la valeur cyan en fin de tableau
$couleurs[] = cyan;

la fin de ce programme, le tableau $nombres contiendra donc les valeurs :


Indice :
0
1
2
3
4
Valeur : rouge vert bleu jaune cyan
Pour accder une case particulire dun tableau, on utilise la mme notation "[]" que
prcdemment, mais cette fois en spcifiant lindice de la case souhaite :
1 $couleurs2 = array(rouge, vert, bleu, jaune, cyan);
2
3 printline($couleurs2[2] . , . $couleurs2[4]);

Ce code affichera donc :


bleu, cyan

2.11. TABLEAUX

41

De la mme manire, on peut modifier le contenu des cases :


1 $couleurs = array(rouge, vert, bleu);
2
3 $couleurs[0] = blanc;
4
5 $couleurs[2] = noir;

la fin de ce programme, le contenu du tableau $couleurs est :


Indice :
0
1
2
Valeur : blanc vert noir

2.11.1

Parcours en boucle

Pour parcourir chacune des cases dun tableau (par exemple pour les afficher ou les
modifier), on utilise une boucle.
1
2
3
4
5
6
7

$couleurs2 = array(rouge, vert, bleu, jaune, cyan);


// Affichage de toutes les valeurs du tableau :
for($indice = 0; $indice < count($couleurs2); $indice++) {
$valeur = $couleurs2[$indice];
printline($valeur . , );
}

o count est une fonction qui retourne le nombre dlments que contient le tableau qui
lui est pass en paramtre. La variable $indice va prendre successivement les valeurs 0,
1, 2. . .jusqu la taille du tableau - 1 ( cause du signe "<" qui fait arrter la boucle ds
que lon a $indice == count($couleurs2)).
Exercice 4 crire une boucle qui ajoute 1 chaque valeur du tableau $nombres.

2.11.2

La boucle foreach

La boucle foreach offre une manire plus pratique pour parcourir un tableau quune
boucle for ou une boucle while. Voici un exemple dutilisation, quivalent au dernier
programme :
1 $couleurs2 = array(rouge, vert, bleu, jaune, cyan);
2
3 foreach($couleurs2 as $valeur) {
4
printline($valeur . , );
5 }

Il signifie quon parcourt le tableau $couleurs avec la (nouvelle) variable $valeur qui
prend successivement toutes les valeurs du tableau chaque itration de la boucle. Il ny
a pas besoin de faire explicitement laffectation suivante :

42

CHAPITRE 2. PROGRAMMATION EN PHP

1 $valeur = $couleurs2[$indice];

car elle est faite implicitement par le foreach.


Attention, supposons que lon veuille mettre toutes les valeurs du tableau blanc ;
on ne peut pas faire, lintrieur de la boucle :
1 $valeur = blanc;

car on ne ferait que modifier la valeur de la variable $valeur sans toucher directement au
contenu du tableau.
Dans ce cas, on peut par contre utiliser une variable qui parcourt les indices du tableau
(0, 1, 2. . .) avec la construction suivante du foreach :
1 $couleurs2 = array(rouge, vert, bleu, jaune, cyan);
2
3 foreach($couleurs2 as $indice => $valeur) {
4
printline(indice : $indice);
5
// Affichage de lancienne valeur dans le tableau :
6
printline(valeur : $valeur);
7
// Modification de cette valeur :
8
$couleurs2[$indice] = blanc;
9 }

2.11.3

Tableaux associatifs

Les prcdents tableaux sont nomms tableaux scalaires, parce quils utilisent des
nombres pour les indices. Il existe une autre forme de tableaux, nomms tableaux associatifs, o les cases mmoires ne sont pas ranges par ordre croissant dindice. On ne
repre donc pas les indices des cases par leur numro, mais par une clef qui est une chane
de caractres. Voici un exemple :
1
2
3
4
5
6
7

$capitales = array();
// Ajout dune nouvelle valeur et de sa clef associe :
$capitales[France] = Paris;
// Idem :
$capitales[R.U.] = Londres;
// Idem :
$capitales[Allemagne] = Berlin;

Ceci produira le tableau $capitales suivant :


Indice : France
R.U.
Allemagne
Valeur :
Paris Londres
Berlin
Les clefs sont ici les pays, au mme titre que les nombres taient les indices pour les
tableaux scalaires. Les valeurs sont les capitales.
On peut crire aussi directement les associations lors de la dclaration de la variable

2.11. TABLEAUX
$capitales

43

comme tableau :

1 $capitales = array( France => Paris,


2
R.U. => Londres,
3
Allemagne => Berlin );

Remarquez lutilisation de la flche =>, qui est exactement la mme que pour le parcours
dans le foreach avec indice et valeur.
Dailleurs, le parcours dun tel tableau se fait logiquement avec la boucle foreach :
1 $capitales = array( France => Paris,
2
R.U. => Londres,
3
Allemagne => Berlin );
4
5 foreach($capitales as $clef => $valeur) {
6
printline(Ville : . $clef . ; Capitale : . $valeur);
7 }

o cette fois les indices sont les clefs. Pour les tableaux associatifs, il est plus courant
dutiliser la forme complte du foreach car on a plus souvent la fois des valeurs et des
clefs associes.

Chapitre 3
Le paquetage AgroSIXPack
3.1

Introduction

Le langage PHP a t initialement conu pour la cration de sites Web, intragissant


pour cela avec le langage HTML (HyperText Markup Language) de description de pages
Web.
Dans ce cours, nous ne souhaitons pas entrer dans les dtails du langage HTML, qui
nest que dun intrt pdagogique relatif.
Cest pourquoi nous avons dvelopp le paquetage AgroSIXPack (pour AgroParisTech Systmes dInformation eXtension Package), qui permet de masquer entirement le
langage HTML et de se concentrer sur la partie PHP.
Sachez nanmoins que HTML existe et que le langage PHP que vous allez voir maintenant est une variante du PHP habituel (de base, pourrait-on dire).
Il existe aussi des Systmes de Gestion de Contenu (Content Management System,
CMS) permettant de crer des sites Web sans relle notion de programmation 1 . Ces CMS
sont trs souvent bass sur un langage de programmation tel que Java ou PHP.
Le paquetage AgroSIXPack est un genre de petit CMS, mais permettant de se focaliser
sur la partie programmation simple sans entrer dans les dtails parfois complexes de la
cration de site Web.

3.2

Fonction principale

Pour utiliser ce paquetage, il faut tlcharger larchive AgroSIXPack.zip (voir le site


web du cours), la dcompresser dans le rpertoire N :\www.
Tout fichier .php excut par AgroSIXPack doit dfinir la fonction main :
1. Enfin, tant que lon se cantonne aux fonctionnalits prvues, car la connaissance de la programmation
(parfois avance !) est trs vite ncessaire ds que lont veut faire des sites un peu particuliers ou plus
volus.

44

3.3. AFFICHAGE

45

1 function : main( $id_formulaire )


2
| $id_formulaire : string

Elle doit prendre en argument la variable $id_formulaire, qui reprsente le $nom du


formulaire qui a envoy les donnes (entrainant lexcution de ce fichier PHP), ou bien
la chane vide si lexcution de ce fichier nest pas due lenvoi de donnes par un
formulaire, par exemple en cliquant sur un lien ou en tapant lURL de la page directement
dans le navigateur. Cet argument peut tre omis sil nest pas utilis.
Cette fonction (et seulement celle-ci) est excute automatiquement par le paquetage
au lancement de la page Web dans le navigateur.
Il faut ensuite ouvrir le fichier AgroSIXPack.php travers le serveur PHP, soit (probablement, selon votre configuration) ladresse http://localhost/www/PHP/
AgroSIXPack.php.
Remarque : Ce chapitre contient de nombreuses signatures de fonction, reportez-vous
lannexe page 86 pour savoir comment les lire.

3.3

Affichage

Attention : Dans tout ce qui suit, il extrmement important de bien faire la distinction
entre affichage dune valeur lcran et renvoi dune valeur par retour dun appel de
fonction. Seul le second cas permet de rcuprer cette valeur pour la rutiliser dans un
calcul ultrieur. Laffichage lcran ne sert rellement qu afficher des informations
lutilisateur, pas plus, et na aucune utilit par rapport au calcul que lon cherche faire.
1 function : print( $val )
2
| $val : any

Cette fonction est une des fonctions de base de PHP, elle permet simplement dafficher
une valeur lcran, que ce soit une chane de caractres ou un nombre, mais pas des
tableaux.
1 function : printline([ $texte ] ) -> string
2
| $texte : string =

Comme print mais passe la ligne ensuite.


1 function : newline() -> string

Renvoient une chane de caractres correspondant un passage la ligne. Cette fonction doit donc tre utilise dans une fonction daffichage telle que print pour que le
passage la ligne soit visible lcran.

46

CHAPITRE 3. LE PAQUETAGE AGROSIXPACK

1 function : afficher_titre( $texte [, $niveau ] )


2
| $texte : string
3
| $niveau : int
= 1

Affiche une chane de caractres $texte avec un titre de niveau $niveau (de 1 6).
1 function : afficher_hrule()

Affiche un ligne horizontale.


1 function : bold( $texte ) -> string
2
| $texte : string

1 function : emph( $texte ) -> string


2
| $texte : string

Renvoie la chane de caractres $texte en gras ou en italique.


1 function : debut_liste([ $nom ] )
2
| $nom : string =

1 function : afficher_liste_item( $texte )


2
| $texte : string

1 function : fin_liste([ $nom ] )


2
| $nom : string =

Affichent une liste ditems. Les listes peuvent tre imbriques pour crer plusieurs
niveaux, mais il doit toujours y avoir le mme nombre dappels debut_liste.
1 function : debut_table([ $nom ] )
2
| $nom : string =

1 function : fin_table([ $nom ] )


2
| $nom : string =

Un appel ces deux fonctions doit encadrer tout affichage de table. Les tables ne
peuvent pas tre imbriques.
1 function : afficher_table_ligne( $ligne )
2
| $ligne : array(string)

Affiche une ligne entire de donnes, partir du tableau $ligne. Un appel cette fonction

3.4. FORMULAIRES : INTERACTION AVEC LUTILISATEUR

47

ne doit pas tre encadr dappels debut_table_ligne et fin_table_ligne.


1 function : afficher_table_entete( $ligne )
2
| $ligne : array(string)

Comme afficher_table_ligne mais pour les enttes des colonnes de la table. Cette
fonction ne peut-tre appele quune seule fois par table, et avant toute autre ligne.
1 function : debut_table_ligne()

1 function : afficher_table_donnee( $data )


2
| $data : string

1 function : fin_table_ligne()

Comme afficher_table_ligne mais dcompos en 3 fonctions. La fonction afficher_table_donnee


doit tre appele autant de fois quil y a de cellules dans un ligne. Un ensemble dappels
doit tre encadr des appels debut_table_ligne et fin_table_ligne.
1 function : afficher_image( $url [, $texte_alt ] )
2
| $url
: string
3
| $texte_alt : string =

Affiche une image. L$url doit tre soit une adresse internet commenant par "http ://",
soit un fichier local dont ladresse est relative au dossier courant. Le texte $texte_alt
est le texte affich lorsque la souris est pose sur limage.
1 function : afficher_lien_interne( $texte , $page )
2
| $texte : string
3
| $page : string

Affiche un lien interne vers une $page PHP relativement au rpertoire courant.
1 function : afficher_lien_externe( $texte , $url )
2
| $texte : string
3
| $url
: string

Affiche un lien vers une URL externe (commenant par "http ://" ou "https ://").

3.4

Formulaires : Interaction avec lutilisateur

Jusque l, tout ce que nous avons vu en PHP ne peut nous servir qu faire du calcul ou
les afficher lcran. Nous allons maintenant voir comment interagir avec lutilisateur,
en lui demandant des valeurs, qui vont donc permettre de faire des calculs diffrents selon

48

CHAPITRE 3. LE PAQUETAGE AGROSIXPACK

les valeurs rcupres.


Pour cela, nous allons utiliser des formulaires. Il sagit dun ensemble doutils permettant lutilisateur de saisir des valeurs ou de faire des choix, que lon pourra prendre
en compte dans les calculs subsquents.
Voici un exemple de formulaire, montrant lutilisation de la plupart des fonctions que
nous allons dcrire par la suite :

Et voici le code PHP correspondant :


1 <?php
2
3 function afficher_liste_et_table() {
4
debut_liste();
5
afficher_liste_item(premier);
6
afficher_liste_item(second);
7
afficher_liste_item(troisime);
8
fin_liste();
9
10
debut_table();
11
afficher_table_ligne( array(a, b, c) );
12
13
afficher_table_ligne( array(1, 2, 3) );
14
15
debut_table_ligne();

3.4. FORMULAIRES : INTERACTION AVEC LUTILISATEUR

49

16
afficher_table_donnee(x);
17
afficher_table_donnee(y);
18
afficher_table_donnee(z);
19
fin_table_ligne();
20
21
fin_table();
22
23 }
24
25 function afficher_formulaire() {
26
debut_formulaire(form1, traitement.php);
27
28
afficher_champ_texte(prenom, Prenom : , John);
29
afficher_champ_texte(nom, Nom : , Arbuckle);
30
31
afficher_champ_paragraphe(para, Texte : , "Bonjour\net
bienvenue", 4, 23);
32
33
debut_select(liste, Choix : );
34
afficher_select_item(premier); // valeur envoye si
choisi : premier
35
afficher_select_item(second, 2); // valeur envoye si
choisi : 2
36
fin_select();
37
38
debut_groupe_checkbox(animaux, Quels animaux possdez-vous ?
);
39
afficher_checkbox_item(chat, Chat);
40
afficher_checkbox_item(chien, Chien, true);
41
afficher_checkbox_item(lapin, Lapin, true);
42
fin_groupe_checkbox(animaux);
43
44
afficher_checkbox(dors, Dors beaucoup ?, true);
45
46
debut_groupe_radio(maradio, Quelle radio coutez-vous?);
47
afficher_radio_item(rfm, RFM, false);
48
afficher_radio_item(frinfo, France Info, false);
49
afficher_radio_item(oui, Ou FM, true);
50
fin_groupe_radio();
51
52
53
fin_formulaire(form1, Envoyer);
54 }
55
56 function main() {
57
afficher_liste_et_table();
58
printline();
59
afficher_formulaire();
60 }
61
62 ?>

50

CHAPITRE 3. LE PAQUETAGE AGROSIXPACK

3.4.1

Cration et affichage de formulaires

Un formulaire doit obligatoirement commencer par un appel la fonction :


1 function : debut_formulaire( $id_form , $page )
2
| $id_form : string
3
| $page
: string

o $id_form est un nom interne du formulaire, et $page est le nom de la page PHP
qui recevra les donnes du formulaire lorsque lutilisateur aura cliqu sur le boutont OK.
Un formulaire doit galement obligatoirement finir par un appel la fonction :
1 function : fin_formulaire( $id_form [, $bouton_ok_str ] )
2
| $id_form
: string
3
| $bouton_ok_str : string = OK

qui ajoute un bouton permettant denvoyer les donnes la page $page qui sera alors
excute. Largument $bouton_ok_str est la chane de caractres affiche sur le bouton
denvoi des donnes. Le nom du formulaire $id_form doit tre le mme que le nom utilis
pour debut_formulaire.
Ces deux appels doivent encadrer tous les composants (voir ci-dessous) de ce formulaire, sans quoi les donnes ne pourront pas tre envoyes.
Composants de formulaires
Un formulaire contient diffrents composants, permettant lutilisateur de saisir des
donnes et de faire des choix.
Tout composant possde un $nom qui permet, lors du traitement des donnes saisies
par lutilisateur, de rcuprer la valeur saisie dans le composant du nom donn (voir
GETref, section 3.4.2).
1 function : afficher_champ_texte( $nom , $texte [, $valeur ] )
2
| $nom
: string
3
| $texte : string
4
| $valeur : string =

Ajoute au formulaire un champ de saisie de texte de nom $nom, prcd par la chane de
caractres $texte. Largument $valeur permet de donner une valeur par dfaut qui sera
affiche dans le champ de saisie.
1 function : afficher_champ_paragraphe( $nom , $texte [, $valeur , $rows
, $cols ] )
2
| $nom
: string
3
| $texte : string
4
| $valeur : int
=
5
| $rows
: int
= 4
6
| $cols
: string = 20

3.4. FORMULAIRES : INTERACTION AVEC LUTILISATEUR

51

Comme afficher_champ_texte, mais permet de saisir plusieurs lignes de texte. Les


arguments $rows et $cols permettent de modifier le nombre de lignes et de colonnes de
la bote de saisie.
1 function : afficher_champ_password( $nom , $texte [, $valeur ] )
2
| $nom
: string
3
| $texte : string
4
| $valeur : string =

Comme afficher_champ_texte mais affiche des * la place des caractres saisis au


clavier.
1 function : afficher_checkbox( $nom , $texte [, $checked ] )
2
| $nom
: string
3
| $texte
: string
4
| $checked : bool
= false

Ajoute au formulaire une case cocher seule, prcde du texte $texte. Largument
dfinit si la case est coche par dfaut.

$checked

1 function : debut_groupe_checkbox( $nom , $texte )


2
| $nom
: string
3
| $texte : string

1 function : afficher_checkbox_item( $nom , $texte [, $checked ] )


2
| $nom
: string
3
| $texte
: string
4
| $checked : bool
= false

1 function : fin_groupe_checkbox([ $nom ] )


2
| $nom : string =

Ajoutent un groupe de cases cocher au formulaire. Le groupe doit commencer par


debut_groupe_checkbox, suivi de plusieurs appels afficher_checkbox_item, et terminer par debut_groupe_checkbox Chaque appel afficher_checkbox_item ajoute
une case cocher au groupe.
Par exemple :
1 debut_groupe_checkbox(animaux, Quels animaux possdez-vous ?);
2
afficher_checkbox_item(chat, Chat);
3
afficher_checkbox_item(chien, Chien, true); // coch par dfaut
4
afficher_checkbox_item(lapin, Lapin, true); // coch par dfaut
5 fin_groupe_checkbox(animaux);

Pour savoir comment les valeur peuvent tre rcupres, voir 3.4.2.

52

CHAPITRE 3. LE PAQUETAGE AGROSIXPACK

1 function : debut_groupe_radio( $nom , $texte )


2
| $nom
: string
3
| $texte : string

1 function : afficher_radio_item( $nom , $texte [, $checked ] )


2
| $nom
: string
3
| $texte
: string
4
| $checked : bool
= false

1 function : fin_groupe_radio([ $nom ] )


2
| $nom : string =

Ajoutent un groupe de boutons radio au formulaire. Le groupe doit commencer par


debut_groupe_radio, suivi de plusieurs appels afficher_radio_item, et terminer
par debut_groupe_radio Chaque appel afficher_radio_item ajoute un bouton radio
au groupe.
Un seul bouton peut tre slectionn dans tout le groupe.
1 function : debut_select( $nom , $texte )
2
| $nom
: string
3
| $texte : string

1 function : afficher_select_item( $texte [, $valeur ] )


2
| $texte : string
3
| $valeur : string = false

1 function : fin_select([ $nom ] )


2
| $nom : string =

Ajoutent une liste droulante au formulaire. La cration de la liste doit commencer par
debut_select, suivi de un ou plusieurs appels afficher_select_item, et terminer
par fin_select. Chaque appel afficher_select_item ajoute un lment la liste.
Largument $valeur permet de dfinir la valeur qui sera envoye si cet lment est le
choix de lutilisateur. Par dfaut cette valeur est la mme que le texte affich $texte.
1 function : ajouter_champ_cache( $nom , $valeur )
2
| $nom
: string
3
| $valeur : string

Ajoute un champ cach au formulaire. Cela permet denvoyer des donnes travers le
formulaire en mme temps que les autres valeurs saisies par lutilisateur, sans rien afficher.

3.4. FORMULAIRES : INTERACTION AVEC LUTILISATEUR

3.4.2

53

Traitement des donnes de formulaire

Lorsque lutilisateur clique sur le bouton Ok dun formulaire affich lcran, cela
demande au serveur PHP dexcuter le fichier PHP donn en paramtres du formulaire.
Ce fichier est (peut-tre nouveau) entirement excut. PHP na pas de mmoire de la
dernire excution, donc les seules valeurs qui changent dune excution lautre dun
fichier PHP sont les valeurs reues dun formulaire.
Pour savoir si lexcution courante du fichier PHP est due lenvoi de donnes dun
formulaire, on peut tester le contenu de la variable $id_formulaire, qui est passe automatiquement en argument de la fonction main :
1 function main($id_formulaire) {
2
if($id_formulaire == nom_du_formulaire) {
3
// ... traitement des donnes du formulaire
4
} else {
5
// ... on nest pas pass par le formulaire
6
}
7 }

La variable $id_formulaire contient le nom du formulaire qui a envoy les donnes,


ou false si on est arriv sur la page courante sans passer par un formulaire. On peut donc
utiliser cette variable pour savoir quelles instructions effectuer.
Rcupration des donnes saisies
Pour rcuprer une donne saisie par lutilisateur dans le formulaire, il faut utiliser la
fonction :
1 function : GETref( $nom ) -> string
2
| $nom : string

qui renvoie la valeur de champ de formulaire de nom $nom. Cette valeur est soit false,
soit une chane de caractres 2 .
Voici un exemple de page PHP affichant un formulaire :
1 <?php
2
3 function afficher_formulaire() {
4
debut_formulaire(form_sport, traitement.php);
5
afficher_champ_texte(sport, Sport favori :);
6
afficher_champ_texte(heures, Nombre d\heures de pratique
par semaine :);
7
fin_formulaire(form_sport);
8 }
9
2. Notez quen PHP, les valeurs 0, et false sont quivalentes vis--vis de loprateur == ; et quune
chane de caractre non-vide est quivalente true pour les tests, par exemple dans les if et while.

54

CHAPITRE 3. LE PAQUETAGE AGROSIXPACK

10 function main() {
11
afficher_formulaire();
12 }
13
14 ?>

Et voici la page qui rceptionne les donnes :


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27

<?php
function traiter_formulaire() {
// Rcupration des donnes saisies dans le formulaire
$sport = GETref(sport);
$heures = GETref(heures);
// Utilisation des donnes
printline(Votre sport est . $sport . que vous pratiquez .
$heures . heures par semaine);
}
function main($id_form) {
if($id_form == form_sport) {
// Si on est arriv sur cette page cause dune pression
// sur le bouton Ok du formulaire form_sport
traiter_formulaire();
} else {
// Sinon on est arriv ici par un autre formulaire
// ou sans formulaire du tout
printline(Vous n\tes pas passs par le formulaire !);
}
}
?>

Rcupration des donnes dune seule checkbox


La fonction GETref sur les checkbox renvoie le texte de la checkbox. Il est prfrable
dutiliser la fonction :
1 function : GETcheckbox( $nom ) -> string
2
| $nom : string

qui renvoie true si la checkbox $nom a t coche, false sinon.

3.5. SESSIONS

55

Rcupration des donnes dun groupe checkbox


Pour rcuprer les donnes dun groupe checkbox, il faut aussi utiliser GETref, ce
qui renvoie un tableau associatif, o chaque clef est une des cases coches par lutilisateur. Il ny a donc pas de clef pour les cases non-coches. Pour savoir si une clef existe
dans le tableau, utiliser la fonction array_key_exists (voir A.2.6 ainsi quun exemple
dutilisation en section 3.5).
Auto-validation de formulaire
Il est tout fait possible de faire traiter le formulaire par la page qui a envoy les
donnes. Dans ce cas, il faut bien avoir lesprit que les donnes ne seront traites qu
la prochaine excution du formulaire.
Voir lexemple complet en section 4.3.
Redirection de page
Si lon souhaite rediriger lutilisateur vers une autre page PHP, on peut utiliser la
fonction :
1 function : redirection( $page )
2
| $page : string

o $page est le nom du fichier PHP relativement au rpertoire courant.


Attention, aucun affichage ne doit avoir t fait au moment o cette fonction est
excute.

3.5

Sessions

Lorsque PHP passe dune page lautre, il ne mmorise pas les valeurs des variables,
il repart toujours de zro. Pour pouvoir conserver des donnes dune page lautre, on
peut utiliser des champs cachs dans des formulaires, mais cela devient rapidement peu
pratique quand le nombre de valeurs mmoriser augmente.
Le mcanisme adapt pour ce type de mmorisation est celui des sessions.
La session est simplement un tableau associatif $_SESSION[], o lon peut associer
des clefs des valeurs mmoriser.
Par exemple, pour mmoriser la valeur 12 pour la clef age, il suffit de faire :
1 $_SESSION[age] = 12;

Pour savoir si une clef existe dans la session, on peut utiliser array_key_exists.
Voici le programme "compteur.php" qui permet de compter le nombre de fois o la
page a t excute :

56

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32

CHAPITRE 3. LE PAQUETAGE AGROSIXPACK

<?php
function main() {
// Si la clef compteur existe dj dans la mmoire
// de la session
if(array_key_exists(compteur, $_SESSION)) {
// alors rcuprer sa valeur dans la variable $compteur
$compteur = $_SESSION[compteur];
} else {
// La clef compteur nexiste pas dans la session
// On donne donc une valeur initiale
$compteur = 0;
}
// Augmenter la valeur du compteur
$compteur++;
// Affichage
printline(Nombre d\excutions de la page : . $compteur);
// Si on clique sur le lien suivant, cela excute nouveau la page
// et incrmente donc le compteur
afficher_lien_interne(Recharger la page, compteur.php);
// Mmoriser la nouvelle valeur du compteur
// pour lexcution suivante.
// Si ce nest la premire fois que la page est excute,
// cela remplace lancienne valeur
$_SESSION[compteur] = $compteur;
}
?>

3.6

Modification du style

Il est possible dajouter une feuille de style avec la fonction :


1 function : ajouter_feuille_css( $feuille )
2
| $feuille : string

o $feuille est le nom du fichier CSS relativement au rpertoire courant.


Pour appliquer un style particulier une section daffichage, on peut utiliser les fonctions :
1 function : debut( $style )
2
| $style : string

3.6. MODIFICATION DU STYLE

57

et :
1 function : fin([ $style ] )
2
| $style : string =

o $style est une classe CSS (sans le "." la prcdant) dfinie dans une feuille de style
utilise par le fichier PHP courant.

3.6.1

Style agro par dfaut

Pour avoir une mise en page simple mais plus agrable quune page blanche, un style
agro vous est fourni.
Pour vous en servir, il vous suffit dinclure le fichier en tte de votre fichier PHP par
la ligne :
1 include(../agro/agro-inc.php);

et de renommer votre fonction main en agro_main :


1
2
3
4
5
6
7

<?php
include(../agro/agro-inc.php) ;
function agro_main($id_formulaire) {
printline(Bienvenue sur mon site web !) ;
}
?>

Le titre de la page peut-tre modifi en redfinissant, lextrieur de toute fonction,


la variable globale $SI_titre_page.

Chapitre 4
PHP/MySQL
En PHP, il est trs simple dexcuter des requtes SQL.
Dans un mme script PHP, lutilisation de MySQL se fait en 4 temps :
tablissement dune connexion gnrale MySQL avec mysql_connect
Slection dune base de donnes avec mysql_select_db
Excution des diffrentes requtes et traitement des rponses
Fermeture de la connexion avec mysql_close

4.1

Connexion la base de donnes

La fonction :
1 function : mysql_connect( $server , $username , $password )
2
| $server
: string
3
| $username : string
4
| $password : string

permet dtablir une connexion au serveur MySQL. Cest ce serveur qui fait linterface
entre PHP et la base de donnes. Il est donc ncessaire dtablir cette connexion.
Lorsque la base de donnes est utilise en local, cest--dire que le mme ordinateur
sert la fois de serveur PHP et de serveur MySQL (ce qui sera le cas pour vous), on utilise
gnralement cette fonction de cette manire :
1 mysql_connect(localhost, root, mysql) ;

ou parfois :
1 mysql_connect(localhost, root, ) ;

selon la configuration du serveur MySQL.


La fonction :
58

4.1. CONNEXION LA BASE DE DONNES

59

1 function : mysql_select_db( $database_name )


2
| $database_name : string

permet de slectionner la base de donnes $database_name.

4.1.1

Excution de requtes SQL

La fonction :
1 function : mysql_query( $requete ) -> resource
2
| $requete : string

demande au serveur MySQL dexcuter la requte SQL $requete et renvoie son rsultat
sous forme dune ressource.
Cette fonction ne fait cependant pas de vrification sur la requte en cas derreur. Pour
cela, une fonction de remplacement vous est fournie dans le paquetage AgroSIXPack :
1 function : mysql_query_debug( $requete ) -> resource
2
| $requete : string

qui fait la mme chose que mysql_query mais affiche des messages derreur plus informatifs lorsque lexcution de la requte na pas fonctionn.
Le paquetage AgroSIXPack fournit aussi la fonction :
1 function : mysql_query_affiche( $requete ) -> resource
2
| $requete : string

qui fait la mme chose que mysql_query_debug mais affiche en plus lcran la chane
de caractres correspondant la requte excuter.
Ceci est trs pratique pour visualiser rapidement do vient lerreur, et permet aussi
de tester la requte par un copier/coller dans phpMyAdmin.
Vous devez donc utiliser mysql_query_affiche pour tester vos requtes, et une
fois que vous tes assurs quelles fonctionnent correctement, vous pouvez utiliser
mysql_query_debug pour viter laffichage.

4.1.2

Requtes de type SELECT

Pour les requtes de type SELECT, il faut voir la ressource retourne comme une table
rsultat SQL, y compris lorsque lon sait quune seule valeur est retourne !
Attention, ces ressources ne sont pas des tableaux PHP ; il faut utiliser des fonctions
particulires pour en extraire le contenu.
Pour lire le contenu de cette ressource donc, il faut parcourir la table rsultat ligne par
ligne, grce la fonction :

60

CHAPITRE 4. PHP/MYSQL

1 function : mysql_fetch_assoc( $res ) -> array


2
| $res : resource

qui prend en argument une resource rcupre dun appel prcdent mysql_query, et
qui renvoie un tableau associatif PHP correspondant la prochaine ligne de la table SQL
rsultat.
Sil ny a pas de prochaine ligne dans le tableau, mysql_fetch_assoc renvoie false.
Les clefs ou index du tableau sont les noms des colonnes de la table rsultat demands dans le SELECT, et les valeurs associes sont celles qui correspondent dans la table
rsultat.
Exemple dutilisation :
1
2
3
4
5
6

$res = mysql_query_debug(SELECT prenom, nom FROM personnes);


$ligne1 = mysql_fetch_assoc(res);
if($ligne1) {
printline(prenom = . $ligne1[prenom] .
nom =
. $ligne1[nom]) ;
}

Ici, si on ne passe pas dans le if, cela signifie que $ligne1 est faux, ce qui signifie
que la requte a renvoy une table avec 0 ligne, donc aucun rsultat. Sinon, lappel
mysql_fetch_assoc($res) permet de rcuprer la premire ligne de la table rsultat,
que lon demande ensuite dafficher.
Notez que dans lexemple prcdent, on ne sest intress qu la premire ligne du
rsultat, et les autres lignes nont pas t traites.
Pour traiter toutes les lignes de la mme manire, on utilise gnralement une boucle
while :
1 $res = mysql_query_debug(SELECT prenom, nom FROM personnes);
2 while($ligne = mysql_fetch_assoc(res)) {
3
printline(prenom = . $ligne[prenom] .
4
nom =
. $ligne[nom]) ;
5 }

Cet exemple-ci affiche donc tous les rsultats de la requte. Notez que cette fois-ci,
laffectation de $ligne est fait dans le test de la boucle while, ce qui a pour effet la fois
de modifier la valeur de $ligne, et de tester que cette nouvelle valeur nest pas false,
sinon on arrte la boucle car il ny a plus de ligne traiter.

4.1.3

Autres types requtes

Pour les autres types de requtes (UPDATE, INSERT INTO, DELETE, etc.), la ressource renvoye est true ou false selon que la requte a pu tre excute ou non.

4.2. FERMETURE DE LA CONNEXION LA BASE

4.1.4

61

chappement des apostrophes

Dans une requte SQL, les valeurs sont encadres par des apostrophes simples :
1 SELECT * FROM personnes WHERE nom=Dupondt

Mais si la valeur contient elle-mme une apostrophe, il est ncessaire de lchapper, cest-dire de faire comprendre au langage quil ne sagit pas de la fin de la chane de caractres, mais bien dune caractre lintrieur de la chane, en faisant prcder lapostrophe
par un antislash \ :
1 SELECT * FROM personnes WHERE nom=l\Autre

En PHP, de telles valeurs proviennent gnralement dun formulaire, cest--dire


quelles sont donnes par lutilisateur. Il devient alors ncessaire dutiliser une mthode
gnrale pour chapper automatiquement les apostrophes. Pour cela, on utilise la fonction
mysql_real_escape_string :
1 $nom = ...;
2 // la variable $nom contient une chane quelconque
3 $res = mysql_query_affiche(SELECT * FROM personnes WHERE nom=\.
mysql_real_escape_string($nom).\);
4 ...

Lutilisation de cette fonction est primordiale, car elle empche aussi un utilisateur
malveillant de pouvoir faire des injections SQL, cest--dire de pouvoir faire des requtes
non-autorises sur votre base de donnes, ce qui pourrait, par exemple, lui donner accs
au mots de passes de tous les utilisateurs, ou lui permettre deffacer entirement la base.
Notez quil faut cependant chapper les apostrophes encadrant la valeur. Pour viter
cela, on peut aussi utiliser des apostrophes doubles pour les valeurs MySQL :
1 $nom = ...;
2 // la variable $nom contient une chane quelconque
3 $res = mysql_query_affiche(SELECT * FROM personnes WHERE nom=".
mysql_real_escape_string($nom).");
4 ...

4.2

Fermeture de la connexion la base

Une fois que toutes les requtes ont t traites (et pas avant !), il faut fermer la
connexion par un appel la fonction :
1 function : mysql_close()

62

CHAPITRE 4. PHP/MYSQL

4.3

Exemple complet

En considrant que lon a cr une base de donnes nomme "simpsons", possdant


une table "personnes" ayant une colonne "prenom" et une colonne "nom", le fichier PHP
suivant permet de demander un nom de famille lutilisateur et lui affiche en retour la
liste des personnages possdant ce nom.
Contenu du fichier "ex-mysql.php" :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42

<?php
function afficher_formulaire() {
// Cration du formulaire
debut_formulaire(form_nom, ex-mysql.php);
// Ajout dun champ texte de nom nom
afficher_champ_texte(nom, Nom : );
fin_formulaire(form_nom);
}
function afficher_prenoms($nom) {
// Cration de la requte partir du texte saisi par lutilisateur
// Utiliser mysql_real_escape_string !
$requete = SELECT prenom, nom FROM personnages WHERE nom LIKE \%
. mysql_real_escape_string($nom) . %\;
// Afficher la requte lcran, puis lexcuter et
// rcuprer la table SQL rsultat
$res = mysql_query_affiche($requete);
// Afficher le rsultats dans une liste
debut_liste();
// parcourir la table SQL rsultat, ligne par ligne :
while($ligne = mysql_fetch_assoc($res)) {
afficher_liste_item($ligne[prenom]. .$ligne[nom]);
}
fin_liste();
}
function main($id_formulaire) {
// Attention : cette fonction nest pas "bloquante",
// Elle nattend pas que lutilisateur ait entr des valeurs
// pour pouvoir continuer le programme.
afficher_formulaire();
// la place, le programme *affiche* le formulaire puis
// passe ce qui suit.

4.4. POUR ALLER PLUS LOIN


43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66 }
67 ?>

4.4

63

// Il faudra attendre la *prochaine* excution de ce fichier pour


// traiter les donnes de lutilisateur.
// Traitement des donnes reues :
if($id_formulaire == form_nom) {
// Rcupration du texte inscrit dans le champ nom
// par lutilisateur lexcution *prcdente*
// de ce fichier
$nom = GETref(nom);
// Ouverture de la connexion au serveur MySQL
mysql_connect(localhost, root, mysql);
// Selection de la base de donnes
mysql_select_db(simpsons);
// Appel la fonction daffichage des prnoms
afficher_prenoms($nom);
// fermeture de la connexion la base
mysql_close();
}

Pour aller plus loin

Pour des informations plus compltes sur les fonctions MySQL en PHP, vous pouvez
consulter la page web : http://www.php.net/manual/fr/ref.mysql.php.

Chapitre 5
Travaux Dirigs PHP

64

65

TD 1 : Variables et fonctions
Pour effectuer ces exercices, vous devez avoir lu les pages 8 34 avant
de venir en TD.
En premier lieu, il vous faut rcuprer larchive zip des exercices de PHP. Vous la
trouverez ladresse suivante :
http://www.agroparistech.fr/Systeme-d-Information.html
Il est important de respecter la lettre la marche suivre que voici : Dplacez larchive dans votre rpertoire N :\www. Cliquez dessus avec le bouton droit de la souris et
choisissez "Dcompresser ici".
Ceci doit vous crer larborescence suivante :

N :\www
BD
...
PHP
TD1
TD2
...
Chaque TD a donc son propre rpertoire, et pour aujourdhui tous les exercices se
trouvent dans TD1.

Exercice 1 : Premiers pas


Votre premier programme en PHP.
Commencez par lancer EasyPHP partir du menu dmarrer. Ouvrez ensuite Notepad++ partir du menu dmarrer. Puis, dans Notepad++, ouvrez le fichier :
N :\www\PHP\TD1\exo1.php
Compltez la fonction main avec le code PHP suivant :
1 printline(Bonjour le monde !);

Noubliez pas de sauvegarder votre fichier, sinon les changements ne seront pas pris en
compte.
Tapez ensuite ladresse suivante dans votre navigateur :
http://localhost/www/PHP/AgroSIXPack.php
puis choisissez le fichier "exo1.php" dans le rpertoire "TD1". Ceci a pour effet dexcuter
le fichier "exo1.php" dans le navigateur.
Remarque : Si par la suite vous faites des changements au fichier "exo1.php", il vous
suffira dans le navigateur de cliquer sur "Actualiser" ou "Rafraichir la page" ou bien dap-

66

CHAPITRE 5. TRAVAUX DIRIGS PHP

puyer sur la touche F5 pour recharger le fichier sans avoir retaper ladresse URL.

Exercice 2 : Variables
Ouvrez le fichier N :\www\PHP\TD1\exo2.php dans Notepad++.
Compltez-le de manire afficher :
Valeur de var1 : 5
Valeur de var2 : 12

sous la contrainte que les seules oprations que vous avez le droit de faire sont :
Additionner, soustraire, multiplier, diviser les variables dj donnes,
Modifier la valeur des variables donnes.
De plus, vous navez pas le droit dutiliser dautres nombres que ceux dj donns et vous
ne pouvez effectuer que 3 oprations arithmtiques (+, -, *, /).

Exercice 3 : Correction derreurs


Excutez le fichier N :\www\PHP\TD1\exo3.php dans le navigateur.
Chaque fonction (hormis la fonction main) comporte une et une seule erreur. son
excution, PHP vous indique que ce fichier est incorrect, et vous fournit un message
davertissement.
Question 1 :
Pour chaque erreur que vous rencontrez, lisez-bien le message qui vous est donn.
PHP vous y indique notamment le numro de la ligne de votre fichier o se trouve lerreur. Lerreur relle se trouve gnralement soit sur cette ligne, soit sur linstruction la
prcdant.
Corrigez les 3 erreurs du fichier et vrifiez que son excution se passe correctement.
Les messages sont en anglais, mais que cela ne vous empche pas dessayer de les
comprendre. Si vous apprenez comprendre les messages derreurs, cela vous fera gagner
de nombreuses minutes plus tard !
Remarque : Vous navez que 3 caractres ajouter et un seul modifier pour que le fichier soit correct. Vous ne devez videmment pas supprimer dinstructions...

Exercice 4 : Fonction de concatnation de chanes de caractres


Question 1 :
Dans le fichier N :\www\PHP\TD1\exo4.php, crivez la fonction entourer dont
voici la signature (voir page 86) :

67

1 function : entourer( $chaine1 , $chaine2 ) -> string


2
| $chaine1 : string
3
| $chaine2 : string

Qui prend en argument 2 chanes de caractres et qui retourne la chane $chaine1 entoure gauche et droite par la chane $chaine2.
Une fois la fonction crite, excutez le fichier "exo4.php" pour vrifier quil est correct. Vous devez obtenir exactement :
Voici le dilemme : tre ou ne pas tre

Remarque : Vous ne devez pas modifier la fonction principale.

Exercice 5 : Abstraction
Ouvrez le fichier N :\www\PHP\TD1\exo5.php.
Question 1 :
Modifiez la fonction main pour lui faire afficher le rsultat suivant :
Je pense
Tu penses
Il/elle/on pense
Nous pensons
Vous pensez
Ils/elles pensent

Trouvez un autre exemple avec un second verbe du premier groupe, et appliquez la


mthode de labstraction (cf. 2.7.6) sur ces deux exemples pour obtenir au final une fonction suffisamment gnrale pour traiter diffrents verbes du premier groupe.

Exercice 6 : Variables locales


Ouvrez le fichier N :\www\PHP\TD1\var-locales.php.
Les comportements que vous allez observer sur les variables sont des notions trs
importantes de programmation. Ils sont propres de nombreux langages, il est important
de bien les comprendre.
Question 1 :
Dans la fonction main, aprs laffectation des variables, ajoutez laffichage de leur
valeur par :

68

CHAPITRE 5. TRAVAUX DIRIGS PHP

1 printline(a = . $a . b = . $b) ;

Et excutez ce fichier pour visualiser le rsultat.


Question 2 :
Juste en dessous de ce que vous venez dcrire, ajoutez lappel suivant la fonction
fun1 :
1 fun1($a);

Excutez le fichier et vrifiez si ce qui est affich correspond bien votre intuition.
Question 3 :
Ajoutez encore en-dessous un nouvel affichage :
1 printline(a = . $a . b = . $b) ;

nouveau, vrifiez que le rsultat est bien conforme votre intuition. Consultez la
section 2.7.4 dans le cas contraire.
Question 4 :
Ajoutez enfin :
1 fun1($b);
2
3 printline(a = . $a . b = . $b) ;

et vrifiez une dernire fois que vous avez bien compris comment fonctionnent les
variables locales.

Exercice 7 : Multilinguisme
Ouvrez le fichier "langues.php" (et non "langues-form.php") dans Notepad++ et excutez-le dans le navigateur.
Vous tes automatiquement redirig vers un formulaire de choix de langues. Lorsque
vous appuyez sur le bouton "Ok", ceci a pour effet dexcuter le fichier "langues.php"
en lui envoyant des valeurs, que vous pouvez rcuprer grce GETcheckbox dans la
fonction traiter_formulaire, qui sera excute automatiquement (car appele dans la
fonction main).
Vous navez pas besoin de modifier la fonction main.

69
Question 1 :
Sur le modle qui vous est donn, dans la fonction compter_langues, rcuprez les
valeurs des choix de lutilisateur pour les autres langues, et affichez les valeurs reues
pour vrifier quelles sont correctes.
Remarque : En PHP, la chane de caractres vide , le 0 et false sont semblables, de
mme que 1 et true sont semblables.

Question 2 :
Modifiez la fonction compter_langues pour compter le nombre de langues parles
par lutilisateur.
Dans la fonction traiter_formulaire, faites un appel la fonction compter_langues
et rcuprez la valeur de retour dans une variable $nb_langues. Ajoutez-y enfin un affichage, par exemple :
Vous parlez 2 langue(s).

Question 3 :
Modifiez la fonction traiter_formulaire pour afficher lune des phrases suivantes
en fonction du nombre de langues parles : "Vous ne parlez aucune langue, jai du mal
y croire." ou bien "Vous ne savez parler quune seule langue, cest peu...", ou bien "Vous
tes dans la moyenne." (pour 2 ou 3 langues parles), ou bien "Impressionnant." (pour 4
langues parles).
Question 4 :
Supprimez les affichages dans la fonction compter_langues : ils ntaient destins
qu titre informatif et les fonctions qui retournent des valeurs ne doivent en gnral pas
faire daffichage.
Modifiez le code crit la question prcdente de manire nutiliser quun seul et
unique printline, qui doit tre dans votre fonction traiter_formulaire.

70

CHAPITRE 5. TRAVAUX DIRIGS PHP

TD 2 : Boucles et tableaux
Pour effectuer ces exercices, vous devez avoir lu les pages 35 42 avant
de venir en TD.
Tous les exercices de ce TD se trouvent dans votre rpertoire N :\www\PHP\TD2.
Remarque : Dans ce TD, nous voyons les boucles, vous ne devez donc pas numrer
les diffrents cas possibles un par un ; il faut chercher faire des solutions gnrales, qui
fonctionnent quelque soit le nombre de traitements individuels faire.

Exercice 1 : 99 Bouteilles de bire


La chanson "99 bottles of beer" est un chant traditionnel amricain. Nous allons le
programmer lorsque le nombre de bouteilles initial est donn par lutilisateur.

Question 1 :
Modifiez la fonction traiter_formulaire dans le fichier "bouteilles.php" pour lui
faire afficher le rsultat suivant, ici dans le cas o le nombre de bouteilles entr est 3 :
3 bottles of beer on the wall, 3 bottles of beer.
Take one down, pass it around, 2 bottles of beer on the wall.
2 bottles of beer on the wall, 2 bottles of beer.
Take one down, pass it around, 1 bottles of beer on the wall.
1 bottles of beer on the wall, 1 bottles of beer.
Take one down, pass it around, 0 bottles of beer on the wall.
No more bottles of beer on the wall, got to the store and buy some more.

Remarque : Il nest pas ncessaire de traiter les cas particuliers des singuliers pour 0 et
1 (mais vous pouvez le faire si cela vous trouble...).

Exercice 2 : Triangle
Ouvrez le fichier "triangle.php".
Dans cet exercice, vous devez dessiner un triangle dont la longueur de la base est
donne par lutilisateur dans le formulaire.
Par exemple, pour une base de taille 6, vous devez obtenir le rsultat suivant :

71

*
**
***
****
*****
******

Appliquez la mthode diviser pour rsoudre (cf. section 2.7.7) pour rsoudre ce problme.
Votre code correspondant la cration du triangle ne doit pas se trouver dans la
fonction traiter_formulaire. Cette fonction doit seulement rcuprer un triangle sous
forme de chane de caractres par un appel votre fonction et lafficher lcran (donc
vos fonctions additionnelles ne doivent pas faire daffichage).

Exercice 3 : Jeux de mots


Ouvrez le fichier "phrases.php". Lobjectif de cet exercice est de crer alatoirement
des phrases relativement simples.
Question 1 :
Crez la fonction main. Cette fonction ne devra contenir que des appels de test aux
fonctions que vous allez dfinir. Votre code correspondant aux noncs des questions
devra tre mis dans des fonctions diffrentes.
Ajoutez un affichage de test tel que printline(Dans le main); pour vrifier que
votre programme sexcute correctement. Retirez-le (ou mettez-le en commentaire) une
fois le test pass.
Question 2 : Cration des tableaux
Crez une fonction :
1 function : afficher_phrase()

qui ne prend aucun argument.


Dans cette fonction, crez 2 tableaux qui contiendront des chanes de caractres :
Crez un premier tableau nomm $objets contenant 3 prnoms ainsi que 3 objets
avec leur article (une clef, le mouton, etc.).
Crez un tableau nomm $verbes contenant 4 verbes transitifs directs, conjugus la
3me personne du singulier (par exemple pousse) 1 .
1. Vous pouvez utiliser des verbes transitifs indirects condition de les faire suivre dune prposition,
par exemple pose sur.

72

CHAPITRE 5. TRAVAUX DIRIGS PHP

Rappel : Un verbe transitif direct est un verbe qui accepte un complment dobjet direct,
comme prendre, draciner, etc.
Excutez votre programme pour vrifier que vous navez pas fait derreur de syntaxe.
Question 3 : Choix dun lment
Faites une fonction :
1 function : choix_element( $tableau ) -> string
2
| $tableau : array(string)

qui prend en paramtre un tableau de chanes de caractres et qui renvoie un lment pris
au hasard dans ce tableau.
Vous utiliserez la fonction rand :
1 function : rand( $min , $max ) -> int
2
| $min : int
3
| $max : int

qui retourne un nombre entre les valeurs $min et $max incluses.


Rappel : le premier indice dun tableau est le 0.
Rappel : la fonction count permet de connatre le nombre dlments dun tableau.
Faites quelques tests avec cette fontion et les tableaux prcdents pour vrifier quelle
fonctionne correctement.
Question 4 :
Faites une fonction :
1 function : creer_phrase( $tab_objets , $tab_verbes ) -> string
2
| $tab_objets : array(string)
3
| $tab_verbes : array(string)

qui prend en argument un tableau dobjets et un tableau de verbes conjugus et qui, en


utilisant la fonction de la question prcdente, renvoie une phrase cre alatoirement.
Une phrase est compose dun sujet, dun verbe et dun complment dobjet. Par
exemple :
Pierre questionne un canap

Remarque : creer_phrase ne doit rien afficher, mais doit retourner une valeur.

73
Dans la fonction afficher_phrase, faites un appel la fonction creer_phrase et
faites-lui afficher la phrase ainsi obtenue.
Question 5 : Compositions
crivez une fonction :
1 function : creer_proposition( $tab_objets , $tab_verbes ) -> string
2
| $tab_objets : array(string)
3
| $tab_verbes : array(string)

qui prend en argument un tableau dobjets et un tableau de verbes conjugus et qui renvoie
une proposition subordonne alatoire commenant par qui .... Par exemple :
qui pose un mouton

Modifiez la fonction crer_phrase qui doit maintenant appeler creer_proposition


pour renvoyer une phrase comportant un nombre alatoire de propositions compris entre
0 et 4.
Remarque : Ici, vous devez utiliser une boucle.
Modifiez la fonction creer_phrase prcdente pour lui faire crire une phrase compose dun nombre alatoire (entre 1 et 5) de propositions adjointes par la prposition
"qui". Par exemple :
Pierre questionne un canap qui pousse Jacques qui tapotte un ocan

Exercice 4 : Vente en ligne


Ouvrez le fichier "articles.php".
Dans le formulaire de "vente en ligne", lutilisateur doit saisir 5 articles et leur prix.
Dans votre fichier "articles.php", dans la fonction traiter_formulaire, vous rcuprez
deux variables $articles et $prix, qui sont des tableaux scalaires.
Question 1 :
Dans la fonction traiter_formulaire, utilisez la fonction print_r pour afficher le
contenu des deux tableaux.
Question 2 :
Faites une fonction :

74

CHAPITRE 5. TRAVAUX DIRIGS PHP

1 function : prix_total( $tab_prix ) -> real


2
| $tab_prix : array(real)

qui retourne le total des prix contenus dans le tableau $tab_prix pass en argument.

Question 3 :
crivez une fonction :
1 function : afficher_ticket( $tab_articles , $tab_prix )
2
| $tab_articles : array(string)
3
| $tab_prix
: array(real)

permettant de rcapituler les informations saisies sous une forme plus agrable que le
print_r qui ne fait quun affichage trs sommaire dun tableau. Affichez en dessous le
prix total calcul.
Voici un exemple dune partie de laffichage de la table :
Article : Prix
-------------Pommes : 1.20
Yaourts : 2.49
Chocolat : 48.15
...
-------------Total : 125.77

Remplacez vos utilisations du print_r par un appel la fonction afficher_ticket.


Remarque : Ne cherchez par aligner les " :".
Remarque : Le total affich doit videmment tre un appel la fonction prix_total
dfinie plus haut.

Question 4 :
Faites une fonction :
1 function : article_plus_cher( $tab_prix ) -> string
2
| $tab_prix : array(real)

qui retourne lindice de larticle le plus cher que vous avez achet.
Modifiez la fonction afficher_ticket pour lui faire afficher aussi larticle le plus
cher avec son prix :

75

Article : Prix
-------------Pommes : 1.20
Yaourts : 2.49
Chocolat : 48.15
...
-------------Total : 125.77
Article le plus cher :
Chocolat : 48.15

76

CHAPITRE 5. TRAVAUX DIRIGS PHP

TD 3 : Tableaux et formulaires
Pour effectuer ces exercices, vous devez avoir lu les pages 42 55 avant
de venir en TD.

Exercice 1 : Formulaires
Nous allons commencer par crer un formulaire simple pour comprendre comment
les informations sont passes dune page PHP lautre.
Question 1 :
Dans le fichier "exo1-formulaire.php", crez la fonction main, insrez-y un affichage
quelconque pour vrifier que votre programme minimaliste peut-tre excut.
Question 2 :
Crez une fonction :
1 function : afficher_formulaire()

qui affiche un formulaire avec un champ texte de nom prenom demandant le prnom de
lutilisateur.
Excutez le fichier, puis validez le formulaire. Ceci vous amne sur la page "exo1traitement.php" et vous affiche un message derreur, puisque nous navons pas encore
rempli ce fichier.
Question 3 :
Dans le fichier "exo1-traitement.php", crez la fonction main vide :
1 function : main( $id_formulaire )
2
| $id_formulaire : string

Elle doit prendre en argument la variable $id_formulaire, qui reprsente le nom du


formulaire qui a envoy les donnes (entrainant lexcution de ce fichier PHP), ou bien
la chane vide si lexcution de ce fichier nest pas due lenvoi de donnes par un
formulaire.
Question 4 :
Crez ensuite la fonction :

77

1 function : traiter_formulaire()

et ajoutez-y un affichage de test dans la fonction traiter_formulaire, tel que :


1 printline(Dans traiter_formulaire());

Faites un appel cette fonction dans le main.


Excutez le fichier "exo1-traitement.php". Vous devez voir laffichage de votre texte
de test.
Excutez aussi le fichier "exo1-formulaire.php". Validez le formulaire : vous devez
arriver sur la page "exo1-traitement.php" qui doit alors afficher aussi le message de test.
Question 5 :
Dans le fichier "exo1-traitement.php", modifiez la fonction main pour :
Afficher le message de test uniquement si lon valide le formulaire de la page "exo1formulaire.php",
Afficher un message tel que Dsol, vous devez passer par le formulaire
si lutilisateur a excut le fichier "exo1-traitement.php" directement.
Vous pouvez ajouter un lien interne (avec afficher_lien_interne) pour rediriger
lutilisateur vers la page du formulaire. Alternativement, vous pouvez utiliser la fonction
redirection pour effectuer une redirection automatique.
Question 6 :
Nous allons maintenant rcuprer les donnes que lutilisateur saisit dans le formulaire. Pour cela, modifiez la fonction traiter_formulaire pour rcuprer le prnom
saisi par lutilisateur grce un appel la fonction GETref.
Affichez le rcapitulatif des informations saisies :
Prnom : Albert.

Question 7 :
Dans le formulaire, ajoutez un groupe radio pour demander le sexe H/F de lutilisateur.
Dans le traitement du formulaire, ajoutez la rcupration des donnes du formulaire
pour ce nouveau champ. Modifiez le rcapitulatif des informations saisies par lutilisateur
en consquence.
Question 8 :
Dans le formulaire, ajoutez une liste de choix (composant select) du style musical,
dans laquelle vous ajoutez un certain nombre de styles musicaux selon vos gots.

78

CHAPITRE 5. TRAVAUX DIRIGS PHP

Modifiez le traitement du formulaire en consquence, ainsi que le rcapitulatif des


informations saisies.
Question 9 :
Ajoutez enfin une checkbox demandant lutilisateur sil est lui-mme musicien, et
modifiez le traitement du formulaire en consquence.

Exercice 2 : Formulaire auto-valid


Nous voulons faire un formulaire demandant lutilisateur une taille de squence
ADN gnrer alatoirement, ainsi quune sous-squence chercher dans cette squence.
Question 1 :
Dans le fichier "auto-form.php", crez la fonction main :
1 function : main( $id_formulaire )
2
| $id_formulaire : string

Elle doit prendre en argument une variable $id_formulaire.


Question 2 :
Crez une fonction :
1 function : generer_ADN( $taille ) -> array(string)
2
| $taille : int

qui renvoie une squence ADN de taille $taille sous forme dun tableau de caratres
(chaque case doit tre un acide amin A, C, T ou G).
Testez votre fonction pour vrifier quelle fonctionne correctement.
Question 3 :
Crez une fonction :
1 function : chercher_TTT( $adn ) -> bool
2
| $adn : array(string)

qui cherche la chane TTT dans lADN pass en argument, et renvoie true si elle le
trouve, false sinon.
Testez votre fonction pour vrifier quelle fonctionne correctement.

79
Question 4 :
Crez une fonction
1 function : afficher_formulaire()

ainsi quune fonction


1 function : traiter_formulaire()

Le formulaire doit envoyer ses donnes la mme page "auto-form.php". Il vous faut
alors traiter correctement les diffrents cas dans la fonction main, qui doit prendre en
argument la variable $id_formulaire, selon la manire dont la page est excute (soit
parce que lutilisateur a appuy sur Envoyer dans le formulaire, auquel cas la variable
$id_formulaire a comme valeur le nom de votre formulaire, soit parce que la page a t
appele directement sans passer par un formulaire, auquel cas la variable $id_formulaire
a comme valeur la chane vide).
Question 5 :
Remplissez la fonction traiter_formulaire pour gnrer la squence ADN en fonction de la taille saisie par lutilisateur.
Question 6 : Validation des donnes
Dans le cas o les donnes saisies par lutilisateur ne sont pas correctes, vous devez
afficher un message derreur linvitant saisir nouveau ses donnes, et donc afficher
aussi le formulaire. Si toutes les donnes sont correctes, le formulaire ne doit pas tre
affich.
Indication : votre fonction traiter_formulaire devrait maintenant retourner un boolen qui vaut true si les informations saisies sont correctes, ou false sinon. Ce que
lon doit faire ensuite dans le cas false doit alors se trouver en dehors de la fonction
traiter_formulaire.
Vous pouvez utiliser la fonction :
1 function : is_numeric( $v ) -> bool
2
| $v : any

qui renvoie true si $v est un nombre.

80

CHAPITRE 5. TRAVAUX DIRIGS PHP

TD 4 : Sessions et tableaux associatifs


Pour effectuer ces exercices, vous devez avoir lu les pages 55 57 avant
de venir en TD.

Exercice 1 : Compteur
Copiez le code du programme "compteur" (section 3.5) dans le fichier "compteur.php"
et testez-le.
Question 1 :
Modifiez le programme pour que lorsque le compteur atteint 10, on appelle la fonction
session_unset(), juste avant laccolade fermante du main.
Excutez plusieurs fois la page. Quel leffet de cette modification ?

Exercice 2 : Labyrinthe
Lobjectif de cet exercice est de crer un mini-jeu o lon doit amener le joueur vers
un but travers un labyrinthe.
Nhsitez pas ajouter des fonctions intermdiaires selon vos besoins ! Et mme
modifier votre code aprs coup pour le rendre plus simple en ajoutant des fonctions.
Question 1 :
Ouvrez le fichier "labyrinthe.php". Ajoutez-y une fonction main, prenant en argument
un $id_formulaire.
Question 2 :
Une matrice est un tableau PHP o chaque case contient elle-mme un tableau PHP.
Dans le main, dfinissez la matrice $mat1 suivante :
1 $mat1 = array( array(a, b, c, d),
2
array(1, 2, 3, 4),
3
array(w, x, y, z) );

Crez une fonction :


1 function : afficher_labyrinthe( $matrice )
2
| $matrice : array(array(string))

qui prend en argument une matrice et laffiche lcran. Utilisez pour cela les fonctions
daffichage de table PHP (voir les fonctions debut_table et autres). Pour largument

81
de debut_table, donnez le nom laby la table : ceci permettra davoir un affichage automatiquement correctement format.
Testez dans le main laffichage de la matrice $mat1.
Vrifiez bien que les lignes et les colonnes ne sont pas transposes.
$nom

Question 3 :
Crez une fonction :
1 function : creer_matrice( $nb_lignes , $nb_colonnes ) -> array(array(
string))
2
| $nb_lignes
: int
3
| $nb_colonnes : int

qui cre un tableau de $nb_lignes cases, dont chaque case contient elle-mme un tableau
de $nb_colonnes cases. Chaque case doit contenir le symbole X (nous le changerons
plus tard).
Remarque : Vous aurez besoin de 2 boucles imbriques, ou bien vous pouvez dcomposer le problme en faisant dabord une sous-fonction affichant uniquement une ligne.
Dans le main,
creer_matrice, et

crez une matrice de 10 lignes et 5 colonnes avec la fonction


affichez l avec la fonction afficher_labyrinthe. (Vous pouvez
maintenant supprimer laffichage de $mat1.)

Question 4 :
Modifiez la fonction creer_matrice pour que seules les cases du bord aient la valeur
X (pour un mur), les autres devant avoir la valeur .
Testez votre fonction.
Question 5 :
Pour viter de crer une nouvelle matrice chaque excution de la page PHP, il nous
faut la sauvegarder dans une session (voir la section 3.5).
Dans le main, ajoutez une nouvelle matrice dans la session si aucune ny existe dj ;
puis rcuprez la matrice stocke dans la session pour lafficher.
Excutez plusieurs fois la page PHP pour vrifier que la matrice nest bien cre
quune seule fois (dans le navigateur, appuyez plusieurs fois sur F5 ou rafraichissez la
page).
Question 6 :
Nous allons maintenant avoir besoin de boutons daction. Un bouton daction est simplement un formulaire sans autre composant que le bouton denvoi des donnes.

82

CHAPITRE 5. TRAVAUX DIRIGS PHP

Comme nous allons avoir besoin de plusieurs boutons, commencez par crer une fonction :
1 function : afficher_bouton( $nom , $texte )
2
| $nom
: string
3
| $texte : string

qui affiche un formulaire de nom $nom et de texte de bouton denvoi $texte (rfrez-vous
la documentation de afficher_formulaire si ncessaire).
Faites maintenant une fonction :
1 function : afficher_boutons()

qui affiche un bouton de nom recommencer et de texte Recommencer.


Enfin, dans le main, si $id_bouton a la valeur recommencer, remplacez la matrice
stocke en session par une autre matrice nouvellement cre.
Dornavant, si vous cliquez sur le bouton, cela doit afficher une nouvelle matrice, mais
si vous rafraichissez la page, la matrice ne doit pas changer.
Question 7 :
Nous allons maintenant ajouter un joueur qui pourra se dplacer dans le labyrinthe.
Le joueur est dfini par sa position (ligne, colonne), quil faut sauver dans la session.
Faites les modifications ncessaires dans votre programme pour :
Crer les positions initiales du joueur (par exemple en 1, 1) si elles nexistent pas
dans la session et les y sauver,
Modifier laffichage de la matrice pour afficher le joueur au bon endroit.
Le joueur sera reprsent par O.
Question 8 :
Ajoutez un bouton Droite (de nom droite) dans la fonction afficher_boutons.
Faites ensuite une fonction :
1 function : bouger( $direction , $ligne , $colonne , $matrice )
2
| $direction : string
3
| $ligne
: int
4
| $colonne
: int
5
| $matrice
: array(array(string))

qui prend en argument une direction (droite, gauche, haut ou bas), la position courante du joueur et la matrice, et qui modifie dans la session la position du joueur en
fonction de la direction donne.
Dans un premier temps, ne faites que la direction droite, puis une fois que cela fonctionne, ajoutez les autres directions (et les boutons associs). Vous aurez modifier certaines autres fonctions, notamment le main.

83
Question 9 :
Ajoutez alatoirement des murs au milieu du labyrinthe. Un clic sur Recommencer
doit remettre le joueur en position initial (1, 1) et modifier la disposition des murs.
Question 10 :
Modifiez votre programme pour ajouter une case spciale * dans la matrice. Lorsque
le joueur atteint cette case, affichez un message de victoire.
Question 11 : Bonus
Ajoutez un adversaire automatique qui se dirige vers le joueur. Sil lattrape avant que
le joueur atteigne ltoile, le joueur a perdu.

84

CHAPITRE 5. TRAVAUX DIRIGS PHP

TD 5 : PHP/MySQL
Pour effectuer ces exercices, vous devez avoir lu les pages 58 63 avant
de venir en TD.

Exercice 1 : Les Simpson


Importez la base de donnes "simpsons.sql".
Il y a 4 pages PHP, numrotes par ordre dutilisation. Chaque page doit renvoyer la
suivante et la dernire doit afficher un lien de retour vers la premire.
Sur la premire page doit tre affiche une liste des noms de familles existants (sans
doublon) dans la base.
La validation de ce formulaire renvoie "page2.php" qui doit proposer une liste des
prnoms possibles pour le nom choisi.
Ce qui renvoie la page 3, o lon demande dcrire un commentaire sur le personnage choisi.
La validation de ce dernier formulaire renvoie alors la page 4, o tous les commentaires du personnage selectionn doivent tre affichs dans une liste ditems.
Question 1 :
Ralisez les pages les unes aprs les autres.
Vous devrez crez la table commentaires avec la structure qui convient.
Question 2 :
Veillez ce que si lutilisateur excute une des pages directement (sans passer par un
formulaire), il soit redirig vers "page1.php".
Question 3 :
Dans le mme rpertoire, crez un nouveau fichier "tout.php" dans lequel vous devez
faire la mme chose que ci-dessus, mais dans un seul et unique fichier.
Identifiez enfin les morceaux de code qui se ressemblent beaucoup de manire et crez
des abstractions (fonctions, boucles, etc.) permettant de diminuer au maximum les redondances de code.
Choisissez des noms clairs pour vos fonctions et documentez-les (types des arguments
et de la valeur de retour, petite phrase dexmplication).

85

TD 6 : PHP/MySQL, Modlisation
Exercice 1 : Rseau social
Le but de cet exercice est de crer un mini rseau social, o chaque personne inscrite
peut voir, ajouter, supprimer des amis, o lon peut aussi ajouter et supprimer des inscrits.
Question 1 : Base de donnes
Commencez par crer la base de donnes permettant de modliser le problme.
Rflchissez bien la modlisation de manire ce que votre base de donnes ne
contienne aucune redondance dinformation.
Puis ajoutez quelques enregistrements pour pouvoir tester des requtes.
Question 2 :
Commencez par faire une page permettant de voir les amis dune personne choisie
dans un formulaire.
Question 3 :
Faites ensuite les autres pages permettant de :
Ajouter une nouvelle personne dans la base (un nouvel inscrit),
Ajouter, une personne inscrite, un ami parmi les personnes inscrites qui ne sont
pas encore ses amis,
Supprimer un ami (pas la personne inscrite, mais le lien damiti),
Supprimer une personne (ce qui doit entrainer la suppression de tous ses amis !)
Veillez bien grer les cas particuliers et les erreurs possibles de lutilisateur (ami
inexistant ? Personne non-inscrite ? etc.).
Question 4 : Connexion
On aimerait maintenant pouvoir se "connecter" au site de manire ce que toutes
les requtes soient relatives la personne connecte, sans quelle ait besoin dentrer son
nom chaque fois. Seule la personne connecte peut sajouter ou supprimer des amis, ou
supprimer son compte.
Modifiez votre programme en consquence. Vous aurez notamment besoin pour cela
de mmoriser la personne connecte dans une session.

Annexe A
PHP : Addendum
A.1

Signatures de fonctions

Une signature de fonction permet de dcrire les formats (types) dentre et sortie de
la fonction, ce qui donne une information prcieuse sur ce que fait la fonction.
Il ne sagit pas de code PHP, cest uniquement une description.
Prenons lexemple suivant :
1 function : creer_cercle( $x , $y , $ray [, $epais , $coul ] ) -> cercle
2
| $x
: int
3
| $y
: int
4
| $ray
: int
5
| $epais : int
= 1
6
| $coul : string = vert

Comment lire cette signature ?


Tout dabord il y a le nom de la fonction : creer_cercle.
Dans les parenthses qui suivent, il y a les arguments de la fonction, cest--dire ce
que prend la fonction en entre, lors dun appel cette fonction.
Ceux qui sont entre les crochets sont des arguments optionnels, cest--dire que si on
ne les fournit pas lors dun appel la fonction creer_cercle, ils prendront une valeur par
dfaut (dfinie en dessous). Il y a donc ici 2 arguments optionnels : lpaisseur $epais et
la couleur $coul.
la fin de la ligne, derrire le ->, il y a le type de retour de la fonction, cest--dire le
genre de valeur que la fonction renvoie lorsquelle est appele. En loccurrence, il sagit
du type cercle, ce qui signifie que lon fait lappel suivant :
1 $x = cercle(100, 100, 5, 1, bleu);

aprs lexcution de cette instruction, la variable $x contient un cercle, ou plus exactement


une certaine description dun cercle, que lon pourra utiliser ensuite dans dautres calculs
(par exemple pour transformer le cercle ou lafficher). Ceci signifie que le cercle nest pas
86

A.2. QUELQUES FONCTIONS ET STRUCTURES SUPPLMENTAIRES

87

directement affich lcran, mais quil est stock dans $x.


Sil ny a pas de type de retour, cela signifie que la fonction nutilise pas linstruction
return, comme cest souvent le cas avec les fonctions daffichage.
En dessous de la premire ligne de la signature de la fonction, il y a une description
de chacun des arguments, avec leur type, ainsi que leur valeur par dfaut sil sagit dun
argument optionnel.
Par exemple, lappel suivant :
1 $x = cercle(100, 100, 5);

est quivalent lappel :


1 $x = cercle(100, 100, 5, 1, vert);

Il est possible de ne donner que certains des arguments optionels, mais ceux-ci doivent
tre les premiers dans lordre des arguments. Par exemple :
1 $x = cercle(100, 100, 5, 2);

donne une valeur pour largument $epaisseur, mais laisse la valeur par dfaut de $couleur
.

A.2

Quelques fonctions et structures supplmentaires

Il existe de nombreuses fonctions en PHP, et vous pouvez y accder partir des URL
fournies dans lannexe C. En voici quelques-unes qui peuvent vous tre utiles.

A.2.1

print_r

La fonction print_r($mon_tableau) permet dafficher lcran le contenu du tableau pass en paramtre.


En effet :
1 $tableau = array(oui, non, peut-tre);
2 printline($tableau);

afficherait uniquement :
Array

ce qui nest pas trs informatif...


Alors que :

88

ANNEXE A. PHP : ADDENDUM

1 $tableau = array(oui, non, peut-tre);


2 print_r($tableau);

affiche :
Array ( [0] => oui [1] => non [2] => peut-tre )

A.2.2

rand

La fonction rand :
1 function : rand( $min , $max ) -> int
2
| $min : int
3
| $max : int

retourne un nombre entier entre les valeurs $min et $max incluses.

A.2.3

include

Linstruction include(mon-fichier.php); permet dinsrer lendroit courant


dans le fichier courant le contenu du fichier "mon-fichier.php".
Ceci est trs pratique, notamment si lon crit des fonctions qui peuvent servir dans
plusieurs fichiers.

A.2.4

break

Linstruction break; permet de terminer prmaturment lexcution dune boucle.


Elle ne peut exister qu lintrieur dune boucle.

A.2.5

isset

La fonction :
1 function : isset( $x ) -> bool
2
| $x : var

renvoie true si la variable $x possde une valeur.

A.2.6

array_key_exists

La fonction :

A.3. CHANES DE CARACTRES

89

1 function : array_key_exists( $clef , $tableau ) -> bool


2
| $clef
: string
3
| $tableau : array

renvoie true si la clef $clef existe dans le tableau $tableau.

A.2.7

unset

La fonction :
1 function : unset( $x )
2
| $x : var

permet de supprimer la variable $x, de sorte que isset($x) retourne false.

A.3

Chanes de caractres

Une chane de caractres est une suite de symboles qui sera interprte par le programme comme du texte et non comme des commandes. Par exemple :
1 $texte = printline("Bonjour !");;

ne fera que donner la valeur printline("Bonjour !"); la variable $texte et ncrira


pas lcran "Bonjour !". Si par la suite on fait printline($texte);, on affichera
lcran :
printline("Bonjour !");

A.3.1

Comparaison de chanes de caractres

On peut tester si deux chanes de caractres contiennent la mme valeur avec loprateur "==".

A.3.2

Guillemets simples et doubles, chappement de guillemet

Les guillemets doubles sont identiques aux guillemets simples la diffrence quils
permettent de transformer les variables (et uniquement les variables simples, pas les indices dans les tableaux comme $_GET[prenom]) en leur valeur. Par exemple :
1 printline("la valeur de x est $x.");

est quivalent :

90

ANNEXE A. PHP : ADDENDUM

1 printline(la valeur de x est . $x . .);

ce qui peut tre trs pratique dans la majorit des cas, mais ncessite parfois de faire
attention quelques piges.
Pour afficher une apostrophe dans des guillements simples, on la prcde du symbole
"\". On appelle cela de la dspcialisation (car lapostrophe a un rle spcial dans une
chaine entre guillements simples, rle quon lui te ainsi) :
1 Quelqu\un a dit un jour : " l\origine de toute erreur attribue l
\ordinateur, vous trouverez au moins deux erreurs humaines. Dont
celle consistant attribuer l\erreur l\ordinateur"

Idem dans une chane de caractres entre guillements doubles :


1 "Dave Small a dit : \"Un langage de programmation est une convention
pour donner des ordres un ordinateur. Ce nest pas cens tre
obscur, bizarre et plein de piges subtils. Ca, ce sont les
caractristiques de la magie.\""

Il ny a pas besoin de dspcialiser les guillemets simples dans une chane de caractres
entre guillemets doubles et vice et versa.

A.4

Variables globales

Bien quil soit recommand dutiliser le minimum de variables globales possibles et


dutiliser au maximum le passage de valeur en paramtre des fonctions, il reste possible
dutiliser des variables globales, cest--dire quelles conserve leur valeur au travers des
diffrentes fonctions (mais au contraire des sessions, elles perdent leur valeur la prochaine excution du fichier).
En fait, toute variable peut tre utilise de manire globale. Il faut pour cela dclarer
cette variable comme globale dans toute fonction lutilisant :

A.5. GESTION DES ERREURS

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

91

<?php
function test_global() {
global $x, $y;
$y = 10;
printline($x);
}
function main() {
global $x, $y;
$y = 3;
$x = 5;
test_global();
printline($y);
}
?>

Ce programme affichera bien 5 et 10, alors que sans le mot clef global, PHP aurait
dabord affich une erreur :
Notice: Undefined variable: x in test.php on line 6

pour signaler que la variable $x nest pas dfinie, puis il affiche la valeur initiale de $y,
soit 3.
Plus que toute autre, une variable globale doit avoir un nom clair.
Il existe des variables particulires, dites super globales, comme les tableaux du type
$_SESSION[], qui restent globaux par dfaut, sans avoir besoin de prciser global.
La non-globalit est le comportement par dfaut depuis la version 4.2.0 de PHP. Cependant, ceci peut varier selon la configuration et la version des serveurs Apache sur
lequel est excut le programme PHP.

A.5

Gestion des erreurs

Lerreur la plus courante que vous verrez sera probablement :


Parse error: parse error, expecting , or ; in
c:\\mon_repertoire\\monfichier.php on line 6

Petite explication :
Parse error:

signifie que PHP a dtect une erreur au moment de la lecture de votre fichier,

92

ANNEXE A. PHP : ADDENDUM

expecting , or ;

signifie quil manque une virgule ou un point-virgule,


in c:\\mon_repertoire\\monfichier.php

dans le fichier "mon_fichier.php",


Parse error: parse error, expecting , or ; in
c:\\mon_repertoire\\monfichier.php on line 6

au moment o PHP a atteint la ligne 6. Cela signifie que lerreur se trouve sur la dernire
instruction prcdant la ligne 6. Il suffit probablement dajouter un point-virgule la fin
de la prcdente instruction pour rsoudre lerreur.

Annexe B
Indentation en PHP
Lindentation est le fait de dcaler les lignes de plusieurs espaces vers la droite pour
rendre le programme plus lisible. On parle aussi de tabuler une ligne, cest--dire le fait
de la dcaler vers la droite dune tabulation, un appui sur la touche "tabulation".
Imaginez un roman o tous les mots seraient colls les uns aux autres. Cela donnerait
la mme difficult de lecture quun programme non indent.
Voici un exemple de code non indent :
1
2
3
4
5
6
7
8
9
10
11

if($x==a) {
$sortie = b;
if($y==c) {
print(d);
} else {
$z = e;
}
} else {
print(f);
$sortie = g;
}

Ce qui est trs peu lisible, et encore cest un petit programme.


Voici le code prcdent indent :
1 if($x==a) {
2
$sortie = b;
3
if($y==c) {
4
print(d);
5
} else {
6
$z = e;
7
}
8 } else {
9
print(f);
10
$sortie = g;
11 }

93

94

ANNEXE B. INDENTATION EN PHP

Le sens du programme apparait tout de suite beaucoup plus nettement. Moins defforts
sont ncessaires pour le comprendre.
Dans de nombreux diteurs de textes, tel Notepad++, il est possible de slectionner
plusieurs lignes et dappuyer sur (Shift-) "tabulation" pour les dcaler dune tabulation
vers la droite (gauche).
Il ne faut pas non plus hsiter sauter une ligne pour rendre la lecture du programme
plus facile. Et surtout : mettre des commentaires tout au long du programme pour expliquer ce quil fait !

Annexe C
Ressources et aide en ligne
Il existe de trs nombreuses ressources sur PHP, HTML, CSS, MySQL. Une simple
recherche Google vous donnera dans les premiers rsultats des pointeurs souvent pertinents.
Si vous connaissez le nom dune fonction PHP mais que vous ne savez pas comment
lutiliser, le mieux est de faire une recherche Google du genre "php strpos" si vous cherchez de laide sur la fonction "strpos". Vous aurez tout ce dont vous avez besoin ds les
premiers rsultats.
Apprenez tre autonome ! Apprenez utiliser par vous-mme les moteurs de recherche, ce sont de puissants outils, et pas uniquement pour la programmation, mais dans
tout domaine 1 .
Le site officiel franais du PHP est :
http://fr2.php.net/manual/fr/
Il est parfaitement complet, en franais et didactique. Veuillez vous y rfrer pour tout
information complmentaire sur PHP.
Voici quelques tutoriels en franais de PHP en ligne :
Commentcamarche : http://www.commentcamarche.net/contents/php/
phpintro.php3
Site du Zro : http://www.siteduzero.com/tutoriel-3-14668-unsite-dynamique-avec-php.html
Manuels PHP : http://www.manuelphp.com/manuels

1. Attention toutefois bien vrifier vos sources et les croiser si besoin. Google et Wikipedia sont loin
dtre infaillibles !

95

Annexe D
Utiliser Notepad++, PHP et MySQL
chez vous
Cette annexe a pour but de vous permettre dutiliser chez vous les outils du cours.

D.1

diteur de texte : Notepad++

Tout diteur de texte (y compris le Bloc Notes de Windows, bien quil soit peu pratique) peut tre utilis pour crire du HTML ou du PHP.
Notepad++ est un diteur de texte plus pratique et possdant de nombreuses fonctionnalits. Il fournit entre autres la coloration syntaxique (les mots clefs sont en couleurs).
Vous pouvez le tlcharger :
http://sourceforge.net/projects/notepad-plus/files/notepad%2B%
2B%20releases%20binary/npp%205.4.5%20bin/npp.5.4.5.Installer.
exe/download

D.2

Navigateur : Firefox

Il vous faut un navigateur pour obtenir un rendu visuel du code HTML et pour faire
linterface avec le serveur Apache. Tout bon navigateur fera laffaire (par exemple Internet
explorer ou Firefox, avec une prfrence pour ce dernier pour ses fonctionnalits et la
qualit de son rendu).

D.3

Serveur Apache/Base de donnes : EasyPHP

Pour le serveur Apache, qui sert transformer les pages PHP en fichiers HTML et
faire le lien avec le navigateur, ainsi que pour la liaison avec une base de donnes, il est
recommand dutiliser EasyPHP, qui intgre tous ces outils.
96

D.4. PAQUETAGE AGROSIXPACK

97

Vous pouvez le tlcharger :


http://www.easyphp.org/
XAMPP est un logiciel similaire EasyPHP qui peut tre install pour Windows, Linux ou Macintosh :
http://www.apachefriends.org/fr/xampp.html

D.3.1

Configuration dEasyPHP

Pour utiliser correctement EsayPHP comme dans lenvironnement de travail de cours,


vous devez dabord crer un rpertoire de travail, disons "www", quelque part sur votre
disque dur, peu importe, disons dans "Documents". Vous pouvez alors y crer la mme
arborescence des rpertoires quen cours :

Documents
www
BD
...
PHP
TD1
TD2
...
Lancez ensuite EasyPHP. Tout en bas droite de Windows, ct de lhorloge, vous
devez avoir un petit "e" pour EasyPHP. Cliquez dessus avec le bouton droit de la souris.
Un menu apparait, choisissez "Administration". Ceci doit ouvrir une fentre dans votre
navigateur Web. Dans la rubrique "Apache", sous-rubrique "Alias", cliquez sur "ajouter".
Dans le champ 2, crivez "www" (sans les guillemets).
Dans le champ 3, entrez le chemin daccs complet au rpertoire "www" que vous
avez cr, par exemple C :\Users\orseau\Documents\www.
Cliquez sur OK.
Maintenant, tant que EasyPHP est lanc, vous pouvez utiliser votre ordinateur de la
mme manire quen cours.

D.4

Paquetage AgroSIXPack

Vous pouvez rcuprer le paquetage AgroSIXPack sur le site Web du cours. Il faut
linstaller dans le rpertoire que vous avez ajout comme alias Apache (cf. D.3.1).
Vos fichiers PHP doivent ncessairement se trouver dans un sous-rpertoire du rpertoire contenant le fichier AgroSIXPack.php.

Index
PHP
Affichage
afficher_champ_paragraphe,
49, 50
afficher_champ_password, 51
afficher_champ_texte, 4951,
53, 62
afficher_checkbox_item, 49,
51
afficher_checkbox, 49, 51
afficher_hrule, 46
afficher_image, 47
afficher_lien_externe, 47
afficher_lien_interne, 47, 56,
77
afficher_liste_item, 46, 48,
62
afficher_radio_item, 49, 52
afficher_select_item, 49, 52
afficher_table_donnee, 4749
afficher_table_entete, 47
afficher_table_ligne, 4648
afficher_titre, 46
ajouter_champ_cache, 52
bold, 46
debut_formulaire, 49, 50, 53,
62
debut_groupe_checkbox, 49, 51
debut_groupe_radio, 49, 52
debut_liste, 46, 48, 62
debut_select, 49, 52
debut_table_ligne, 47, 48
debut_table, 46, 48, 80, 81
debut, 56
emph, 46
98

fin_formulaire, 49, 50, 53, 62


fin_groupe_checkbox, 49, 51
fin_groupe_radio, 49, 52
fin_liste, 46, 48, 62
fin_select, 49, 52
fin_table_ligne, 47, 49
fin_table, 46, 49
fin, 57
newline, 12, 45
print_r, 73, 74, 87, 88
printline, 9, 10, 1219, 21, 23
26, 28, 3137, 3943, 45, 49, 54,
56, 57, 60, 65, 68, 69, 71, 77, 87,
8991
print, 10, 27, 28, 3537, 39, 45, 93
Gnral
GETcheckbox, 54, 68
GETref, 50, 5355, 63, 77
agro_main, 57
and, 19
array_key_exists, 55, 56, 89
array, 4043, 4648, 60, 7274, 78,
8082, 8789
break, 88
count, 41, 72
do, 37, 38
elseif, 17
else, 1618, 53, 54, 56, 93
false, 11, 16, 18, 19, 36, 49, 5154,
60, 69, 78, 79, 89
foreach, 4143
for, 38, 39, 41
function, 9, 10, 13, 20, 21, 23, 24,
28, 3033, 37, 4562, 67, 7174,
7682, 86, 88, 89, 91

INDEX
global, 91
if, 1619, 35, 37, 39, 53, 54, 56, 60,
63, 93
include, 57, 88
isset, 88, 89
main, 9, 10, 13, 2124, 28, 32, 33,
37, 44, 45, 49, 53, 54, 56, 57, 62,
6568, 71, 7682, 91
or, 19
rand, 72, 88
redirection, 55, 77
return, 2024, 28, 33, 87
true, 11, 16, 18, 19, 36, 49, 51, 53,
54, 60, 69, 78, 79, 88, 89
unset, 89
while, 3539, 41, 53, 60, 62
xor, 19
MySQL
mysql_close, 58, 61, 63
mysql_connect, 58, 63
mysql_fetch_assoc, 60, 62
mysql_query_affiche, 59, 61,
62
mysql_query_debug, 59, 60
mysql_query, 59, 60
mysql_real_escape_string, 61,
62
mysql_select_db, 58, 59, 63
Operateurs
Oprateurs daffectation, 14
Oprateurs de comparaison, 18
Oprateurs logiques, 19

99