You are on page 1of 141

Bases de donnes et Internet

Facult des Sciences et Techniques Fs Dpartement de Gnie Industriel Master Sciences et Techniques en Gnie Industriel Professeur : F. Kaghat

PHP 5

Premire partie : Syntaxe de base et programmation en PHP

Introduction :
Lenvironnement PHP/MySQL (Prsentation)

Qu'est ce que PHP?

PHP: Hypertext Preprocessor)

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 = SERVER SIDE

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

Base de donnes MySQL

extraction de donnes

Script PHP

excution

Document Html
7

Dpartement de Gnie Industriel

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.

Dpartement de Gnie Industriel

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.

Dpartement de Gnie Industriel

11

Principaux atouts de PHP


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

SGBD supports par PHP

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

Dpartement de Gnie Industriel

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.

Dpartement de Gnie Industriel

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

Autres technologies analogues

Pour produire des pages dynamiques.


Cold Fusion. JavaServer Page. Microsoft ASP. CGI et autres langages (Perl, C, C++, etc).

Dpartement de Gnie Industriel

17

Positionnement face aux autres langages

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

Dpartement de Gnie Industriel

18

Partie A: Syntaxe de base

1. Passer du HTML au PHP

Passer du HTML au PHP


Il y a quatre jeux de balises qui servent dlimiter des blocs de code PHP. Seules deux d'entre elles sont toujours actives : <?php ... ?> et <script language="php">...</script>) Les autres peuvent tre actives et dsactives depuis le fichier de configuration php.ini.

Dpartement de Gnie Industriel

21

Passer du HTML au PHP

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

Exemple. Le passage du HTML PHP

<?php echo "Nous utilisons apache comme serveur Web"; ?> <? echo "Bonjour !"; ?> Le style script : <script language="php"> echo "Bonjour !"; </script> Le style ASP : <% echo "Bonjour !"; %>

Dpartement de Gnie Industriel

23

Remarque

La premire mthode est gnralement utilise, car elle permet une implmentation aise de PHP avec la prochaine gnration de XHTML.

Dpartement de Gnie Industriel

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.

Dpartement de Gnie Industriel

25

Envoi des donnes au navigateur


Il existe plusieurs fonctions pour envoyer des donnes au navigateur, les plus courantes tant echo() et print(): echo 'Hello, world ! '; print "Ceci est un test"; On peut employer des apostrophes ou des guillemets pour encadrer une chane de caractre.

Dpartement de Gnie Industriel 26

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';

Dpartement de Gnie Industriel 28

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 '<b>Hello, <FONT SIZE=+2>world</FONT> !</b>';

Echo() (mais pas print) permet denvoyer plusieurs informations dcoupes au navigateur en les sparant par des virgules: echo 'Hello, ', "world!";

Dpartement de Gnie Industriel 29

PHP, HTML et lespace blanc


Pour modifier la mise en page en accentuant lespacement des lignes de la page Web affiche, on peut utiliser les balises <br /> (rupture de ligne) ou <p></p> (marques de paragraphe). Pour modifier lespacement du code HTML laide de PHP, on a le choix entre: Utiliser echo() ou print() entre plusieurs lignes; Utiliser le caractre alina (\n) plac entre une paire de guillemets.

Dpartement de Gnie Industriel 30

Crer des espaces blancs


<?php
echo 'Cette instruction echo() se continue sur deux lignes!'; echo "<br />Cette ligne devrait apparatre isole dans la page Web.\n\n"; echo 'C\'est gagn !'; ?>
Dpartement de Gnie Industriel 31

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, qu'est ce que c'est?

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

Les variables, qu'est ce que c'est?


4 de types scalaires (valeur unique): boolennes (TRUE ou FALSE), entires, flottantes (avec une partie dcimale), et chanes de caractres (texte), Deux non scalaires (plusieurs valeurs): tableaux et objets. Plus les ressources (rencontres lorsqu'on travaille avec une base de donnes) et NULL (qui est une variable spciale dpourvue de valeur).

Dpartement de Gnie Industriel

35

Les variables: rgles syntaxiques


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

Les variables PHP prdfinies (1)


Affichons les valeurs du script qui va tre excut: echo "Vous excutez le fichier <b>$PHP_SELF</b>.<br /><br />\n"; Variable prdfinie utilise ici est : $PHP_SELF, laquelle fait rfrence au script en cours d'excution. Selon le serveur qu'on utilise, son contenu peut tre diffrent : depuis nom_du_script.php jusqu' /chemin/vers/ nom_du_script.php.
Dpartement de Gnie Industriel 37

Les variables PHP prdfinies (2)


Affichons les informations concernant l'utilisateur qui accde au script : echo 'Vous voyez cette page avec:<br /><b>', $HTTP_USER_AGENT, '</b><br /> partir de l\'adresse IP ', $REMOTE_ADDR; Les variables prdfinies : ($HTTP_USER_AGENT) fait rfrence au systme d'exploitation, au type du navigateur utilis et sa version. ($REMOTE_ADDR) concerne l'adresse IP de l'utilisateur qui accde la page (s'il s'agit du serveur local localhost, l'dresse IP est 127.0.0.1).
Dpartement de Gnie Industriel 38

Les variables PHP prdfinies (3)


<html> <head> <title>Variables prdfinies</title> </head> <body> <?php # Listing - predefini.php // Afficher le nom du script echo "Vous excutez le fichier <b>$PHP_SELF</b>.<br /><br />\n"; // Afficher les informations concernant l'utilisateur echo 'Vous voyez cette page avec:<br /><b>', $HTTP_USER_AGENT, '</b><br /> partir de l\'adresse IP ', $REMOTE_ADDR; ?> </body> </html>
Dpartement de Gnie Industriel 39

3. Les chanes de caractres

Les chanes de caractres


Le type string (chane de caractres) : Une chane de caractres est simplement une suite place entre (') ou entre ('') de caractres quelconques (lettres accentues ou non chiffres, espaces, signes de ponctuation, etc.). Affectation d'une chane de caractre un nom de variable au moyen du signe = : <?php # Listing - strings.php // Cre les variables $prnom = 'Nicolas'; $nom = 'Hornby'; $livre = 'Haute fidlit'; // Affichez les valeurs echo "Le livre <i>$livre</i> a t crit par $prnom $nom."; ?> Utiliser des guillemets pour que les variables soient correctement affiches.

Dpartement de Gnie Industriel

41

Concatnation de chanes de caractres

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

Dpartement de Gnie Industriel

44

4. Variables numriques, oprateurs et fonctions arithmtiques

Variables numriques entires et flottantes


Nombres entiers : Il est possible de spcifier les nombres entiers (Integers) de la manire suivante : $a = 1234; # nombre entier $a = -123; # nombre entier ngatif
Les nombres virgule flottante : Les nombres virgule flottante ("doubles") peuvent tres spcifi en utilisant la syntaxe suivante : $a = 1.234; $a = 1.2e3;
Dpartement de Gnie Industriel 46

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

Fonctions arithmtiques (1)


Il existe une kyrielle de fonctions arithmtiques. Exemples : round() : effectue un arrondi sur un nombre dcimal en lui donnant la valeur de lentier le plus proche : $n = 3.14; $n = round ($n); // rsultat : 3 On peut spcifier le nombre de positions dcimales o doit intervenir larrondi au moyen dun second argument dans lappel de la fonction : $n = 3.142857; $n = round ($n, 3); // rsultat : 3.143

Dpartement de Gnie Industriel 48

Fonctions arithmtiques (2)


La fonction number_format () formate un nombre dcimal en une chane de caractres dans laquelle les parties entire et dcimale sont spares par un point dcimal (.) et les chiffres de la partie entire sont groups par trois avec interposition dune virgule, selon lusage anglo-saxon. Exemple : $n = 12345.67; $a = number_format ($n); // 12,345 Avec un second argument, on peut spcifier le nombre de chiffres de la partie dcimale : $n = 12345.67; $a = number_format ($n, 2); // 12,345.67 On peut passer en notation franaise en ajoutant trois arguments supplmentaires, le nombre de chiffres de la partie dcimale (usuellement deux), le sparateur dcimal (,) et le sparateur des groupes de chiffres de la partie entire (un simple espace) : $n = 12345.67; $a = number_format ($n, 2, ','' , ' ''); // 12 345,67

Dpartement de Gnie Industriel

49

Ce script prsente un exemple de mise en forme de nombre flottant


<?php # Script - nombres.php // Crer les variables $quantit = 30; // nombre d'objets achets : 30 $prix = 119.95; // prix unitaire : 119.95 euros $taux_de_taxe = .05; // taux de la taxe : 5% // Calculer le total $total = $quantit * $prix; $total = $total + ($total * $taux_de_taxe); // Ajouter la taxe $total = number_format ($total, 2, ",", " "); // Formater le rsultat // Afficher le rsultat echo 'Vous avez achet <b>', $quantit, '</b> machin(s) d\'un cot unitaire de <b>', $prix, ' &#128;</b>.<br>', 'Avec la taxe, le total se monte : <b>', $total, ' &#128;</b>.'; ?>

Remarque : = (&#128;)
Dpartement de Gnie Industriel 50

5. Les constantes

Les constantes (1)


Les constantes sont des types de donnes PHP spcifiques qui, la diffrence des variables, conservent leur valeur initiale tout au long dun script. Pour crer une constante, on utilise la fonction define () la place de loprateur daffectation (=). Exemple : define ('NOM', 'toto'); Contrairement aux variables, les identificateurs de constantes (et aussi ceux de fonction) ne sont pas sensibles la casse. Usuellement, les constantes scrivent en majuscules, mais ce nest pas une obligation. Et, ce qui est plus important, leur nom ne commence pas par un caractre dollar ($) comme cest le cas pour les variables.

Dpartement de Gnie Industriel 52

Les constantes (2)


Laffichage des constantes peut se faire de deux faons : echo 'Hello, ' . NOM; Ou echo 'Hello, ' . NOM; Mais on ne peut pas crire : echo 'Hello, NOM''; (PHP afficherait tout simplement : Hello, NOM et non pas la valeur de la constante NOM). Il existe un certain nombre de constantes prdfinies dans PHP. Exemples : PHP_VERSION (le numro de la version de PHP que vous utilisez) et PHP_OS (le systme dexploitation du serveur).

Dpartement de Gnie Industriel 53

Exemple : avoir des informations sur lenvironnement de PHP et du serveur


<?php # Listing - constantes.php // Dfinir la date define ('AUJOURD_HUI', '1 janvier 2004');

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

Partie B: Programmation en PHP

Au sommaire de cette partie


Comment utiliser PHP pour manipuler les valeurs transmises par les formulaires HTML ? Nous parlerons dans ce chapitre : des instructions conditionnelles, des oprateurs restants, des tableaux, et des diffrents moyens de raliser des boucles de programme.

Dpartement de Gnie Industriel 56

1. Cration dun formulaire HTML

Cration dun formulaire HTML


Pour crer un formulaire HTML, on se sert de la balise <form> et des diffrents types de balises <input>. La balise <form> : <form action= ''script.php'' method=''post'> <!-- On place les diffrentes balises dentre, botes de texte, boutons radio, cases cocher .. </form> Lattribut action indique quelle page seront envoyes les donnes du formulaire. Lattribut method dun formulaire commande le choix de la faon dont les lments recueillis seront envoys la page de traitement. Les deux valeurs possibles get et post font rfrence la mthode du protocole HTTP (HyperText Transfer protocol) qui sera utilis pour le transfert.

Dpartement de Gnie Industriel

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

Crer un formulaire HTML Exemple


<!DOCTYPE html ------------------->
<html>

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

Dpartement de Gnie Industriel

63

Formulaire rassemblant quelques informations saisies par lutilisateur

Dpartement de Gnie Industriel

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

2. Traitement dun formulaire HTML

Traitement dun formulaire HTML


La faon dont PHP dialogue avec un formulaire HTML : Si on a une bote dentre dans le formulaire dont la valeur de lattribut name est email, PHP va placer le texte saisi dans la variable dont le nom est $email. Ceci est valable quel que soit le type dentre. Dans notre exemple traite_formu.php peut manipuler les variables $nom, $email, $sexe, $age, $commentaires et $submit.

Dpartement de Gnie Industriel 67

Traitement dun formulaire HTML (1)


<!DOCTYPE html PUBLIC ..> <html ..> <head> <meta /> <title>Accus de rception de formulaire</title> </head> <body> . .

Suite (sur la diapositive suivante)

Dpartement de Gnie Industriel

68

Traitement dun formulaire HTML (2)


<?php # Listing - traite_formu.php
echo "Merci, <b>$nom</b>, pour les commentaires suivants :<br /> <tt>$commentaires</tt> <p>Nous allons y rpondre votre adresse e-mail <i>$email</i></p>";

?> </body> </html>

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.

Dpartement de Gnie Industriel 71

La fonction stripslashes() va annihiler leffet de Magic Qutes sur deux variables


<?php # Listing traite_formu.php $nom = stripslashes($nom); $commentaires = stripslashes($commentaires); # Ce sont les deux seules variables dans lesquelles on risque de # trouver une apostrophe. ge et sexe ont des valeurs prdfinis. # Pas dapostrophe dans $email. echo "Merci, <b>$nom</b>, pour les commentaires suivants :<br /> <tt>$commentaires</tt> <p>Nous allons y rpondre votre adresse e-mail <i>$email</i></p>"; echo "Vous avez indiqu comme ge : $age et comme sexe : $sexe<p>"; ?>
Dpartement de Gnie Industriel

72

3. Structures de contrle et
oprateurs

Les structures de contrle

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

Dpartement de Gnie Industriel 75

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; }

Dpartement de Gnie Industriel 77

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; }

Dpartement de Gnie Industriel

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

Oprateurs frquemment utiliss pour crire une condition (1)


Symbole = Signification assigne une valeur Type affectation Exemple $n = 1;

==
!= < > <= >=

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

Dpartement de Gnie Industriel

Les oprateurs Logiques (2)


Oprateur or xor and && || ! Sens OU
OU exclusif

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

Utilisation des instructions conditionnelles - Exemple


<?php # Listing traite_formu.php .. // Instructions conditionnelles if ($sexe == "M") { echo "<b><p>Bonjour Monsieur</p></b>"; } elseif ($sexe == "F") { echo "<b><p>Bonjour Madame</p></b>"; } else { echo "<b><p>Vous avez oubli d'indiquer votre sexe</p></b>"; } ?>
Dpartement de Gnie Industriel

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 }

Dpartement de Gnie Industriel

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

Validation des donnes dun formulaire (1)


Larchitecte dune application Web se doit de tester ce quil reoit afin de dtecter toute anomalie intervenant par inadvertance ou dans un but malintentionn. La validation dun formulaire requiert lusage dinstructions conditionnelles et dun certain nombre de fonctions, doprateurs et dexpressions. La fonction isset () : teste si une variable contient bien une valeur (0 compris mais ni NULL ni FALSE) : if (isset ($var)) { // $var a bien une valeur } else { // $var na aucune valeur }

Dpartement de Gnie Industriel

86

Validation des donnes dun formulaire (2)


Mais isset () prsente une difficult : le test dune chane de caractre vide revoie TRUE. Pour liminer ce cas, il faut faire usage de la fonction strlen (), qui renvoie la longueur de la chane passe en argument : if (strlen ($var) > 0) { // $var a bien une valeur } else { // $var na aucune valeur }

Dpartement de Gnie Industriel 87

Valider un formulaire Exemple

La nouvelle version du script traite_formu.php.

<!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>"; }

Dpartement de Gnie Industriel

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

Suite et fin du script


// Si toutes les informations ont bien t saisies, afficher les messages
if ($nom && $commentaires && $email && $sexe) { echo "Merci, <b>$nom</b>, pour les commentaires suivants :<br /> <tt>$commentaires</tt> <p>Nous allons y rpondre votre adresse e-mail <i>$email</i></p>"; echo $message; } ?> </body> </html>
Dpartement de Gnie Industriel 93

4. Envoi manuel des donnes


un script

Envoi manuel des donnes un script


Dans lexemple prcdent : les donnes reus par traite_formu.php provenaient de ce qui avait t saisi par un utilisateur dans un formulaire. Il y a deux autres faons de procder pour cet envoi : Utiliser une balise HTML <input> dont lattribut type vaut hidden : <input type="hidden" name="nom" value="Arthur" /> La variable $nom aura la valeur Arthur.

Abouter lURL la valeur quon veut faire traiter par le script qui est appel : www.mon-site.com/page.php?nom=Arthur

Technique qui mule la mthode get dun formulaire HTML.


Dpartement de Gnie Industriel 95

Envoi manuel des donnes un script


<html > <head> <title>Calculateur de cot</title> </head> <body>
<!-- Listing - calculateur.html -->
<form action="traite_calculateur.php?source=calculateur.html" method="post">

Dpartement de Gnie Industriel

96

Envoi manuel des donnes un script


<select name="quantite">
<option value="">choisissez une quantit :</option>

<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

Envoi manuel des donnes un script


<div align="left">
</div>
<input type="submit" name="submit" value="Total !" />

<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

Envoi manuel des donnes un script

Dpartement de Gnie Industriel

99

Envoi manuel des donnes un script


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

Traiter le formulaire du calculateur : traite_calculateur.php


<html> <head> <title>Calculateur de cot</title> </head> <body> <?php # Listing - traite_calculateur.php
Dpartement de Gnie Industriel 101

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 &#128;.</b><br>"; echo "Le montant TTC de votre achat s'lve <b>$total</b>&#128;.\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.

Dpartement de Gnie Industriel

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

Le tableau $artistes a des cls numrique.

Le tableau $pays a des cls reprsentes par des chanes de caractres.


108

Dpartement de Gnie Industriel

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 :

ech "BE est le code des voitures immatricules en $pays[BE']";

Il faut placer le nom du tableau indic entre accolades :

ech "BE est le code des voitures immatricules en {$pays[BE']}";

Dpartement de Gnie Industriel

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

Dpartement de Gnie Industriel 114

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

$total = number_format ($total, 2, ",", " ");


Dpartement de Gnie Industriel 115

Le script traite_calculateur.php
echo "Vous achetez <b>{$_POST['quantite']}</b> machin(s) d'un cot unitaire de <b>{$_POST['prix']} &#128;.</b><br>"; echo "Le montant TTC de votre achat s'lve <b>$total</b> &#128;.\n"; } else

La suite du srcipt ..
?> </body> </html>
Dpartement de Gnie Industriel 116

Remarques concernant ce script


A la place de $quantie, $prix et $taxe, on utilise maintenant $_POST['quantite'] , $_POST['prix'], et $_POST['taxe'] puisque ces variables sont transmises par le formulaire au moyen de lattribut method=POST. La variable $total reste inchange puisque cest un scalaire. Pour une instruction echo () ou print (), il faut placer les lments entre accolades : {$_POST['quantite']}

Dpartement de Gnie Industriel 117

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

Crer des tableaux


Dans lexemple prcdent, on a utilis un tableau gnr par PHP mais, la plupart du temps, nous crerons nous-mme nos tableaux. Deux faons : 1) Placer des lments en par un : $tableau[] = "une valeur"; $tableau[] = "une autre valeur"; $tableau['alpha'] = "encore une valeur"; 2) Faire usage de la construction array () pour crer un tableau en une seule tape: $tableau = array ('non'=>'Toto', 'profession'=>'boulanger'); Si les cls sont numriques, on peut les omettre : $tableau = array ('Toto', 'boulanger'); On peut modifier lorigine des cls numriques (0, par dfaut) de cette faon : $jours = array (3=>'mardi', 'mercredi', 'jeudi'); echo $jours[5]; // jeudi Crer un tableau contenant une suite dentiers : utiliser la fonction range () : $dix = range (1, 10);

Dpartement de Gnie Industriel

119

Accder aux tableaux


Lorsquon sait exactement quel lment dun tableau on veut accder, il suffit dcrire par exemple $_POST['prix']. Pour accder en squence chacun des lments dun tableau, on utilise une boucle foreach (pour chacun) : foreach ($tableau as $valeur) { // faire quelque chose } La boucle foreach va nous permettre de parcourir tout le tableau en accdant successivement chacun de ses lments. Cet lment sera plac dans la variable scalaire $valeur. On peut aussi accder aux cls en crivant : foreach ($tableau as $cl=>$valeur) { echo "Llment dont la cl est $cl vaut $valeur<br>"; }

Dpartement de Gnie Industriel

120

Crer dynamiquement des menus droulants


<html> <head> <title>Calendrier</title> </head> <body> <?php # Listing - calendrier.php // Ce script cre trois menus droulants pour les mois, // jour et annes
Dpartement de Gnie Industriel 121

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 name="jours">'; foreach ($jours as $valeur)


{ echo "<option value=\"$valeur\">$valeur</option>\n"; }

echo '</select>';
// Les cls sont numriques, il est inutile de spcifier des cls // particulires.

Dpartement de Gnie Industriel

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.

Dpartement de Gnie Industriel

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.

Dpartement de Gnie Industriel

127

Tableaux plusieurs dimensions


Les tableaux peuvent tre composs eux-mmes de tableaux. Cest de cette faon quon peut crer des tableaux plusieurs dimensions. $artistes = array ("Bruel", "Piaf", "Martin", " Souchon "); $vedettes = array ("Gabbin", "Monroe", "Andrews",.); Association des deux tableaux :

$stars = array ("artistes" =>$artistes, "vedettes" =>$vedettes);

$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]}";

Dpartement de Gnie Industriel

128

Utilisation des tableaux plusieurs dimensions : qqch.html


<html > <head> <title>Dites-nous quelque chose de votre personnalit</title> </head> <body>
<!-- Listing - qqch.html --> <!-- Dbut du formulaire -->

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


<fieldset> <legend>Renseignez les lments ci-dessous :</legend>

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

Dpartement de Gnie Industriel

131

qqch.html

Dpartement de Gnie Industriel

132

Traitement du formulaire : traite_qqch.php


<html> <head> <title>Dpouillement d'un formulaire</title> </head> <body> <?php # Listing - traite_qqch.php

Dpartement de Gnie Industriel

133

Traitement du formulaire : traite_qqch.php


// Vrifier $_POST['nom'] et supprimer d'ventuels antislashes if (strlen($_POST['nom']) > 0) { $nom = stripslashes($_POST['nom']); } else { // Si aucun nom n'a t saisi $nom = NULL; echo '<p><b>Vous avez oubli d\'indiquer votre nom</b></p>'; }

Dpartement de Gnie Industriel

134

Traitement du formulaire : traite_qqch.php


// Vrifier $interet[] if (isset($_POST['interet'])) { $ints = NULL; foreach ($_POST['interet'] as $cl=>$valeur) { $ints .= "$valeur, "; } $ints = substr($ints, 0, -2); // Supprimer les caractres superflus $interet = TRUE; }

/* 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

Remarque concernant : substr($ints, 0, -2);


Remarque :

$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

Traitement du formulaire : traite_qqch.php (suite)


else { $interet = NULL; echo '<p><b>Vous n\'avez indiqu aucun intrt</b></p>'; } // Si tout est correct, afficher le message if ($nom && $interet) { echo "Merci, <b>{$_POST['nom']}</b>. Ce qui vous intresse :<br /><tt>$ints</tt></p>"; }

?> </body> </html>


Dpartement de Gnie Industriel 137

Traitement du formulaire : traite_qqch.php

Un utilisateur qui a correctement renseign le formulaire


Dpartement de Gnie Industriel 138

Traitement du formulaire : traite_qqch.php

En cas doubli(s), lutilisateur recevra un ou deux messages derreur.


Dpartement de Gnie Industriel 139

Boucles for et while


Boucles : foreach : utilise pour grer des tableaux. while : syntaxe : while (condition) {// Faire quelque chose } Tant que condition est satisfaite, la boucle est excute. Lorsque la condition nest plus vrifie, on sort de la boucle. Si la condition nest jamais vrifie, la boucle nest jamais excute. Si la condition est toujours vrifie, il en rsulte un mouvement perptuel.
Dpartement de Gnie Industriel 140

Boucles for et while

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 :

Syntaxe de la boucle for :

for ($i=1; $i<=10; $i++) {echo "$i<br>"; }

Dpartement de Gnie Industriel

141