Académique Documents
Professionnel Documents
Culture Documents
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
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
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
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
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
95
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
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 !);
}
?>
10
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
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
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
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);
$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
2.3. VARIABLES
13
1 $x = 23;
2 $n = 42;
3 $y = $n*5+3+$x;
$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.
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
2.3.4
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 !
$nom = Jean;
$nom .= -Sbastien;
$nom .= Bach;
printline(Votre nom : . $nom);
affichera :
Votre nom : Jean-Sbastien Bach
2.3.5
15
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
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
...
$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
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
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
$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);
suprieur x);
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 }
18
1
2
3
4
5
6
7
8
9
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);
}
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
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)
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 }
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".
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
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
22
$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);
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);
Lexpression droite du = tant un nombre, elle peut maintenant tre affecte la va-
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
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
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
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);
}
?>
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.
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
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
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
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
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.
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
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) );
}
?>
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
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
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
31
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
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
<?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
}
?>
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.
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;
}
...
?>
<?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 ?>
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
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
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 }
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
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
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++;
}
}
?>
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
1 do {
2
instruction
3
instruction
4
...
5 } while(condition);
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 }
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 :
1
2
3
4
5
6
7
8
39
$i = 1;
while($i <= 1000) {
print($i . );
$i++;
}
printline(Fin !);
40
2.11
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
2.11. TABLEAUX
41
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
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
1 $valeur = $couleurs2[$indice];
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;
2.11. TABLEAUX
$capitales
43
comme tableau :
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
3.2
Fonction principale
44
3.3. AFFICHAGE
45
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 =
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
Affiche une chane de caractres $texte avec un titre de niveau $niveau (de 1 6).
1 function : afficher_hrule()
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 =
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
47
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 : fin_table_ligne()
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
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
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
3.4.1
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
51
Ajoute au formulaire une case cocher seule, prcde du texte $texte. Largument
dfinit si la case est coche par dfaut.
$checked
Pour savoir comment les valeur peuvent tre rcupres, voir 3.4.2.
52
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.2
53
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 }
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
10 function main() {
11
afficher_formulaire();
12 }
13
14 ?>
<?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 !);
}
}
?>
3.5. SESSIONS
55
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
<?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
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
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);
<?php
include(../agro/agro-inc.php) ;
function agro_main($id_formulaire) {
printline(Bienvenue sur mon site web !) ;
}
?>
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
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, ) ;
59
4.1.1
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
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
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
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
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.1.4
61
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
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
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
<?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
63
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.
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
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 (+, -, *, /).
67
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
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
68
1 printline(a = . $a . b = . $b) ;
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
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.
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).
72
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
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
74
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
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
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
77
1 function : traiter_formulaire()
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
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()
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
80
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) );
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
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
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 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
TD 5 : PHP/MySQL
Pour effectuer ces exercices, vous devez avoir lu les pages 58 63 avant
de venir en TD.
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
87
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
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
afficherait uniquement :
Array
88
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
A.2.3
include
A.2.4
break
A.2.5
isset
La fonction :
1 function : isset( $x ) -> bool
2
| $x : var
A.2.6
array_key_exists
La fonction :
89
A.2.7
unset
La fonction :
1 function : unset( $x )
2
| $x : var
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 !");;
A.3.1
On peut tester si deux chanes de caractres contiennent la mme valeur avec loprateur "==".
A.3.2
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
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"
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
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
Petite explication :
Parse error:
signifie que PHP a dtect une erreur au moment de la lecture de votre fichier,
92
expecting , or ;
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;
}
93
94
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
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
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
97
D.3.1
Configuration dEasyPHP
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
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