Professional Documents
Culture Documents
Facult des Sciences et Techniques Fs Dpartement de Gnie Industriel Master Sciences et Techniques en Gnie Industriel Professeur : F. Kaghat
PHP 5
Introduction :
Lenvironnement PHP/MySQL (Prsentation)
Langage de script Open Source, spcialement conu pour le dveloppement d'applications Web. Il peut tre intgr facilement au HTML.
PHP est un langage interprt (un langage de script) excut du ct serveur (comme les scripts CGI, ASP, ...) et non du ct client (un script crit en Javascript ou une applet Java s'excute sur votre ordinateur...). La syntaxe du langage provient de celles du langage C, du Perl et de Java.
Dpartement de Gnie Industriel
PHP est ce qu'on appelle un langage SERVER SIDE, ou ct serveur . Le visiteur du site (on l'appellera le CLIENT) demande voir une page php : cette requte parvient au serveur hbergeant le site, qui va l'interprter avec les paramtres ventuellement demands dans la requte, et renverra le RESULTAT de la requte au client. Premier avantage : les sources PHP sont protges car elles ne transitent jamais sur le Web. Second avantage : les performances du code sont indpendantes de la configuration de la machine ou des logiciels du client, et il n'est pas besoin de logiciel ou de module particulier install chez lui.
Dpartement de Gnie Industriel 6
Modle
requte Client internet rponse
appel de la page
Serveur
extraction de donnes
Script PHP
excution
Document Html
7
Histoire et origine
Il a t cr en 1994 par Rasmus Lerdorf pour les besoins des pages Web personnelles (livre d'or, compteurs, etc.). A l'poque, PHP signifiait Personnal Home Page. En 1997, PHP devient un projet collectif et son interprteur est rcrit par Zeev Suraski et Andi Gutmans pour donner la version 3 qui s'appelle dsormais PHP : Hypertext Preprocessor 2000 : PHP 4
Dpartement de Gnie Industriel 8
Histoire et origine
2004 : version 5.0.0 30-juin-2009 : PHP 5.3.0 PHP 5 amliore l'orientation objet de PHP.
Quelques dfinitions
SGBD: La gestion de la base de donnes se fait grce un systme appel SGBD (systme de gestion de bases de donnes). Le SGBD est un ensemble de services (applications logicielles) permettant de grer les bases de donnes, c'est--dire: Prendre connaissance des donnes. Manipuler les donnes prsentes dans la base de donnes (insertion, suppression, modification.). MySQL, Oracle sont des SGBD.
Dpartement de Gnie Industriel 10
Quelques dfinitions
MySQL C'est un Systme de Gestion de Bases de Donnes (SGBD) fonctionnant sous Linux et Windows. Depuis la version 3.23.19, MySQL est sous Licence GPL (aussi bien sous Linux que Windows), ce qui signifie qu'il peut tre utilis gratuitement.
11
La gratuit et la disponibilit du code source (PHP est distribu sous licence GNU GPL) ; La possibilit d'inclure le script PHP au sein d'une page HTML (contrairement aux scripts CGI, pour lesquels il faut crire des lignes de code pour afficher chaque ligne en langage HTML) ; La simplicit d'interfaage avec des bases de donnes (de nombreux SGBD sont supports, mais le plus utilis avec ce langage est MySQL). L'intgration au sein de nombreux serveurs Web (Apache, Microsoft IIS, etc.).
Dpartement de Gnie Industriel 12
Une des grandes forces de PHP est le support de nombreuses bases de donnes. Les bases de donnes suivantes sont toutes supportes par PHP :
Adabas D dBase Empress FilePro (lecture seule) Hyperwave IBM DB2 Informix Ingres InterBase FrontBase mSQL Direct MSSQL
MySQL
ODBC Oracle (OCI7 et OCI8) Ovrimos PostgreSQL SQLite Solid Sybase Velocis Unix dbm
13
MySQL: prsentation
C'est en fait un serveur MySQL, un ensemble de programmes ayant pour tche d'administrer les bases de donnes, il manipule les instructions adresses la BD. Exemple: cration et gestion de bases, de tables. Le dialogue avec une base de donnes s'effectue en envoyant des messages au serveur de BD (ici MySQL). Le langage utilis pour ce faire sera, en ce qui nous concerne PHP. En ralit, les requtes sont rdiges en langage SQL, mais PHP a pour rle de transmettre les requtes SQL de faon transparente.
14
Couple PHP/MySQL:
Dans une application de base de donnes sur le web, PHP est la partie application et MySQL est le ct base de donnes. L'environnement ncssaire l'application web base de donnes : Un serveur Web qui hberge les pages et renvoie les rsultats des requtes aux utilisateurs. MySQL, le SGBDR que nous utiliserons qui permettra de manipuler les donnes de la base. PHP, le langage de script que nous utiliserons pour crire les programmes du site Web dynamique.
Dpartement de Gnie Industriel 15
Environnement de dveloppement
(Sances de travaux pratiques)
Trois outils sont ncssaires la ralisation d'un site PHP/mySQL: Le serveur web (Apache pour nous). Un SGBDR (en l'occurence, MySQL, en ce qui nous concerne), il manipulera les donnes de la base. PHP, le langage de script.
Dpartement de Gnie Industriel 16
Cold Fusion. JavaServer Page. Microsoft ASP. CGI et autres langages (Perl, C, C++, etc).
17
A l'heure actuelle les "concurrents" de PHP sont : - ASP : Technologie de Microsoft trs similaire, utilisant un langage de script, gnralement VBScript (Version allge de Visual Basic) - PERL : Langage de script puissant, adapt Internet mais trs difficile matriser - CGI : Composants excutables, rapide mais spcifiques la plate forme-serveur
18
21
Les balises courtes <? ?> et les balises ASP <% %> peuvent tre pratiques, mais elles ne sont pas aussi portables que les versions longues. si vous envisagez d'inclure du PHP dans des fichiers XML ou XHTML, vous devrez utiliser la forme <?php ...?> pour vous conformer au XML.
Dpartement de Gnie Industriel 22
<?php echo "Nous utilisons apache comme serveur Web"; ?> <? echo "Bonjour !"; ?> Le style script : <script language="php"> echo "Bonjour !"; </script> Le style ASP : <% echo "Bonjour !"; %>
23
Remarque
La premire mthode est gnralement utilise, car elle permet une implmentation aise de PHP avec la prochaine gnration de XHTML.
24
Le sparateur d'instructions
<?php echo "Ceci est un test"; ?> <?php echo "Ceci est un test" ?>
Les instructions sont spares par un point virgule chaque fin d'instruction, comme en langage C ou en Perl. La balise de fin (?>) implique la fin d'une instruction, et donc ajoute implicitement un point virgule. Les deux exemples suivants sont quivalents.
25
Lchappement
Une des complications de lenvoi de donnes un navigateur est laffichage de guillemets ou dapostrophes. Ces deux exemples provoqueront une erreur: echo "Vous excutez le fichier : "exemple.php" "; print 'Comme un script PHP doit tre dcod par un serveur, vous devez utiliser l'URL http://localhost/exemple.php si vous disposez d'un serveur local';
Dpartement de Gnie Industriel 27
Lchappement
A cette difficult, il y a deux solutions : 1) Utiliser des guillemets quand on veut afficher une apostrophe et rciproquement: echo 'Vous excutez le fichier : "exemple.php" '; print "Comme un script PHP . utiliser l'URL . si vous disposez d'un serveur local"; 2) Echapper le caractre litigieux en le faisant prcder par un antislash (\): echo "Vous excutez le fichier : \"exemple.php\" "; print 'Comme . utiliser l\'URL . d\'un serveur local';
Remarques
PHP est insensible la casse en ce qui concerne les noms de fonctions: echo() = ECHO() = eCHo() On peut utiliser ces fonctions pour envoyer du HTML au navigateur:
Echo() (mais pas print) permet denvoyer plusieurs informations dcoupes au navigateur en les sparant par des virgules: echo 'Hello, ', "world!";
Commentaires
PHP supporte les commentaires comme en C, C++ et Shell Unix. Par exemple :
<?php echo "Ceci est un test"; // Ceci est un commentaire sur une ligne comme en C++ /* Ceci est un commentaire sur plusieurs lignes, comme en C et C++ */ echo "Ceci est encore un test"; echo "Enfin, le test final"; # Ceci est un commentaire comme en Shell Unix ?> Faites attention ne pas emboter les commentaires de type langage C, ce qui arrive de temps en temps lorsque vous voulez commenter une grande partie de code. <?php /* echo "Ceci est un test"; /* Ce commentaire va poser un problme */ */ ?> Dpartement de Gnie Industriel 32
2. Les variables
Les variables sont destines conserver temporairement des valeurs. Le typage des variables est implicite en php. Il nest donc pas ncessaire de dclarer leur type au pralable ni mme de les initialiser avant leur utilisation. Il y a huit types de variables dans le langage PHP:
Dpartement de Gnie Industriel 34
35
Tout nom de variable doit commencer par un caractre ($). Exemple: $nom. Le nom peut contenir une combinaison de caractres, chiffres et du caractre blanc soulign (_). Exemple: $le_prix2. Le premier caractre qui suit le $ initial ne doit pas tre un chiffre. Il doit tre une lettre ou un blanc soulign. Les noms de variables sont sensibles la casse. $nom et $Nom sont deux variables entirement diffrentes. On affecte des valeurs aux variables l'aide du signe gale (=).
Dpartement de Gnie Industriel 36
41
<?php # Listing - concat.php // Cre les variables $prnom = 'Jules'; $nom = 'Verne'; $auteur = $prnom . ' ' . $nom; // Une nouvelle variable, $auteur, est cre pour recevoir le rsultat de la concatnation. $livre = 'Vingt mille lieues sous les mers'; // Affichez les valeurs echo "Le livre <i>$livre</i> a t crit par $auteur."; // Le livre Vingt mille lieues sous les mers a t crit par Jules Verne. ?>
Dpartement de Gnie Industriel
La concatnation est une opration importante pour les chanes de caractres. Elle est l'quivalent de ce qu'est l'addition pour les nombres. Elle s'effectue avec l'oprateur (.).
42
Remarques
PHP possde un grand nombre de fonctions de traitement de chanes de caractres. Par exemple, pour connatre le nombre de caractres que contient une chane de caractres, on peut utiliser la fonction strlen() :
$nb = strlen($chane);
Lorsqu'on affecte une nouvelle valeur une variable, elle crase la prcdente, dont l'ancienne valeur est donc perdue.
Dpartement de Gnie Industriel 43
Remarques
Pour concatner une valeur une autre, on peut utiliser l'oprateur associatif (.=). Les 2 instructions suivantes donnent un rsultat identique : $titre = $titre . $sous_titre; $titre .= $sous_titre; On pourrait rcrire ainsi l'exemple prcdent: $nom_complet = ''$prnom $nom''; Ou : $nom_complet = $prnom; $nom_complet .= '' ''; $nom_complet .= $nom; L'oprateur de concatnation peut tre utilis l'intrieur d'une fonction. Print $prnom . ' . $nom;
44
Oprateurs arithmtiques
Exemple $a + $b $a - $b $a * $b $a / $b Nom Addition Soustraction Multiplication Division Rsultat Somme de $a et $b Diffrence de $a et $b Produit de $a et $b Quotient de $a et $b Reste de $a divis par $b
Dpartement de Gnie Industriel 47
$a % $b Modulo
49
Remarque : = (€)
Dpartement de Gnie Industriel 50
5. Les constantes
// Afficher le message echo Aujourd\hui nous sommes le . AUJOURD_HUI . '.<br />La version de PHP de ce serveur est la <b> . PHP_VERSION . </b> et son systme d\exploitation est <b> . PHP_OS. </b>.<br /><br />';
/* Les constantes ne peuvent pas tre affiches lintrieur de chanes de caractres places entre apostrophes ou entre guillemets car labsence du caractre dollar initial entranerait leur affichage sous forme de texte. On a donc utilis loprateur de concatnation lintrieur de cette instruction */. ?>
Dpartement de Gnie Industriel 54
58
Lattribut method
La mthode get envoie les donnes sous forme dune suite de couples nom/valeur abouts lURL. Exemple : www.mon-site.com/decode-formu.php?name=Jules&genre=M Lavantage de cette mthode : permet dajouter la page aux signets du navigateur (de la bookmarker ). On peut galement cliquer sur licne page prcdente du navigateur pour revenir la page get ou la recharger sans problme. Ces deux facilits sont interdites si le formulaire utilise la valeur post pour lattribut method. On est limit dans le nombre de couples nom/valeur envoys, et la scurit est mauvaise car ces donnes sont parfaitement visibles puisquelles figurent la suite de lURL.
Dpartement de Gnie Industriel 59
<head> <title>Formulaire HTML</title> </head> <body> <!-- Listing - formu.html --> <! On donne lattribut action la valeur qui reprsente le nom du programme PHP de traitement des donnes : traite_formu.php <form action="traite_formu.php" method="post">
Dpartement de Gnie Industriel 60
Exemple (suite)
<fieldset> <legend>Saisissez vos donnes dans le formulaire ci-dessous : </legend> <p> <b>Nom : </b> <input type="text" name="nom" size="20" maxlength="40" /> </p> <p> <b>Adresse e-mail :</b> <input type="text" name="email" size="40" maxlength="60" /> </p>
Dpartement de Gnie Industriel 61
Exemple (suite)
<p> <b>Sexe:</b> <input type="radio" name="sexe" value="M" /> Masculin <input type="radio" name="sexe" value="F" /> Fminin </p> <p> <b>Age :</b> <select name="age"> <option value="0-30">Moins de 30 ans</option> <option value="30-60">Entre 30 et 60 ans</option> <option value="60+">Plus de 60 ans</option> </select> </p> Dpartement de Gnie Industriel
62
Exemple (suite)
<p> <b>Commentaires : </b> <textarea name="commentaires" rows="3" cols="50"></textarea> </p> </fieldset> <div align="center"><input type="submit" name="submit" value="Envoyez les donnes"> </div> </form><!-- Fin du formulaire -->
</body> </html>
63
64
Formulaire HTML
Ce formulaire formu.html reoit 5 valeurs de quatre types diffrents : un nom (texte), une adresse e-mail (texte galement), une indication de sexe (boutons radio) et des commentaires (zone de texte). Le 5me lment est llment submit qui gnre le bouton denvoi.
Dpartement de Gnie Industriel 65
68
On enregistre ce fichier sous le nom traite_formu.php, on le tlcharge sur notre serveur Web dans le mme rpertoire que formu.html. Trois des lments du formulaire HTML avaient pour nom nom, email, et commentaires (les deux autres tant sexe et age). Pour y accder, il suffit dutiliser les variables $nom, $email, et $commentaires.
Dpartement de Gnie Industriel
69
Magic Quotes
Lorsque cette option est active, apostrophes et guillemets seront automatiquement chapps dans les valeurs rcupres par les variables. Il existe deux types de Magic Quotes : magic_quotes_gpc, qui sapplique aux formulaires, URL et cookies (gpc signifie : get, post, cookie) et magic_quotes_runtime, qui sapplique aux donnes rcupres partir de fichiers externes ou de bases de donnes.
Dpartement de Gnie Industriel 70
Magic Quotes
Si loption Magic Quotes est active sur votre serveur, vous pouvez annuler son effet en appelant la fonction stripslashes () : $var = stripslashes ($var); Cette fonction supprimera tous les antislashes dchappement qui peuvent se trouver dans $var.
72
3. Structures de contrle et
oprateurs
Dans tout langage de programmation, y compris en PHP, il existe deux types de structures de contrle : Instructions conditionnelles. Ces instructions excutent du code si une condition est soit vraie, soit fausse. Boucles conditionnelles. Ces boucles excutent un jeu dinstructions une ou plusieurs fois jusqu ce quune condition soit value soit comme vraie, soit comme fausse.
Dpartement de Gnie Industriel 74
Instructions conditionnelles
Le principe dune instruction conditionnelle est le suivant : une expression conditionnelle est value et, si la condition est vraie ou fausse, du code est excut. En PHP, les instructions conditionnelles les plus courantes sont : if else elseif switch case
Linstruction if
Syntaxe : if (expression) { bloc dinstructions; }
Linstruction if est utilise pour valuer une expression. Elle rend compte du rsultat de cette valuation en renvoyant la valeur boolenne True ou False. Si la condition est value comme vraie (True), le jeu dinstructions qui suit la condition if est excut. Dans le cas contraire, le contrle est transfr aux instructions qui succdent au bloc if.
Dpartement de Gnie Industriel 76
if else
Linstruction else est utilise uniquement avec linstruction if, et jamais sparment. Syntaxe : if (expression) { bloc dinstructions 1; } else { bloc dinstructions 2; }
if elseif else
Une deuxime expression est value dans elseif si la premire est value False, la partie else jouant le mme rle que prcdemment si aucune des deux conditions nest remplie. Syntaxe : if (expression1) { bloc dinstructions 1; } elseif (expression2) { bloc dinstructions 2; } else { bloc dinstructions 3; }
78
Remarques
Les accolades qui servent marquer le dbut et la fin dun bloc ne sont pas ncessaire si le bloc ne comporte qune seule instruction. La clause elseif peut aussi scrire else if. On peut (et on aura souvent besoin de le faire) imbriquer des instructions conditionnelles.
Dpartement de Gnie Industriel 79
==
!= < > <= >=
gal
diffrent de infrieur suprieur infrieur ou gal suprieur ou gal
comparaison
comparaison comparaison comparaison comparaison comparaison
$x = = $y
$x != $y $x < $y $x > $y $x <= $y $x >=$y
80
Exemple ($a or $b) vaut true si $a OU $b valent true, et false sinon. ($a xor $b) vaut true si une seule parmi $a ou $b vaut true, et false dans tous les autres cas. ($a and $b) vaut true si $a ET $b valent true, et false sinon. ($a && $b) vaut true si $a ET $b valent true, et false sinon. ($a || $b) vaut true si $a OU $b valent true, et false sinon. (!$a) vaut true si $a vaut false et rciproquement.
Dpartement de Gnie Industriel 81
ET ET OU NON
82
switch
Il existe en PHP une autre instruction conditionnelle appele switch que lon peut utiliser la place dune cascade de if elseif else. Syntaxe : switch ($variable) {case "valeur_1" : // Faire ce traitement Break; case "valeur_2" : // Faire cet autre traitement Break; default : // Troisime traitement }
83
Fonctionnement
La valeur de $variable est compare successivement toutes les valeurs de case. Lorsquon trouve une galit, le code qui suit est excut jusques et y compris le break, qui a pour effet de faire sortir du switch. Si aucune galit nest trouve, cest la clause default qui est excute. A sa suite, aucun break nest videmment ncessaire.
Dpartement de Gnie Industriel 84
switch - Exemple
switch ($sexe) { case "M" : echo "<b><p>Bonjour Monsieur</p></b>"; break; case "F" : echo "<b><p>Bonjour Madame</p></b>"; break; default : echo "<b><p>Vous avez oubli d'indiquer votre sexe</p></b>"; }
Dpartement de Gnie Industriel 85
86
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/2000/REC-xhtml120000126/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head> <meta http-equiv="content-type" content="text/html; charset=iso-8859-1" /> <title>Accus de rception de formulaire</title> </head> <body>
Dpartement de Gnie Industriel 88
Suite
<?php # Listing traite_formu.php // Vrifier $nom et la dbarrasser de tout antislash possible if (strlen($nom) > 0) { $nom = stripslashes($nom); } else { // Si aucun nom n'a t saisi $nom = NULL; echo "<b><p>Vous avez oubli de saisir votre nom</p></b>"; }
Dpartement de Gnie Industriel 89
Suite
// Vrifier $commentaires et la dbarrasser de tout antislash possible if (strlen($commentaires) > 0) { $commentaires = stripslashes($commentaires); } else { // Si aucun nom n'a t saisi $nom = NULL; echo "<b><p>Vous avez oubli de saisir un commentaire</p></b>"; }
Dpartement de Gnie Industriel 90
Suite
// Vrifier $email if (! strlen($email) > 0) { $email = NULL; echo "<b><p>Vous avez oubli de saisir votre adresse e-mail</p></b>"; }
91
Suite
// Vrifier $sexe if (isset($sexe)) { if ($sexe == "M") { $message = "<b><p>Bonjour Monsieur</p></b>"; } elseif ($sexe == "F") { $message = "<b><p>Bonjour Madame</p></b>"; } } else // aucune des deux cases n'a t coche { $sexe = NULL; echo "<b><p>Vous avez oubli d'indiquer votre sexe</p></b>"; }
Dpartement de Gnie Industriel 92
Abouter lURL la valeur quon veut faire traiter par le script qui est appel : www.mon-site.com/page.php?nom=Arthur
96
<option value="1">1</option> <option value="2">2</option> <option value="3">3</option> <option value="4">4</option> <option value="5">5</option> <option value="6">6</option> </select>
Dpartement de Gnie Industriel 97
<input type="hidden" name="prix" value="19.95" /> <input type="hidden" name="taxe" value=".05" />
</form><!-- Fin du Formulaire --> </body> </html>
Dpartement de Gnie Industriel 98
99
Deux nouveauts : Le prix et la quantit sont conservs dans des champs cachs. La valeur de lattribut action se termine par ?source=calculateur.html la suite de traite_calculateur.php. La page qui va traiter le formulaire recevra une variable $source lui indiquant la provenance de lappel.
Dpartement de Gnie Industriel 100
traite_calculateur.php (suite)
// Il faut vrifier que la provenance est correcte if (isset($source)) // Ce premier if vrifie que $source contient bien une valeur { if ($source == 'calculateur.html') { // Est-ce que a vient de la bonne page ? if (is_numeric($quantite))// Est-ce que "quantite" est un nombre ? { // Si oui, faire les calcul est afficher les rsultats $total = ($quantite * $prix) * ($taxe + 1); $total = number_format ($total, 2, ",", " "); echo "Vous achetez <b>$quantite</b> machin(s) d'un cot unitaire de <b>$prix €.</b><br>"; echo "Le montant TTC de votre achat s'lve <b>$total</b>€.\n";
Dpartement de Gnie Industriel 102
traite_calculateur.php (suite)
} else { // La quantit n'est pas un nombre echo '<p><b>Saisissez une quantit correcte, svp</b></p>'; } } else // La provenance n'est pas la bonne { echo '<p><b>Vous avez illgalement accd cette page</b></p>'; }
} else // La provenance n'est pas dfinie { echo '<p><b>Vous avez illgalement accd cette page</b></p>'; } ?> </body> </html>
Dpartement de Gnie Industriel
103
Remarque
Les lments cachs dun formulaire ne sont pas affichs dans la fentre du navigateur mais sont nanmoins prsents dans le source. Il ne faut jamais les utiliser pour conserver des lments confidentiels.
104
5. Les tableaux
Les tableaux
Les chanes de caractres et les nombres sont des variables scalaires, c..d. qui nont quune seule valeur. Un tableau peut contenir plusieurs informations spares. Les tableaux sont structurs sous la forme de couples cl/valeur. A chaque lment du tableau est associ une cl (parfois appele index).
Dpartement de Gnie Industriel 106
Les tableaux
PHP reconnat deux types de tableaux : Tableaux indexs (dont la cl est numrique). Les tableaux associatifs (dont la cl est une chane de caractres). Avec la premire catgorie, le numro du premier lment est 0, sauf si on prcise une autre valeur.
Dpartement de Gnie Industriel 107
Les tableaux
Cl 0 1 2 3 Valeur Bruel Piaf Martin Souchon Cl F BE CDN MA Valeur France Belgique Canada Maroc
Tableaux superglobaux
Il existe une notation permettant de reprer plusieurs types de tableaux par dfaut dfinis laide des variables superglobales : $_GET, $_POST, $_SESSION, $_COOKIE, etc. Cette notion est apparue dans la version 4.1 de PHP. La variable $_GET reprsente lendroit o sont conserves toutes les variables et valeurs envoyes au moyen dun attribut method=get (venant dun formulaire par exemple).
Dpartement de Gnie Industriel 109
Tableaux superglobaux
La variable $_POST reprsente lendroit o sont conserves toutes les variables et valeurs envoyes au moyen dun attribut method=post. Ainsi, pour le script traite_calculateur.php, les variables $quantite et $_POST['quantite'] reprsentent la mme valeur.
Dpartement de Gnie Industriel 110
Tableaux superglobaux
Dans tout le reste de ce cours, je continuerai utiliser les tableaux superglobaux (scurit amliore, visibilit globale). Si on prfre simplifier lcriture des scripts et que loption register_globals soit active sur notre serveur, on peut choisir dcrire, par exemple, $nom au lieu de $_POST['nom'].
Dpartement de Gnie Industriel 111
Les tableaux
Un tableau obit aux mmes rgles dappellation que nimporte quelle autre variable. Hors de son contexte, on ne peut pas savoir si $var dsigne un scalaire ou un tableau. La seule diffrence quil y a rside dans la faon de reprer un lment particulier lorsquil sagit dun tableau.
Dpartement de Gnie Industriel 112
Les tableaux
Pour adresser un lment du tableau : faire suivre son nom de sa cl place en crochets: echo $artistes[2]; // Martin echo $pays['CDN']; // Canada Laffichage dlments de tableaux est un peu plus dlicat que celui des variables scalaires. Par exemple, linstruction suivante provoquera une erreur :
113
Le script traite_calculateur.php
Rcrire le script traite_calculateur.php en utilisant les tableaux superglobaux : <html> <head> <title>Calculateur de cot</title> </head> <body> <?php # Listing - traite_calculateur-1.php
Le script traite_calculateur.php
// Etant donn que la variable $source a t aboute lURL, // cest le tableau $_GET qui va permettre dy accder. if (isset($_GET['source'])) { if ($_GET['source'] == 'calculateur.html') { if (is_numeric($_POST['quantite'])) {
$total = ($_POST['quantite'] * $_POST['prix'])*($_POST['taxe']+1);
Le script traite_calculateur.php
echo "Vous achetez <b>{$_POST['quantite']}</b> machin(s) d'un cot unitaire de <b>{$_POST['prix']} €.</b><br>"; echo "Le montant TTC de votre achat s'lve <b>$total</b> €.\n"; } else
La suite du srcipt ..
?> </body> </html>
Dpartement de Gnie Industriel 116
Remarques
Un tableau peut utiliser une association de nombres et de chanes de caractres en guise de cls. La seule exigence est que toutes les cls dun mme tableau soient uniques. Pour une version plus ancienne que la 4.1 de PHP, on doit utiliser $HTTP_POST_VARS au lieu de $_POST et $HTTP_GET_VARS au lieu de $_GET.
Dpartement de Gnie Industriel 118
119
120
calendrier.php
// Cration du tableau des mois
$mois = array (1 => 'janvier', 'fvrier', 'mars', 'avril', 'mai', 'juin', 'juillet', 'aot', 'septembre', 'octobre', 'novembre', 'dcembre');
// Les cls du tableaux $mois sont les valeurs numriques 1 12. // On a prcis 1 pour le premier indice, les indices suivants croissent // en squence.
// Cration des tableaux des jours et des annes $jours = range (1, 31); $annes = range (2003, 2010);
Dpartement de Gnie Industriel 122
calendrier.php
// Cration du formulaire et des menus droulants echo '<form action="calendrier.php" method="post">'; // Comme ce formulaire ne fera rien de particulier, son attribut // action pointe sur lui-mme. // Gnrons le menu droulant des mois echo '<select name="mois">'; foreach ($mois as $cl => $valeur) { echo "<option value=\"$cl\">$valeur</option>\n"; } echo '</select>';
// Boucle foreach : A chaque tour, on cre une nouvelle ligne de code // du genre : <option value="1">janvier<option>.
Dpartement de Gnie Industriel
123
calendrier.php
// Gnrons le menu droulant des jours
echo '</select>';
// Les cls sont numriques, il est inutile de spcifier des cls // particulires.
124
calendrier.php
// Gnrons le menu droulant des annes
echo '<select name="an">'; $an = 2003; foreach ($annes as $an) { echo "<option value=\"$an\">$an</option>\n"; $an++; } echo '</select> </form>'; ?> </body> </html>
// Les cls sont numriques, il est inutile de spcifier des cls particulires.
125
calendrier.php
Ces trois menus droulants ont t crs avec des tableaux et une boucle foreach.
Dpartement de Gnie Industriel 126
Remarques
Pour connatre le nombre dlments que contient un tableau, il existe la fonction sizeof () et la fonction count () qui sont des synonymes : $n = count ($tableau); Depuis la version 4.1 de PHP, la fonction range () peut galement crer un tableau squentiel de lettres : $alphabet = range (a, z); La fonction is_array () permet de vrifier quune variable est bien de type tableau. Les noms qui interviennent dans la boucle foreach peuvent tre quelconques. Les amricains prfrent $key et $value. Dans la version franaise, nous avons choisi $cl et $valeur, mais on aurait aussi bien pu (au dtriment de la lisibilit du script) les appeler $minet et $casimir.
127
$stars est un tableau deux dimensions. Pour accder au tableau $artistes, on crirait $stars['artistes'] et, pour accder Monroe, on crirait $stars["vedettes"][1]. Rgle : crire le nom du tableau deux dimensions suivi par la cl du premier tableau entre crochets suivi par la cl du second, galement place entre crochets. Pour afficher de telles valeurs : les encadrer par des accolades: echo "La deuxime vedette sappelle {$stars['vedettes'][1]}";
128
<p> <b>Nom :</b> <input type="text" name="nom" size="20" maxlength="40" /> </p>
Dpartement de Gnie Industriel 129
qqch.html
<-- Srie de cases cocher --> <p><b>Interts :</b> <input type="checkbox" name="interet[]" value="Musique" /> Musique <input type="checkbox" name="interet[]" value="Cinma" /> Cinma <input type="checkbox" name="interet[]" value="Lecture" /> Lecture <input type="checkbox" name="interet[]" value="Ski" /> Ski <input type="checkbox" name="interet[]" value="Bricolage" /> Bricolage </p> <!-- Possibilit de choisir une ou plusieurs activits. --> <!-- Il existe deux faons de nommer les diffrentes entres : soit leur donner un nom qui correspond leur valeur (Musique, Cinma, par exp.), soit utiliser un tableau. Ici on a opt pour cette solution avec le tableau interet[]. -->
<!-- Dans le script PHP de traitement, ce tableau sappellera $interet et contiendra toutes les cases coches par lutilisateur. -->
Dpartement de Gnie Industriel
130
qqch.html
<! Compltons la page. -->
</fieldset> <p> <div align="center"><input type="submit" name="submit" value="Envoyez !" /></div> </form><!-- Fin du formulaire --> </body> </html>
131
qqch.html
132
133
134
/* La premire partie du code vrifie que la variable a une valeur. Si cest la cas, une boucle va crer un message ($ints) qui contiendra tous les intrts qui ont t slectionns. pour construire ce message, on commence par linitialiser NULL. Puis, lintrieur de la boucle, on concatne la valeur suivante au message sans oublier une virgule et un espace. Chacune des valeurs correspondra une des cases coches par lutilisateur. Comme de cette faon, le message se terminerait par deux caractres superflus (une virgule suivie dun espace), on les supprime la fin en appelant la fonction substr ().*/
Dpartement de Gnie Industriel 135
$ints = substr($ints, 0, -2); // Supprimer les caractres superflus <?php $rest = substr("abcdef", 0, -1); // retourne "abcde" $rest = substr("abcdef", 2, -1); // retourne "cde" ?>
Dpartement de Gnie Industriel 136
for (expression initiale; condition; expression de fermeture) {// Faire quelque chose } Lors de la premire excution de la boucle, expression initiale est excute. Puis condition est teste et, si elle est vrifie, la boucle est excute. A la fin de ce passage, expression de fermeture est excute et condition est nouveau teste. Ce processus continue jusqu ce que condition ne soit plus vrifie. Exemple :
141