Download - PHP Interessant

Transcript
  • 7/15/2019 PHP Interessant

    1/160

    PHP, une initiation

    Dominique GonzalezUniversit Lille3-Charles de Gaulle

  • 7/15/2019 PHP Interessant

    2/160

    PHP, une initiationpar Dominique Gonzalez

    Publi mercredi 25 novembre 2009 13h58Copyright 2008 D.Gonzalez

    Ce document est soumis la licence GNU FDL. Permission vous est donne de distribuer, modifier des copies de ces pages tant quecette note apparat clairement.

  • 7/15/2019 PHP Interessant

    3/160

    Table des matiresI. Le cours......................................................................................................................................................................vii

    1. Pourquoi et comment ?.....................................................................................................................................11.1. Introduction ...........................................................................................................................................11.2. Pourquoi ce document ? ......................................................................................................................1

    1.3. Comment a-t-il t construit ? .............................................................................................................11.4. O trouver ce document ? ...................................................................................................................11.5. QBullets ................................................................................................................................................1

    2. Gnralits sur les langages informatiques...................................................................................................32.1. Quappelle-t-on langage informatique? ............................................................................................32.2. Langage interprt................................................................................................................................32.3. Langage compil ...................................................................................................................................32.4. Langages intermdiaires......................................................................................................................4

    3. Des langages particuliers : les langages du web...........................................................................................53.1. Pourquoi programmer ?.......................................................................................................................53.2. Quels langages ?....................................................................................................................................53.3. Avantages et inconvnients.................................................................................................................53.4. Choisir ....................................................................................................................................................5

    4. Une FAQ lmentaire sur PHP........................................................................................................................74.1. Quest ce que PHP ?..............................................................................................................................74.2. Quelle diffrence avec Javascript ?.................................................................................................74.3. Pourquoi choisir PHP au lieu de Javascript ? ...............................................................................74.4. Que se passe-t-il laffichage dune page PHP ? .............................................................................74.5. Comment intgrer du PHP dans du HTML ?...................................................................................7

    5. Premiers exemples en PHP ..............................................................................................................................95.1. LE premier programme........................................................................................................................95.2. LE deuxime programme ....................................................................................................................95.3. Rappels (?) dalgorithmique................................................................................................................95.4. Variables et expressions .....................................................................................................................105.5. Fonctions ..............................................................................................................................................115.6. vous...................................................................................................................................................11

    6. Formulaires en HTML ....................................................................................................................................15

    6.1. Prsentation .........................................................................................................................................156.2. Principaux contrles...........................................................................................................................156.3. Exemples ..............................................................................................................................................16

    7. Traitement dun formulaire en PHP .............................................................................................................197.1. Traitement des donnes dun formulaire en PHP..........................................................................197.2. Exercices ...............................................................................................................................................19

    8. Chanes de caractres......................................................................................................................................218.1. Quest-ce quune chane de caractres ? ..........................................................................................218.2. Que choisir ? Guillemets ou apostrophes ? .....................................................................................218.3. Principales utilisations du backslash .................................................................................................218.4. Principales oprations sur les chanes .............................................................................................228.5. Principales fonctions ..........................................................................................................................228.6. Conversions de types .........................................................................................................................238.7. Exercices ...............................................................................................................................................23

    9. Les tableaux......................................................................................................................................................259.1. Quest-ce quun tableau ? ..................................................................................................................259.2. Quelques exemples dutilisation ......................................................................................................259.3. Les tableaux associatifs ......................................................................................................................269.4. Parcours dun tableau associatif.......................................................................................................279.5. Exercices ...............................................................................................................................................27

    10. PDO ...................................................................................................................................................................2910.1. Quest-ce que PDO..............................................................................................................................2910.2. Quelle utilit ? ...................................................................................................................................2910.3. Se connecter la base de donnes..................................................................................................2910.4. Excuter une requte ........................................................................................................................3010.5. Nombre de lignes et colonnes dune requte select..................................................................3010.6. Accder aux rsultats dune requte select ................................................................................30

    10.7. Gestion des erreurs ...........................................................................................................................3111. Programmation spare en PHP .................................................................................................................3311.1. La programmation spare .............................................................................................................3311.2. Les fonctions require et include .................................................................................................33

    iii

    http://-/?-http://-/?-http://-/?-http://-/?-
  • 7/15/2019 PHP Interessant

    4/160

    12. Identification en PHP....................................................................................................................................3512.1. Prliminaires : la fonction header ..................................................................................................3512.2. Contrle des mots de passe .............................................................................................................3512.3. Amlioration : plusieurs utilisateurs .............................................................................................3612.4. Sparer les donnes du traitement .................................................................................................3612.5. Cacher les mots de passe .................................................................................................................37

    12.6. Crypter les mots de passe ................................................................................................................3713. Sessions ...........................................................................................................................................................3913.1. Prambule ..........................................................................................................................................3913.2. Application : identification des visiteurs.......................................................................................39

    II. Hors programme .....................................................................................................................................................4114. Utiliser PHP sur une base de donnes PostgreSQL.................................................................................43

    14.1. Connexion la base ..........................................................................................................................4314.2. Excution dune requte ..................................................................................................................4314.3. Obtention des rsultats dune requte...........................................................................................4314.4. Un exemple ........................................................................................................................................4414.5. Requtes autres que SELECT ............................................................................................................4414.6. Suppression des messages derreurs..............................................................................................4514.7. Gestion des erreurs et des messages ..............................................................................................45

    15. peardb, une prsentation .............................................................................................................................4715.1. Quest-ce que pear ...........................................................................................................................4715.2. Quelle utilit ? ...................................................................................................................................4715.3. Utiliser peardb ..................................................................................................................................4715.4. Se connecter la base de donnes..................................................................................................4715.5. Gestion des erreurs ...........................................................................................................................4815.6. Excuter une requte ........................................................................................................................4915.7. Accder aux rsultats dune requte select ................................................................................4915.8. setfetchmode() ...............................................................................................................................4915.9. peardb, informations sur les requtes ...........................................................................................51

    16. dbx ...................................................................................................................................................................5316.1. Quest-ce que dbx..............................................................................................................................5316.2. Quelle utilit ? ...................................................................................................................................5316.3. Se connecter la base de donnes..................................................................................................53

    16.4. Excuter une requte ........................................................................................................................5416.5. Nombre de lignes et colonnes dune requte select..................................................................5416.6. Accder aux rsultats dune requte select ................................................................................54

    17. Exploration du contenu dun rpertoire ....................................................................................................5717.1. Les notions ncessaires en PHP ......................................................................................................5717.2. Les notions ncessaires en HTML ..................................................................................................5717.3. Exercices .............................................................................................................................................58

    18. News................................................................................................................................................................5918.1. Prsentation .......................................................................................................................................5918.2. Votre travail .......................................................................................................................................5918.3. Si vous avez le temps... ....................................................................................................................60

    19. Les fichiers ......................................................................................................................................................6119.1. Manipulations de base .....................................................................................................................61

    19.2. Un exemple ........................................................................................................................................6119.3. Exercice...............................................................................................................................................63III. Corrigs des exercices...........................................................................................................................................65

    20. Premiers exercices dalgorithmique, corrigs............................................................................................6721. Premiers formulaires en PHP, corrigs.......................................................................................................7322. Chanes de caractres, corrig .....................................................................................................................8123. Exercices sur les tableaux, corrigs .............................................................................................................8324. Exercices sur les fichiers, corrigs ...............................................................................................................8525. Exploration dun rpertoire, corrigs .........................................................................................................8726. News..., corrig ..............................................................................................................................................89

    26.1. Accueil ................................................................................................................................................8926.2. Liste des noms de fichiers de nouvelles ........................................................................................8926.3. Liste des liens vers les fichiers de nouvelles .................................................................................89

    26.4. Affichage de toutes les nouvelles ...................................................................................................9026.5. Affichage des titres des nouvelles ..................................................................................................9026.6. Affichage des titres faisant lien vers les nouvelles.......................................................................9126.7. Affichage de toutes les nouvelles, proprement ............................................................................91

    iv

  • 7/15/2019 PHP Interessant

    5/160

    26.8. Choix du sujet....................................................................................................................................91IV. tudes de cas ..........................................................................................................................................................93

    27. tudes de cas..................................................................................................................................................9528. Projet Disques 2009.........................................................................................................................................97

    28.1. Prsentation .......................................................................................................................................9728.2. La base de donnes...........................................................................................................................98

    29. Projet Inscriptions .........................................................................................................................................10129.1. Prsentation .....................................................................................................................................10129.2. La base de donnes.........................................................................................................................101

    30. Projet Teniraq.................................................................................................................................................10530.1. Prsentation .....................................................................................................................................10530.2. La base de donnes.........................................................................................................................106

    31. Projet Camping..............................................................................................................................................11131.1. Prsentation .....................................................................................................................................11131.2. Les informations conserver ........................................................................................................11131.3. Les traitements ................................................................................................................................11131.4. La base de donnes.........................................................................................................................112

    32. Projet Association ..........................................................................................................................................11532.1. Contenu du site web.......................................................................................................................115

    32.2. Conditions de travail ......................................................................................................................11532.3. Base de donnes ..............................................................................................................................11532.4. MLD du projet Association .............................................................................................................11632.5. Cration des tables de la base Association....................................................................................11632.6. valuation ........................................................................................................................................11732.7. Dernier conseil ................................................................................................................................118

    33. Projet Gnalogie ...........................................................................................................................................11933.1. Gnralits .......................................................................................................................................11933.2. Les donnes conserver ................................................................................................................11933.3. Traitement des donnes .................................................................................................................11933.4. Optimisations ..................................................................................................................................12033.5. Import-export ..................................................................................................................................12033.6. MCD du projet gnalogie ...............................................................................................................12033.7. Les diffrentes tables ......................................................................................................................12133.8. Les diffrentes contraintes.............................................................................................................123

    34. Projet Brazil ...................................................................................................................................................12734.1. Description.......................................................................................................................................12734.2. Les tables des entits ......................................................................................................................12734.3. Les tables des relations...................................................................................................................12834.4. Les contraintes.................................................................................................................................129

    35. Projet Services ...............................................................................................................................................13335.1. But de ce projet................................................................................................................................13335.2. Fonctionnement ..............................................................................................................................13335.3. Informations plus techniques........................................................................................................13435.4. Question subsidiaire : comment grer lhistorique de la base ?...............................................13435.5. Vocabulaire utilis...........................................................................................................................13435.6. Premire bauche de la structure .................................................................................................135

    35.7. Structures des tables .......................................................................................................................13635.8. Cration des tables..........................................................................................................................13835.9. Remplir les tables de paramtres..................................................................................................139

    36. Projet Disques................................................................................................................................................14336.1. Approche nave ...............................................................................................................................14336.2. Analyse.............................................................................................................................................14336.3. Dernires remarques ......................................................................................................................14536.4. Une autre analyse du projet Disques ............................................................................................14636.5. Cration des tables..........................................................................................................................14836.6. Votre travail .....................................................................................................................................149

    Index.............................................................................................................................................................................151

    v

    http://-/?-http://-/?-http://-/?-http://-/?-http://-/?-http://-/?-http://-/?-http://-/?-
  • 7/15/2019 PHP Interessant

    6/160

    vi

  • 7/15/2019 PHP Interessant

    7/160

    I. Le cours

  • 7/15/2019 PHP Interessant

    8/160

  • 7/15/2019 PHP Interessant

    9/160

    Chapitre 1. Pourquoi et comment ?

    1.1. IntroductionCes pages sont destines des personnes ayant dj programm. Il ne sagit absolument pas dun cours

    dalgorithmique. En particulier: les notions de bases de lalgorithmique (squence, alternative, itration) sontsupposes connues et comprises. On ne traitera ici que de leur traduction en PHP.

    Les notions abordes seront:

    Les langages informatiques, et en particulier les langages du web, en rpondant la question pourquoiprogrammer pour le web ? .

    Les notions classiques en programmation, abordes sous langle PHP : les structures de contrle, leschanes de caractres, les tableaux, etc.

    Les particularits de la programmation pour le web: les formulaires et leur traitement, lidentification.

    Nous terminerons par la mise en relation de pages web avec une base de donnes (PostgreSQL).

    1.2. Pourquoi ce document ?Ces pages ont pour origine un cours destin aux tudiants de 2me anne de lIUP IIES de luniversit deLille III-Charles de Gaulle, Villeneuve dAscq, pour les annes universitaires 2002-2003 et 2003-2004.

    Elles ont ensuite t peu peu remanies et augmentes loccasion dun cours destin aux tudiants de 3meanne de la licence MIASHS.

    Ces pages ne sont pas destines tre un cours autonome : elles ne sont quun support de cours, et beaucoupde choses, qui sont transmises loral pendant les cours, ne sont pas crites.

    Lenvironnement technique du cours est constitu de machines sous linux. Linstallation de ces logiciels nesera pas aborde et ne fait pas partie du contenu du cours.

    1.3. Comment a-t-il t construit ?Ce polycopi a t rdig au format DocBook :

    Le texte source a t crit au format XML avec emacs et Quanta, en respectant la DTD de DocBook.

    Le code source a t compil au format PDF avec openjade et au format HTML avec xsltproc.

    La version que vous avez devant les yeux a t compile le mercredi 25 novembre 2009 13h58 .

    1.4. O trouver ce document ?Ce document est disponible sous plusieurs formats sur le web:

    Un seul document HTML : http://grappa.univ-lille3.fr/polys/php/php.html (Lourd charger, maisfacile sauvegarder ou imprimer)

    Plusieurs pages HTML : http://grappa.univ-lille3.fr/polys/php/index.html (Plus faciles consulter)

    Une version HTML sans feuilles de style : http://grappa.univ-lille3.fr/polys/php/book1.htm (Quelleide ? Mais si vous y tenez...)

    PDF : http://grappa.univ-lille3.fr/polys/php/php.pdf

    1

  • 7/15/2019 PHP Interessant

    10/160

    Chapitre 1. Pourquoi et comment ?

    1.5. QBulletsLes petites images animes qui illustrent les liens de la version web de ce document proviennent de QBullets

    1

    1. http://www.matterform.com/2

  • 7/15/2019 PHP Interessant

    11/160

    Chapitre 2. Gnralits sur les langages informatiques

    Note : Ce document issu de CommentCaMarche.net 1 est soumis la licence GNU FDL. Permission vous estdonne de distribuer, modifier des copies de cette page tant que cette note apparat clairement.

    2.1. Quappelle-t-on langage informatique?On appelle langage informatique un langage destin dcrire lensemble des actions conscutives quun or-dinateur doit excuter. Les langages naturels (langlais, le franais) reprsentent lensemble des faons quontun groupe dindividu de communiquer. Les langages servant aux ordinateurs communiquer nont rien voir avec des langages informatiques, on parle dans ce cas de protocoles, ce sont deux notions totalementdiffrentes. Un langage informatique est une faon pratique pour nous (humains) de donner des instructions un ordinateur.

    Un langage informatique est rigoureux : CHAQUE instruction correspond UNE action du processeur.

    Le langage utilis par le processeur, cest--dire les donnes telles quelles lui arrivent, est appel langagemachine. Il sagit dune suite de 0 et de 1 (du binaire) mais pour plus de clart il peut tre dcrit enhexadcimal. Toutefois le langage machine nest pas comprhensible facilement par lhumain moyen.Ainsi il est plus pratique de trouver un langage intermdiaire, comprhensible par lhomme, qui sera ensuitetransform en langage machine pour tre exploitable par le processeur.

    Lassembleur est le premier langage informatique qui ait t utilis. Celui-ci est encore trs proche du langagemachine mais il permet dj dtre plus comprhensible. Toutefois un tel langage est tellement proche dulangage machine quil dpend troitement du type de processeur utilis (chaque type de processeur peutavoir son propre langage machine). Ainsi un programme dvelopp pour une machine ne pourra pas treport sur un autre type de machine (on dsigne par portable un programme qui peut tre utilis sur ungrand nombre de machines). Pour pouvoir lutiliser sur une autre machine il faudra alors parfois rcrireentirement le programme !

    Un langage informatique a donc plusieurs avantages :

    il est plus facilement comprhensible que le langage machine,

    il permet une plus grande portabilit, cest--dire une plus grande facilit dadaptation sur des machinesde types diffrents.

    Les langages informatiques peuvent grossirement se classer en deux catgories : les langages interprts etles langages compils.

    2.2. Langage interprtUn langage informatique est par dfinition diffrent du langage machine. Il faut donc le traduire pour lerendre intelligible du point de vue du processeur. Un programme crit dans un langage interprt a besoindun programme auxiliaire (linterprteur) pour traduire au fur et mesure les instructions du programme.

    2.3. Langage compilUn programme crit dans un langage dit compil va tre traduit une fois pour toutes par un programmeannexe (le compilateur) afin de gnrer un nouveau fichier qui sera autonome, cest--dire qui naura plusbesoin dun programme autre que lui pour sexcuter (on dit dailleurs que ce fichier est excutable).

    Un programme crit dans un langage compil a comme avantage de ne plus avoir besoin, une fois compil,de programme annexe pour sexcuter. De plus, la traduction tant faite une fois pour toute, il est plusrapide lexcution. Toutefois il est moins souple que programme crit avec un langage interprt car chaque modification du fichier source (fichier intelligible par lhomme : celui qui va tre compil) il faudrarecompiler le programme pour que les modifications prennent effet.

    Dautre part, un programme compil a pour avantage de garantir la scurit du code source. En effet, unlangage interprt, tant directement intelligible (lisible), permet nimporte qui de connatre les secrets de

    1. http://www.commentcamarche.net/

    3

  • 7/15/2019 PHP Interessant

    12/160

    Chapitre 2. Gnralits sur les langages informatiques

    fabrication dun programme et donc de copier le code voire de le modifier. Il y a donc risque de non-respectdes droits dauteur. Dautre part, certaines applications scurises ncessitent la confidentialit du code pourviter le piratage (transaction bancaire, paiement en ligne, communications scurises, etc.).

    2.4. Langages intermdiairesCertains langages appartiennent en quelque sorte aux deux catgories (LISP, Java, Python, etc.) car le pro-gramme crit avec ces langages peut dans certaines conditions subir une phase de compilation intermdiairevers un fichier crit dans un langage qui nest pas intelligible (donc diffrent du fichier source) et non ex-cutable (ncessit dun interprteur). Les applets Java, petits programmes insrs parfois dans les pages Web,sont des fichiers qui sont compils mais que lon ne peut excuter qu partir dun navigateur internet (cesont des fichiers dont lextension est class ).

    4

  • 7/15/2019 PHP Interessant

    13/160

    Chapitre 3. Des langages particuliers : les langages du web

    3.1. Pourquoi programmer ?Une rponse gnrale simpose : pour obtenir des pages web dynamiques.

    Attention, parler de pages web dynamiques ne signifie pas quon parle ncessairement de pages otout bouge dans tous les sens. Il sagit simplement de pages qui nont pas dexistence statique, et qui sontconstruites la vole, au momment o elles sont demandes au serveur.

    Leur utilit se fait sentir quand on doit crire des pages qui doivent sadapter (besoin de lheure, accs des bases de donnes, rponse personnalise, traitement de formulaire, etc.), mais aussi pour faciliter lagestion dun site (de grande taille par exemple), sparation du contenu (la structure) et du traitement (laprsentation).

    3.2. Quels langages ?Beaucoup. Pratiquement tous les langages de programmation peuvent tre utiliss, et il existe des langages

    spcifiques la programmation web.On les classes en deux catgories :

    Excution ct serveur : PHP (syntaxe de type C), ASP (serveur Microsoft), JSP (syntaxe Java), CGI (toutlangage, toute plateforme), etc.

    Excution ct client : Javascript (syntaxe Java), applet Java, Flash, etc.

    3.3. Avantages et inconvnients

    Excution ct serveur Excution ct client

    Code source Pas visible : on nobtient que le rsultatde lexcution

    Pour Javascript : code source visibledans le source de la page (Ne jamaisconfier javascript le contrle des motsde passe : ils devraient alors tre crits enclair dans le code source de la page web).Pour Applet : prcompil, donc nonlisible.

    Rapidit danslexcution

    Dpend de la vitesse et de la charge duserveur.

    Dpend de la vitesse et de la charge duclient.

    Compatibilit Totale : le client ne reoit que du HTML. Problmatique : le client doit possder lelogiciel capable dexcuter le script (parexemple la bonne version de flash ou dejava).

    Dsactivation par leclientt

    Impossible, le client na pas le contrledu serveur.

    Trs simple, il suffit de dsactiver lelogiciel.

    Contrles de scurit Parfaits : tout se passe sur le serveur Inexistants : tout se passe sur le client(Ne jamais confier au seul javascript lecontrle de validit des donnes dunformulaire, ou un quelconque contrlede scurit).

    3.4. ChoisirLequel choisir ? Bof ! a dpend de ce quon veut faire. La seule chose certaine cest que les fonctions impor-tantes (vitales pour laffichage ou mettant en jeu la scurit du site) ne doivent pas tre confies un script

    5

  • 7/15/2019 PHP Interessant

    14/160

    Chapitre 3. Des langages particuliers : les langages du web

    qui sexcute ct client.

    quoi a ressemble ? Vous trouverez de quoi tester tout a dans les pages de Fabien Torre1.

    1. http://grappa.univ-lille3.fr/~torre/guide.php?id=tpprogweb6

  • 7/15/2019 PHP Interessant

    15/160

    Chapitre 4. Une FAQ lmentaire sur PHP

    Note : Ce qui suit est un extrait condens provenant de deux sources :

    la FAQ PHP, maintenue par Armand Delcros1

    A brief PHP Tutorial2

    4.1. Quest ce que PHP ?PHP est un langage de scripting embarqu dans les pages HTML et trait par le serveur. PHP permet deconstruire dynamiquement des pages HTML contenant les rsultats de calculs ou de requtes SQL adresses un systme de gestion de bases de donnes (SGBD).

    4.2. Quelle diffrence avec Javascript ?Javascript est lui aussi en effet intgr dans les pages HTML mais Javascript est intprt par le clientWeb alors que PHP est directement interprt par le serveur Web (sil est inclus comme tant un module duserveur web). Le client web recoit donc directement du HTML et ne voit jamais apparatre le code PHP.

    4.3. Pourquoi choisir PHP au lieu de Javascript ?Il ny a pas choisir entre PHP ou Javascript. En ralit leur utilisation est diffrente : Javascript esttrs bien adapt laspect prsentation et manipulation du client Web. PHP est lui adapt la cration depage HTML dynamique et rapide. PHP permet de faire des pages HTML dynamiques, dans le sens que deuxappels conscutifs une URL peuvent donner deux pages HTML diffrentes. Mais chacune de ces pages eststatique. On peut dire quau niveau du serveur la page est dynamique alors quelle apparait comme tantstatique au niveau du client Web. Javascript permet lui de gnrer une page dynamique pour le client

    Web, cest une des principales diffrences entre ces deux outils de dveloppement.

    4.4. Que se passe-t-il laffichage dune page PHP ?Linterprteur intgr fonctionne de la manire suivante :

    Lorsque le serveur HTTP reconnait un fichier comme intgrant du code PHP il le parcourt avant delexpdier au client.

    Sil rencontre une instruction PHP, il la transmet linterprteur .

    Linterprteur excute linstruction et transmet ventuellement les sorties au serveur.

    Celui ci redirige ces sorties vers le client.

    Il importe de signaler que les programmes PHP ne sont pas transmis au client mais excuts sur le serveur.Le poste client ne fera pas de diffrence entre les pages statiques et celles gnres dynamiquement. Il ny adonc pas lieu de configurer spcialement les navigateurs pour supporter PHP.

    4.5. Comment intgrer du PHP dans du HTML ?Pour que le serveur HTTP reconnaisse du code PHP il faut que :

    Le nom du document HTML se termine par le suffixe php et non html .

    1. http://perso.cybercable.fr/adelcros/docs/php/php.html2. http://www.linux-france.org/article/devl/php3/tut/php3_tut.html

    7

  • 7/15/2019 PHP Interessant

    16/160

    Chapitre 4. Une FAQ lmentaire sur PHP

    Le code PHP soit dlimit par les balises .

    Bien que les possibilits du langage PHP soient tendues, il suffit dune connaissance lmentaire du langagepour raliser les applications Web courantes.

    Ce langage dispose dune bibliothque de fonctions trs tendue. Elle fournit en particulier un interface avec

    les principaux systmes de gestion de base de donnes et avec le systme de gestion de fichier du serveur.On se reportera la documentation du langage3 pour la description de ces fonctions.

    3. http://php.net8

  • 7/15/2019 PHP Interessant

    17/160

    Chapitre 5. Premiers exemples en PHP

    Les corrigs des exercices de ce chapitre se trouvent Chapitre 20.

    5.1. LE premier programme

    Remarque echo1 sert produire un affichage.

    RemarquePour que echo affiche le texte tel quel, ce texte doit tre entour de guillemets " . Sinon echo essaiede comprendre. Par exemple echo 1+2; provoque laffichage de 3 . Tandis que echo "1+2"; provoque laffichage de 1+2 .

    Pour voir le rsultat produit : helloworld.php2

    En allant voir le code source de la page produite (sur votre navigateur) vous ne verrez que cela :

    Hello world!

    Cest normal : souvenez-vous que le serveur excute le programme et nenvoie au client que le rsultat, pasle programme lui-mme.

    5.2. LE deuxime programme

    RemarqueVous obtenez tous les renseignements possibles sur la version de PHP installe sur votre machine.

    Remarque phpinfo3 est une fonction: une seule instruction qui permet PHP deffectuer beaucoup de choses. Nousverrons plus tard comment crire nos propres fonctions. On reconnait une fonction aux parenthses qui lasuivent.

    Pour voir le rsultat produit : phpinfo.php4

    2. http://grappa.univ-lille3.fr/polys/php/exemples/helloworld.php4. http://grappa.univ-lille3.fr/polys/php/exemples/phpinfo.php

    9

  • 7/15/2019 PHP Interessant

    18/160

    Chapitre 5. Premiers exemples en PHP

    5.3. Rappels (?) dalgorithmique

    1. La structure de base dun programme est la squence : les instructions sont excutes les unes aprs lesautres, dans lordre o elles sont crites. Les intructions sont toujours termines par un point-virgule( ; ). Ce nest pas un sparateur dinstructions.

    2. Il existe des structures qui permettent de rompre la squence. Vous trouverez ci-dessous les princi-pales. Il y en a dautres...

    3. Lalternative5 : un test est excut ; selon que son rsultat soit OUI ou NON, une partie du programmeou une autre est excute.

    Sa syntaxe en PHP est :if (test) {

    instructions excuter quand la rponse est OUI} else {

    instructions excuter quand la rponse est NON}

    4. Litration6 (TANT QUE) : une partie du programme est excute tant que le rsultat dun test est OUI(le calcul est fait AVANT chaque entre dans la boucle).

    Sa syntaxe en PHP est :while (test) {

    instructions excuter tant que la rponse est OUI}

    5. La boucle POUR7 : ce nest quun cas particulier de la boucle TANT QUE.

    Sa forme gnrale est :for (avant dentrer ; test ; action de fin de boucle) {

    instructions excuter quand la rrponse au test est OUI}

    o avant dentrer et action de fin de boucle sont des actions quelconques. Cette forme est totalementquivalente celle-ci :

    avant dentrer ;while (test) {instructions excuter quand la rponse au test est OUI ;action de fin de boucle ;

    }

    Mais on lutilisera le plus souvent sous cette forme :for (initialiser compteur;test compteur;incrmenter compteur) {

    instructions excuter quand la rponse au test est OUI}

    comme dans lexemple suivant qui provoque laffichage : 357911131517 :for ($i=3 ; $i

  • 7/15/2019 PHP Interessant

    19/160

    Chapitre 5. Premiers exemples en PHP

    5. Les oprateurs de comparaison sont eux aussi (presque tous) classiques : < (infrieur), (suprieur), >= (suprieur ou gal), == (gal), != (diffrent).

    6. Les oprateurs logiques de base sont || (ou) et && (et).

    5.5. FonctionsUne fonction sans paramtres se dfinit par :

    function nom_de_la_fonction () {corps_de_la_fonction

    }

    Une fonction avec paramtres se dfinit par :

    function nom_de_la_fonction (paramtres) {corps_de_la_fonction

    }

    Les paramtres sont toujours passs par valeur.

    Le rsultat de la fonction est la valeur qui se trouve derrire la premire instruction return rencontre. Parexemple return 5; .

    Il ny a pas de procdures : si vous voulez quune de vos fonctions se comporte comme une procdure, ilsuffit de ne lui faire renvoyer aucune valeur, par exemple avec return; .

    5.6. vousDans les exercices qui suivent vous ferez en sorte que les rsultats soient prsents proprement (je vous laisselibre choix sur le sens exact de ce mot...).

    1. crire un programme PHP qui affiche tous les nombres impairs entre 0 et 15000, par ordre croissant : 1 3 5 7 ... 14995 14997 14999 .Exemple : impair.php8

    2. crire un programme qui crit 500 fois Je dois faire des sauvegardes rgulires de mes fichiers.

    Exemple : punition.php9

    3. crire un programme qui affiche la table de multiplication par 13.

    Exemple : multiplication.php10 ou mieux : multiplicationbis.php11.

    4. crire un programme qui calcule 30!.

    Exemple : factorielle.php12

    5. crire un programme qui affiche :

    12345678910111213123456789101112131234567891011121312345678910111213

    Exemple : 4lignes.php13

    6. crire un programme qui affiche la table de multiplication totale de {1,...,12} par {1,...,12}.

    Exemple : multiplicationtotale.php14

    8. http://grappa.univ-lille3.fr/polys/php/exemples/impair.php9. http://grappa.univ-lille3.fr/polys/php/exemples/punition.php10. http://grappa.univ-lille3.fr/polys/php/exemples/multiplication.php11. http://grappa.univ-lille3.fr/polys/php/exemples/multiplicationbis.php12. http://grappa.univ-lille3.fr/polys/php/exemples/factorielle.php13. http://grappa.univ-lille3.fr/polys/php/exemples/4lignes.php14. http://grappa.univ-lille3.fr/polys/php/exemples/multiplicationtotale.php

    11

  • 7/15/2019 PHP Interessant

    20/160

    Chapitre 5. Premiers exemples en PHP

    7. crire une fonction quirenvoie n!. Puis utilisez cette fonction pour construire une table desfactorielles.

    Exemple : tablefact.php15.

    8. crire une fonction qui affiche un triangle et qui admet comme paramtre le nombre de lignes dutriangle :

    *

    *****

    Utilisez cette fonction pour dessiner un demi-sapin (de 2 en 2) :

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

    ***********

    Exemple : demisapin.php16

    9. Coefficients du binme :

    a. crire une fonction qui renvoie n!.

    b. Utiliser la fonction prcdente pour crire une fonction qui renvoie

    c. Utiliser les fonctions prcdentes dans un programme qui affiche les coefficients du binmepour toutes les valeurs de n dans {0,1,..,20} :

    Exemple : binome.php17

    10. La suite de Fibonnacci est dfinie par les relations suivantes :

    F0=0,

    F1=1,

    Fn=Fn-1 + Fn-2 pour tout n>1.Donc F0=0, F

    1=1, F

    2=0+1=1, F

    3=1+1=2, F

    4=2+1=3, F

    5=3+2=5, F

    6=5+3=8, F

    7=8+5=13...

    crire un programme qui affiche les 50 premires valeurs de Fn.

    Exemple : fibonnacci.php18

    11. Fibonnacci, le retour : afficher les rapports

    ainsi que leurs diffrences avec le nombre

    15. http://grappa.univ-lille3.fr/polys/php/exemples/tablefact.php16. http://grappa.univ-lille3.fr/polys/php/exemples/demisapin.php17. http://grappa.univ-lille3.fr/polys/php/exemples/binome.php18. http://grappa.univ-lille3.fr/polys/php/exemples/fibonnacci.php

    12

  • 7/15/2019 PHP Interessant

    21/160

    Chapitre 5. Premiers exemples en PHP

    Exemple : fibonnacci-retour.php19

    12. Afficher un cadre 10x10.

    Exemple : cadre-pre.php20 ou cadre-table.php21

    13. Tableau dadditions : faire raliser par une page PHP un tableau dadditions complter (pourlentranement dun enfant au calcul).

    Exemple : tableauadditionsfixe.php22 ou tableauadditionsvariable.php23

    19. http://grappa.univ-lille3.fr/polys/php/exemples/fibonnacci-retour.php20. http://grappa.univ-lille3.fr/polys/php/exemples/cadre-pre.php21. http://grappa.univ-lille3.fr/polys/php/exemples/cadre-table.php22. http://grappa.univ-lille3.fr/polys/php/exemples/tableauadditionsfixe.php23. http://grappa.univ-lille3.fr/polys/php/exemples/tableauadditionsvariable.php

    13

  • 7/15/2019 PHP Interessant

    22/160

    Chapitre 5. Premiers exemples en PHP

    14

  • 7/15/2019 PHP Interessant

    23/160

    Chapitre 6. Formulaires en HTML

    6.1. PrsentationLes formulaires de saisie permettent lutilisateur de fournir des informations et ainsi dobtenir une rponse

    personnalise. Les informations contenues dans les champs remplis par lutilisateur sont transmises par leprogramme client au serveur qui les transmet son tour un programme de traitement, soit un CGI (CommonGateway Interface), soit un script de type PHP.

    La structure dun formulaire de saisie est simple, elle se compose dun lment FORM contenant essentielle-ment une suite de contrles (lments input, textarea, select, button, etc.) mais aussi des lments destructuration de document afin daligner correctement les champs dentre.

    Globalement un formulaire se prsente sous cette forme :

    du texte, des boutons, des zones de saisie ...

    o :

    (1)

    dsigne la mthode utiliser pour envoyer les informations ; cest GET (par dfaut ; les donnes du formu-laire sont envoyes dans lURL) ou POST (les donnes sont envoyes dans le corps du message, elles ne sontdonc pas visibles dans lURL).

    (2)

    dsigne lURL du programme (CGI, PHP, etc.) qui va traiter les donnes. (Ce peut tre aussi MAIL, mais cestdconseill... Cela ne marche que si le navigateur de lutilisateur est BIEN configur. De toutes faons il faudratraiter les donnes aprs, et les stocker dans des botes aux lettres ne facilite pas lautomatisation de cette tche.)

    (3)dsigne le texte qui va apparatre dans le bouton denvoi.

    Dans laffichage de la page, rien ne distingue le formulaire du reste du texte. Il est donc conseill de le sparerdu reste par la balise avant et aprs, ou le mettre dans un tableau aux bordures visibles.

    6.2. Principaux contrlesLes principaux contrles sont :

    input : les zones de saisie, les boutons radios et les cases cocher sont dfinis par ce contrle ; la syntaxe(simplifie) en est :

    o :

    type peut tre :

    text

    pour une zone de saisie au sens habituel du terme (une zone rectangulaire o lutilisateur crit des don-nes, sur une seule ligne) ; cest ce qui sera dans cette zone qui sera envoy au programme de traitement ;

    password

    pour une zone de saisie de mot de passe (identique text, mais le texte saisi napparat lcran que

    sous la forme dastrisques, pour viter dtre lisible par une tierce personne) ;checkbox

    pour une case cocher ;

    15

  • 7/15/2019 PHP Interessant

    24/160

    Chapitre 6. Formulaires en HTML

    radio

    pour un bouton radio (des boutons radios de mme nom sont mutuellement exclusifs) ;

    submit

    pour un bouton denvoi ; cest le clic sur ce bouton qui envoie le contenu du formulaire au programmede traitement ;

    hidden

    pour une variable cache ; permet de cacher des valeurs ncessaires au traitement mais quon ne veutpas voir affiches lcran ; attention, cachne veut pas dire secret : ces valeurs sont visibles dans le codesource de la page ;

    reset

    pour remettre les zones de saisie leurs valeurs par dfaut (les valeurs quelles ont lors du chargementde la page) ;

    nom est le nom de la variable qui sera envoy au programme ; cela na a priori pas de sens pour un boutonsubmit ou reset, mais cest absolument ncessaire pour les autres ; les zones doivent en principe avoir des

    noms diffrents, sauf pour le boutons radios : les boutons radios de mme nom sont mutuellementexclusifs ;

    value est la valeur du contrle :

    pour text et password il sagit dune valeur qui permet de pr-remplir la zone ;

    pour checkbox et radio cest la valeur qui sera donne la variable si la case est slectionne ;

    pour submit et reset cest le texte qui sera crit dans le bouton ;

    pour hidden cest la valeur qui sera donne la variable.

    select : pour crer des listes droulantes ; exemple dutilisation :

    premier choix

    deuxime choixtroisime choix

    Cette zone permettra denvoyer une variable de nom menu qui aura pour valeur le choix slectionn. Pourpr-slectionner un choix dans la liste il suffit dajouter lattribut selected="selected" dans la balise correspondante.

    On peut avoir besoin denvoyer une valeur diffrente de ce qui est affiche (par exemple demander lutilisateur de choisir une personne par ses nom et prnom, et envoyer lidentifiant de cette personnedans une table dune base de donnes). On utilisera alors lattribut value dans la balise commepar exemple :

    marcel durand georges dupont

    pierre martinDans cet exemple si on choisit georges dupont la variable responsable aura la valeur 2.

    textarea : pour des zones de saisies plus grandes quavec input ; exemple dutilisation :Texte par dfaut...

    6.3. ExemplesVous pourrez trouver deux exemples (presque identiques, sauf pour la mthode denvoi : GET pour lun,POST pour lautre) aux adresses suivantes :

    http://grappa.univ-lille3.fr/~gonzalez/prog/test01.html

    http://grappa.univ-lille3.fr/~gonzalez/prog/test02.html

    Vous pouvez tester vos propres formulaires en suivant les instructions de la page :

    16

  • 7/15/2019 PHP Interessant

    25/160

    Chapitre 6. Formulaires en HTML

    http://grappa.univ-lille3.fr/~torre/Enseignement/TPs/Formulaires

    Votre formulaire doit contenir un attribut cach identifiant et le champ action doit contenir la valeur :

    http://grappa.univ-lille3.fr/~torre/Enseignement/TPs/Formulaires/universel.php

    17

  • 7/15/2019 PHP Interessant

    26/160

    Chapitre 6. Formulaires en HTML

    18

  • 7/15/2019 PHP Interessant

    27/160

    Chapitre 7. Traitement dun formulaire en PHP

    Les corrigs des exercices de ce chapitre se trouvent Chapitre 21.

    7.1. Traitement des donnes dun formulaire en PHPTout programme PHP peut recevoir des variables.Si on connat par avance le nom des variables qui seront passes au programme, il suffit de les appeler parleur nom (avec la syntaxe PHP, cest--dire prcd dun $).

    Par exemple lappel de lURL suivante

    http://grappa.univ-lille3.fr/~gonzalez/prog/form01.php3?x=5&y=7

    autorise lemploi des variables $x (qui vaut 5) et $y (qui vaut 7) dans le programme form01.php3 .

    Attention !Il est de plus en plus courant de rencontrer des serveurs configurs en safe mode, cest--dire avec desrglages destins se protger du dtournement de certaines pages par dventuels pirates.

    Si cest votre cas vous aurez accs au paramtre truc non pas par $truc mais par :

    $_GET["truc"] $HTTP_GET_VARS["truc"] pour un envoi par la mthode GET :

    $_POST["truc"] ou (au choix) par $HTTP_POST_VARS["truc"] pour un envoi par la mthode POST.

    Dans la suite nous supposerons ne pas tre en safe mode.

    La question est donc : quelles variables (avec quelles valeurs) sont transmises par un formulaire ? Les noms desvariables sont ceux des champs du formulaire.

    Pour les zones de saisies, le texte tap est transmis tel quel. Pour les cases cocher, la valeur est on si la casea t coche, une chane vide sinon. Pour les boutons radios cest la valeur affecte value pour le bouton

    slectionn. Pour les listes droulantes, cest la valeur affecte option pour le choix slectionn.

    7.2. Exercices

    1. crire un formulaire qui demande le nom et lge de lutilisateur. Le bouton submit de ce formulaireprovoquera laffichage dune page qui saluera lutilisateur avec cette phrase : Bonjour machin, vousavez xx ans... (avec les bonnes valeurs, bien entendu).

    Exemple : traitement-01.html1

    2. Deux vacanciers ont abandonn Montpellier leur bb de 9 mois, qui navait pas t sage.

    Quelle ne fut pas leur surprise quand 6 mois plus tard, rentrs chez eux Lille, ils ont vu arriver leurenfant qui avait fait quatre pattes le trajet Montpellier-Lille par lautoroute.

    crire un formulaire PHP permet de saisir la distance parcourue par le bb, le nombre dheures oil marchait par jour, et le nombre de jours quil a passs sur la route. Le formulaire affichera alors lavitesse du bb.

    Exemple : traitement-02.html2

    3. crire un formulaire qui demande le nom et le sexe de lutilisateur (M ou Mme). Ce formulaire appelleune page qui affichera Bonjour monsieur Truc ou Bonjour madame Bidule suivant le cas (avec levrai nom de la personne, bien entendu !) :

    Exemple : traitement-03.html3

    4. Un permis de chasse points remplace dsormais le permis de chasse traditionnel.

    1. http://grappa.univ-lille3.fr/polys/php/exemples/traitement-01.html2. http://grappa.univ-lille3.fr/polys/php/exemples/traitement-02.html3. http://grappa.univ-lille3.fr/polys/php/exemples/traitement-03.html

    19

  • 7/15/2019 PHP Interessant

    28/160

    Chapitre 7. Traitement dun formulaire en PHP

    Chaque chasseur possde au dpart un capital de 100 points. Sil tue une poule il perd 1 point, 3 pointspour un chien, 5 points pour une vache et 10 points sil tue son meilleur ami.

    Le permis cote 1000 francs.

    crire un formulaire PHP qui permet de saisir la liste des victimes du chasseur et calcule le prix payer pour les permis supplmentaires ncessaires.

    Exemple : traitement-04.html4

    5. crire un formulaire calculatrice : 2 cases pour la saisie des oprandes, un groupe de 4 cases cocher (ou une liste droulante) pour le choix de lopration, et affichage du rsultat de lopration.

    Exemple : traitement-05.php5

    6. crire un formulaire qui demande deux nombres a et b. Il affiche ensuite la table de multiplication para sur b lignes. Le formulaire doit se souvenir des valeurs choisies.

    Exemple : traitement-06.php6

    7. crire un formulaire qui demande un mot de passe. Deux mots de passe diffrents sont accepts. Onsaluera lutilisateur diffremment en fonction du mot de passe utilis.

    Exemple : traitement-07.php7

    8. Addition complter : un formulaire propose une addition incomplte que lutilisateur doit terminer.Exemple : addition.php8

    9. Devinette n1 : vous devez deviner le nombre que le programme a choisi. Vous proposez une solution,et le programme vous rpond trop petit ou trop grand suivant le cas, jusqu trouver le bonnombre.

    Exemple : devinette01.php9

    10. Devinette n2 : mme chose que lexercice prcdent, mais les rles sont inverss (cest le programmequi devine).

    Exemple : devinette02.php10

    11. Le pipotron : lordinateur vous aide crire nimporte quoi.

    Exemple : pipotron.php11

    4. http://grappa.univ-lille3.fr/polys/php/exemples/traitement-04.html5. http://grappa.univ-lille3.fr/polys/php/exemples/traitement-05.php6. http://grappa.univ-lille3.fr/polys/php/exemples/traitement-06.php

    7. http://grappa.univ-lille3.fr/polys/php/exemples/traitement-07.php8. http://grappa.univ-lille3.fr/polys/php/exemples/addition.php9. http://grappa.univ-lille3.fr/polys/php/exemples/devinette01.php10. http://grappa.univ-lille3.fr/polys/php/exemples/devinette02.php11. http://grappa.univ-lille3.fr/polys/php/exemples/pipotron.php20

  • 7/15/2019 PHP Interessant

    29/160

    Chapitre 8. Chanes de caractres

    Les corrigs des exercices de ce chapitre se trouvent Chapitre 22.

    La cration de pages web ncessite la plupart du temps la manipulation de chanes de caractres.

    Nous allons en explorer les principales fonctions disponibles en PHP.

    8.1. Quest-ce quune chane de caractres ?Trois choses savoir :

    1. Le mot anglais qui dsigne les chanes de caractres est string (utile, car la documentation estsouvent en anglais).

    2. Ayez toujours porte de main la documentation de PHP. Et, daprs le point prcdent, allez voir lechapitre String1.

    3. Une chane, cest nimporte quoi entour de guillemets ( " ) ou dapostrophes ( ). Voici deuxexemples :

    "Je suis une chane de caractres."Je suis aussi une chane de caractres.

    8.2. Que choisir ? Guillemets ou apostrophes ?Cest pareil, sauf que :

    Si on commence par lun, on finit par le mme. Voici deux exemples qui NE sont PAS des chanes decaractres :

    "Je ne suis pas une chane de caractres.Je ne suis pas non plus une chane de caractres."

    Si votre chane contient des apostrophes, utilisez des guillemets, si votre chane contient des guillemets,utilisez des apostrophes. Par exemple :"Jen rvais..."Il a dit "Bonjour".

    RemarqueSi votre chane doit contenir les deux, vous pouvez utiliser le caractre backslash( \ ) :

    J\en rvais... Il m\a dit "Bonjour"."Jen rvais... Il ma dit \"Bonjour\"."

    Les variables sont interprtes dans les guillemets, mais pas dans les apostrophes.

    Par exemple si la variable $a vaut 5, linstruction echo "$a"; affichera 5 , tandis que echo $a; affichera $a .

    Il en est de mme des caractres prcds du caractre backslash (sauf \ ).

    8.3. Principales utilisations du backslashLe caractre backslash ( \ ) permet dintroduire dans les chanes des caractres qui ne pourraient pas ytre sinon (par exemple des guillemets dans une chane entoure de guillemets, des retours la ligne, etc...).Comme il est de ce fait lui mme un caractre spcial, il faut une faon particulire de le noter pour quil soitinclus dans une chane. Ce sera \\ .

    Voici un tableau rcapitulant les principales utilisations du backslash :

    1. http://fr.php.net/manual/fr/ref.strings.php

    21

  • 7/15/2019 PHP Interessant

    30/160

    Chapitre 8. Chanes de caractres

    Tableau 8-1. Principales utilisations du backslash

    code signification

    \n retour la ligne

    \t tabulation

    \\ backslash lui-mme ( \ )\" guillemet ( " ) dans une chane entoure de guillemets

    \ apostrophe ( ) dans une chane entoure dapostrophes

    \$ dollar ( $ )

    8.4. Principales oprations sur les chanes

    Affectation :

    Comme toute variable, laffectation dune variable chane se fait par le symbole =

    :$a="bla bla bla bla...";

    Affichage :

    Comme pour toute valeur, laffichage se fait par linstruction echo .

    Concatnation :

    Loprateur de concatnation est le point ( . ).

    8.5. Principales fonctionsIl ne sagit l que des fonctions principales, et elles ne seront pas expliques, ce qui signifie quil vous faudraaller voir dans la documentation de PHP2 par vos propres moyens.

    Conversion majuscules-minuscules :

    strtolower3 .

    Conversion minuscules-majuscules :

    strtoupper4 .

    Dcouper une chane :

    explode5 ou split6 (renvoient un tableau). Les fonctions inverses sont implode7 et join8

    Enlever les espaces en dbut ou fin dune chane :

    ltrim9 , chop10 , trim11 .

    Longueur dune chane :

    strlen12

    2. http://fr.php.net/manual/fr/ref.strings.php3. http://fr.php.net/manual/fr/function.strtolower.php4. http://fr.php.net/manual/fr/function.strtoupper.php5. http://fr.php.net/manual/fr/function.explode.php6. http://fr.php.net/manual/fr/function.split.php7. http://fr.php.net/manual/fr/function.implode.php8. http://fr.php.net/manual/fr/function.join.php9. http://fr.php.net/manual/fr/function.ltrim.php10. http://fr.php.net/manual/fr/function.chop.php11. http://fr.php.net/manual/fr/function.trim.php12. http://fr.php.net/manual/fr/function.strlen.php

    22

  • 7/15/2019 PHP Interessant

    31/160

    Chapitre 8. Chanes de caractres

    Position dune chane dans une autre :

    strpos13

    Remplacer une partie dune chane par une autre :

    str_replace14 ou substr_replace15

    Un extrait dune chane :

    substr16

    8.6. Conversions de typesPHP est extrmement tolrant sur les conversions de types et essaiera toujours de faire le mieux et le plusnaturellement possible.

    Nen profitez quand mme pas trop et prvoyez (et comprenez) toujours son comportement, cela vous vit-era sans doute des dconvenues...

    Un exemple de ce quon peut faire (mais vitez den abuser...) :

    Ce programme affichera :

    5 string52 string260 integer2602 string260.2 double

    RemarqueLa commande echo $truc." ".gettype($truc)."
    \n"; provoque laffichage de la valeur de$truc, suivie de son type, tout ceci tant termin par un passage la ligne.

    8.7. Exercicescrire un formulaire qui devra vrifier lidentit de lutilisateur en demandant un nom, un prnom et un motde passe (ce dernier ne devra pas apparatre lcran pendant la frappe).

    Tant que lutilisateur nest pas reconnu, seul saffiche le formulaire.

    Si lutilisateur est reconnu, seul saffiche un message daccueil.

    La casse des valeurs ne devra tre prise en compte (cest--dire le fait que ce soit tap en majuscules ou enminuscules ne devra pas changer le comportement des pages).

    Les espaces taps en dbut ou en fin de mot de passe, de nom ou de prnom devront tre limins.

    13. http://fr.php.net/manual/fr/function.strpos.php14. http://fr.php.net/manual/fr/function.str-replace.php15. http://fr.php.net/manual/fr/function.substr-replace.php16. http://fr.php.net/manual/fr/function.substr.php

    23

  • 7/15/2019 PHP Interessant

    32/160

    Chapitre 8. Chanes de caractres

    Vous trouverez un exemple sur la page identite.php17

    17. http://grappa.univ-lille3.fr/polys/php/exemples/identite.php24

  • 7/15/2019 PHP Interessant

    33/160

    Chapitre 9. Les tableaux

    Les corrigs des exercices de ce chapitre se trouvent Chapitre 23.

    Le stockage et la manipulation dun grand nombre de donnes ncessitent souvent lutilisation de tableaux.

    9.1. Quest-ce quun tableau ?Pour simplifier, voici 3 dfinitions quivalentes :

    cest une variable qui peut stocker plusieurs valeurs la fois, chacune tant numrote ;

    OU : cest un ensemble de variables diffrentes, regroupes sous le mme nom, chacune tant diffrenciedes autres par un numro ;

    OU : cest la reprsentation informatique dun vecteur (ou dune matrice), chacune des composantes tantconnue par son indice.

    Dune manire plus gnrale :

    Un tableau est dabord une variable, donc son nom commence par un dollar ( $ ).

    La syntaxe pour accder aux cases dun tableau est la mme que dans la plupart des langages : $x[5] dsigne le 5me lment du tableau $x .

    RemarqueEn PHP la numrotation des lments dun tableau commence toujours zro.

    9.2. Quelques exemples dutilisation

    9.2.1. Remplir et afficher le contenu un tableauOn peut remplir, par exemple, les cases dun tableau une par une :

    $t[0]="bonjour";$t[1]="bonsoir";$t[2]="bla bla bla";

    On peut aussi utiliser une boucle for pour remplir une srie de cases :

    for ($i=3 ; $i

  • 7/15/2019 PHP Interessant

    34/160

    Chapitre 9. Les tableaux

    9.2.2. Un exemple completEn regroupant les lignes prcdentes (et en les habillant un peu) on obtient le programme suivant(tableau-01.php1) :

    Remplissage du tableau

    (Il ne se passe rien lcran dans cette partie : normal,cest du travail sur la modification des variables, par surleur affichage.)

    Affichage de certaines cases particulires

    Affichage dune suite de cases

    9.3. Les tableaux associatifsIl sagit dune gnralisation des tableaux, mais au lieu dutiliser des nombres pour les indices on peut utilisernimporte quoi...

    Ce programme (tableau-04.php2) permet de choisir un prnom dans une liste droulante et dafficher lesrenseignements correspondants.

    Thcle

    dithKellyMlusineElmer

  • 7/15/2019 PHP Interessant

    35/160

    Chapitre 9. Les tableaux

    $adresse["Mlusine"]="7 rue Jean TANLAMER";$adresse["Elmer"]="99 avenu Dino ZORE";$ville["Thcle"]="Rennes";$ville["dith"]="Douarnenez";$ville["Kelly"]="Auchel";$ville["Mlusine"]="Chamonix";$ville["Elmer"]="Langres";

    if (isset($prenom)) {echo "Prnom : $prenom
    \nNom : ".$nom[$prenom]

    ."
    \nAdresse : ".$adresse[$prenom]

    ."
    \nVille : ".$ville[$prenom];}?>

    9.4. Parcours dun tableau associatif

    Quand on travaille avec un tableau classique ( indice numrique), il est facile den parcourir toutes les casesavec une boucle for.

    Mais pour parcourir un tableau associatif, cest un peu moins direct. La mthode classique ne marche pas : lafonction count3 ne donne pas un rsultat exploitable facilement dans le cas dun tableau associatif. Il est alorsdifficile dimaginer, par exemple pour lexemple prcdent, une boucle qui construirait automatiquement lasuite Thcle, dith, Kelly, Mlusine, Elmer .

    Ces valeurs, il faut aller les chercher dans le tableau lui-mme.

    Ne nous nervons pas, PHP fournit tout ce quil faut. La structure foreach4 permet de parcourir un tableauassociatif, comme dans le programme suivant (tableau-05bis.php5).

    Le programme tableau-05bis.php6 parcourt le tableau $nom, et en affiche le contenu, chaque lignedaffichage contenant le couple clef-valeur (la clef correspondant ce quon a lhabitude dappeler indicequand il sagit dun nombre) :

    .

    9.5. Exercices

    1. On dispose du fichier suivant contenant desadresses web (rien en vous empche den choisirdautres).

    crire un programme (tableau-06.php7) qui lit ce fichier pour construire une page web contenantune liste de liens hypertextes (tableau-06.txt8).

    http://www.hoaxbuster.com/

    3. http://fr.php.net/manual/fr/function.count.php4. http://fr.php.net/foreach

    5. http://grappa.univ-lille3.fr/polys/php/exemples/tableau-05bis.php6. http://grappa.univ-lille3.fr/polys/php/exemples/tableau-05bis.php7. http://grappa.univ-lille3.fr/polys/php/exemples/tableau-06.php8. http://grappa.univ-lille3.fr/polys/php/exemples/tableau-06.txt

    27

  • 7/15/2019 PHP Interessant

    36/160

    Chapitre 9. Les tableaux

    http://www.gazel.nu/faqs/virus.htm#e-mailhttp://www.electriccafe.org/JBT/http://www.zetetique.ldh.org/http://perso.wanadoo.fr/jean.brissonnet/http://www.thejackytouch.com/http://www.multimania.com/lepoulpe

    2. Mme exercice (tableau-07.php9

    ), mais cette fois chaque ligne comprend aussi une description dusite point, la sparation tant assur par la chane "**" (tableau-07.txt10) :http://www.hoaxbuster.com/**HoaxBuster, premire....http://www.gazel.nu/faqs/virus.htm#e-mail**Est-il....http://www.electriccafe.org/JBT/**Nemo Joe Bar Team Spirithttp://www.zetetique.ldh.org/**Le cercle Zttiquehttp://perso.wanadoo.fr/jean.brissonnet/**thique et tochttp://www.thejackytouch.com/**The Jacky Touchhttp://www.multimania.com/lepoulpe**Le poulpe sur la toile

    3. Mme exercice (tableau-08.php11), mais cette fois chaque description et ladresse correspondantesont sur deux lignes conscutives (tableau-08.txt12) :

    HoaxBuster, premire ressource francophone sur les hoaxhttp://www.hoaxbuster.com/Est-il possible dattraper un virus en ouvrant un e-mail ?http://www.gazel.nu/faqs/virus.htm#e-mailNemo Joe Bar Team Spirithttp://www.electriccafe.org/JBT/Le cercle Zttiquehttp://www.zetetique.ldh.org/thique et tochttp://perso.wanadoo.fr/jean.brissonnet/The Jacky Touchhttp://www.thejackytouch.com/Le poulpe sur la toilehttp://www.multimania.com/lepoulpe

    4. On donne une liste de personnes (tableau-09.txt13) dont voici les premires lignes :19;Thor;Aipaleur;tata

    30;Dick;Sionnaire;dsds 35;Debbie;Zoudanlkou;dzdz47;Mlanie;Zaitofrai;mzmz 48;Helmut;Ardelpic;haha49;Jacques-Andr;Lejour-Lanuit;jljl 68;Phil;Alapate;papa

    Chaque ligne est compose, dans lordre, dun identifiant (un nombre), un prnom, un nom, et un motde passe. crire une page web (tableau-09.php14) qui donne slectionner une des personnes et quiaffiche ensuite son mot de passe.

    9. http://grappa.univ-lille3.fr/polys/php/exemples/tableau-07.php

    10. http://grappa.univ-lille3.fr/polys/php/exemples/tableau-07.txt11. http://grappa.univ-lille3.fr/polys/php/exemples/tableau-08.php12. http://grappa.univ-lille3.fr/polys/php/exemples/tableau-08.txt13. http://grappa.univ-lille3.fr/polys/php/exemples/tableau-09.txt14. http://grappa.univ-lille3.fr/polys/php/exemples/tableau-09.php28

  • 7/15/2019 PHP Interessant

    37/160

    Chapitre 10. PDO

    10.1. Quest-ce que PDO

    Ce texte est extrait de XXVII. FonctionsPDO

    1

    , un chapitre du manuelPHP

    sur sur PHP net

    2

    .Lextension PHP Data Objects (PDO) dfinit une excellente interface pour accder une base de donnesdepuis PHP. Chaque pilote de base de donnes implment dans linterface PDO peut utiliser des fonctionnal-its spcifiques de chacune des bases de donnes en utilisant des extensions de fonctions. Notez que vous nepouvez excuter aucune fonction de base de donnes en utilisant lextension PDO par elle-mme ; vous devezutiliser un driver PDO spcifique la base de donnes3 pour accder au serveur de base de donnes.

    PDO fournit une interface dabstraction laccs de donnes, ce qui signifie que vous utilisez les mmesfonctions pour excuter des requtes ou rcuprer les donnes quelque soit la base de donnes utilise. PDOne fournit pas une abstraction de base de donnes : il ne rcrit pas le SQL, nmule pas des fonctionnalitsmanquantes. Vous devriez utiliser une interface dabstraction complte si vous avez besoin de cela.

    PDO est fournit avec PHP 5.1 et est disponible en tant quextension PECL pour PHP 5.0 ; PDO requiert les nou-velles fonctionnalits OO fournies par PHP 5 et donc, ne fonctionne pas avec les versions antrieures de PHP.

    10.2. Quelle utilit ?Lhtrognit des moyens daccs aux bases de donnes a t un des problmes les plus gnants en PHP.Le problme vient du fait que, par exemple, les fonctions permettant laccs une base PostgreSQL sontdiffrentes de celles pour MySQL, et elles sont toutes diffrentes de celles pour SQLite, etc.

    Cela a pour effet de rendre plus difficile la migration dun systme vers un autre : vous avez crit (parexemple en cours) un site utilisant une base PostgreSQL et vous voulez le transfrer chez un hbergeur quinoffre que MySQL (comme ctait par exemple le cas pour Free il y a encore peu de temps) : votre seule solutionest de reprendre (et corriger) dans toutes vos pages tous les appels des fonctions concernant PostgreSQL.Il peut y en avoir beaucoup...

    Une couche dabstraction4 permet dviter ce problme : tous vos accs votre base de donnes passent par

    elle (avec la mme syntaxe, quelle que soit la base de donnes) et cest elle qui se dbrouille pour sadapter la base de donnes utilise. Pour changer de base de donnes (passer de PostgreSQL MySQL par exemple)vous navez en gnral qu modifier une ligne, celle qui donne les paramtres de la base de donnes utilise.

    10.3. Se connecter la base de donnes

    Ce texte est extrait de Fonctions PDO5 , un chapitre du manuel PHP sur sur PHP net6.

    Les connexions sont tablies en crant des instances de la classe de base de PDO. Peut importe quel driver vousvoulez utiliser ; vous utilisez toujours le nom de la classe PDO. Le constructeur accepte des paramtres pourspcifier la source de la base de donnes (connue en tant que DSN) et optionnellement, le nom dutilisateuret le mot de passe (sil y en a un).

    Il suffit pour cela dexcuter la commande

    $dbh = new PDO("type_de_base:host=machine_qui_hberge_la_base;dbname=nom_de_la_base","nom_d_utilisateur","mot_de_passe) ;

    Le nom de la variable $dbh est sans importance. Ce nest quune variable, vous pouvez lui donner le nomqui vous plat. Il faut seulement garder lesprit quil faut conserver cette variable (quelque soit son nom),cest elle qui permettra daccder la base de donnes avec les fonctions des sections suivants.

    1. http://fr.php.net/manual/fr/ref.pdo.php2. http://fr.php.net/3. http://fr.php.net/manual/fr/ref.pdo.php#pdo.drivers4. Il existe dautres couches dabstraction : dbx, PHPLib, ADODB, MetaData, Pear-DB, etc.5. http://fr.php.net/manual/fr/ref.pdo.php6. http://fr.php.net/

    29

  • 7/15/2019 PHP Interessant

    38/160

    Chapitre 10. PDO

    Le type_de_base quant lui est une valeur parmi :

    mssql (FreeTDS/Microsoft SQL Server/Sybase),

    firebird (Firebird/Interbase 6),

    informix (IBM Informix Dynamic Server),

    mysql (MySQL 3.x/4.x/5.x),

    oci (Oracle Call Interface),

    odbc (ODBC v3 --IBM DB2 unixODBC et win32 ODBC--)),

    pgsql (PostgreSQL),

    sqlite (SQLite 3 et SQLite 2).

    On se reportera la page Fonctions PDO7 pour la gestion des erreurs de connexion.

    Lorsque la connexion la base de donnes a russi, une instance de la classe PDO est retourne votre script.La connexion est active tant que lobjet PDO lest. Pour clore la connexion, vous devez dtruire lobjet en vousassurant que toutes ses rfrences sont effaces. Vous pouvez faire cela en assignant NULL la variable grantlobjet. Si vous ne le faites pas explicitement, PHP fermera automatiquement la connexion lorsque le script

    arrivera la fin.

    10.4. Excuter une requte

    Vous trouverez plus dinformation sur la page PDO->query()8 du manuel PHP.

    En ayant auparavant obtenu un identifiant de connexion $dbh (instance de la classe de base de PDO) commeprcdemment, la syntaxe est simple :

    $res = $dbh->query(votre_requte) ;

    La valeur renvoye (range ici dans la variable $res) NEST PAS le rsultat de lexcution de la requte,mais un identifiant (propre au systme, sa valeur relle ne nous intresse pas9) qui nous permettra daccderaux rsultats grce aux fonctions dcrites ci-dessous.

    10.5. Nombre de lignes et colonnes dune requte selectOn peut facilement obtenir le nombre de lignes et de colonnes du rsultat dune requte de type SELECT :

    $result = $dbh->query(SELECT id FROM table) ;echo $result->rowCount() ; // nombre de lignesecho $result->columnCount() ; // nombre de champs

    AvertissementAvec certains gestionnaires de bases de donnes (en particulier Sqlite) il arrive que la mthode rowCount()ne fonctionne pas. Dans ce cas-l, remplacez $res->rowCount() par count($data) (o $data est gal count($result->fetchAll()), voir Section 10.6), cela produira le mme effet.

    Plus dinformations sur PHP net pour rowCount()10 et columnCount()11.

    7. http://fr.php.net/manual/fr/ref.pdo.php8. http://fr.php.net/manual/fr/function.PDO-query.php9. En fait cest un objet.10. http://fr.php.net/manual/fr/function.PDOStatement-rowCount.php11. http://fr.php.net/manual/fr/function.PDOStatement-columnCount.php

    30

  • 7/15/2019 PHP Interessant

    39/160

    Chapitre 10. PDO

    10.6. Accder aux rsultats dune requte select$result tant un rsultat valide renvoy par $dbh->query(), $result->fetchAll() renvoie un tableau 2 dimensions qui contient les rsultats : le premier indice concerne les lignes, le deuxime concerne lescolonnes.

    Plus dinformations sur PHP net pour fetchAll()12.

    10.6.1. Accs par le nom des colonnesExemple :

    $result = $dbh->query("SELECT * FROM villes");$data = $result->fetchAll();foreach ( $data as $row ) {

    echo $row["codepostal"]." - ".$row["ville"]."
    \n";}

    10.6.2. Accs par le numro des colonnesExemple :

    $result = $dbh->query("SELECT * FROM villes");$data = $result->fetchAll();foreach ( $data as $row ) {

    for ($i=0 ; $icolumnCount() ; $i++) {echo $row[$i]." ** ";

    }echo "
    \n";

    }

    10.6.3. Accs par le numro des lignes et le numro des colonnesExemple :

    $result = $dbh->query("SELECT * FROM villes");$data = $result->fetchAll();for ($l=0;$lrowCount();$l++) {

    for ($i=0;$icolumnCount();$i++) {echo $data[$l][$i]." ** ";

    }echo "
    \n";

    }

    10.7. Gestion des erreursQuand une instruction PDO choue, aucun message nest affich. On peut alors croire tort que tout sestbien pass. Il est donc important de savoir obtenir des informations sur dventuelles erreurs. Pour avoirdes informations plus prcises que ces quelques lignes, allez voir les pages dont elles sont extraites13 surPHP.net14.

    Pour la suite nous continuerons nous placer dans le cas o on a auparavant obtenu un identifiant deconnexion $dbh (instance de la classe de base de PDO).

    12. http://fr.php.net/manual/fr/function.PDOStatement-fetchAll.php13. http://fr.php.net/manual/fr/pdo.error-handling.php14. http://fr.php.net/

    31

  • 7/15/2019 PHP Interessant

    40/160

    Chapitre 10. PDO

    10.7.1. Code derreurLa mthode $db->errorCode() renvoie le code derreur associ avec la dernire opration effectue sur labase de donnes. Sa valeur est 0 (zro) si il ny a pas eu derreur.

    10.7.2. Informations associes lerreurLa mthode $db->errorInfo() renvoie les informations associes lerreur survenue lors de la dernireopration sur la base de donnes. Il sagit dun tableau qui contient les champs dcrit Tableau 10-1.

    Tableau 10-1. Champs de $db->errorInfo()

    lment Information

    0 Code erreur SQLSTATE (un identifiant alphanumrique de cinq caractres dfinidans le standard ANSI SQL).

    1 Code erreur spcifique au driver.

    2 Message derreur spcifique au driver.

    Si le code erreur SQLSTATE nest pas dfini ou sil ny a pas derreur spcifique du driver, llment suivantllment 0 sera dfini NULL.

    10.7.3. Exemple de traitement derreurPour grer les ventuelles erreurs, les mthodes prcdentes peuvent tre utilise de cette faon (ici on ex-cute une requte $req dfinie par ailleurs) :

    $db->query($req); // excution de la reqteif ($db->errorCode()!=0) { // il y a une erreur

    echo "Erreur sur la requte $req
    \n";$t=$db->errorInfo(); // rcupration des informations sur lerreur

    echo "Code erreur SQLSTATE : ".$t[0]."
    \n";echo "Code erreur spcifique au driver : ".$t[1]."
    \n";echo "Message derreur :

    ".$t[2]."

    \n";echo "Le programme a t interrompu";die();

    }

    32

  • 7/15/2019 PHP Interessant

    41/160

    Chapitre 11. Programmation spare en PHP

    11.1. La programmation spareLa programmation spare cest crire un programme en plusieurs petits fichiers au lieu dun seul gros.

    Quelques avantages :

    Des fichiers plus petits sont plus faciles relire, comprendre, modifier, tester et corriger.

    Cela permet de faire travailler plusieurs personnes sur le mme programme en mme temps.

    Cela permet de regrouper plus facilement les fonctions qui sont dans le mme domaine (chaque fichier asa propre cohrence).

    Il est plus facile de rutiliser le travail dj fait.

    11.2. Les fonctions require et includeLes fonctions require1 et include2 permettent dinclure un fichier dans un autre.Il est dit par exemple :

    la commande require se remplace elle-mme par le contenu du fichier spcifi.

    Diffrentes faons dutiliser ces fonctions :

    1. Pour rendre homogne la prsentation dun site, on crit une seule fois le dbut (avec la partie head,la couleur de fond, la couleur de texte, la prsentation du grand titre, etc.) et la fin de page (avec parexemple une signature ou une adresse mail) dans des fichiers spars et on se contente dajouter danschaque feuille un require au dbut et un la fin sur ces fichiers.

    2. Si une partie de code est identique dans plusieurs pages, on lcrit une seule fois dans un fichier spar

    et on linclut par require chaque fois quelle est ncessaire.Ces faons de faire nont pas seulement lavantage de vous permettre de ne pas taper plusieurs fois la mmechose pour vous viter une fatigue inutile (surtout que le copier-coller marche bien).

    Leur utilit est surtout de rendre les modifications faciles rpercuter : si vous dcidez de changer la prsen-tation globale de votre site, il ny a quun seul fichier modifier ; si vous dcidez de modifier la partie decode commune (une faon de faire un calcul, la faon de se connecter, etc.), il ny a galement quun seulfichier modifier.

    1. http://fr.php.net/manual/fr/function.require.php2. http://fr.php.net/manual/fr/function.include.php

    33

  • 7/15/2019 PHP Interessant

    42/160

    Chapitre 11. Programmation spare en PHP

    34

  • 7/15/2019 PHP Interessant

    43/160

    Chapitre 12. Identification en PHP

    Nous naborderons ici que lidentification gre par le navigateur.

    12.1. Prliminaires : la fonction headerLa fonction header1 permet de spcifier une en-tte HTTP lors de lenvoi des fichiers HTML. Reportez-vous HTTP 1.1 Specification2 pour plus dinformations sur les en-ttes HTTP.

    RemarqueLa fonction header doit tre appele avant la premire balise HTML, et avant nimporte quel envoi de com-mande PHP.

    Nous allons utiliser ici cette fonction pour demander la vrification dune identit.

    Pour cela il suffit de faire commencer votre programme PHP par la commande :

    header("WWW-Authenticate: Basic realm=private");

    qui a pour effet de faire demander (et retenir) un nom et un mot de passe par le navigateur.

    Vous pouvez ainsi tester le programme lmentaire suivant (ident-exple01.php3) :

    Vous pouvez remarquer que la demande nest faite que lors de la premire excution de la page. La seulefaon, avec le programme tel quil est crit, de devoir rpondre nouveau la question est de sortir de votrenavigateur (fermer toutes les fentres du navigateur, oui !) et de le relancer.

    Attention !Si votre serveur est configur en safe mode vous naurez pas accs aux variables $PHP_AUTH_USER et$PHP_AUTH_PW mais $_SERVER["PHP_AUTH_USER"] et $_SERVER["PHP_AUTH_PW"]

    Si votre serveur est configur en safe mode, voir aussi Section 7.1.

    Cest cette proprit que nous allons utiliser pour grer lidentification des utilisateurs.

    12.2. Contrle des mots de passeIl ne manque quune seule chose (ou presque !) au programme prcdent pour tre parfait : tester les valeursdes variables $PHP_AUTH_USER (qui contient le nom) et $PHP_AUTH_PW (qui contient le mot de passe) pourvrifier quon a affaire la bonne personne.

    Une version simple pourrait ressembler a (ident-exple02.php4) :

  • 7/15/2019 PHP Interessant

    44/160

    Chapitre 12. Identification en PHP

    header("WWW-Authenticate: Basic realm=private");}?>

    12.3. Amlioration : plusieurs utilisateursIl est rare, quand laccs une page est contrle par un mot de passe, que tous les utilisateurs aient lesmmes droits.

    Il faut donc pouvoir dtecter lidentit de la personne concerne au moment de la saisie du mot de passe.Pour cela on donnera un mot de passe diffrent chaque utilisateur. Cela nous permet davoir lexemplesuivant (ident-exple03.php5) dans lequel les renseignements sont rangs dans un tableau de chanes decaractres, une chane par personne, prsente sous la forme vrai nom/nom dutilisateur/mot de passe :

    5. http://grappa.univ-lille3.fr/polys/php/exemples/ident-exple03.php

    36

  • 7/15/2019 PHP Interessant

    45/160

    Chapitre 12. Identification en PHP

    12.4. Sparer les donnes du traitementIl est tout fait raisonnable dimaginer quon va avoir besoin de changer les mots de passe, ainsi quajouterdes nouveaux utilisateurs ou en supprimer des anciens.

    Il nest par contre pas raisonnable du tout dimaginer que celui qui va le faire aura envie daller manipuler chaque fois le fichier du programme. (Ce nest mme dailleurs pas souhaitable...)

    Il est donc prfrable de garder ces informations dans un fichier spar.Quest-ce que cela change ? Pas grand chose : il suffit par exemple de remplacer les premires lignes :

    // la liste des informations$liste=array("Jean Nmar/nemar/jjjj",