programmation web - wordpress.com€¦ · il faut savoir qu'internet est un réseau composé...

Post on 25-Aug-2020

1 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

1

Programmation Web

(HTML et PHP/MySQL)

Développement web (HTML et PHP/MySQL) Généralités Les bases de HTML Installation et configuration, Référence du langage, Implantation du code, combiner HTML et PHP,

caractéristiques, variables, opérateurs, structures conditionnelles, boucles, fonctions, sessions, affichage de texte, expressions régulières, variables d'environnement, les fichiers, les fonctions, objets, classes,

Interrogation des bases de données MySQL, Syntaxe de base, fonctions, récupération des données,

interface avec PHP, administration.

Généralités

3

Comment fonctionne un site web ? Lorsque vous voulez visiter un site web, vous tapez son adresse dans votre navigateur web, que ce soit Mozilla Firefox, Internet Explorer, Opera, Safari ou un autre. Mais ne vous êtes-vous jamais demandé comment faisait la page web pour arriver jusqu'à vous ? Il faut savoir qu'internet est un réseau composé d'ordinateurs. Ceux-ci peuvent être classés en deux catégories : Les clients : ce sont les ordinateurs des internautes comme vous. Votre ordinateur fait donc partie de la catégorie des clients. Chaque client représente un visiteur d'un site web. Les serveurs : ce sont des ordinateurs puissants qui stockent et délivrent des sites web aux internautes, c'est-à-dire aux clients. La plupart des internautes n'ont jamais vu un serveur de leur vie. Pourtant, les serveurs sont indispensables au bon fonctionnement du web.

4

Le logiciel client • appelle un serveur et émet des requêtes

Le logiciel serveur • attend les commandes des clients et fournit les ressources

Le protocole de communication dépend du type de service : • http pour le Web • smtp pour le mail • ftp pour le transfert de fichiers

Serveur requête

ressource

Architecture client/serveur Client

La plupart du temps, le serveur est dépourvu d'écran : il reste allumé et travaille tout seul sans intervention humaine, 24h/24, 7j/7

Chaque page du WEB (= un fichier au format HTML) a un nom unique au monde son adresse sur le web, son URL (Uniform Resource Locator)

http://www.ensat.ac.ma /public/enseignants/toto.html

préfixe indiquant le type de protocole HyperTextTransferProtocol

adresse IP du serveur WEB chemin d’accès

au fichier HTML sur le disque dur du serveur WEB

Attention : pas d’espaces entre les caractères !!

URL ?

L’« interprétation » sert l’objectif d’universalité

Serveur

PC Netsc. 7.2

MAC … Linux

HTML identique

PC IE 6.0

PC IE 5.5

L’architecture du Web

Le réseau matériel d’Internet

TCP/IP

HTTP

Web

HTML

CSS – Feuilles de style

Javascript VBScript Flash Java

Sites web « statiques » et « dynamiques »

L’interactivité du Web repose sur la capacité « dynamique » du protocole HTTP

Commençons donc par établir la distinction entre sites Web « statiques » et sites Web « dynamiques »

Cas d'un site statique

10

Lorsque le site est statique, le schéma est très simple. Cela se passe en deux temps :

1. Le client demande au serveur à voir une page web.

2. Le serveur lui répond en lui envoyant la page réclamée.

Sur un site statique, il ne se passe rien d'autre. Le serveur stocke des pages web et les envoie aux clients qui les demandent sans les modifier.

Le site Web « statique »

Serveur

Requête pour un fichier html

Document réclamé .html

Tous les documents sont dans le serveur

Cas d'un site dynamique

12

Lorsque le site est dynamique, il y a une étape intermédiaire : la page est générée.

Le client demande au serveur à voir une page web. Le serveur prépare la page spécialement pour le client. Le serveur lui envoie la page qu'il vient de générer.

La page web est générée à chaque fois qu'un client la réclame. C'est précisément ce qui rend les sites dynamiques vivants : le contenu d'une même page peut changer d'un instant à l'autre.

Le site « dynamique »

Requête pour un fichier .asp ou. php

Document réclamé .html

Le programme utilise l’information brute d’une base de données,

pour composer une page HTML

qui sera envoyée au requérant

Le site « dynamique »

Le programme s’exécute sur le serveur

À l’aide de langages comme :

le ASP de Microsoft (Active Server Pages), associé à la base de données Access

le PHP, très populaire surtout en milieu UNIX et Linux, associé à la base de données open source MySQL

L’architecture du Web – 5

Le réseau matériel d’Internet

TCP/IP

HTTP

Web

HTML

CSS – Feuilles de style

Javascript ASP PHP

Langages de programmation des serveurs Web

24/12/2018 16

Architecture du web

Programme Client

Internet

Documents

Requêtes

Machine client Documents

Programme Serveur

documents

Machine serveur

Les bases de HTML

17

18

Introduction

Le HTML est la langue vivante du web avec sa grammaire, sa syntaxe et son vocabulaire langage à balises

Relier des documents à l ’aide de liens hypertexte (Tim Berners-Lee 1989) sur le réseau internet interfaces sur CD-ROM...

19

Le World-Wide-Web

HTML & HTTP - un standard et un protocole simples La simplicité explique en partie le succès du

WWW

20

“Hypertext Mark-Up Language” (HTML) Langage de “structuration de documents” Description de contenus par des éléments de formatage Liens hypertextuels (références internes et externes) Variante (sous-classe) de SGML

“Hypertext Transfer Protocol” (HTTP) Le serveur dit au browser de quel type de fichier il s’agit. Le browser tente de

représenter le contenu (il connaît au moins HTML, FTP, News, etc.) ou bien il tente de trouver une application externe locale capable d’afficher le format en question (Ex: Paint Shop Pro pour le format *.tif)

Cliquer sur un URL implique (en très simplifié) (1) Ouvrir une connexion (2) Chercher le fichier (ou bien exécuter et afficher le résultat) (3) Fermer la connexion => “statelessness” (pas de connexions permanentes!)

21

Historique Le langage HTML tire son origine du langage SGML

(Standard Generalized Markup Language). Il s'agit d'un type particulier d'annotations destiné au WWW et qui correspond à une collection de styles reconnaissables par les navigateurs.

Un navigateur (en anglais "browser") est donc un logiciel qui interprète à l'écran les commandes HTML contenues dans un document accessible sur le WWW.

22

Un langage en évolution

Le langage HTML est utilisé sur le WWW depuis 1990.

Version Year HTML 1991 HTML 2.0 1995 HTML 3.2 1997 HTML 4.01 1999 XHTML 2000 HTML5 2014

Historique HTML4 en 1999, beaucoup de changements

depuis… Cooperation entre le World Wide Web

Consortium (W3C) et le Web Hypertext Application Technology Working Group (WHATWG).

WHATWG travaillait sur de nouveaux formulaires et applications, le W3C sur XHTML 2. En 2006, ils ont décidé de coopérer pour créer HTML5.

Forte implication des industriels et fabriquants de navigateurs

24

Pages HTML

Il faut d'abord spécifier qu'un document contenant des annotations en HTML n'est rien de plus qu'un fichier texte.

Il peut donc être reconnu sans problèmes de conversion d'un environnement à un autre. Une page peut donc être lue et interprétée par n'importe quel navigateur sur n'importe quelle plateforme.

25

Stratégies de production HTML 1. directement rédiger un texte en utilisant des codes html. 2. utiliser un éditeur spécialisé éventuellement “Wysiwyg” (dans

la mesure où ce concept est approprié). 3. utiliser un traitement de texte comme Framemaker, Word ou

Wordperfect ou encore un langage de formatage comme Latex et ensuite traduire le texte en html.

4. générer du html à partir d’une source arbitraire comme une base de données à l’aide d’un logiciel. Ceci en temps réel ou en mode batch.

26

Description d’un document html Le “html” (HyperText Markup Language) est un langage permettant de

mettre en forme du texte, des images, du sons, etc. (la liste s’allonge presque tous les jours) destinés à être visualisés grâce à un navigateur (les plus connus étant Microsoft Internet Explorer Netscape Navigator, Safari de Mac, etc.).

Ce langage de description de page utilise des marques - ou balises - pour spécifier la façon dont un élément doit apparaître, pour afficher des images ou définir des actions.

Ces marques sont toujours placées entre les signes “<” et “>” et agissent très souvent par paire : la première spécifie le début d’application du style (ou de l’action), la seconde, qui comporte le signe “/”, marque la fin d’application du style (ou de l’action).

27

Attention à ne pas oublier cette marque de fin, car le style ou l’action défini est actif tant que le navigateur ne rencontre pas la marque de fin; ainsi si vous utilisez une marque “mets un italique” au début de votre document et que vous oubliez la marque “enlèves l’italique”, tout votre document apparaîtra en italique .

Remarque : les marques peuvent être saisies indifféremment en majuscule ou minuscule, tous les éditeurs de documents html, ainsi que les navigateurs, reconnaissent les deux syntaxe, l’utilisation des minuscules ou majuscules est donc un choix - une préférence - personnel

28

Créer un document HTML

<HTML> "première ligne du document" <head> "ouverture de la zone d'entête" <title> "titre de la page suivi de </title>" </head> "fermeture de la zone d'entête." <body> "ouverture du corps du document" "Mettre le texte et les images ici" </body> "fin du corps du document" </HTML> "fin du document HTML"

29

Au sujet de la commande <title>, il est possible d'obtenir une animation sympathique (mais inutile) à l'ouverture du document HTML en insérant plusieurs commandes <title> consécutives. Le navigateur lira successivement chaque ligne et réaffichera le nouveau titre à chaque raffraichissement.

30

Formatage du texte

Entêtes (Headers) Le formatage d'une page commence généralement par le choix

et l'usage d'entêtes prédéterminées qui s'échelonnent de H1 à H6 (niveaux). La commande H1 est la plus grosse disponible et la H6 est la plus petite.

Les commandes Hx comprennent un choix de taille, le caractère gras et un retour de paragraphe.

<Hi> suivi de l'entête et de </Hi> Il n'y a pas de niveau inférieur à H6

31

Autres commandes <center> suivi de « Quelquechose de centré » suivi de

</center> donne:

Quelquechose de centré <P> donne un changement de paragraphe <br> donne un simple changement de ligne

Notez ici que les commandes <P> et <BR> n'ont pas à être fermées. Vous pouvez utiliser plusieurs commandes <BR> ou <P> répétitivement pour augmenter l'espacement.

32

<b></b>donne un texte en gras: texte en gras <strong></strong>donne un texte en gras également:

texte en gras <EM></EM> donne un texte en italique: texte en italique <I></I> donne également un texte en italique: texte en

italique <CITE></CITE>donne aussi un texte en italique: texte en

italique <TT></TT>donne un texte formaté avec une fonte à

espacement constant (teletype): texte formaté avec une police à espacement constant

33

Texte préformaté Les annotations <pre></pre> obligent le navigateur à

afficher un texte préformaté. Le navigateur respecte alors les fins de ligne (retours de chariot).

34

Augmentation ou réduction de la taille des caractères <FONT SIZE="+2"></FONT SIZE="+2"> donne un

accroissement de la grosseur affichée du texte de 2 unités:

<FONT SIZE="+4 »></FONT SIZE="+4"> donne un accroissement de la grosseur affichée du texte de 4 unités:

<FONT SIZE="-2"></FONT SIZE="-2"> donne une réduction de la grosseur affichée du texte de 2 unités:.

35

La commande <BLOCKQUOTE></BLOCKQUOTE> permet d'emprisonner un paragraphe telle une citation en alinéa

La commande <STRIKE></STRIKE> permet de rayer un texte

La commande <SUB></SUB> permet d'utiliser les indices dans des formules comme dans l'exemple qui suit: H 2 O.

La commande <SUP></SUP> permet d'utiliser les exposants dans des formules

36

Caractères spéciaux dans HTML Certains caractères ont une signification spécifique dans

HTML. Pour les utiliser comme tels dans une page, il faut utiliser les commandes alternatives pour les afficher correctement à l'écran. Ces commandes sont: &lt; pour: < &gt; pour: > &amp; pour: & &quot; pour: "

37

À PROPOS DES ACCENTS... L'utilisation des caractères accentués sur le WWW

pose un certain nombre de problèmes car il y a plusieurs façons de traiter les caractères diacritiques.

On peut en effet utiliser une des deux méthodes suivantes: Les caractères référencés (entity references en anglais) Les caractères ISO Latin-1 (ISO-8859-1)

38

Les caractères référencés Avec cette méthode, on utilise seulement le jeu de

caractères ASCII standard. Ce dernier ne contient que 127 caractères (non-

accentués) et n'utilise que sept bits sur les huit que contient Un octet (l'unité fondamentale permettant de représenter un caractère latin sur les ordinateurs).

39

Si le travail de composition d'un document HTML doit être effectué sur des plateformes utilisant des encodages différents, la seule façon d'assurer l'intégrité du document lorsque celui-ci est échangé consiste à utiliser les caractères référencés. Cette situation est appelée à évoluer car l'interopérabilité entre les systèmes devient de plus en plus important.

40

Images Les navigateurs HTML reconnaissent généralement deux formats

d'images; les images GIF et les images JPEG. Ces deux formats d'images sont comprimés. L'insertion d'une image est possible en tapant la commande

suivante: <img src="images/serviette50.gif"> Le segment IMG SRC indique qu'il s'agit de la source d'une image,

le premier terme entre les guillemets indique le nom du dossier où se trouve la ou les images, le deuxième terme indique le nom du fichier contenant l'image et le format de celle-ci. Une image en format GIF se termine par .GIF alors qu'une image en format JPEG se termine par .JPEG ou .JPG . La taille de l'image est déterminée par le fichier lui-même. On peut placer par exemple une grande image occupant l'ensemble de l'écran:

41

Les liens Pour insérer un pointeur (lien hypertexte-hypermédia), il faut

indiquer une référence (appelée URL pour Uniform Ressource Locator) et un élément, texte ou image, visible à l'écran sur lequel on doit cliquer pour y accéder. Voici un exemple de code pour obtenir un pointeur: <A HREF="dossier/menu_du_jour.HTML">Menu du jour</A>.

Le pointeur apparaît alors en couleur contrastée et souligné dans le navigateur

Les pointeurs peuvent diriger le navigateur vers des sites HTTP, FTP, TELNET, TN3270, GOPHER ou USENET. On peut aussi entrer directement sur un fichier sur le système local ou sur un réseau local.

42

Pour créer un pointeur, il s'agit tout simplement de définir le type de document dans la commande A HREF comme dans les exemples qui suivent:

Site HTTP (WWW) Le code:<A HREF="http://WWW.fsaa.ulaval.ca">Serveur WWW de

la FSAA</A>donne accès à un serveur WWW, notamment à celui de la Faculté des sciences de l'agriculture et de l'alimentation de l'Université Laval.

Site FTP Le code:<A HREF="ftp://ftp.apple.com/pub">Site FTP de la

compagnie Apple</A>donne accès à un dossier public sur un serveur FTP de la compagnie Apple inc.

43

Fichier sur le système hôte Le code:<A HREF="fichier.HTML">fichier</A> donne tout

simplement accès à un fichier HTML situé au même niveau hiérarchique que le fichier actuellement ouvert sur le serveur.

Pour obtenir un document situé ailleurs sur le même serveur, il faut spécifier le sentier à suivre. Dans ce cas, on indique le chemin complet avec le code qui suit: <A HREF="http://www.grr.ulaval.ca/grrwww/glossairehtml.html">Glossaire</A>.

La commande A NAME La commande A NAME enregistre un point d'accès à l'intérieur d'un

document HTML. On peut ensuite référer directement à ce point précis avec une commande A HREF. La commande peut se taper directement comme ceci: <a name="Gopher">, ce qui indique au navigateur où se trouve la section visée. Pour se rendre à cet endroit, il faut taper la référence comme ceci: <a href="manuel8.html#Gopher">Gopher</a>.

44

Tableaux Commandes de base

Les commandes de base pour créer des tableaux en HTML sont les suivantes: · <TABLE></TABLE> Cette commande est la

commande principale pour ouvrir une zone de tableaux. · <TR></TR> Commande pour définir une rangée. Il faut

utiliser une séquence <TR></TR> pour chacune des rangées requises, à l'intérieur de la zone <TABLE></TABLE> comme dans l'exemple ci-dessous:

· <TD></TD> Commande pour spécifier les données pour chaque rangée comme dans l'exemple ci-dessus. Le code pour produire ce tableau s'écrira donc:

45

Structure générale d'un tableau (1) le tableau commence par la balise <TABLE>

(2) puis vient la balise <TR> qui débute la première ligne du tableau

(3) puis on trouve une balise <TD> qui ouvre la première cellule de données

(3 bis) Le texte (ou l'image) contenu dans cette cellule est tapé et mis en forme

(4) la cellule est fermée par </TD> Les étapes (3), (3bis) et (4) sont répétées autant de fois qu'il y a de

cellules dans la ligne

(5) puis la ligne est fermée par </TR> les étapes (2) à (5) sont répétées autant de fois qu'il

y a de lignes dans le tableau

(6) le tableau est terminé par la balise </TABLE>

46

<TABLE> ... </TABLE>

<TABLE WIDTH="w|w%" BORDER="b" CELLPADDING="cp" CELLSPACING="cs">

WIDTH="w|w%" Largeur du tableau exprimée en pixel ou en

pourcentage de la largeur de la fenêtre (à utiliser avec prudence).

BORDER="b" Largeur de l'encadrement du tableau et des cellules

exprimée en pixels. Si une cellule est vide, il n'apparaît pas.

47

<TABLE> ... </TABLE>

CELLPADDING="cp"

Marge intérieure de chaque cellule (en pixels).

CELLSPACING="cs" Espacements horizontal et vertical entre les cellules

du tableau

48

Les lignes : <TR> … </TR> <TR ALIGN="LEFT|CENTER|RIGHT|JUSTIFY"

VALIGN="TOP|MIDDLE|BOTTOM"> ALIGN="LEFT|CENTER|RIGHT|JUSTIFY"

Alignement horizontal du contenu de toutes les cellules de la ligne : LEFT → à gauche (attribut par défaut) CENTER → au centre RIGHT → à droite JUSTIFY → justifié (à utiliser avec prudence !)

VALIGN="TOP|MIDDLE|BOTTOM"> Alignement vertical du contenu de toutes les cellules de la ligne :

TOP → haut de la cellule MIDDLE → centre verticalement (attribut par défaut) BOTTOM → bas de la cellule

49

Les cellules : <TD> … </TD> <TD ALIGN="LEFT|CENTER|RIGHT|JUSTIFY"

VALIGN="TOP|MIDDLE|BOTTOM" COLSPAN="c" ROWSPAN="r" WIDTH="w|w%">

ALIGN="LEFT|CENTER|RIGHT|JUSTIFY" Alignement horizontal cellule par cellule (cf. <TR> …

</TR>). VALIGN="TOP|MIDDLE|BOTTOM"

Alignement vertical cellule par cellule (cf. <TR> … </TR>).

50

Les cellules : <TD> … </TD>

WIDTH="w|w%" Largeur de la cellule en pixels ou en pourcentage de

la largeur du tableau. A spécifier une seule fois dans le tableau (ie pour

une seule ligne) car elle détermine la largeur de la colonne dont fait partie la cellule.

Quand cette option est omise, la largeur des cellules est calculée par rapport à celle du tableau, aux espacements et la largeur de la cellule contenant le plus de texte, colonne par colonne).

Remarques Veiller à avoir le même nombre de cellules pour

chaque ligne du tableau (en fusionner éventuellement).

51

Les cellules : <TD> … </TD>

COLSPAN="c" Nombre de cellules fusionnées à l'horizontal.

Permet de disposer du texte au dessus de plusieurs colonnes.

Pour que le tableau s'affiche correctement, il faut que ligne par ligne, le nombre de cellules soit le même. Dans ce cas où une cellule est une cellule fusionnée (avec un COLSPAN), elle compte pour autant de cellule que la valeur du COLSPAN.

ROWSPAN="r" idem pour les fusions à la verticale

<TD ROWSPAN=3>

<TD COLSPAN=2>

52

Un exemple de tableau complexe

La programmation PHP

53

La petite histoire du PHP 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.

C’est un langage incrusté au HTML et interprété côté serveur. Il dérive du C et du Perl dont il reprend la syntaxe. Il est extensible grâce à de nombreux modules et son code source est ouvert. Comme il supporte tous les standards du web et qu’il est gratuit, il s’est rapidement répandu sur la toile.

En 1997, PHP devient un projet collectif et son interpréteur est réécrit par Zeev Suraski et Andi Gutmans pour donner la version 3 qui s’appelle désormais PHP : Hypertext Preprocessor (acronyme récursif à l’exemple du système Open Source Linux : Is Not UniX).

Il existe par ailleurs des applications web prêtes à l’emploi (PHPNuke, PHP SPIP, PHPSlash…) permettant de monter facilement et gratuitement son portail.

Introduction au PHP

PHP = Personal Home Pages ou PHP Hypertext Preprocessor

Langage de script interprété (non compilé)

Installation d’un serveur web (wampServer 2)

www.wampserver.com/download.php

56

Ces programmes dont nous allons avoir besoin, quels sont-ils ?

57

Apache : c'est ce qu'on appelle un serveur web. Il s'agit du plus important de tous les programmes, car c'est lui qui est chargé de délivrer les pages web aux visiteurs. Cependant, Apache ne gère que les sites web statiques (il ne peut traiter que des pages HTML). Il faut donc le compléter avec d'autres programmes. •PHP : c'est un plug-in pour Apache qui le rend capable de traiter des pages web dynamiques en PHP. En clair, en combinant Apache et PHP, notre ordinateur sera capable de lire des pages web en PHP.

•MySQL : c'est le logiciel de gestion de base de données dont je vous ai parlé en introduction. Il permet d'enregistrer des données de manière organisée (comme la liste des membres de votre site). Nous n'en aurons pas besoin immédiatement, mais autant l'installer de suite.

Logo d'Apache

Installation de wampServer2

58

59

60

61

62

63

64

65

66

67

68

69

70

Barre des tâches

71

72

Plan

Fonctionnement interne Bases du langage Tableaux, fonctions Formulaires Fichiers Base de données Sites

Fonctionnement interne

Introduction

Le PHP permet de réaliser des sites Internet élaborés. Le HTML simple ne suffit pas à répondre aux impératifs imposés par

les dernières évolutions du Web. PHP est disponible dans plusieurs environnements, tels qu'Unix

(Linux), Windows (95, 98, NT, XP, Vista, 7 etc.) et Macintosh. PHP est un langage de programmation spécialisé dans la

génération de code, dont le langage de prédilection est le HTML. Il possède une impressionnante quantité d'outils (manipulation

d'images, traitement de fichiers, accès aux bases de données, etc.)

Le langage Le PHP est un langage complet, écrit en C, qui reprend une grande

partie des spécificités techniques et sémantiques de ce langage. Le moteur d'interprétation du langage lit un fichier source PHP, puis

génère un flux destination, en respectant les définitions et règles suivantes : Un bloc PHP est un groupe continu de lignes, encadré par deux

balises : <? et ?> ou <?php et ?> ou <% et %>. Toute ligne située à l'extérieur de ces balises n'est pas interprétée

et est envoyée telle quelle dans le flux de sortie. Toute ligne située à l'intérieur de ces balises est considérée comme

une instruction PHP et est donc interprétée par le moteur. Les instructions PHP n'apparaissent pas dans le résultat généré. Lorsqu'une erreur survient, un message est intégré dans le flux de

sortie, et la génération du script est interrompue.

Qu’est-ce que PHP

Client

Navigateur (Mozilla)

clic

Serveur (www.google.com)

Serveur web (Apache)

PHP

requête HTTP

réponse

PHP ou HTML ?

HTTP

Internet

Serveur w

eb (Apache)

Nav

igat

eur w

eb (M

ozill

a)

PHP ou HTML ? (2)

Code PHP : « côté serveur »

Navigateur client : HTML

Conséquence : le code source PHP est protégé

80

La syntaxe de base http://php.net/download-docs.php

Quelques balises…

81

Passer du HTML au PHP (1)

Lorsque PHP traite un fichier, il cherche les balises d'ouvertures et de fermetures, qui délimitent le code qu'il doit interpréter. De cette manière, cela permet à PHP d'être présent dans toutes sortes de documents, car tout ce qui se trouve en dehors des balises ouvrantes / fermantes de PHP est ignoré. Exemple 1. Code PHP dans un document HTML <p>Ceci sera ignoré.</p> <?php echo 'Alors que ceci sera analysé par PHP.'; ?> <p>Ceci sera également ignoré.</p>

82

Passer du HTML au PHP (2) Vous pouvez également utiliser des structures plus avancées :

Exemple 10-2. Echappement avancé <?php if ($expression) { ?> <strong>Ceci est vrai.</strong> <?php } else { ?> <strong>Ceci est faux.</strong> <?php } ?>

83

Séparation des instructions

Comme en C ou en Perl, PHP requiert que les instructions soient terminées par un point-virgule à la fin de chaque instruction. La balise fermante d'un bloc de code PHP implique automatiquement un point-virgule ; vous n'avez pas besoin d'utiliser un point-virgule pour terminer la dernière ligne d'un bloc PHP.

84

Les Types

85

Les types – Booléens – Entiers – Les nombres décimaux – Les chaînes de caractères – Les tableaux – Les objets – Ressources – La valeur NULL – Pseudo-types utilisés dans cette documentation – Définition du type

86

Introduction PHP supporte les huit types basiques suivants :

PHP supporte quatre types scalaires : booléen entier nombre à virgule flottante chaîne de caractères

PHP supporte deux types composés : tableau objet

PHP supporte deux types spéciaux : ressource NULL

Ce manuel introduit également quelques pseudo-types pour des raisons de lisibilités : mixed nombre Callback

Habituellement, le type d'une variable n'est pas déclaré par le programmeur. Il est décidé au moment de l'exécution par PHP, en fonction du contexte dans lequel la variable est utilisée.

87

Vérification de type de variable Pour vérifier la présence de certains types, n'utilisez pas gettype(), mais plutôt les fonctions is_type. Par exemple : <?php $a_bool = TRUE; // un booléen $a_str = 'foo'; // une chaîne de caractères $a_str2 = 'foo'; // une chaîne de caractères $an_int = 12; // un entier echo gettype($a_bool); // affiche "boolean" echo gettype($a_str); // affiche "string" // Ceci est un entier, on l'incrémente de 4 if (is_int($an_int)) { $an_int += 4; echo ‘an_int =' . $an_int; } // Si $bool est une chaîne, l'afficher // (Ne pas imprimer n'importe quoi). if (is_string($a_bool)) { echo 'Chaîne : ' . $a_bool;

}?>

88

Convertir les types des variables Si vous voulez forcer une variable à être convertie en un certain type, vous devez transtyper (cast) la variable ou utiliser la fonction settype(). Transtypage La conversion de type en PHP fonctionne de la même manière qu'en C : le nom du type désiré est écrit entre parenthèses devant la variable à transtyper ("cast"). Settype

Affecte un type à une variable settype() force le type de la variable var en type.

89

en bref ... Exemple Transtypage : <?php $foo = 10; // $foo est un entier $bar = (double) $foo; // $bar est un double ?> Exemple settype() : $foo = "5bar"; // chaîne $bar = true; // booléen settype($foo, "integer"); // $foo vaut maintenant 5 (integer) settype($bar, "string"); // $bar vaut maintenant "1" (string)

90

Booléens C'est le type le plus simple. Un booléen exprime une valeur de vérité. Il peut prendre comme valeur soit TRUE soit FALSE.

<?php // == est un opérateur d'égalité // qui retourne un booléen if ($action == 'show_version') { echo 'La version est la 1.23'; } // Ceci n'est pas nécessaire if ($show_separators == TRUE) { echo "<hr />\n"; } // car vous pouvez simplement utiliser if ($show_separators) { echo "<hr />\n"; } ?>

Les constantes

Il est inutile de revenir sur l'intérêt des constantes.

Pour définir une constante il suffit d'utiliser l'instruction

Define exemple : define(“MACONSTANTE”, “Hello World”) ; Echo MACONSTANTE;

Commentaires Un script php se commente comme en C : Exemple : <?php // commentaire de fin de ligne /* commentaire sur plusieurs lignes */ # commentaire de fin de ligne comme en Shell ?> Tout ce qui se trouve dans un commentaire est ignoré. Il est conseillé de commenter

largement ses scripts.

93

Les Variables

94

Les variables

– Essentiel – Opérations logiques – Tableaux, fonctions – Variables pré-définies – Portée des variables – Les variables dynamiques – Variables externes à PHP

95

Essentiel En PHP, les variables sont représentées par un signe dollar "$" suivi du nom de la variable. Le nom est sensible à la casse (i.e. $x != $X). Les noms de variables suivent les mêmes règles de nommage que les autres entités PHP. Un nom de variable valide doit commencer par une lettre ou un souligné (_), suivi de lettres, chiffres ou soulignés. Exprimé sous la forme d'une expression régulière, cela donne : '[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*' Note : Dans nos propos, une lettre peut être une des lettres minuscules (a à z) ou majuscules (A à Z) et les caractères ASCII de 127 à 255 (0x7f-0xff).

96

Variables pré-définies

PHP fourni un grand nombre de variables pré-définies. Cependant, beaucoup de ces variables ne peuvent pas être présentées ici, car elles dépendent du serveur sur lequel elles tournent, de la version du serveur et de la configuration du serveur ou encore d'autres facteurs.

97

Exemples de variables pré-définies - $GLOBALS : ce tableau contient toutes les variables globales définies. - $_GET : ce tableau contient toutes les variables provenant de l'URL

courante. - $_POST : ce tableau contient toutes les variables provenant d'un formulaire

en méthode post. - $_SERVER : ce tableau contient toutes les variables fournies par le serveur

Web ou le client. - $_COOKIE : ce tableau contient toutes les valeurs et noms des cookies

envoyés par le client. - $_FILES : ce tableau contient les variables fournies par le navigateur lors

d'un upload de fichier par le client. - $_ENV : ce tableau contient toutes les variables fournies par l'environnement

PHP. - $_REQUEST : ce tableau contient toutes les variables fournies par

l'intermédiaire d'un script d'entré (GET,POST,COOKIE... par exemple). - $_SESSION : ce tableau contient toutes les variables de session utilisées.

Opérateurs Logiques

Ils permettent de combiner plusieurs tests entre eux.

exemple : Ici $a et $b peuvent prendre les valeurs booléennes vrai ou faux.

Opérateur Exemple Résultat

and ( && ) $a and $b vrai si $a et $b sont vrai $a && $b tous les deux

or ( || ) $a or $b vrai si $a est vrai ou $b $a || $b est vrai, ou encore si $a et $b sont vrai tous les deux

not ( ! ) not $a vrai si $a est faux !$a

Opérateurs de Comparaison

Ils permettent de comparer les valeurs de deux variables.

exemple : Ici $a et $b sont du même type de variable.

Opérateur Exemple Résultat

== $a == $b vrai si $a est égal à $b

!= $a != $b vrai si $a est différent de $b

< $a &lt; $b vrai si $a est inférieur $b

> $a > $b vrai si $a est supérieur $b

<= $a <= $b vrai si $a est inférieur ou égal à $b

>= $a >= $b vrai si $a est supérieur ou égal à $b

Affichage

Les fonctions d’affichage : echo() : écriture dans le navigateur print() : écriture dans le navigateur printf([$format, $arg1, $arg2]) : écriture formatée comme en C, i.e. la chaîne de caractère est constante et contient le format d’affichage des variables passées en argument Exemples : echo ‘’Bonjour $name’’; print(‘’Bonjour $name’’); printf(‘’Bonjour %s’’, $name);

Tableaux, fonctions

Tableaux

Tableaux classiques (indicés par des entiers)

0 "via"

1 "bde"

2 "forum"

3 "jce"

$assoces = array( "via", "bde", "adr", "jce" );

echo $assoces[2]; // affiche "adr"

$rien = array();

Tableau à zéro élément :

Tableau initialisé avec 4 éléments :

On accède aux différents éléments comme d’habitude :

On peut affecter des valeurs : $assoces[2] = "forum";

Finalement, on a obtenu le tableau suivant :

On récupère sa taille avec count()

echo count( $assoces ) // affiche 4

Tableaux (suite)

Tentons : $assoces["informatique"] = "via"; $assoces[10000] = "adr";

On obtient tout simplement le tableau suivant :

0 "via"

1 "bde"

2 "forum"

3 "jce"

"informatique" "via"

10000 "adr"

On accède à ses éléments comme avant : echo $assoces["informatique"]; // affiche "via"

On récupère toujours sa taille avec count() echo count( $assoces ) // affiche 6

Exemple de tableau :

104

La fonction foreach() Fonctionne comme une boucle for, mais parcourt tous les

éléments d'un tableau <html><body> <?php $bureau = array("youssef","ali","hind","sara"); foreach($bureau as $surnom) { echo "$surnom est au <i>bureau</i> de REDA<br />\n"; } ?></body></html>

<html> <body> youssef est au <i>bureau</i> de REDA<br /> ali est au <i>bureau</i> de REDA<br /> hind est au <i>bureau</i> de REDA<br /> sara est au <i>bureau</i> de REDA<br /> </body> </html>

youssef est au bureau de REDA ali est au bureau de REDA hind est au bureau de REDA sara est au bureau de REDA

106

Les Expressions

107

Les expressions (1) Les expressions sont la partie la plus importante de PHP. En PHP, presque tout ce que vous écrivez est une expression. La manière la plus simple de définir une expression est : "tout ce qui a une valeur". Les formes les plus simples d'expressions sont les constantes et les variables. Lorsque vous écrivez "$a = 5", vous assignez la valeur '5' à la variable $a. Bien évidemment, '5' vaut 5 ou, en d'autres termes, '5' est une expression avec pour valeur 5 (dans ce cas, '5' est un entier constant). Après cette assignation, vous pouvez considérer que $a a pour valeur 5 et donc, écrire $b = $a, revient à écrire $b = 5. En d'autres termes, $a est une expression avec une valeur de 5.

108

Les expressions (2) Affectation d'expressions via les fonctions : <?php function foo () { return 5; } ?> L'opérateur conditionnel ternaire <?php $first ? $second : $third ?> Si la valeur de la première sous-expression est vraie (différente de 0), alors la deuxième sous-expression est évaluée et constitue le résultat de l'expression conditionnelle. Sinon, c'est la troisième sous-expression qui est évaluée et qui constitue le résultat de l'expression.

109

Les expressions (3) PHP est un langage orienté expression, dans le sens où presque tout est une expression. Considérons l'exemple dont nous avons déjà parlé, '$a = 5'. Il est facile de voir qu'il y a deux valeurs qui entrent en jeu ici, la valeur numérique constante '5' et la valeur de la variable $a qui est mise à jour à la valeur 5. Mais, la vérité est qu'il y a une autre valeur qui entre en jeu ici et c'est la valeur de l'assignation elle-même. L'assignation elle-même est assignée à une valeur, dans ce cas-là 5. En pratique, cela signifie que '$a = 5' est une expression qui a pour valeur 5. Donc, écrire '$b = ($a = 5)' revient à écrire '$a = 5; $b = 5;' (un point virgule marque la fin d'une instruction). Comme les assignations sont analysées de droite à gauche, vous pouvez aussi bien écrire '$b = $a = 5'.

110

Les expressions (4) Un autre bon exemple du langage orienté expression est la pre-incrémentation et la post-incrémentation. Ce sont les opérateurs d'incrémentation et de décrémentation. PHP ajoute les possibilités d'incrémentation et de décrémentation comme c'est le cas dans le langage C. En PHP, comme en C, il y a deux types d'opérateurs d'incrémentation (pre-incrémentation et post-incrémentation). Les deux types d'opérateur d'incrémentation jouent le même rôle (c'est-à-dire qu'ils incrémentent la variable). La différence vient de la valeur de l'opérateur d'incrémentation. L'opérateur de pre-incrémentation, qui s'écrit '++$variable', évalue la valeur incrémentée (PHP incrémente la variable avant de lire la valeur de cette variable, d'où le nom de pre-incrémentation). L'opérateur de post-incrémentation, qui s'écrit '$variable++', évalue la valeur de la variable avant de l'incrémenter (PHP incrémente la variable après avoir lu sa valeur, d'où le nom de post-incrémentation).

111

Pré et post-incrémentation : exemples <?php function double($i) { return $i*2; } $b = $a = 5; /* Assigne la valeur 5 aux variables $a et $b */ $c = $a++; /* Post-incrémentation de la variable $a et assignation de la valeur à la variable $c */ $e = $d = ++$b; /* Pre-incrémentation, et assignation de la valeur aux variables $d et $e */ /* à ce niveau, les variables $d et $e sont égales à 6 */ echo "a=$a, c=$c <br/>" ; echo "e=$e, d=$d <br/>" ; $f = double($d++); /* assignation du double de la valeur de $d à la variable $f ($f vaut 12), puis incrémentation de la valeur de $d */ $g = double(++$e); /* assigne deux fois la valeur de $e après incrémentation, 2*7 = 14 to $g */ echo "f=$f, d=$d <br/>" ; echo "g=$g, e=$e <br/>" ; $h = $g += 10; /* Tout d'abord, $g est incrémentée de 10, et donc $g vaut 24. Ensuite, la valeur de $g, (24) est assignée à la variable $h, qui vaut donc elle aussi 24. */ ?>

112

Les expressions (6) Pour le dernier exemple d'expression, nous allons parler des combinaisons d'opérateurs/assignation. Vous savez que si vous voulez incrémenter la variable $a d'une unité, vous devez simplement écrire '$a++'. Mais si vous voulez ajouter la valeur '3' à votre variable ? Vous pouvez écrire plusieurs fois '$a++', mais ce n'est pas la meilleure des méthodes. Une pratique plus courante est d'écrire '$a = $a + 3'. L'expression '$a + 3' correspond à la valeur $a plus 3, et est de nouveau assignée à la variable $a. Donc, le résultat est l'incrémentation de 3 unités. En PHP, comme dans de nombreux autres langages comme le C, vous pouvez écrire cela de manière plus concise, manière qui avec le temps se révélera plus claire et plus rapide à comprendre. Ajouter 3 à la valeur de la variable $a peut s'écrire '$a += 3'. Cela signifie précisément : "on prend la valeur de la variable $a, on ajoute la valeur 3 et on assigne cette valeur à la variable $a". Et pour être plus concis et plus clair, cette expression est plus rapide. La valeur de l'expression '$a += 3', comme l'assignation d'une valeur quelconque, est la valeur assignée. Il est à noter que ce n'est pas 3 mais la combinaison de la valeur de la variable $a plus la valeur 3. (c'est la valeur qui est assignée à la variable $a). N'importe quel opérateur binaire peut utiliser ce type d'assignation, par exemple '$a -= 5' (soustraction de 5 de la valeur de la variable $a), '$b *= 7' (multiplication de la valeur de la variable $b par 7).

113

Les structures de contrôle

Structures de contrôle

Les structures de contrôle permettent de répéter certaines actions ou de soumettre certaines exécutions à des conditions. En PHP, leur syntaxe est similaire à celle du langage C. Ces structures fonctionnent pour la plupart à partir d’un test. Ce test est une expression qui doit renvoyer une valeur comprise comme un booléen. Le plus souvent, on utilisera les opérateurs logiques et de comparaison, mais il est possible d’avoir une expression complexe comprenant des appels de fonctions et des affectations de variables.

114

115

Les conditions

Dans vos scripts, il sera important de pouvoir effectuer une prise de décision, et donc de poser des conditions à l’exécution de telle ou telle action.

116

L’instruction : if(){} L’instruction if(){} est la structure de test la plus basique. Elle permet d’exécuter une suite d’instructions en fonction d’une condition. La condition entre parenthèses est évaluée et les instructions situées entre les accolades sont exécutées seulement si l’évaluation aboutit à TRUE

117

L’instruction : if(){} En PHP, cela s’écrit de la façon suivante : if( condition ){ instructions } Exemple : <?php $age = 25; if ( $age < 18 ) { echo 'Vous êtes trop jeune pour entrer ici'; exit(); // La fonction exit() arrête l’exécution du script } ?> La condition peut être complexe ; son unique pré-requis est de renvoyer une valeur qui sera interprétée comme un booléen. Il est possible de les combiner grâce à l’opérateur && pour en faire une expression unique qui ne renverra TRUE que si les deux composantes renvoient TRUE : ($age>18 && $age<35).

118

La clause else{} Nous n’avons actuellement vu que le cas où la condition est vérifiée. On peut également spécifier une suite d’instructions à exécuter lorsque la condition n’est pas réalisée, avec l’instruction else{} : if( condition ){ Instructions si la condition est vérifiée. }else{ Instructions si la condition n’est pas vérifiée. } Exemple : <?php if ($temps = = 'ensoleillé')) { echo 'Il fait beau'; }else{ echo 'Il ne fait pas beau'; } ?>

L’instruction : if

119

120

La clause elseif{}

Enfin, il est possible d’enchaîner une série d’instructions if (sans avoir besoin de les imbriquer) à l’aide de l’instruction elseif {}. if (condition1) { instructions si la condition1 est vérifiée. }elseif (condition2){ instructions si la condition2 est vérifiée. }elseif(condition3){ instructions si la condition3 est vérifiée. }else{ instructions si les conditions ne sont pas vérifiées. }

L’instruction : if - elseif

121

122

Exemple Voyons maintenant un exemple qui nous permettra d’utiliser une nouvelle fonction : la fonction mt_rand(). La fonction mt_rand() prend en argument deux paramètres, le minimum et le maximum, et fournit une valeur aléatoire comprise entre ces deux valeurs. <?php $salaire = mt_rand(1,9000) ; if ($salaire < 1000) { echo 'Vous êtes payé en dessous du SMIC'; } elseif ($salaire < 6000) { echo 'Vous êtes raisonnablement bien payé'; // On notera ici qu’il n’est pas nécessaire de répéter la // condition impliquant que le salaire est supérieur à 1000 } else { echo 'Contactez–moi, votre travail m\'intéresse !'; } ?>

123

Les accolades dans les conditions Comme vous avez pu le constater, des accolades suivent la condition dans nos exemples. Il est cependant possible de s’en passer quand une seule instruction suit la condition. if( condition ) instruction; Si les accolades ne sont pas placées, seule la première instruction sera effectuée. Exemple : <?php if ($temps = = 'ensoleillé') echo 'Il fait beau'; echo ‘et chaud'; // Cette instruction sera toujours réalisée ?>

124

L’instruction : switch Cette instruction permet de faire plusieurs tests sur la valeur d’une variable, ce qui évite de faire plusieurs if imbriqués et simplifie ainsi la lecture du code. <?php $nombre = mt_rand(0,4); switch ($nombre) { case 4: echo "$nombre est supérieur à 3 <br>"; case 3: echo "$nombre est supérieur à 2 <br>"; case 2: echo "$nombre est supérieur à 1 <br>"; case 1: echo "$nombre est supérieur à 0 <br>"; break ; default: echo "$nombre est 0 <br>"; } ?>

125

L’instruction : switch Les parenthèses qui suivent le mot-clé switch() indiquent une expression dont la valeur est testée successivement par chacun des case. Lorsque la valeur correspond à un case, la suite d’instructions est exécutée jusqu’à la fin du switch ou l’apparition d’un break. Si aucune correspondance n’est trouvée, alors le code est exécuté à partir du mot-clé default. Une fois la correspondance trouvée, toutes les instructions sont exécutées. Il faut bien remarquer que dans notre exemple, le nombre 3 afficherait trois lignes et non pas une seule. Le rendu de l’exemple est donné à la figure :

126

Les boucles

127

La boucle : while Les boucles sont des structures qui permettent d’exécuter plusieurs fois une même série d’instructions en fonction d’une (ou plusieurs) condition(s). L’instruction while(){} correspond à « tant que ». Donc, on pourra exécuter des instructions tant qu’une condition sera remplie :

128

La boucle : while En PHP, cela s’écrit de la façon suivante : while ( condition ){ instructions } Le programme commence par tester si la condition est vraie. La boucle while(){} exécute alors le code du programme jusqu’à ce que la condition devienne fausse. <?php $i = 1; while ( $i <= 10 ) { echo $i; $i++; } ?> La condition n’est testée qu’après exécution complète du bloc d’instructions. Si la condition est évaluable à faux avant la fin, le reste des instructions s’exécutera tout de même.

129

La boucle : while L’instruction peut aussi être utilisée avec une syntaxe alternative : do { instructions } while(condition) Le programme commence par tester si la condition est vraie. La boucle while(){} exécute alors le code du programme jusqu’à ce que la condition devienne fausse. <?php $i = 1; do { echo "$i"; $i++; } while ($i <= 10); ?>

130

La boucle : for La structure d’une boucle for est : for (expression1 ; condition ; expression2) { Code à exécuter}

131

La boucle : for for (expression1 ; condition ; expression2) { Code à exécuter} 1) expression1 est exécutée une fois à l’entrée de la boucle pour l’initialiser. 2) La condition est testée à chaque fois qu’on se propose de repasser dans la boucle, y compris la première fois. En général, cela permet de tester un compteur. 3) expression2 est exécutée à la fin d’un passage dans la boucle. En général, on incrémente une variable qui est utilisée dans le test de la condition. Cette instruction est souvent utilisée pour des boucles de longueur déterminée puisque son utilisation s’avère assez simple.: <?php for ( $i = 2; $i <= 10 ; $i++ ) { echo "$i -"; } ?>

Boucle : for

Comme dans tous les autres langages

<html> <body> <?php // l'intérêt du $ for ($i=0; $i<4; $i++) { echo " Number $i <br />\n"; } ?> </body> </html>

<html> <body> Number 0 <br /> Number 1 <br /> Number 2 <br /> Number 3 <br /> </body> </html>

Number 0 Number 1 Number 2 Number 3

Fichier .php présent sur le serveur

Fichier tel qu’il est Reçu par le navigateur

Rendu

133

La boucle : foreach PHP inclut une commande foreach(), comme en Perl. C’est un moyen simple de parcourir un à un les éléments d’un tableau. Il y a deux syntaxes possibles. La seconde est une extension mineure mais pratique de la première : foreach ($array as $element) instruction; foreach ($array as $key=>$element) instruction; La première syntaxe passe en revue le tableau $array. À chaque itération, la valeur de l’élément courant est assignée à $element et le pointeur interne de tableau est avancé d’un élément (ce qui fait qu’à la prochaine itération, on accédera à l’élément suivant). La deuxième forme fait exactement la même chose, mais c’est la clé de l’élément courant qui est assignée à la variable $key.

134

La boucle : foreach

<?php $tab = array('prenom' => ’mohammed' , 'ville' => ’Tanger' ) ; foreach ($tab as $element) { echo "Valeur: $element<br>\n"; } foreach ($tab as $cle => $valeur) { echo "Cle : $cle; Valeur: $valeur<br>\n"; }?>

135

La boucle : foreach Il est possible, depuis PHP 5, d’utiliser les valeurs par référence et non par copie. Si vous modifiez une valeur, elle sera alors modifiée dans le tableau d’origine. <?php $tab = array(1, 2, 3) ; foreach($tab as $valeur) { $valeur = $valeur – 1 ; } echo $tab[0] + $tab[1] + $tab[2] ; // Affiche 6 foreach($tab as &$valeur) { $valeur = $valeur – 1 ; } echo $tab[0] + $tab[1] + $tab[2] ; // Affiche 3 } ?>

136

Les instructions d’arrêt L’instruction break permet de sortir d’une structure conditionnelle telle que for, while, foreach ou switch. <?php while (TRUE) { echo 'affiché une fois' ; } ?> Exemple 2 <?php while (TRUE) { echo 'affiché une fois' ; break ; echo 'jamais affiché' ; } ?> break accepte un argument numérique optionnel qui vous indiquera combien de structures emboîtées ont été interrompues.

137

Exemple <?php for( $i=1 ; $i<=3 ; $i++) { while(TRUE) { echo 'texte affiché une fois - ' ; while(TRUE) { echo 'texte aussi affiché une seule fois – ' ; break(2) ; echo 'texte jamais affiché – ' ; } echo 'texte jamais affiché – ' ; } echo 'texte affiché une fois – ' ; break ; echo 'texte jamais affiché – ' ; } ?>

138

L’instruction : continue L’instruction continue est utilisée dans une boucle afin d’éluder les instructions de l’itération courante et donc pour passer directement à la suivante. continue accepte également un argument numérique optionnel qui vous indiquera combien de structures emboîtées ont été ignorées. <?php for ($i=1; $i<=3;$i++) { // N’affiche le texte qu’une seule fois quand $i==3 if ($i !=3) continue; echo 'On en est à la troisième itération'; } ?>

Instructions conditionnelles

139

if (conditionA) { // instructions A } elsif (conditionB1 && conditionB2) { // instructions B } elsif (conditionC1 || conditionC2) { // instructions C } else { // instructions D }

Boucles

140

for ($i=0 ; $i < $n ; $i++) { // instructions } while (condition) { // instructions } do { // instructions } while (condition)

Tableaux

141

$tab = array("A", "B", "C"); $tab[0] = "A"; $tab[1] = "B"; $tab[2] = "C"; echo $tab[1]; // affiche "B"

for ($i = 0 ; $i < count($tab) ; $i++) { echo "La valeur $i est $tab[$i] <br />"; }

echo "<ul>"; foreach ($tab as $valeur) { echo "<li>$valeur</li>"; } echo "</ul>";

Parcours

Tableaux associatifs

142

$notes = array("Marie" => 14, "Paul" => 12, "Pierre" => 7); $notes["Marie"] = 14; $notes["Paul"] = 12; $notes["Pierre"] = 7;

echo "<table>"; foreach ($notes as $clef => $valeur) { echo "<tr><td>$clef</td><td>$valeur</td></tr>\n"; } echo "</table>"; Parcours echo "<table>"; reset($notes); while (next($notes)) { // il y a aussi prev $etud = key($notes); $note = current($notes); echo "<tr><td>$etud</td><td>$note</td></tr>\n"; } echo "</table>";

Fonctions

143

function bonjour($nom) { echo "Bonjour $nom !<br />"; } bonjour("Marie");

function somme($x, $y) { return $x + $y; } $z = somme(3, 10);

function coordonnees($ville) { ... return array($x, $y); } list($a, $b) = coordonnees("Tokyo");

Quelques fonctions prédéfinies

144

empty($v) teste si $v est définie et a une valeur nulle

isset($v) teste si $v est définie abs($v) valeur absolue

ceil($v) entier immédiatement supérieur floor($v) entier immédiatement inférieur round($f) arrondi

max($v1, $v2, ..., $vn) plus grande valeur min($v1, $v2, ..., $vn) plus petite valeur

rand() valeur aléatoire date($format) renvoie la date courante formatée. Exemples :

- "d/m/Y" - "H:i:s"

Quelques fonctions prédéfinies (chaînes, 1/2)

145

explode($sep, $chaine) divise $chaine selon le séparateur $sep et renvoie les valeurs dans un tableau

implode($sep, $tableau) regroupe les valeurs de $tableau avec le séparateur $sep et renvoir la chaîne de caractères

htmlspecialchars($ch) retourne la chaîne $ch dans laquelle les caractères réservés au HTML ('<', '>', '&'...) ont été remplacés par leur code HTML.

$fruits = "abricot|kiwi|pomme|fraise|banane"; $liste_fruits = explode('|', $fruits); $fruits2 = implode(' ', $liste_fruits); echo $fruits2 // => "abricot kiwi pomme fraise banane"

Quelques fonctions prédéfinies (chaînes, 2/2)

146

strlen($chaine) renvoie la taille de la chaîne de caractères

strstr($ch1, $ch2) renvoie le contenu de $ch1 à partir de la première occurrence de $ch2 (sinon, renvoie faux)

substr($ch, $i, $l) renvoie la sous-chaîne de $ch de longueur $l à partir de l'index $i

$fruits = "abricot|kiwi|pomme|fraise|banane"; $tmp = strstr($fruits, '|'); echo $tmp; // => "|kiwi|pomme|fraise|banane" $tmp2 = substr($fruits, 8, 4); echo $tmp2; // => "kiwi"

Quelques fonctions prédéfinies (tableaux)

147

is_array($tab) teste si $tab est un tableau count($tab) nombre d'éléments du tableau sort($tab) tri du tableau sur les valeurs, ordre ascendant rsort($tab) tri du tableau sur les valeurs, ordre

descendant ksort($tab) tri du tableau sur les clés, ordre ascendant

krsort($tab) tri du tableau sur les clés, ordre descendant max($tab) plus grande valeur min($tab) plus petite valeur

Transmettre des informations : méthode GET

148

<form action="script.php" method="get"> <label for="nom">Nom</label> <input type="text" name="nom" id="nom"> <label for="prenom">Prénom </label> <input type="text" name="prenom" id="nom"> <input type="submit" name="action" value="OK"> </form>

PHP HTML <html> ... <div> Bonjour <?php echo $_GET["prenom"]." ". $_GET["nom"]; ?> </div> </html>

Transmettre des informations : méthode POST

149

<form action="script.php" method="post"> <label for="nom">Nom</label> <input type="text" name="nom" id="nom"> <label for="prenom">Prénom </label> <input type="text" name="prenom" id="nom"> <input type="submit" name="action" value="OK"> </form>

PHP HTML <html> ... <div> Bonjour <?php echo $_POST["prenom"]." ". $_POST["nom"]; ?> </div> </html>

150

Les fonctions

Les Fonctions

Comme dans tout langage structuré, en PHP, les fonctions sont la base d’une programmation claire et efficace. Une fonction est une sorte de sous-programme isolé du reste du code, exécutable à tout moment, depuis n’importe quelle partie du code principal ou n’importe quelle autre fonction, par simple appel. De plus, les avantages des fonctions sont : La non répétition de la même séquence de code De cet avantage découlent :

Le gain de productivité. La meilleure lisibilité du code. La maintenance facilitée.

Les fonctions

Définit une fonction : function fmax( $x, $y ) { if ( $x > $y ) { return $x; } else { return $y; } }

Mot clef function. Syntaxe habituelle pour les arguments. Pas de type de retour (les types n'existent pas)

echo fmax( 3, 7 ); // affiche 7

Déclaration, paramètres, valeurs de retour Passage par valeur par référence :

Le passage des paramètres tel qu’on l’a vu précédemment est ce que l’on appelle le passage par valeur. Il existe une autre manière de procéder : le passage par référence. On passe à la fonction la référence (adresse mémoire) d’une variable existante, et la fonction modifie directement la valeur de cette variable.

exemple : function bonjour(&$phrase) { $phrase= ‘’bonjour Toto’’ ; } $chaine = ‘’Phrase qui va disparaître’’ ; bonjour($chaine) ; echo $chaine ; // affiche 'bonjour Toto' à l’écran

Fonctions Mathématiques

Elles y sont toutes ! Abs, cos, sin, tan, sqrt, exp, … pi( )

Chaînes de caractères strpos (chaîne, sous chaîne) : retourne la position de la sous chaîne dans la

chaîne. Dans le cas où la chaîne existe en plusieurs exemplaires, c’est la position de la première occurrence qui est retournée. strrpos retourne quand à elle la position de la dernière occurrence.

strstr (chaîne, sous chaîne) retourne la portion de la chaîne à partir de la première occurrence de la sous chaîne.

foreach (nom tableau) : A chaque appel, cette fonction retourne la valeur suivante du tableau.

strlen (chaîne) : retourne la taille de la chaîne. strtolower|strtoupper (chaîne) : retourne la chaîne passée en paramètres an

minuscules (resp. majuscules). str_replace (car d’origine, car de destination, chaîne) : remplace le caractère

d’origine par le caractère de destination dans la chaîne. g supprime les caractères invisibles (espaces,\n, …) au début et à la fin de la

chaîne. ereg(chaîne à chercher, chaîne) : retourne vrai si la chaîne à chercher (sous

forme de chaîne ou sous forme d’expression régulière) est contenue dans chaîne.

Fonctions prédéfinies

Grand nombre de fonctions prédéfinies

Voir www.php.net pour une description exhaustive

Les fonction récursives

Une fonction est dite récursive si, à l’intérieur de son corps, elle s’appelle elle-même avec une valeur de paramètre différent (sinon elle boucle). Chaque appel constitue un niveau de récursivité. L’exemple le plus classique est celui de la fonction qui retourne la factorielle d’un nombre entier n. Pour calculer n!, une fonction récursive calcule n × (n – 1)!, ce qui implique un nouvel appel de la fonction factorielle et ainsi de suite jusqu’à calculer 1! (par définition 0!=1) puis on remonte jusqu’à n!.

157

Exemple Ce qui donne, par exemple, le code suivant : <?php

function facto($n) { if ($n==0) return 1; else {return $n*facto($n-1);} } echo "factorielle = ".facto(10);

?>

158

Portée des variables (0) La portée d'une variable dépend du contexte dans lequel la variable

est définie. Selon l'endroit du code où les variables sont définies, ces dernières

auront une portée plus ou moins grande, c-à-d qu'elles seront définies soit pour une parie du code (fonction) soit pour sa totalité.

Il existe trois niveaux de définition de variables : Le niveau global. Il définit des variables dans l'intégralité du code

d'une page PHP. Le niveau local. Il définit des variables propres à une fonction,

dont la durée de vie ne dépasse pas le temps de cette fonction. Le niveau static. Il définit des variables propres à une fonction,

qui persistent pendant l'intégralité du code de la page PHP.

160

Portée des variables (1) Pour la majorité des variables, la portée concerne la totalité d'un script PHP. Mais lorsque vous définissez une fonction, la portée d'une variable définie dans cette fonction est locale à la fonction. Exemple : <?php $a = 1; include 'b.inc'; ?>

Ici, la variable $a sera accessible dans le script inclus b.inc.

161

Portée des variables (2)

Cependant, dans les fonctions définies par l'utilisateur, une nouvelle définition de cette variable sera donnée, limitée à la fonction. Toute variable utilisée dans une fonction est par définition, locale. Par exemple : <?php $a = 1; /* portée globale */ function test() { echo $a; /* portée locale */ } test(); ?> Le script n'affichera rien à l'écran car l'instruction echo utilise la variable locale $a, et celle-ci n'a pas été assignée préalablement dans la fonction.

162

Utilisation des variables global En PHP, une variable globale doit être déclarée à l'intérieur de chaque fonction afin de pouvoir être utilisée dans cette fonction. Le mot clé global : <?php $a = 1; $b = 2; function somme() { global $a, $b; $b = $a + $b; } somme(); echo $b; ?> Le script ci-dessus va afficher la valeur 3.

163

Utilisation des variables $GLOBALS Une deuxième méthode pour accéder aux variables globales est d'utiliser le tableau associatif pré-défini $GLOBALS. Le précédent exemple peut être réécrit de la manière suivante : <?php $a = 1; $b = 2; function somme() {

$GLOBALS['b'] = $GLOBALS['a'] + $GLOBALS['b']; } somme(); echo $b; ?> Le script ci-dessus va afficher la valeur 3. Le tableau $GLOBALS est un tableau associatif avec le nom des variables globales comme clé et les valeurs des éléments du tableau comme valeur des variables.

164

Utilisation des variables static (1) Une autre caractéristique importante de la portée des variables est la notion de variable static. Une variable statique a une portée locale uniquement, mais elle ne perd pas sa valeur lorsque le script appelle la fonction. Prenons l'exemple suivant : <?php function Test() { $a = 0; echo $a; $a++; } for ($i=0;$i<10;$i++) Test(); ?> Cette fonction est un peu inutile car à chaque fois qu'elle est appelée, elle initialise $a à 0 et affiche "0". L'incrémentation de la variable ($a++) ne sert pas à grand chose, car dès que la fonction est terminée, la variable disparaît.

165

Utilisation des variables static (2)

Pour faire une fonction de comptage utile, c'est-à-dire qui ne perdra pas la trace du compteur, la variable $a est déclarée comme une variable statique : <?php function Test() { static $a = 0; echo $a; $a++; } for ($i=0;$i<10;$i++) Test(); ?> Maintenant, à chaque fois que la fonction Test() est appelée, elle affichera une valeur de $a incrémentée de 1.

166

Utilisation des variables static (3) Les variables statiques sont essentielles lorsque vous faites des appels récursifs à une fonction. Une fonction récursive est une fonction qui s'appelle elle-même. Il faut faire attention lorsque vous écrivez une fonction récursive car il est facile de faire une boucle infinie. Vous devez vérifier que vous avez bien une condition qui permet de terminer votre récursivité. La fonction suivante compte récursivement jusqu'à 10 : <?php function Test() { static $count = 0; echo $count++; if ($count < 10) { Test(); } } ?>

167

Utilisation des variables static (4) Note : Les variables statiques doivent être déclarées comme dans l'exemple ci-dessus. Tenter d'assigner des valeurs à ces variables qui sont le résultat d'expressions causera une erreur d'analyse. <?php function foo() { static $int = 0; // correct static $int = 1+2; // faux (car c'est une expression) static $int = sqrt(121); // faux (car c'est aussi une expression) $int++; echo $int; } ?>

168

Les variables dynamiques (1)

Il est pratique d'avoir parfois des noms de variables qui sont variables. C'est-à-dire un nom de variable qui est affecté et utilisé dynamiquement. Une variable classique est affectée avec l'instruction suivante : <?php $a = ’bonjour’; ?> Une variable dynamique prend la valeur d'une variable et l'utilise comme nom d'une autre variable. Dans l'exemple ci-dessous, bonjour peut être utilisé comme le nom d'une variable en utilisant le "$$" précédent la variable.

169

Les variables dynamiques (2) Il est pratique d'avoir parfois des noms de variables qui sont variables. C'est-à-dire un nom de variable qui est affecté et utilisé dynamiquement. Une variable classique est affectée avec l'instruction suivante : <?php $a = ’bonjour’;

$$a = 'monde'; echo "$a $bonjour"; echo "$a ${$a}"; ?> produira le même affichage ; c'est-à-dire : bonjour monde. Afin de pouvoir utiliser les variables dynamiques avec les tableaux, vous avez à résoudre un problème ambigu. Si vous écrivez $$a[1], l'analyseur a besoin de savoir si vous parler de la variable qui a pour nom $a[1] ou bien si vous voulez l'index [1] de la variable $$a. La syntaxe pour résoudre cette ambiguïté est la suivante : ${$a[1]} pour le premier cas et ${$a}[1] pour le deuxième.

170

Variables externes à PHP

Formulaires HTML (GET et POST) Lorsqu'un formulaire est envoyé à un script PHP, toutes les variables du formulaire seront automatiquement disponibles dans le script. <form action="foo.php" method="post"> Nom : <input type="text" name="username" /><br /> Email: <input type="text" name="email" /><br /> <input type="submit" name="submit" value="Envoie!" /> </form> Suivant votre configuration particulière et vos préférences, vous avez plusieurs méthodes pour accéder aux variables du formulaires.

171

Variables externes à PHP <?php // Disponibles depuis &php; 4.1.0 echo $_POST['username']; echo $_REQUEST['username']; import_request_variables('p', 'p_'); echo $p_username; // Disponibles depuis &php; 3. echo $HTTP_POST_VARS['username']; // Disponibles si la directive register_globals = on. echo $username; ?> Suivant votre configuration particulière et vos préférences, vous avez plusieurs méthodes pour accéder aux variables du formulaires.

Exemple de formulaire

Code HTML classique : <form action="traitement.php" method="get"> <p> Âge: <input type="text" name="age" /> <br /> École: <input type="text" name="ecole" /> <input type="submit" value="OK" /> </p> </form>

Ce qui donne :

22

ENSAT

Le code PHP

On récupère les données et on les affiche (fichier traitement.php) <?php $age = $_GET["age"]; $school = $_GET["ecole"]; echo "Vous êtes de l'école $school."; echo " <br /> "; echo "Vous êtes né en ".(2011-$age)."."; ?>

Résultat

ENSAT. 1984.

Autre utilité de $_GET

Adresse : http://serveur/page.php?a=bonjour&b=bye

$_GET["a"] vaut "bonjour" $_GET["b"] vaut "bye"

177

Variables externes à PHP Cookies HTTP Les cookies sont un mécanisme permettant de stocker des données sur la machine cliente à des fins d'identification de l'utilisateur. Vous pouvez établir un cookie grâce à la fonction setcookie(). Les cookies font partie intégrante des en-têtes HTTP et donc la fonction setcookie() doit être appelée avant que le moindre affichage ne soit envoyé au navigateur. C'est la même restriction que pour la fonction header(). Les données contenus dans les cookies sont alors disponibles dans les tableaux de cookies appropriés, comme $_COOKIE, $HTTP_COOKIE_VARS mais aussi $_REQUEST. Si vous souhaitez assigner plusieurs valeurs à un seul cookie, il vous faut ajouter les caractères [] au nom de votre cookie. Par exemple :

178

Variables externes à PHP Cookies HTTP Les cookies sont un mécanisme permettant de stocker des données sur la machine cliente à des fins d'identification de l'utilisateur. Vous pouvez établir un cookie grâce à la fonction setcookie(). Les cookies font partie intégrante des en-têtes HTTP et donc la fonction setcookie() doit être appelée avant que le moindre affichage ne soit envoyé au navigateur. C'est la même restriction que pour la fonction header(). Les données contenus dans les cookies sont alors disponibles dans les tableaux de cookies appropriés, comme $_COOKIE, $HTTP_COOKIE_VARS mais aussi $_REQUEST. Si vous souhaitez assigner plusieurs valeurs à un seul cookie, il vous faut ajouter les caractères [] au nom de votre cookie.

179

Les Expressions

180

Les expressions (1) Les expressions sont la partie la plus importante de PHP. En PHP, presque tout ce que vous écrivez est une expression. La manière la plus simple de définir une expression est : "tout ce qui a une valeur". Les formes les plus simples d'expressions sont les constantes et les variables. Lorsque vous écrivez "$a = 5", vous assignez la valeur '5' à la variable $a. Bien évidemment, '5' vaut 5 ou, en d'autres termes, '5' est une expression avec pour valeur 5 (dans ce cas, '5' est un entier constant). Après cette assignation, vous pouvez considérer que $a a pour valeur 5 et donc, écrire $b = $a, revient à écrire $b = 5. En d'autres termes, $a est une expression avec une valeur de 5.

181

Les expressions (2) Affectation d'expressions via les fonctions : <?php function foo () { return 5; } ?> L'opérateur conditionnel ternaire <?php $first ? $second : $third ?> Si la valeur de la première sous-expression est vraie (différente de 0), alors la deuxième sous-expression est évaluée et constitue le résultat de l'expression conditionnelle. Sinon, c'est la troisième sous-expression qui est évaluée et qui constitue le résultat de l'expression.

182

Les expressions (3) PHP est un langage orienté expression, dans le sens où presque tout est une expression. Considérons l'exemple dont nous avons déjà parlé, '$a = 5'. Il est facile de voir qu'il y a deux valeurs qui entrent en jeu ici, la valeur numérique constante '5' et la valeur de la variable $a qui est mise à jour à la valeur 5. Mais, la vérité est qu'il y a une autre valeur qui entre en jeu ici et c'est la valeur de l'assignation elle-même. L'assignation elle-même est assignée à une valeur, dans ce cas-là 5. En pratique, cela signifie que '$a = 5' est une expression qui a pour valeur 5. Donc, écrire '$b = ($a = 5)' revient à écrire '$a = 5; $b = 5;' (un point virgule marque la fin d'une instruction). Comme les assignations sont analysées de droite à gauche, vous pouvez aussi bien écrire '$b = $a = 5'.

183

Les expressions (4) Un autre bon exemple du langage orienté expression est la pre-incrémentation et la post-incrémentation. Ce sont les opérateurs d'incrémentation et de décrémentation. PHP ajoute les possibilités d'incrémentation et de décrémentation comme c'est le cas dans le langage C. En PHP, comme en C, il y a deux types d'opérateurs d'incrémentation (pre-incrémentation et post-incrémentation). Les deux types d'opérateur d'incrémentation jouent le même rôle (c'est-à-dire qu'ils incrémentent la variable). La différence vient de la valeur de l'opérateur d'incrémentation. L'opérateur de pre-incrémentation, qui s'écrit '++$variable', évalue la valeur incrémentée (PHP incrémente la variable avant de lire la valeur de cette variable, d'où le nom de pre-incrémentation). L'opérateur de post-incrémentation, qui s'écrit '$variable++', évalue la valeur de la variable avant de l'incrémenter (PHP incrémente la variable après avoir lu sa valeur, d'où le nom de post-incrémentation).

184

Pré et post-incrémentation : exemples <?php function double($i) { return $i*2; } $b = $a = 5; /* Assigne la valeur 5 aux variables $a et $b */ $c = $a++; /* Post-incrémentation de la variable $a et assignation de la valeur à la variable $c */ $e = $d = ++$b; /* Pre-incrémentation, et assignation de la valeur aux variables $d et $e */ /* à ce niveau, les variables $d et $e sont égales à 6 */ $f = double($d++); /* assignation du double de la valeur de $d à la variable $f ($f vaut 12), puis incrémentation de la valeur de $d */ $g = double(++$e); /* assigne deux fois la valeur de $e après incrémentation, 2*7 = 14 to $g */ $h = $g += 10; /* Tout d'abord, $g est incrémentée de 10, et donc $g vaut 24. Ensuite, la valeur de $g, (24) est assignée à la variable $h, qui vaut donc elle aussi 24. */ ?>

185

Les expressions (6) Pour le dernier exemple d'expression, nous allons parler des combinaisons d'opérateurs/assignation. Vous savez que si vous voulez incrémenter la variable $a d'une unité, vous devez simplement écrire '$a++'. Mais si vous voulez ajouter la valeur '3' à votre variable ? Vous pouvez écrire plusieurs fois '$a++', mais ce n'est pas la meilleure des méthodes. Un pratique plus courante est d'écrire '$a = $a + 3'. L'expression '$a + 3' correspond à la valeur $a plus 3, et est de nouveau assignée à la variable $a. Donc, le résultat est l'incrémentation de 3 unités. En PHP, comme dans de nombreux autres langages comme le C, vous pouvez écrire cela de manière plus concise, manière qui avec le temps se révélera plus claire et plus rapide à comprendre. Ajouter 3 à la valeur de la variable $a peut s'écrire '$a += 3'. Cela signifie précisément : "on prend la valeur de la variable $a, on ajoute la valeur 3 et on assigne cette valeur à la variable $a". Et pour être plus concis et plus clair, cette expression est plus rapide. La valeur de l'expression '$a += 3', comme l'assignation d'une valeur quelconque, est la valeur assignée. Il est à noter que ce n'est pas 3 mais la combinaison de la valeur de la variable $a plus la valeur 3. (c'est la valeur qui est assignée à la variable $a). N'importe quel opérateur binaire peut utiliser ce type d'assignation, par exemple '$a -= 5' (soustraction de 5 de la valeur de la variable $a), '$b *= 7' (multiplication de la valeur de la variable $b par 7).

186

Chaînes de caractères

strpos (chaîne, sous chaîne) : retourne la position de la sous chaîne dans la chaîne. Dans le cas où la chaîne existe en plusieurs exemplaires, c’est la position de la première occurrence qui est retournée. strrpos retourne quand à elle la position de la dernière occurrence.

strstr (chaîne, sous chaîne) retourne la portion de la chaîne à partir de la première occurrence de la sous chaîne.

foreach (nom tableau) : A chaque appel, cette fonction retourne la valeur suivante du tableau.

strlen (chaîne) : retourne la taille de la chaîne. strtolower|strtoupper (chaîne) : retourne la chaîne passée en paramètres an

minuscules (resp. majuscules). str_replace (car d’origine, car de destination, chaîne) : remplace le caractère

d’origine par le caractère de destination dans la chaîne. g supprime les caractères invisibles (espaces,\n, …) au début et à la fin de la chaîne. ereg(chaîne à chercher, chaîne) : retourne vrai si la chaîne à chercher (sous forme de

chaîne ou sous forme d’expression régulière) est contenue dans chaîne.

187

Les structures de contrôle

Boucles

Comme dans tous les autres langages

<html> <body> <?php // l'intérêt du $ for ($i=0; $i<4; $i++) { echo " Number $i <br />\n"; } ?> </body> </html>

<html> <body> Number 0 <br /> Number 1 <br /> Number 2 <br /> Number 3 <br /> </body> </html>

Number 0 Number 1 Number 2 Number 3

Fichier .php présent sur le serveur

Fichier tel qu’il est Reçu par le navigateur

Rendu

189

Fichiers

190

Gestion des fichiers

La fonction de base est la fonction fopen( ). C'est elle qui permet d'ouvrir

un fichier, que ce soit pour le lire, le créer, ou y écrire. Sa syntaxe est : entier fopen(chaine nomdufichier, chaine mode); Différents modes disponibles r : ouverture en lecture seulement w : ouverture en écriture seulement (la fonction crée le fichier s'il n'existe pas) a : ouverture en écriture seulement avec ajout du contenu à la fin du fichier (la

fonction crée le fichier s'il n'existe pas) r+ : ouverture en lecture et écriture w+ : ouverture en lecture et écriture (la fonction crée le fichier s'il n'existe pas) a+ : ouverture en lecture et écriture avec ajout du contenu à la fin du fichier (la

fonction crée le fichier s'il n'existe pas).

191

Gestion des fichiers

Exemples : $fp = fopen("../fichier.txt","r"); //lecture $fp = fopen("ftp://iutbayonne.univ-pau.fr./pub/fichier.txt","w"); //écriture depuis début du fichier $fp = fopen("http://www.nexen.com/fichier.txt","a"); //écriture depuis fin du fichier

192

Lecture dans un fichier < ? $monfichier = fopen(‘’monfichier.txt’’, ’’r’’) ; // ouverture en lecture if ( !($monfichier)) { print( ’’Impossible d’ouvrir le fichier ’’) ; exit ; } while ( !feof($monfichier) ) { $ligne = fgets($monfichier,255); // 255 caractères max. ou bien fin de ligne. print ‘’ $ligne <BR> ‘’ ; } fclose ($monfichier) ; ?>

193

Écriture dans un fichier

< ? $monFichier = fopen(‘’monfichier.txt’’,’’ w’’) ; // ouverture en écriture if ( !($monfichier)) { print(‘’ Impossible de créer le fichier \n’’) ; exit ; } fputs($monfichier, ‘’ligne 1’’) ; // on écrit deux lignes fputs($monfichier, ‘’ligne 2’’) ; fclose($monfichier) ; // on ferme le fichier, on libère les ressources ?>

194

Fonction Explode

Il est fréquent d’avoir des fichiers contenant différents champs séparés par un délimiteur quelconque. Une fonction très utile dans ces cas là est la fonction explode. Sa syntaxe est la suivante

explode (« caractère délimiteur », chaîne de donnée)

Reda | Mohamed | 27 Harris | Aziz | 28

195

Fonction Explode <html> <head> <title>Exemples de Explode</title> </head> <body> <?php if (!file_exists(’’test.txt ’’)) { print "<H3><BR>Erreur, fichier manquant<BR>"; exit; } else { $fd = fopen($fic,"r"); while (!feof($fd)) { $ligne = fgets($fd,255); $tab=explode("|",$ligne); print "Nom : $tab[0]<br>"; print "Prénom : $tab[1]<br>"; print "Age : $tab[2]<br>"; } fclose($fd); } php?>

196

Mail Il existe une méthode PHP permettant d’envoyer un mail

directement, sans appeler un quelconque gestionnaire de courrier. La fonction mail (ou email parfois) permet de réaliser cela. Elle

nécessite au moins trois paramètres : Le destinataire, L’objet du message, Le corps du message.

< ? mail(‘’kamechnoue@yahoo.fr’’, ‘’Test de la commande mail’’, ’’Voici le corps du

mail’’) ; ?>

Enverra un mail à kamechnoue@yahoo.fr avec comme sujet de mail « Test de la commande mail », et comme corps du mail : « Voici le corps du mail ».

197

Formulaire/Mail

<html> <head> <title>Formulaire/Mail</title></head><body> <FORM method="POST" action="mail.php3"> <P> Adresse <INPUT TYPE=test NAME=adr_mail VALUE=""

SIZE=50 MAXLENGTH=50 </P> <input type="submit" value= »Mail"> </FORM>

198

Inclure un fichier Fonction include() haut.html : <html> <head> <title>Mon site</title> </head> <body>

bas.html : <a href="mailto:kamechnoue@menara.ma"> envoyer un mail </a> </body> </html>

page1.html : <?php include("haut.html"); ?>

<h1>Première page</h1>

blablabla

<?php include("bas.html"); ?>

199

Bases de Données

Accès aux bases de données

• PHP propose un support natif pour un grand nombre de bases de données comme MySQL, PostgreSQL, Oracle Server, Microsoft SQL Server etc

• PHP supporte la technologie ODBC (Open DataBase Connectivity) ce qui permet de travailler avec toute base supportant cette technologie

Accès aux bases de données (suite)

• Quelque soit la technologie d'accès aux données utilisée, un script PHP a besoin d'effectuer les tâches suivantes pour travailler dans une base de données :

– - Se connecter à la base de données (s'identifier)

– - Créer, lire, mettre à jour ou supprimer des données

– - Se déconnecter de la base de données

MySQL • MySQL est un SGBDR (Système de Gestion de

Base de Données Relationnelle) sous licence Open-Source (MySQL a été racheté par Oracle)

• MySQL utilise la technologie Client-Serveur

• Deux versions co-existent : les versions 4.x et 5.x

• C'est le SGBDR le plus utilisé sous PHP

PHP.MySQL

Navigateur Internet

Client Web

Fichiers .php

Espace de stockage

Serveur http

Extension PHP HTML

PHP

Adresse de la page PHP

Contenu HTML

PHP

Librairie MySQL

Espace de stockage

Base de données MySQL

Serveur MySQL

PHP.MySQL.Extensions • En PHP, Il existe trois extensions permettant de

travailler avec MySQL :

– L'extension "php_mysql" : C'est l'extension historique d'accès à MySQL

– L'extension "php_mysqli" : C'est l'extension "orientée objet" d'accès à MySQL (plus récente)

– L'extension "php_pdo" : C'est une couche d'abstraction d'accès aux bases de données. Elle permet l'accès à des bases de données, via des drivers "natifs" (MySQL, SQLServer, Oracle Server, PostgreSQL, SQLite, Informix…)

Connexion MySQL La connexion MySQL via PHP se fait en 2 étapes : La première étape est la connexion au serveur MySQL avec un identifiant et son mot de passe, la seconde est le choix d'une base de données de travail.

205

mysql_connect() • En PHP, l'ouverture d'une connexion à un serveur

MySQL s'effectue par l'appel à la fonction mysql_connect(serveur, utilisateur, mdp)

• Cette fonction retourne un descripteur de connexion, si la connexion est ouverte; FALSE, dans le cas contraire

• En cas d'erreur, la fonction mysql_error() retourne une chaîne de caractères décrivant l'erreur rencontrée (mysql_errno() le code de l'erreur)

PHP.php_mysql.Connexion (suite) • Les paramètres de la fonction "mysql_connect"

sont :

– serveur : il identifie la machine abritant le serveur MySQL (par exemple 'localhost' ou une IP)

– utilisateur : il identifie le nom de l'utilisateur cherchant à se connecter (ce doit être un utilisateur enregistré de la base MySQL)

– mdp : c'est le mot de passe de cet utilisateur

mysql_close( )

• A partir d'un script PHP, la fermeture de la connexion au serveur MySQL s'effectue par l'appel à la fonction "mysql_close([connexion])"

• Le paramètre "connexion" est un descripteur de connexion ouverte. S'il n'est pas fourni, la connexion courante est fermée (! Bug WAMP !)

• Par défaut, et en l'absence de fermeture effective, toute connexion avec une base MySQL est fermée à la fin du script qui a procédé à son ouverture

mysql_select_db( )

• Pour travailler avec une base de données, on sélectionne cette base par l'appel à la fonction

mysql_select_db(base [, connexion])

• Cette fonction retourne TRUE, si la base de données en question est sélectionnée; FALSE, dans le cas contraire

• Pour changer de base, il suffit d'en sélectionner une autre

Sélection d'une base

• Le paramètre obligatoire "base" identifie la base avec laquelle vous voulez travailler (c'est le nom de cette base)

• Le paramètre facultatif "connexion" est un descripteur de connexion ouverte avec le serveur MySQL. Si ce paramètre n'est pas fourni, la connexion courante est utilisée

• Remarque : Il n'est pas nécessaire de sélectionner une base pour travailler dans cette base…

211

Bases de Données <?php $bdd= "mabase"; // Base de données $host= "localhost"; $user= "root"; // Utilisateur $pass= ""; mysql_connect($host,$user,$pass) or die ("Impossible de se connecter

à la base de données"); mysql_select_db($bdd); ?>

mysql_query( )

• Pour exécuter une requête sur la base de données sélectionnée, il faut faire appel à la fonction

• mysql_query(requête [, connexion])

• Le paramètre "requête" est l'instruction SQL à exécuter : c'est une chaîne de caractères

• Le paramètre facultatif "connexion" est le descripteur de la connexion établie avec le serveur MySQL (sinon, la connexion courante est utilisée)

mysql_query( ) (suite)

• La fonction "mysql_query" retourne :

– FALSE : si l'exécution de la requête a provoqué une erreur

– TRUE : si l'exécution n'a pas provoqué d'erreur et que la requête ne produit pas de données

– Un descripteur de curseur (ressource) si l'exécution n'a pas provoqué d'erreur et que la requête produit des données

mysql_query( ) (suite)

• Les requêtes qui retournent des données, utilisent les instructions MySQL "SELECT", "SHOW", "EXPLAIN" et "DESCRIBE"

• Les requêtes qui ne retournent pas de données, utilisent les autres instructions MySQL : "INSERT", "UPDATE", "DELETE"…

215

Requêtes SQL $query = "SELECT num, pays, date, circuit FROM $nomtable "; $result= mysql_query($query); if (mysql_error()) { print "Erreur dans la base de données :".mysql_error(); exit(); }

Connexion MySQL Un exemple de connexion est montré par le script connexion.php ci-dessous :

216

Connexion MySQL En faisant un include('connexion.php'); dans vos pages PHP, vous aurez ainsi la connexion à MySQL. ATTENTION ! il est déconseillé de mettre ces identifiants dans chaque fichier qui en a besoin,

217

Présentateur
Commentaires de présentation
ceci pour 3 raisons : D'abord parce qu'un programmeur travaille correctement ;-) Ensuite parce que vous pouvez être amené à changer de serveur (changement d'hébergement, par exemple) et vous n'aurez qu'un seul fichier à retoucher, au lieu de reprendre toutes vos pages une à une; Enfin parce qu'il vaut mieux, question sécurité, placer ce connexion.php seul dans un dossier, protégé par un htaccess : si on vous pirate votre site et que ce dossier est bien protégé, les pirates n'auront pas accès à votre base de données...

Connexion MySQL

218

La connexion MySQL peut être permanente ou non, et elle se termine par : mysql_close(). La connexion permanente (pconnect) n'est pas acceptée par tous les hébergeurs. Elle sert à éviter d'ouvrir une nouvelle connexion à chaque appel de ce fichier. Attention, si l'instruction mysql_close() est trouvée, vous ne pourrez plus effectuer de requête après, à moins de réouvrir une connexion.

219

Récupération résultats

La fonction mysql_fetch_row($requete) retourne un tableau associatif où chaque clé correspond à chaque colonne de la table. Chaque appel produit la lecture d’un enregistrement jusqu’à ce qu’il n’y en ai plus.

Il existe d’autres fonctions pour réaliser cela, mais celle-ci est la plus rapide pour obtenir des résultats à partir d’une requête.

Lecture de données de MySQL

220

221

Récupération résultats

while ($row=mysql_fetch_row($result)) // $result a été obtenu par le msql_query précédent.

{ // récupération des informations $num = mysql_result($rowt[0]); $pays = mysql_result($row[1]); $date = mysql_result($row[2]); $circuit = mysql_result($row[3]); print "… " ; }

222

PHP.php_mysql.Curseur de lecture

• L'exécution d'une requête qui retourne des données provoque la mise en place d'un curseur, coté serveur

• Ce curseur permet de parcourir les données constituées lors de l'exécution de la requête, mais enregistrement par enregistrement

• Les fonctions du type "mysql_fetch_xxxxx" permettent de lire les données de ce curseur

PHP.php_mysql.Curseur de lecture (suite)

Librairie MySQL Base de données

MySQL

$curseur = mysql_query('SELECT id, nom, prenom FROM eleves', $connexion);

Curseur de lecture

Lecture du premier enregistrement produit par l'exécution de la requête : $enregistrement = mysql_fetch_xxxxx($curseur, …);

id nom prenom 1 DOUGHMI Asmae 2 KARKOURI Fatima 3 TEUDJIO Junior

PHP.php_mysql.Curseur de lecture(suite)

• Quelquesfonctions "mysql_fetch_xxxx" :

– mysql_fetch_array(curseur, type) : retourne les valeurs des champs de l'enregistrement pointé par le curseur de lecture, sous la forme d'un tableau indicé (type = MYSQL_NUM) ou d'un tableau associatif (type = MYSQL_ASSOC)

– mysql_fetch_assoc(curseur) : retourne les valeurs des champs de l'enregistrement pointé par le curseur de lecture, sous la forme d'un tableau associatif (les clés sont les noms des colonnes)

– mysql_fetch_row(curseur) : retourne les valeurs des champs de l'enregistrement pointé par le curseur de lecture, sous la forme d'un tableau indicé

PHP.php_mysql.Curseur de lecture(suite)

• Les fonction "mysql_fetch_xxxx" retournent FALSE lorsqu'il n'y a pas, ou plus, de données à lire dans un curseur

• Il est conseillé de libérer les ressources utilisées par un curseur sur le serveur : l'appel à la fonction mysql_free_result(curseur) les libèrent

• Le paramètre "curseur" est le descripteur de curseur, récupéré lors de l'appel à la fonction "mysql_query", dont vous voulez libérer les ressources

PHP.php_mysql.Exemple

$connexion = mysql_connect('localhost', 'root',

''); mysql_select_db('ginf1', $connexion);

$sql = 'SELECT id, nom, prenom FROM eleves'; $curseur = mysql_query($sql, $connexion);

while ($enregistrement = mysql_fetch_assoc($curseur)) {

echo echo echo

'id = ',$enregistrement['id']; 'prenom = ',$enregistrement['prenom']; 'nom = ',$enregistrement['nom']';

}

mysql_free_result($curseur);

mysql_close($connexion);

// Facultatif

// Facultatif

PHP.php_mysql.fonctions diverses

• mysql_num_rows() : Retourne le nombre d'enregistrements présents dans un curseur

• mysql_affected_rows() : Retourne le nombre de lignes "impactées" par la dernière requête

• mysql_insert_id() : Retourne le dernier identifiant créé du type AUTO_INCREMENT

• mysql_real_escape_string() : Ajoute des caractères de contrôles (antislash) à une chaîne

Quelques fonctions MySQL à connaître

Introduction Deux ordinateurs reliés par une connexion Internet. Upload est une opération consiste a faire passer un fichier de l'ordinateur du visiteur vers le serveur.

Avant d'uploader les fichiers via PHP, il faut prendre en consideration quelques paramètres qui se trouvent dans php.ini.

/usr/local/php /usr/local/php/lib/php.ini

Configuration

file_uploads(boolean) : Autorise ou non le chargement de fichiers par HTTP upload_tmp_dir(String) : Le répertoire temporaire utilisé pour stocker les fichiers lors du chargement. Si non spécifié, PHP utilisera celui par défaut du système. upload_max_filesize(Integer) : La taille maximale en octets d'un fichier à charger. Sa valeur est indiquè en octet(entier), sinon on peux utiliser la notation sténographique. post_max_size(Integer) : la taille maximale des données reçues par la méthode POST. Cette option affecte également les fichiers chargés. memory_limit(integer) : la mémoire limite qu'un script est autorisé à allouer. max_input_time(Integer) : la durée maximale pour analyser les données d'entrée, via POST, GET et téléchargement de fichier. max_execution_time (Integer) : le temps maximal d'exécution d'un script, en Sec.

Configuration

Création du formulaire: Pour envoyer un fichier au serveur par formulaire, il faut préciser l'enctype, c'est à dire le type d'encodage du fichier. L'enctype à utiliser est multipart/form-data. <form method="POST" action="upload.php" enctype="multipart/form-data"> <!-- Le contenu du formulaire est à placer ici... --> </form>

Transfert Des Fichiers

Champ Fichier : Pour trouver le fichier, il faut permettre à l'utilisateur de choisir un fichier sur son disque dur en utilisant un champ du type File. <input type="File" name="user_file"> Limiter la taille du fichier Il faut créer un champ caché, sous le nom "MAX_FILE_SIZE" et dont la valeur est la taille maximale du fichier à uploader en octets.

<input type="hidden“ name="MAX_FILE_SIZE" value="100000">

Transfert Des Fichiers

Mécanisme du récupération: PHP s'occupe des données envoyées par le formulaire:

Les champs textuels (text, checkbox, select, textarea, ...) sont

copiés dans le tableau superglobal $_POST Les informations concernant les champs de type file sont

enregistrées dans le tableau superglobal $_FILES Les fichiers sont temporairement placés dans le dossier

temporaire du serveur

Récupération et Traitement

Mécanisme du récupération: Les informations sur les fichiers envoyés sont contenues

dans le tableau global $_FILES contient : VARIABLE NOM

$_FILES[‘user_file']['name'] Le nom original du fichier, tel que sur la machine du client.

$_FILES[‘user_file']['tmp_name'] Le nom temporaire du fichier qui sera chargé sur la machine serveur

$_FILES[‘user_file']['size'] La taille, en octets, du fichier téléchargé.

$_FILES[‘user_file’]['type'] Le type MIME du fichier. Par exemple : « application/pdf »

$_FILES[‘user_file']['error'] Le code d'erreur associé au téléchargement du fichier

Récupération et Traitement

UPLOAD_ERR_OK (valeur =0): Aucune erreur, le téléchargement est correct UPLOAD_ERR_INI_SIZE (valeur=1): Le fichier téléchargé excède la taille de upload_max_filesize , configurée dans le php.ini. UPLOAD_ERR_FORM_SIZE (valeur=2): Le fichier téléchargé excède la taille de MAX_FILE_SIZE, qui a été spécifiée dans le formulaire HTML. UPLOAD_ERR_PARTIAL (valeur=3) : Le fichier n'a été que partiellement téléchargé. UPLOAD_ERR_NO_FILE (valeur=4) : Aucun fichier n'a été téléchargé. UPLOAD_ERR_NO_TMP_DIR (valeur=6): Un dossier temporaire est manquant. UPLOAD_ERR_CANT_WRITE (valeur=7): Échec de l'écriture du fichier sur le disque.

Récupération et Traitement

Upload: Lorsque le formulaire est envoyé, le fichier est envoyé sur le serveur dans un répertoire temporaire. Après il faut le stocker d’une manière permanente dans un répertoire a l’aide des fonctions: is_upload_file() , move_uploaded_file() Exemple

$counter++; // persistent variable $my_name = "image_$counter"; if (is_uploaded_file($temp_name)) { move_uploaded_file($temp_name, "/web/images/$my_name"); } else { die("There was a problem processing the file."); }

N.B : il faut accordé les droits d'écriture au répertoire(chmod pour

Linux).

Récupération et Traitement

Le type de fichier : Par exemple, un génie essaie d’uploader un fichier PHP qui

permet de récupérer des informations depuis notre serveur.

La taille maximum de fichier:

Un utilisateur peut enregistrer le formulaire sur son disque et

modifier la valeur du champ "MAX_FILE_SIZE" .

Sécurité

Chargement de fichiers (I) Les formulaires permettent de transmettre des informations sous forme de chaînes de caractères. Ils peuvent aussi permettre à un internaute de transmettre un fichier vers le serveur.

C’est la balise HTML suivante : <input type=‘’file’’ /> qui permet le chargement de fichiers. La balise FORM doit nécessairement posséder l’attribut ENCTYPE de valeur ‘’multipart/form-data’’. La méthode utilisée sera POST. De plus, il est utile d’imposer au navigateur une taille de fichier limite par le paramètre MAX_FILE_SIZE dont la valeur numérique a pour unité l’octet.

Exemple : echo ‘’<form action=\‘’$PHP_SELF\’’ method=\‘’POST\’’ ENCTYPE=\‘’multipart/form-data\’’>\n <input type=\‘’hidden\’’ name=\‘’MAX_FILE_SIZE\’’ value=\‘’1024000\’’ />\n <input type=\‘’file\’’ name=\‘’mon_fichier\’’ /><br />\n <input type=\‘’submit\’’ value=\‘’envoyer\’’ />\n </form>\n’’;

241

Chargement de fichiers (II)

242

Exemple du cas du chargement de ce qui doit être une image GIF de moins de 1024.000 octets :

// création d’une variable contenant toutes les infos utiles $file = $_FILES[‘mon_fichier‘]; // si un fichier a bel et bien été envoyé : if($file || ($file != ‘’none’’)) {

// extraction du nom du fichier temporaire sur le serveur : $file_tmp = basename($file[‘tmp_name’]); // vérification de la taille et du type MIME if(($file[‘size’] <= 1024000) || ereg(‘’gif$’’,$file[type]))

// nouveau nom, emplacement et extension du fichier : $file_def = $dir.’/’.$name.’.’.$ext; // copie du fichier temporaire dans son nouvel emplacement : copy($file_tmp, $file_def);

} }

Chargement de fichiers (III)

243

Il est important de vérifier avec is_file() si un fichier du même nom existe déjà sur le serveur à l’emplacement où on veut copier le nouveau fichier. On pourra supprimer l’ancien fichier avec unlink() (qui ne fonctionne pas avec les serveurs fonctionnant sous Windows). basename() permet de connaître le nom du fichier à partir de son chemin (+nom) complet.

Même si le paramètre MAX_FILE_SIZE est inclus dans le formulaire, il est important de vérifier la taille du fichier réceptionné car rien n’empêche un internaute malveillant de modifier en local sur sa machine le formulaire pour y soustraire le champs caché MAX_FILE_SIZE afin de saturer le serveur avec des fichiers trop volumineux.

La vérification du type MIME du fichier est également importante dans le cas où on ne souhaite réceptionner que des types de fichiers bien particuliers (des images GIF, JPEG ou PNG par exemple).

Chargement de fichiers (IV) Pour charger simultanément plusieurs fichiers, il suffit de rajouter des crochets au nom du champ HTML file, et de mettre autant de champs file que désiré.

Exemple : <input type=‘’file’’ name=‘’mes_fichiers[ ]’’ /> <input type=‘’file’’ name=‘’mes_fichiers[ ]’’ /> <input type=‘’file’’ name=‘’mes_fichiers[ ]’’ /> <input type=‘’file’’ name=‘’mes_fichiers[ ]’’ />

Dans cet exemple, l’internaute pourra charger jusqu’à quatre fichiers.

244

Chargement de fichiers (V)

245

A la réception, la variable $HTTP_POST_FILES sera un tableau de tableaux associatifs.

Exemple : $files_tab = $_FILES[‘mes_fichiers’]; foreach($files_tab as $file) { /* faire le traitement vu précédemment : -extraire le nom du fichier temporaire sur le serveur -vérifier la taille et le type MIME -donner un nouveau nom, emplacement et extension du fichier -copier le fichier temporaire dans son nouvel emplacement */ }

Les fichiers temporaires sont généralement placés dans le répertoire /tmp du serveur. C’est la directive de configuration upload_tmp_dir du fichier php.ini qui détermine l’emplacement des fichiers chargés par la méthode POST.

Chargement de fichiers (VI) On aurait pu procéder autrement qu’avec des crochets, en utilisant directement dans le formulaire HTML des champs file de noms complètement différents.

Exemple : <input type=‘’file’’ name=‘’mon_fichier’’ /> <input type=‘’file’’ name=‘’mon_autre_fichier’’ />

Par contre, à la réception, on ne peut plus utiliser de boucle !

Exemple : $file = $_FILES[‘mon_fichier’]; // puis faire le traitement vu précédemment $file = $_FILES[‘mon_autre_fichier’]; // puis refaire encore le même traitement

L’approche utilisant des crochets convient au cas où le nombre de fichiers à charger est dynamique (non connu à l’avance, dépend de paramètres divers).

Chargement de fichiers (VII)

247

Pour les versions PHP 3 supérieures à la 3.0.16, PHP4 supérieures à la 4.0.2, il existe une autre méthode, plus simple :

Exemple 1 : // vérification que le fichier a bien été envoyé par la méthode POST if (is_uploaded_file($mon_fichier)) { // déplace le fichier dans le répertoire de sauvegarde copy($userfile, $dest_dir); }

Exemple 2 : /* déplace directement le fichier dans le répertoire de sauvegarde en faisant les vérifications nécessaires */ move_uploaded_file($mon_fichier, $dest_dir);

Les sessions et les bases de Données

248

249

Session (1) Une session est en fait un fichier conservé sur le serveur et accessible à vos scripts en fonction d'un identifiant généré à la création. Chaque fois qu'un de vos visiteurs génère une session, un identifiant lui est attribué. Tout ce qui est dans cette session est accessible de partout à vos scripts. On comprend dès lors très vite tout l'intérêt de la chose. En effet, si chaque session est propre à un visiteur, on peut personnaliser nos scripts en fonction du visiteur, ou encore alléger nos requêtes : plutôt que d'aller chercher un pseudonyme dans la base de donnée sur chaque page, vous le rapatriez à l'arrivée du visiteur sur le site, vous le stockez en session et c'est de là que vous y accéderez par la suite.

250

Sessions (2) session_start();

Cette fonction sert à démarrer une session OU appeler la session existante. Elle doit donc être présente sur toutes les pages de votre site. A savoir que cette fonction ne tolère pas d'envoi au navigateur avant elle. Plus simplement il ne faut aucune sortie avant elle : pas de html, pas de echo. Prenez l'habitude de la placer au début du fichier, avant quoi que ce soit d'autre et tout se passera bien.

session_destroy();

Cette fonction détruit la session en cours. Mais elle ne détruit pas les variables de sessions associées à la session courante. Nous verrons plus loin comment détruire une session complètement et proprement.

$_SESSION Il s'agit du tableau global contenant toutes les variables de sessions pour la session courante.

251

Etude de cas concret <html> <head> <title>Connexion au site</title> </head> <body> <form method="post" action="verifLogin.php"> <table border="0" width="400" align="center"> <tr> <td width="200"><b>Vôtre login</b></td> <td width="200"> <input type="text" name="login"> </td> </tr> <tr> <td width="200"><b>Vôtre mot de passe<b></td> <td width="200"> <input type="password" name="password"> </td> </tr> <tr> <td colspan="2"> <input type="submit" name="submit" value="login"> </td> </tr> </table> </form> </body> </html>

252

<?php // On démarre la session session_start(); include("connection/c.php");

mysql_select_db(“mabase”); $loginOK = false; // cf Astuce

// On n'effectue les traitements qu'à la condition que // les informations aient été effectivement postées

if ( isset($_POST) && (!empty($_POST['login'])) && (!empty($_POST['password'])) ) { //extract($_POST); // je vous renvoie à la doc de cette fonction $login=$_POST["login"];

$password=$_POST["password"]; // On va chercher le mot de passe afférent à ce login $sql = "SELECT pseudo, age, sexe, ville, mdp FROM user WHERE login = '".addslashes($login)."'"; $req = mysql_query($sql) or die('Erreur SQL : <br />'.$sql); // On vérifie que l'utilisateur existe bien if (mysql_num_rows($req) > 0) { $data = mysql_fetch_assoc($req); // On vérifie que son mot de passe est correct if ($password == $data['mdp']) { $loginOK = true; } } } // Si le login a été validé on met les données en sessions if ($loginOK) { $_SESSION['pseudo'] = $data['pseudo']; $_SESSION['age'] = $data['age']; $_SESSION['sexe'] = $data['sexe']; $_SESSION['ville'] = $data['ville'];

header(‘Location:affichinfo.php’); } else { echo 'Une erreur est survenue, veuillez réessayer !'; } ?>

253

Code de la page affichInfo.php

<?php // On appelle la session session_start(); // On affiche une phrase résumant les infos sur l'utilisateur courant echo 'Pseudo : ‘.$_SESSION['pseudo'].'<br />' .'Age : ‘.$_SESSION['age'].'<br />' .'Sexe : ‘.$_SESSION['sexe'].'<br />' .'Ville : ‘.$_SESSION['ville'].'<br />'; ?>

<html> <head> <title>Upload des fichiers</title> </head> <body> <!-- Le type d'encodage des données, enctype, DOIT être spécifié comme ce qui suit --> <form enctype="multipart/form-data" action="envoyer.php" method="post"> <!-- MAX_FILE_SIZE doit précéder le champ input de type file --> <input type="hidden" name="MAX_FILE_SIZE" value="30000" /> <!-- Le nom de l'élément input détermine le nom dans le tableau $_FILES --> Envoyez ce fichier : <input name="userfile" type="file" /> <input type="submit" value="Envoyer le fichier" /> </form> <body> </html>

254

<?php // Dans les versions de PHP antiéreures à 4.1.0, la variable $HTTP_POST_FILES // doit être utilisée à la place de la variable $_FILES. $uploaddir = '/var/www/uploads/'; $uploadfile = $uploaddir . basename($_FILES['userfile']['name']); echo '<pre>'; if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) { echo "Le fichier est valide, et a été téléchargé avec succès. Voici plus d'informations :\n"; } else { echo "Attaque potentielle par téléchargement de fichiers. Voici plus d'informations :\n"; } echo 'Voici quelques informations de débogage :'; print_r($_FILES); echo '</pre>';

255

256

Notez

Notez que le session_start() est toujours présent. En effet il faut préciser au script que nous allons utiliser une session. C'est l'interpréteur qui va déterminer s'il faut en démarrer une ou sélectionner celle existante. Bien entendu ce script n'a qu'une utilité réduite, à vous de voir quelles pourraient être les multiples façons de profiter des sessions.

257

3 . Déconnexion

Il s'agit là d'un point important. En effet une session reste ouverte tant que le visiteur ne ferme pas son navigateur. Vous devez lui offrir la possibilité de se déloguer d'une autre manière. Il vous suffit en fait de faire un lien appelé par exemple "déconnexion" qui pointe sur un script contenant ceci :

<?php // On appelle la session session_start(); // On écrase le tableau de session $_SESSION = array(); // On détruit la session session_destroy(); ?>

Code de la page logout.php

Annexe

258

Mathématiques

259

Formatage d’un nombre : number_format ($nbr[,$dec,[$a,$b]]) : retourne une chaîne de caractères représentant le nombre $nbr avec $dec décimales après formatage. La chaîne $a représente le symbole faisant office de virgule et $b le séparateur de milliers. Par défaut, le formatage est anglophone : $a = ‘’.’’ et $b = ‘’,’’. Très utile pour représenter les nombres élevés au format francophone.

Syntaxe

number_format (nombre, [, nombre de décimales]) number_format (nombre , nombre de décimales , séparateur partie entière et décimale, séparateur de milliers)

Exemple Commandes Affichages Observations

Exemples basiques avec le nombre 10642371.5489

number_format($nombre) 10,642,372 Entier arrondi avec virgule(s) comme séparateur des milliers

number_format($nombre, 0) 10,642,372 Entier arrondi avec virgule(s) comme séparateur des milliers

number_format($nombre, 2) 10,642,371.55 Arrondi à 2 chiffres décimaux avec virgule(s) comme séparateur des milliers

number_format($nombre, 8) 10,642,371.54890000 8 chiffres décimaux (complément avec des 0) avec virgules comme séparateur des milliers

number_format($nombre, 2, '.', ' ') 10 642 371.55 notation anglaise, point décimal, 2 chiffres décimaux et espaces comme séparateur des milliers

number_format($nombre, 2, '.', ',') 10,642,371.55 notation anglaise, point décimal, 2 chiffres décimaux et virgules comme séparateur des milliers

number_format($nombre, 2, ',', ' ') 10 642 371,55 notation française, virgule décimale, 2 chiffres décimaux et espaces comme séparateur des milliers

number_format($nombre, 2, ',', '.') 10.642.371,55 notation française, virgule décimale, 2 chiffres décimaux et points comme séparateur des milliers

260

Chaînes de caractères

261

On peut délimiter les chaînes de caractères avec la syntaxe Here-doc.

Exemple : $essai = <<<EOD Ma chaîne ‘’essai’’ sur plusieurs lignes. EOD; echo $essai;

La valeur de la variable $essai est délimitée par un identifiant que vous nommez librement. La première apparition de cet identifiant doit être précédée de 3 signes inférieurs <. Sa deuxième apparition doit se faire en premier sur une nouvelle ligne. Cette valeur chaîne se comporte comme si elle était délimitée par des doubles quotes ‘’ ‘’ dans le sens où les variables seront évaluées. Par contre il est inutile d’échapper les guillemets, c’est-à-dire que la déspécialisation des doubles quotes devient inutile.

262

Fin

top related