Cours PHP

Embed Size (px)

Citation preview

Amusons-nous avec le PHPPar `Haku

www.siteduzero.com

Dernire mise jour le 7/10/2011

Sommaire

1/374

SommaireSommaire ........................................................................................................................................... 1 Informations sur le tutoriel ................................................................................................................... 3 Amusons-nous avec le PHP ............................................................................................................... 5Informations sur le tutoriel ................................................................................................................................................. 5

Partie 1 : Les bases du PHP ............................................................................................................... 6Introduction ........................................................................................................................................................................ 6PHP, le Web, qu'est-ce donc ? ................................................................................................................................................................................... 6 La programmation, c'est quoi ? ................................................................................................................................................................................... 9 Pour apprendre, quelle attitude adopter ? ................................................................................................................................................................. 12

La bote outils du programmeur ................................................................................................................................... 13L'invit surprise : l'diteur de code ............................................................................................................................................................................ 13 Apache et PHP sous Windows ................................................................................................................................................................................. 16 Apache et PHP sous GNU/Linux, Mac OS X et les autres ....................................................................................................................................... 25 Configurer pour mieux rgner ................................................................................................................................................................................... 27 Configuration de PHP ................................................................................................................................................................................................ 28 Configuration d'Apache ............................................................................................................................................................................................. 28

Premiers pas ................................................................................................................................................................ 29Les balises PHP ........................................................................................................................................................................................................ 29 Les commentaires ..................................................................................................................................................................................................... 32

Les variables, le cur du PHP ....................................................................................................................................... 34Premire approche .................................................................................................................................................................................................... 35 Les variables la sauce PHP ................................................................................................................................................................................... 35 Valeurs et oprateur d'affectation ............................................................................................................................................................................. 38 Une histoire de typage .............................................................................................................................................................................................. 38 Les types primitifs ..................................................................................................................................................................................................... 41 Les entiers, alias INT (ou INTEGER) ........................................................................................................................................................................ 41 Les nombres virgules, alias FLOAT ....................................................................................................................................................................... 41 Les vrais ou faux, alias BOOLEEN ........................................................................................................................................................................... 41 Les chanes de caractres, alias STRING ................................................................................................................................................................ 42 Un type part : NULL ................................................................................................................................................................................................ 43 Quel est ton type ? .................................................................................................................................................................................................... 44

Les oprateurs : partie I .................................................................................................................................................. 45Retour de l'oprateur d'affectation et introduction des expressions .......................................................................................................................... Les oprateurs arithmtiques .................................................................................................................................................................................... Oprateur arithmtique d'addition ............................................................................................................................................................................. Oprateur arithmtique de soustraction .................................................................................................................................................................... Oprateur arithmtique de multiplication .................................................................................................................................................................. Oprateur arithmtique de division ........................................................................................................................................................................... Calculs complexes et modulo ................................................................................................................................................................................... Un cinquime oprateur arithmtique : le modulo .................................................................................................................................................... Les expressions, un peu de pratique ! ...................................................................................................................................................................... Le vrai visage de var_dump() .................................................................................................................................................................................... 45 47 48 48 49 49 50 51 52 53

Les oprateurs : partie II ................................................................................................................................................. 54Oprateurs arithmtiques d'affectation et oprateurs d'incrmentation .................................................................................................................... 55 Oprateurs de comparaison ...................................................................................................................................................................................... 58 Oprateurs logiques .................................................................................................................................................................................................. 59

Les structures de contrle ............................................................................................................................................... 61Structures conditionnelles ......................................................................................................................................................................................... valuation ................................................................................................................................................................................................................. Autre structure conditionnelle .................................................................................................................................................................................... Structure de boucle : partie I ..................................................................................................................................................................................... Structure de boucle : partie II .................................................................................................................................................................................... Premire approche .................................................................................................................................................................................................... Votre premire fonction ............................................................................................................................................................................................. Souvenir, souvenir .................................................................................................................................................................................................... Les fonctions, c'est trop fort ! .................................................................................................................................................................................... 62 67 67 70 73 74 76 77 80

Les fonctions ................................................................................................................................................................... 74

Les chanes de caractres, un casse-tte ...................................................................................................................... 83Bref rappel et nouvelle structure ............................................................................................................................................................................... 85 Diffrence entre guillemets et apostrophes ............................................................................................................................................................... 86 Nouvel oprateur : concatnation ............................................................................................................................................................................. 89

Le type manquant : les arrays ......................................................................................................................................... 92Faisons connaissance ............................................................................................................................................................................................... 92 Qui es-tu vraiment ? .................................................................................................................................................................................................. 94 Tu commences me plaire ................................................................................................................................................................................... 95

www.siteduzero.com

Sommaire

2/374

Des fonctions et structures bien pratiques ................................................................................................................................................................ 99 Es-tu l, petite valeur ? ............................................................................................................................................................................................. 99 Es-tu l, petite cl ? ................................................................................................................................................................................................. 100 Quelle est ta cl ? ................................................................................................................................................................................................... 100 Dis-moi tout .......................................................................................................................................................................................................... 101 Je veux des arrays ! ................................................................................................................................................................................................ 101 Dcoupage .............................................................................................................................................................................................................. 101 Collage .................................................................................................................................................................................................................... 102 Derniers mots et structure de contrle .................................................................................................................................................................... 102 Les faux jumeaux .................................................................................................................................................................................................... 106

Bons plans ..................................................................................................................................................................... 107Prsenter son code, tout un art ............................................................................................................................................................................... 108 La bible du codeur PHP .......................................................................................................................................................................................... 112 Le transtypage, c'est pratique ................................................................................................................................................................................. 115 Transtypage en boolen .......................................................................................................................................................................................... 118 Transtypage en entier ............................................................................................................................................................................................. 118 Transtypage en nombre virgule ............................................................................................................................................................................ 119 Transtypage en chane de caractres ..................................................................................................................................................................... 119 Transtypage en array .............................................................................................................................................................................................. 119

Transmettre des variables ............................................................................................................................................. 12035, rue machin ......................................................................................................................................................................................................... 120 Gardons la forme ! ................................................................................................................................................................................................... 123 Les zones de texte .................................................................................................................................................................................................. 125 Les zones de texte multi-lignes ............................................................................................................................................................................... 125 Les cases cocher ................................................................................................................................................................................................. 125 Les listes ................................................................................................................................................................................................................. 126 Les boutons ............................................................................................................................................................................................................. 126 Le champ cach ...................................................................................................................................................................................................... 126 Le bouton de validation ........................................................................................................................................................................................... 127 Un bouton plus color ! ........................................................................................................................................................................................... 127 Aspiration ! .............................................................................................................................................................................................................. 127 Never Trust User Input ............................................................................................................................................................................................ 128 L'enfer des guillemets magiques ............................................................................................................................................................................. 131 Je suis perdu ! ......................................................................................................................................................................................................... 132

Premier TP : une calculatrice ........................................................................................................................................ 135Objectifs .................................................................................................................................................................................................................. Quelques conseils ................................................................................................................................................................................................... Correction ! .............................................................................................................................................................................................................. Peut mieux faire ! .................................................................................................................................................................................................... 135 137 138 141

Partie 2 : MySQL, PHP et MySQL .................................................................................................. 145MySQL, qui es-tu ? ........................................................................................................................................................ 146Parle-moi de toi... .................................................................................................................................................................................................... 146 On s'organise ? ....................................................................................................................................................................................................... 148 La console tout ge .............................................................................................................................................................................................. 149

Crons une base de donnes et une table pas pas .................................................................................................. 151La base avant tout ................................................................................................................................................................................................... 152 On passe table ? .................................................................................................................................................................................................. 157 Le plat de rsistance ! ............................................................................................................................................................................................. 160

Grons nos tables ! ....................................................................................................................................................... 163Une histoire d'entiers ............................................................................................................................................................................................... 163 Des types en pagaille .............................................................................................................................................................................................. 167 Et la gestion ? ......................................................................................................................................................................................................... 172

SELECT, ou comment rcuprer des donnes ............................................................................................................ 176MySQL et les types ................................................................................................................................................................................................. 176 Les donnes venant d'une table ............................................................................................................................................................................. 182 Tri, ordre et limitation ............................................................................................................................................................................................... 187 Mettons de l'ordre .................................................................................................................................................................................................... 187 Filtrons tout a ......................................................................................................................................................................................................... 191 Vertical Limit ! .......................................................................................................................................................................................................... 192

Supprimer, modifier et insrer des donnes ................................................................................................................. 196DELETE s'exhibe .................................................................................................................................................................................................... 196 UPDATE en folie ..................................................................................................................................................................................................... 199 INSERT sous les feux de la rampe ......................................................................................................................................................................... 201

PHP et MySQL : des allis de poids ............................................................................................................................. 203Retour en arrire ..................................................................................................................................................................................................... 204 Dis bonjour MySQL ! ............................................................................................................................................................................................ 204 Exploiter les ressources .......................................................................................................................................................................................... 208

Second TP : un visionneur de bases de donnes et de leurs tables ............................................................................ 213Objectifs et cycle de dveloppement ...................................................................................................................................................................... L'tape d'algorithmie ............................................................................................................................................................................................... Quelques outils ....................................................................................................................................................................................................... Correction ................................................................................................................................................................................................................ 215 216 218 221

www.siteduzero.com

Informations sur le tutoriel

3/374224 227 230 233

Fonctions, conditions et quelques oprateurs SQL ...................................................................................................... 224Les fonctions, de bons souvenirs ............................................................................................................................................................................ Un cas particulier : NULL ........................................................................................................................................................................................ Les conditions ......................................................................................................................................................................................................... Un peu de repos avec les oprateurs .....................................................................................................................................................................

La gestion des dates ..................................................................................................................................................... 234Qui peut me donner la date ? .................................................................................................................................................................................. 236 Formatage et oprateurs simples ............................................................................................................................................................................ 236 Des fonctions, en veux-tu en voil ! ........................................................................................................................................................................ 239 Des fonctions d'extraction ....................................................................................................................................................................................... 240 Des fonctions de calcul ........................................................................................................................................................................................... 241 La magie des intervalles ......................................................................................................................................................................................... 242

Bataillons, vos rangs... fixe ! ....................................................................................................................................... 244Les intrts et les limitations du regroupement ....................................................................................................................................................... La clause magique .................................................................................................................................................................................................. Les fonctions d'agrgation ...................................................................................................................................................................................... Calculer une somme avec SUM(Expr) .................................................................................................................................................................... Calculer une moyenne avec AVG(Expr) ................................................................................................................................................................. Trouver le maximum et le minimum avec MAX(Expr) et MIN(Expr) ....................................................................................................................... La dernire des fonctions : COUNT() ...................................................................................................................................................................... ROLLUP et HAVING ............................................................................................................................................................................................... L'ordre d'excution des clauses .............................................................................................................................................................................. Les spcifications .................................................................................................................................................................................................... La bote outils ! ..................................................................................................................................................................................................... Correction ................................................................................................................................................................................................................ Discussion ............................................................................................................................................................................................................... Un index, pourquoi ? ............................................................................................................................................................................................... Les diffrents index et leur gestion ......................................................................................................................................................................... O placer des index ? ............................................................................................................................................................................................. Surveiller les index .................................................................................................................................................................................................. Les sous-requtes ................................................................................................................................................................................................... 244 248 250 251 251 251 252 253 257 260 262 266 272 274 275 278 280 283

Troisime TP : un livre d'or ........................................................................................................................................... 260

Les index et sous-requtes ........................................................................................................................................... 274

Partie 3 : PHP, MySQL, allons plus loin .......................................................................................... 285Retour sur les fonctions et les tableaux ........................................................................................................................ 286Des fonctions nombre de paramtres variable .................................................................................................................................................... Les fonctions, des valeurs ....................................................................................................................................................................................... Les tableaux ............................................................................................................................................................................................................ Fonctions utiles ....................................................................................................................................................................................................... Un pointeur interne .................................................................................................................................................................................................. Tableaux et chane de caractres ........................................................................................................................................................................... 286 289 294 299 301 303

Au cur des variables .................................................................................................................................................. 304Des noms dormir dehors ...................................................................................................................................................................................... 304 Les rfrences ......................................................................................................................................................................................................... 306 La porte des variables ........................................................................................................................................................................................... 311 Des variables non-dclares ou non-initialises ..................................................................................................................................................... 314 Au cur du PHP ..................................................................................................................................................................................................... 314 Les tableaux ............................................................................................................................................................................................................ 319 La pile ...................................................................................................................................................................................................................... 320 Pour terminer ........................................................................................................................................................................................................... 323 Dpasser la porte .................................................................................................................................................................................................. 323 Des types part ...................................................................................................................................................................................................... 324 foreach et les rfrences ......................................................................................................................................................................................... 326 Les variables statiques ............................................................................................................................................................................................ 328 Ne pas abuser des rfrences ................................................................................................................................................................................ 329

Fragmenter son code .................................................................................................................................................... 330Des scripts dans le script ........................................................................................................................................................................................ 331 Une boucle infinie .................................................................................................................................................................................................... 332 Retourner une valeur ............................................................................................................................................................................................... 333 L'include_path ......................................................................................................................................................................................................... 333 Des fichiers critiques ............................................................................................................................................................................................... 334 Les dangers de l'inclusion ....................................................................................................................................................................................... 335 $_GET et les inclusions .......................................................................................................................................................................................... 336 Les espaces de noms ............................................................................................................................................................................................. 337 Crer des espaces de noms ................................................................................................................................................................................... 339 Utiliser les espaces de noms .................................................................................................................................................................................. 341

Les nombres .................................................................................................................................................................. 345Comment crire un nombre ? .................................................................................................................................................................................. 346 Des nombres quivalents ........................................................................................................................................................................................ 347 Les oprateurs bits bits ........................................................................................................................................................................................ 349 Les flags .................................................................................................................................................................................................................. 352 Des bases plus pratiques ........................................................................................................................................................................................ 354 Fonctions de changement de base ......................................................................................................................................................................... 356

www.siteduzero.com

Informations sur le tutoriel

4/374358 361 364 366

PHP et les erreurs ......................................................................................................................................................... 357Les erreurs .............................................................................................................................................................................................................. Grer les erreurs ..................................................................................................................................................................................................... Affiner la gestion ..................................................................................................................................................................................................... debug_backtrace() ..................................................................................................................................................................................................

Partie 4 : Un exercice efficace : crer un site complet .................................................................... 370 Partie 5 : Annexes ........................................................................................................................... 370Histoire de ce tutoriel ..................................................................................................................................................... 371Remerciements ....................................................................................................................................................................................................... 371 Historique des mises jour ..................................................................................................................................................................................... 373 Suite du tutoriel ....................................................................................................................................................................................................... 373

www.siteduzero.com

Amusons-nous avec le PHP

5/374

Amusons-nous avec le PHPVous avez cinq minutes perdre ? Vous voulez lire ? Vous voulez apprendre le PHP ? Si la rponse au moins une de ces questions est positive, vous tes au bon endroit . Ce tutoriel n'a pas la prtention de faire de vous des pros du PHP, il n'est l que comme base, comme un point de dpart et un soutien qui vous permettra, je l'espre, d'voluer ensuite par vous-mmes. Mais on ne se limitera pas des choses simples pour autant, et je ne vous mnagerai pas, il faudra s'accrocher pour suivre sans quoi vous serez totalement largus .

Informations sur le tutorielAuteur : `Haku Difficult : Licence :

Un petit dtail qui vaut son pesant d'or : ce tutoriel n'engage que moi ; je vous montrerai ma vision du PHP, elle n'est pas universelle mais personnelle. Par consquent, certaines parties de ce tutoriel pourraient s'opposer d'autres tutoriels, articles ou autres textes. Il est trs fortement conseill d'avoir des bases en (X)HTML avant de s'engager dans ce tutoriel ; si vous n'en avez pas, je vous conseille de lire le tutoriel de M@teo21 qui en parle.

www.siteduzero.com

Partie 1 : Les bases du PHP

6/374

Partie 1 : Les bases du PHPAvant de se lancer dans des scripts de folie, il faut commencer par le dbut : la syntaxe du PHP. Cette partie est indispensable, si vous ne connaissez pas les bases du langage sur le bout des doigts, vous perdrez un temps fou par la suite.

IntroductionAvant d'entamer une lutte sans merci, il est de bon usage de s'informer et de se prparer. Comme l'a probablement dit un trs grand homme dont j'ignore le nom et dont je ne peux prouver l'existence, la moiti du combat se joue pendant sa prparation . Au menu du jour, vous trouverez une courte introduction sur PHP et surtout sur le fonctionnement global de celui-ci. Le tout sera agrment de quelques lignes sur ce qu'est la programmation et en ce qui concerne dessert, je vous laisse le dcouvrir.

www.siteduzero.com

Partie 1 : Les bases du PHP

7/374

PHP, le Web, qu'est-ce donc ?Le PHP, pour PHP : Hypertext Preprocessor est un langage de programmation. Il y en a beaucoup d'autres, comme le C, le Java, l'OCaml, mais on peut dire du PHP que c'est un langage de programmation orient pour le Web, ou encore pour les sites internet. Pour la petite histoire, le PHP est n de la main de Rasmus Lerdorf en 1994. Au dpart trs basique, il n'a t rendu public qu'en 1995 sous le nom de PHP/FI. Par la suite, le dveloppement passa des mains de Rasmus Lerdorf celles de deux tudiants Zeev Suraski et Andi Gutmans qui fondrent par la suite Zend Technologies pour promouvoir PHP. Si vous dveloppez des applications avec PHP, vous entendrez sans aucun doute parler de Zend, que ce soit via leur framework, leur environnement de dveloppement ou encore leur serveur, respectivement Zend Framework, Zend Studio et Zend Server . Non content d'tre un langage de programmation, PHP est un langage interprt. Quand vous utilisez une application, sous Windows par exemple, vous double-cliquez sur le programme pour qu'il se lance ; le programme s'excute alors, votre ordinateur peut directement excuter le programme. Pour le PHP, c'est un peu diffrent. En effet, votre ordinateur ne comprend pas le PHP, il ne sait pas l'excuter comme vous pouvez le voir la figure 1.1. Pour que le PHP soit excut, il faut que le fichier qui contient le code PHP soit interprt par l'interprteur PHP. Concrtement, l'interprteur, c'est quoi ? Comme je l'ai dit, votre ordinateur ne peut pas excuter de code PHP comme il excute une application classique. Pour que votre code prenne vie, l'interprteur qui lui est une application excutable va le lire, le traduire en un dialecte intermdiaire l'Opcode et finalement demander votre ordinateur d'excuter les instructions correspondant l'Opcode gnr comme c'est illustr la figure 1.2. Vous entendrez nouveau parler d'Opcode dans la suite de ce cours, ne vous arrtez donc pas l-dessus pour le moment, sachez juste que a existe.

Figure 1.1 Sans interprteur, le code ne peut tre excut

Figure 1.2 Avec l'interprteur, tout va bien !

Le Web, comment est-ce que a fonctionne ?Avant tout, qu'est-ce que le Web ? Le Web ou World Wide Web de son nom complet , c'est le systme qui vous permet de lire ce cours, qui vous permet d'accder du contenu, des pages d'un site, gnralement accessible via Internet. Le Web est souvent confondu avec Internet, mais Internet ne se rsum dfinitivement pas au Web : bon nombre d'autres systmes, applications et protocoles utilisent Internet. Il est d'ailleurs assez triste que certaines entits des entreprises par exemple se basent sur cette confusion pour faire des offres plus attractives en nous martelant de slogans similaires Internet illimit alors qu'en fait, ils ne nous offrent qu'un accs au Web, et encore, pas toujours trs illimit Mais je m'gare, a n'est pas le sujet. Le Web fonctionne sur un modle dans lequel se trouvent deux intervenants : le client et le serveur. Vous pouvez

www.siteduzero.com

Partie 1 : Les bases du PHP

8/374

parfaitement faire une comparaison avec un restaurant, c'est tout fait pertinent et a donne du bon got. Quand vous tes dans un restaurant, tranquillement assis, vous choisissez un plat, sifflez le serveur puis lui dites ce que vous dsirez. Une fois la requte du client reue, le serveur va faire sa popote interne pour finalement dlivrer ce que vous avez command. Il y a donc deux messages, d'abord une requte du client vers le serveur, puis une rponse du serveur vers le client. Pour un site Web, c'est pareil. Votre navigateur il joue le rle de client va envoyer une requte un serveur et plus exactement un serveur Web qui y rpondra aprs l'avoir traite. Vous avez une illustration de ce dialogue la figure 1.3.

Figure 1.3 Le modle client-serveur

Le serveur Web et l'interprteur PHP, une histoire d'amour ?Comme nous l'avons dit prcdemment, pour que le PHP puisse vivre, il a besoin de son interprteur. Un serveur Web n'tant pas un interprteur PHP, ces deux lments doivent entrer en relation un moment donn. Mais non, malheureusement pour nos deux amis, ce n'est pas vraiment une relation amoureuse qu'ils entretiennent, a serait plutt une relation matre-esclave, l'esclave tant le pauvre interprteur. En fait, le serveur Web peut grer diffrentes requte. Vous pouvez par exemple lui demander une image, une page Web statique c'est--dire ne contenant par exemple que du XHTMLet du CSS , une page Web dynamique contenant du PHP, du Python, etc. , un document PDF et bien d'autres choses encore. Lorsque vous lui demanderez ce qui nous intresse, une page Web contenant du PHP, le serveur Web le saura, il dterminera le type de contenu demand partir de la requte. Lorsque le serveur Web recevra une requte faisant intervenir PHP, il appellera l'interprteur en lui donnant le fichier interprter et attendra la rponse de celui-ci qui sera ensuite transmise au client. Tout le monde est ainsi content la figure 1.4 : le client a reu ce qu'il attendait, le serveur a dlivr le contenu, et l'interprteur a t sauvagement abus par le serveur.

Figure 1.4 Les interactions entre le client, le serveur et l'interprteur

De ces interactions, nous pouvons dduire quelque chose qui a son importance : le PHP s'excute du ct du serveur, il ne travaille que quand le serveur doit rpondre la requte, et jamais quand le serveur a dj rpondu la requte. Si vous dsirez afficher une horloge sur votre site Web, horloge qui se mettrait jour toutes les secondes, serait-ce possible avec PHP ? Non, car l'horloge ne serait visible par le visiteur l'utilisateur du navigateur Web que quand le serveur a dj envoy la rponse, PHP ne pourrait donc plus intervenir. Pour raliser cela, et plus gnralement pour toutes les interactions entre le visiteur et une page Web dj envoye celui-ci, on passera par un autre langage, le Javascript.

www.siteduzero.com

Partie 1 : Les bases du PHP

9/374

Aprs ce petit tour d'horizon de ce qu'est le PHP, du fonctionnement du Web et de l'interaction entre le serveur Web et l'interprteur PHP, passons ce dont nous aurons besoin pour travailler. Que chacun d'entre vous possde un serveur ddi en antarctique est un peu utopique, nous allons donc installer le serveur Web et PHP sur votre ordinateur. Oui, a fonctionne, ne vous en faites pas. Comme serveur Web, nous allons choisir le plus rpandu et connu actuellement : Apache HTTP Server ou encore Apache HTTPD. Ce logiciel, ce serveur Web est dit par l'organisation but non-lucratif ponyme, l' Apache Software Foundation. Cette organisation est galement connue pour d'autres projets ainsi que pour leur licence, la licence Apache qui est libre et open-source. Mais avant de procder l'installation de ces logiciels, prenons le temps de faire connaissance avec la programmation.

www.siteduzero.com

Partie 1 : Les bases du PHP

10/374

La programmation, c'est quoi ?La programmation, tantt qualifie de mystique, tantt qualifie d'incroyablement complique, qu'est-ce donc vraiment ? Pour ma part, la programmation, c'est le quotidien. Non pas parce que j'ai le nez coll mon PC huit heures par jour, mais bien parce que de la programmation, vous en faites au quotidien. Prenons un exemple qui devrait parler tout le monde : la conduite d'une voiture. Avec une voiture, vous pouvez effectuer quelques oprations de bases, notamment : freiner, avancer et tourner Il y a d'autres oprations, mais celles-ci suffiront pour l'exemple. Bien heureux dans votre voiture, vous arrivez au boulot, l'cole ou ailleurs si vous le dsirez, dans tous les cas l'heure de se garer est arrive. Par chance, vous trouvez une petite place entre deux voitures comme illustr la figure 1.5.

Figure 1.5 Une jolie place o se garer

Vous voil face un problme, comment rentrer lgamment dans cet emplacement ? Rsoudre un problme, y apporter une solution, c'est de la programmation. Et rsoudre ce genre de problme, vous le faites tous les jours consciemment ou pas. C'est pour cela que j'aime dire que la programmation, c'est notre quotidien tous. Pour rsoudre ce problme, qu'avons-nous notre disposition ? vrai dire, pas grand chose, mais c'est amplement suffisant. Nous disposons en effet de quelques oprations de bases nous permettant de nous dplacer et nous possdons galement quelques informations sur le problme, la principale tant que nous avons effectivement la place pour nous garer. Le tout est donc de parvenir utiliser, manipuler nos quelques oprations pour rsoudre le problme. Le but n'tant pas de faire de vous des as du volant, voici les tapes de la solution reprsente la figure 1.6 : 1. 2. 3. 4. 5. nous avanons jusqu' la hauteur de la voiture puis freinons ; nous tournons les roues vers la gauche ; nous avanons l'envers, c'est--dire que nous reculons ; lorsque nous formons un bel angle, nous mettons les roues vers la droite ; et enfin nous freinons au bon moment pour terminer la manuvre.

www.siteduzero.com

Partie 1 : Les bases du PHP

11/374

Figure 1.6 La voiture gare !

Ce que nous avons fait ici, c'est dcrire, noncer, exprimer la solution notre problme, et l nous sommes au cur de ce qu'est la programmation : notre voiture nous offre certains concepts tels que l'acclration de la voiture ou son changement de direction et nous permet d'utiliser ces concepts via des oprations lmentaires telles que avancer ou tourner, ce qui nous permet d'exprimer une solution un problme. Ces quelques oprations n'ont peut tre l'air de rien, mais elles suffisent exprimer un grand nombre de manuvres que vous pourriez tre amens raliser avec une voiture. Une fois la solution exprime, il ne reste plus qu' la mettre en application en utilisant les pdales, volants et autres outils propre votre voiture. Un langage informatique, comme le PHP par exemple, fait exactement la mme chose que cette voiture : il nous offre certains concepts nous permettant d'exprimer des solutions ainsi que des outils pour traduire ces solutions en code que l'interprteur pourra faire excuter. Il faut donc bien comprendre que la programmation n'est pas une seule et unique chose mais bien deux tapes distinctes : la rsolution du problme et l'application de la solution. La rsolution du problme, c'est la conception du programme, tandis que l'application de la solution, c'est son implmentation, la traduction en code donc. Nous reviendrons plus tard sur la conception et l'implmentation, l'important c'est que vous reteniez que la programmation se droule en deux tapes.

www.siteduzero.com

Partie 1 : Les bases du PHP

12/374

Pour apprendre, quelle attitude adopter ?Si vous dcidez de poursuivre ce cours et j'espre que vous serez nombreux dans ce cas , quelle attitude adopter ? Comme mon introduction l'a sous-entendu, je ne suis pas ici pour faire du fast-food version programmation. Mon but, ce n'est pas de faire de vous des roxxors pgm de la prog' en 24 heures chrono mais bien d'apprendre, de comprendre. Vous devrez donc parfois tre un peu patient avant de voir le fruit de vos efforts. En ce qui concerne mes explications, je ne vais pas vous prendre pour des abrutis. Bien que nous dbutions, nous ne sommes pas des bbs, nous avons la capacit de rflchir et de nous dbrouiller par nous-mme. C'est pour cela qu'il m'arrivera souvent de vous lancer un RTFM Read The Fucking Manual ou la version plus dlicate : cherchez par vous-mme. Je ne veux pas faire de vous des assists. Je vous aiderai, je vous guiderai, mais je ne vous donnerai pas tout tout cuit au fond du bec. Vous serez donc sans le moindre doute contraint un moment ou un autre de chercher par vous-mme. Cette capacit, cette dbrouillardise est une qualit trs importante, je veux donc que vous l'utilisiez, et pour cela je ne dois videmment pas faire de vous des professionnels de l'assistanat. Bien sr, il arrivera parfois que mme en cherchant un certain temps, vous ne trouviez pas de solution. Dans ce cas, vous serez amens demander de l'aide, sur les forums du site du zro par exemple. Si vous le faites, ou plutt, quand vous le ferez, n'oubliez pas certaines choses.

Le titre du sujetImaginons que je rencontre un problme et que ma recherche ne m'a rien apport. Je me rends dans un forum traitant du PHP et je cre un nouveau sujet. La premire chose laquelle vous devez faire attention, c'est le titre. Il a pour but de dcrire votre sujet ; ainsi, les personnes visitant le forum sauront si elles sont susceptibles de vous aider sans avoir lire le message. Il est donc impratif de choisir un titre qui dcrit votre sujet. Si vous mettez quelque chose comme Gros problme , Besoin d'aide urgente , etc., on ne sait absolument pas quel est l'objet du sujet. Petit dtail plutt amusant, certaines personnes mettent un titre du style Problme avec PHP . On ne peut pas dire que a ne dcrit pas le sujet, mais ne trouvez-vous pas logique que dans un forum consacr au PHP on parle de PHP ? C'est juste pour dire qu'il est inutile de spcifier que vous parlez de PHP. On a vu ce qu'il ne fallait pas faire, mais comment choisir un bon titre, finalement ? Eh bien il n'y a pas de mthode magique, il faut rflchir. Si j'ai un problme en voulant afficher un texte, qu'est-ce que je pourrais mettre comme titre ? Si je mets Problme PHP , a ne sert rien. Par contre, un titre comme Problme pour afficher un texte est dj plus explicite, non ? Vous devez essayer de rsumer l'objet du sujet en quelques mots. Si vous faites cela, vous aurez souvent un bon titre. Si vous ne parvenez pas rsumer votre sujet, mettez simplement les mots-cls qui vous apparaissent comme tant les plus pertinents.

Le contenu du sujetAprs le titre vient le contenu du sujet. Le titre est le rsum, le contenu est le corps du sujet. La premire chose qu'on doit voir dans votre sujet, c'est une formule de politesse. Eh oui : moi, quand je ne vois pas de Bonjour ou autre, je n'aime pas a et je ne rponds pas au sujet. La politesse tient en quelques mots, quelques secondes de votre temps, mais beaucoup de gens la ngligent. Si je viens chez vous demander du sucre de cette faon : Donne-moi du sucre , vous allez m'en donner ? Je pense que non. Maintenant, si je dis : Bonjour, est-ce que vous pourriez me prter un peu de sucre ? Merci beaucoup , j'ai dj plus de chance de pouvoir finir mon gteau. C'est la mme chose quand vous faites un sujet dans un forum. Un brin de politesse vous assurera un accueil plus chaleureux de la part de ceux qui vous aideront. Le contenu du sujet vient ensuite. Il est indispensable de parler franais. Vous devez faire des phrases qui ont du sens, vous devez faire attention votre orthographe (pas de SMS, pas de kikoulol attitude) et vous devez vous exprimer clairement. Parfois, les gens rdigent tellement mal leur sujet qu'on ne comprend absolument rien la demande. Et dans ce genre de cas, c'est plutt difficile d'aider. Si vous devez mettre du code PHP ou autre dans votre sujet, faites-y galement attention ! En effet, certains forums fournissent des outils pour rendre la lecture de celui-ci plus agrable et il est plus ais d'apporter de l'aide quand le code est plus lisible. Deuxime chose importante : ne mettez pas un pt de code Il arrive que des gens aient un petit problme, mais la flemme de chercher un peu d'o a vient : ils nous mettent des centaines de lignes de code. Vous pensez qu'on va les lire ? Si c'est le cas, vous rvez. Les visiteurs du forum ne vont pas passer deux heures essayer de trouver d'o vient l'erreur et cinq minutes vous rpondre.

www.siteduzero.com

Partie 1 : Les bases du PHP

13/374

C'est pourquoi vous devez extraire les parties de votre code qui sont responsables de l'erreur. Pour le moment, vous ne savez pas le faire, mais le PHP est bien conu et il est relativement facile de trouver d'o viennent les erreurs, nous verrons a plus tard.

Le respectDernire chose qui me tient cur : le respect envers ceux qui vous aident. Ces personnes utilisent leur temps libre pour vous aider, alors respectez-les. On ne demande pas de faire des courbettes, mais un simple Merci quand le problme est rsolu fait tellement plaisir. Aussi, n'attendez pas qu'on vous serve la solution sur un plateau d'argent. Dans l'idal, ceux qui vous aident ne feront que pointer la cause de l'erreur, ils vous donneront des pistes pour la corriger, mais c'est vous de vous corriger. Ne revenez pas cinq minutes aprs parce que vous ne comprenez pas ce qu'ils vous disent. Cherchez par vous-mmes comprendre ce qu'ils vous signalent, sinon vous ne serez jamais capables de vous en sortir seuls. Maintenant que vous savez qu'un serveur Web est ncessaire pour obtenir une page Web, que le PHP ncessite d'tre interprt par l'interprteur PHP et que vous avez une ide des interactions entre le serveur Web et l'interprteur PHP, vous tes presque par. Empressez-vous de lire le prochain chapitre pour terminer votre prformation, vous serez alors fin prt pour attaquer l'apprentissage du PHP proprement parler !

La bote outils du programmeurDans ce chapitre, nous allons parler de l'installation des outils dont vous aurez besoin pour faire du PHP : nous allons quiper votre machine pour en faire un serveur Web capable de traiter du PHP. Et pour cela nous avons besoin d'installer certains outils, d'o ce chapitre. Vous connaissez dj deux de ces outils : PHP videmment et le serveur Web Apache. Il manque toutefois un outil pour avoir une parfaite panoplie : l'diteur de code.

www.siteduzero.com

Partie 1 : Les bases du PHP

14/374

L'invit surprise : l'diteur de codeAvant de se lancer dans l'installation d'Apache et PHP, prsentons l'outil surprise : un bon diteur de code. Bon, soyons clair, ce choix n'a pas grande importance actuellement. Puisque nous dbutons, nous ne ferons pas vraiment de projet , tout ce que nous ferons se limiteront un ou deux fichier PHP. Sortir un diteur lourd est donc pour le moment inutile. C'est pour cela qu'actuellement, au niveau de l'diteur de code, le choix importe peu. La seule fonction vraiment indispensable notre niveau, c'est la coloration syntaxique. C'est outil, cette coloration, est un outil certes trs basique mais combien utile, c'est presque l'incarnation de Chuck Norris. Petit exemple : Code : PHP . Comme vous l'avez sans doute remarqu, le code du chapitre prcdent ne comporte pas de balise fermante, mais il fonctionne pourtant. Le comportement de l'interprteur est donc trs simple : quand je rencontre la balise ouvrante, je commence traiter le code jusqu' ce que je rencontre la balise fermante, ou que j'ai lu tout le code . ce propos, je vous recommande justement de ne pas mettre de balise fermante, sauf si c'est ncessaire , comme dans l'exemple 3. Il y a des lments incomprhensibles pour l'interprteur avant et aprs le code PHP, il est donc ncessaire de mettre les deux balises. Cette recommandation vous sera explique plus tard. Au cours de votre apprentissage, de votre parcours PHPiens, vous rencontriez ces paires de balises : , et et . Ces paires de balises ont t ou sont encore malheureusement licite. Mais terme, elles ne le seront plus, vous ne devez donc en aucun cas les utiliser. Ce sont de vieilles pratiques sujettes disparation qui peuvent dj tre inutilisable en fonction de la

www.siteduzero.com

Partie 1 : Les bases du PHPconfiguration de PHP.

31/374

Parmi les exemples ci-dessus, vous connaissez maintenant le rle de chaque lment mis part celui-ci : phpinfo();. Nous verrons ce que c'est par la suite, promis. Pour le plaisir, je vous propose un mini TP : crivez moi un contenu PHP licite avec des lments qui ne sont pas du PHP. Secret (cliquez pour afficher) Code : PHP Je parie que vous vous tes cass la tte chercher un truc complexe alors que c'est vraiment tout bte. :)

83/374

Mais on peut le faire autrement Code : PHP

Le rsultat sera strictement identique. Quand vous mettez des parenthses la droite du nom d'une variable, l'interprteur PHP va appeler la fonction dont le nom est gal la valeur de la variable (aprs avoir converti la valeur en chane de caractres au besoin). a peut tre pratique dans certains cas, on en rencontrera sans doute, et de toute faon vous devez le savoir au cas o vous rencontreriez un script qui utilise cela. Allez pour le plaisir, dernier point : la porte des variables. Je ne vais pas tout vous expliquer, a serait un peu long. Souvenez-vous de la figure 8.1, j'ai schmatis la fonction par une usine, parce que c'est un assez bon comparatif. Une fonction, toute comme un usine est un peu comme une bote noire : on sait ce qui y rentre, on sait ce qui en sort, mais on ne sait pas du tout ce qu'il s'y passe, l'usine est un monde part sans aucun rapport avec le notre. En PHP c'est pareil, vous devez voir vos fonctions comme des petites usines qui font un certain travail et que vous utilisez mais dont vous ignorez le fonctionnement. Prenez par exemple var_dump() : vous savez ce que vous lui donnez, vous savez ce qu'elle produit, mais vous ne savez pas comment elle le fait. D'ailleurs, qui s'en soucie ? Le propre d'une fonction, son but, c'est d'assurer un rle, de faire quelque chose de particulier sans que l'utilisateur ne se soucie ni du comment ni du pourquoi. Cela a une consquence direct sur votre code : n'essayez jamais d'utiliser une variable dfinie hors d'une fonction dans la fonction, ou inversement (donc, utiliser une variable dfinie dans une fonction hors de la dfinition du bloc de code de cette fonction). Sans quoi vous aurez droit de belles erreurs. La raison tient dans cette ide de monde part : puisque la fonction l'usine est dans un monde part, elle ne connait pas les variables qui sont en dehors d'elle-mme, ces variables n'existent pas pour elle. Le raisonnement inverse est le mme : puisque la fonction est dans un monde part, les variables en son sein ne sont pas connues de votre script puisqu'elle n'existe tout simplement pas. Nous reviendrons sur cette notion de porte des variables par la suite, ne vous en faites pas. Si vous rencontrez une erreur de ce type : Code : Console Fatal error: Call to undefined function meuh() in C:\www\test.php on line 32

C'est que vous employez une fonction qui n'existe pas : vrifiez bien le nom que vous avez tap. Voil un chapitre attendu qui doit vous avoir ramolli la tte : n'hsitez surtout pas le relire, les fonctions tiennent une place trs importante dans le PHP (et dans bon nombre de langages de programmation) !

Les chanes de caractres, un casse-tteLors d'un chapitre prcdent, on a vite abord ce qu'taient les chanes de caractres : apostrophes, guillemets, chappement,

www.siteduzero.com

Partie 1 : Les bases du PHPetc. Mais il y a encore bien des choses dire sur ce type bien particulier. Zoup, jetez-vous sur ce chapitre combien intressant.

84/374

www.siteduzero.com

Partie 1 : Les bases du PHP

85/374

Bref rappel et nouvelle structureAvant de vous rappeler ce qu'on a dj vu sur les chanes de caractres, je vais vous montrer un gentil compagnon : echo. Un exemple : Code : PHP

www.siteduzero.com

Partie 1 : Les bases du PHP

132/374

Le fonctionnement est trs simple : d'abord, on vrifie si les magic_quotes sont activs avec la fonction get_magic_quotes_gpc(). Si c'est le cas, on va utiliser la fonction inverse d'addslashes() : stripslashes(). Pour appliquer une fonction l'ensemble des valeurs d'un array, on utilise la fonction array_map(). Le premier argument est le nom de la fonction qu'on veut appliquer (stripslashes() dans notre cas) ; le second argument est l'array sur lequel on va travailler. Cette fonction est rudimentaire et peut tre amliore, mais pour le moment, a suffira amplement. Mais comme je l'ai dit, l'idal est de les dsactiver. Donc si vous avez accs au fichier de configuration du PHP (php.ini pour les intimes), suivez cette procdure pour dsactiver les magic_quotes : ouvrez le php.ini (chez moi, il est dans C:\Wamp\php\php.ini) ; recherchez la chane 'magic_quotes_gpc' ; mettez Off comme valeur pour les trois directives des magic_quotes pour obtenir ceci : Code : Autre ; Magic quotes ; ; Magic quotes for incoming GET/POST/Cookie data. magic_quotes_gpc = Off ; Magic quotes for runtimegenerated data, e.g. data from SQL, from exec(), etc. magic_quotes_runtime = Off ; Use Sybase-style magic quotes (escape ' with '' instead of \'). magic_quotes_sybase = Off

Reste redmarrer votre serveur pour que la modification soit effective. Boum, plus de magic_quotes ! On reviendra l-dessus dans la partie II de ce tutoriel de toute faon, pour dcouvrir pourquoi cette directive existe

.

www.siteduzero.com

Partie 1 : Les bases du PHP

133/374

Je suis perdu !Je vais maintenant vous parler trs brivement de quelque chose qui n'a rien voir avec les formulaires ou la transmission de variables : les constantes. Si j'en parle ici, c'est que je n'avais pas de place ailleurs. On a dj entendu parler des constantes, mais jusqu' maintenant, on ne parlait que de valeur constante (comme par exemple la valeur constante 5, ou la valeur constante 'lala'). Mais cette fois, je vais vous parler des vraies constantes, c'est--dire des sortes de variables, dont on dfinit le nom et la valeur une fois, et dont la valeur sera impossible modifier tout au long du script. Voici comment on dclare une constante : Code : PHP

Pour dclarer une constante, on utilise la fonction define(). Le premier argument est le nom qu'aura la constante ; le second est la valeur qu'elle prendra (une expression quelconque). Vous voyez que j'ai fait une instruction bizarre, nouvelle : echo NOM_CONSTANTE;. premire vue, vous avez d vous dire que j'ai voulu crire une chane de caractres mais que j'ai oubli de la dlimiter avec des apostrophes ou des guillemets. Il n'en est rien. En tapant cette instruction, je voulais afficher la valeur de la constante. Pour utiliser la valeur d'une constante, il suffit de taper son nom sans l'encadrer de guillemets ou d'apostrophes. Une constante est une expression comme une autre, au mme titre qu'une variable, qu'une fonction qui retourne une valeur, etc. Vous pouvez donc l'utiliser pour beaucoup de choses (concatnation, assignation, calcul...). Quand vous avez une variable, vous pouvez redfinir sa valeur, exemple : Code : PHP 5; $a; 7; $a;

Ce code fonctionne merveille, mais si on tente de faire a avec des constantes... Code : PHP

Pan ! Une belle erreur pointe le bout de son nez. Elle est l pour nous dire qu'on tente de redfinir la valeur d'une constante

www.siteduzero.com

Partie 1 : Les bases du PHP(enfin, elle dit plutt que la constante existe dj). Mais quel intrt ? Je dirais qu'il y a deux cas majeurs o les constantes sont intressantes.

134/374

Le premier, c'est si vous voulez vous assurer qu'une valeur ne change jamais. Une valeur qui resterait constante du dbut la fin du script. Par exemple, pour configurer un script (nombre de news affiches par page, si on veut afficher les signatures sur un forum ou non, etc.), c'est trs utile, parce qu'on ne risque pas de changer cette valeur. Le second cas, c'est ce que j'appelle les arguments muets. Quand vous crez une fonction, vous lui donnez souvent des arguments, mais il peut arriver que vous ayez besoin de donner des arguments que je qualifie de muets. Voici la liste des arguments muets : un entier ; un nombre virgule ; un boolen. Pourquoi sont-ils muets ? Tout simplement parce qu'on ne sait pas quel est leur rle, quoi ils servent. Un exemple vaut mieux qu'un discours, et c'est cadeau : Code : PHP

Code : PHP

La constante NB_NEWS_PAGE est dfinie comme telle : define('NB_NEWS_PAGE', 20);.

Imaginez que ce n'est pas votre script : vous tombez sur l'appel de cette fonction. Qui peut me dire quoi sert le nombre 20 ? afficher une catgorie particulire de news ? limiter le nombre de news par page ? On ne peut pas le deviner sans aller voir la dclaration de la fonction, et on perd du temps. Tandis qu'avec une constante, on a un mot, un nom qui nous permet d'identifier l'utilit de ce paramtre. Quand les scripts sont petits et qu'on les a dvelopps seuls, l'intrt est limit, je l'avoue. Mais quand on a de gros scripts qu'on cre plusieurs, a devient vite le bordel et les constantes permettent d'amliorer un peu la lisibilit du code ! Que de choses retenir... Si vous ne deviez en retenir qu'une et une seule, c'est le Never Trust User Input . Tant que l'utilisateur ne peut pas affecter votre script, il n'y a quasiment aucune chance que votre script pose un quelconque problme de scurit ; mais ds que l'utilisateur peut interagir avec votre script, si vous ne prenez pas garde, c'est la porte ouverte toutes sortes de failles de scurit. Retenez bien qu'il ne faut jamais, jamais, jamais faire confiance l'utilisateur. Mme si vous faites un script de membres (on en fera un) et qu'il y a des administrateurs (des gens de confiance, en thorie), il ne faut pas leur faire confiance. Quand vous faites un script, toute autre personne que vous est un danger potentiel. J'insiste beaucoup l-dessus. La scurit, ce n'est pas une histoire de fonction, mais une histoire de comportement. Vous devez prvoir toutes les drives possibles de votre script et les empcher.

www.siteduzero.com

Partie 1 : Les bases du PHPMais ne paniquez pas, hein (

135/374) : mme si j'en ai envie, je ne vais pas vous laisser patauger dans cette affaire tout seuls, on

verra trs bientt les grandes lignes des principales failles de scurit et on essayera de s'en protger !

Premier TP : une calculatriceAlors que le douzime chapitre pointe le bout de son nez, il est temps de faire le point. On a dj vu ensemble une grande partie des bases du PHP : avec tout ce qu'on a vu, vous pouvez faire de belles choses. Dans la deuxime partie de ce tutoriel, on va tout mettre en pratique. Mais avant, on va faire un TP pour que vous puissiez juger vous-mmes de l'tat de vos connaissances. Ce TP est galement le dernier chapitre de la partie I, alors soyez attentifs.

www.siteduzero.com

Partie 1 : Les bases du PHP

136/374

ObjectifsLe but de ce TP est que vous ralisiez une calculatrice. Mais ne vous en faites pas, vous allez en faire une trs simple. Premirement, parce que vous n'avez pas tous des notions en mathmatiques suffisantes pour faire quelque chose de plus compliqu. Deuximement et principalement parce que vous allez dj en baver pour faire quelque chose de simple. Je suis sr que trs peu d'entre vous russiront faire quelque chose qui fonctionne parfaitement. Mais ne vous inquitez pas, ce TP est difficile, c'est volontaire. Je veux que vous compreniez par vous-mmes que vous n'tes pas loin. Vous avez vu les bases, mais vous n'avez pas encore beaucoup pratiqu. Vous manquez donc cruellement d'exprience, et comme le dit le dicton : C'est en forgeant qu'on devient forgeron. Ne soyez donc pas tonns si vous pataugez dans la semoule tout au long de ce TP. Cette calculatrice sera trs simple, elle sera constitue d'un formulaire prsentant deux petites zones de texte et une liste droulante. Les zones de texte serviront au visiteur pour entrer les deux nombres qu'il veut traiter. On demandera l'utilisateur d'entrer uniquement des nombres entiers. On pourrait prendre des nombres virgule, mais je n'ai pas envie (et de toute faon, a ne change rien !). La liste droulante donnera accs cinq oprations, les oprations de base : addition ; soustraction ; division ; multiplication ; modulo. Une fois que le visiteur aura saisi les nombres et le type d'opration, votre script devra afficher le calcul et la rponse. Faites attention au cas o le visiteur voudrait diviser (ou faire le modulo) par zro. En effet, en mathmatiques, on ne peut pas diviser un nombre par zro, a donne un rsultat indfini. C'est pareil en PHP (et une erreur s'affichera). Vous devrez donc vrifier les nombres que le visiteur entrera. S'il veut diviser ou faire le modulo par zro, vous devrez afficher un message : une erreur est survenue : vous ne pouvez pas diviser par zro . Toutefois, il y a une deuxime chose que vous devez vrifier. Certains navigateurs, via des extensions, permettent de modifier les formulaires (tout le code source HTML, mme !). On peut donc modifier les attributs value et compagnie. C'est l qu'est le risque. Pour identifier quelle opration il faudra faire, vous mettrez des valeurs particulires dans les attributs value. Vous devrez donc vrifier que vous recevez une de ces valeurs, sans quoi vous devrez afficher le message : une erreur est survenue : opration indfinie. Si vous affichez une de ces deux erreurs, vous ne devrez pas afficher le calcul et la rponse. Mais dans tous les cas, vous afficherez toujours le formulaire pour qu'on puisse faire d'autres calculs.

www.siteduzero.com

Partie 1 : Les bases du PHP

137/374

Quelques conseilsAvant tout, je vais vous imposer quelque chose : votre code devra tre prsent d'une certaine faon. Je vais vous donner le squelette de votre code : Code : PHP

Vous viendrez intercaler votre code dans ces commentaires. Si je fais a, ce n'est pas pour vous embter, j'ai mes raisons mais vous ne les connatrez pas tout de suite. Il est possible que certaines sections de code soient vides, par exemple la dclaration des constantes. Je vous le dis tout net : il n'y a pas besoin de constantes dans ce script. Mais gardez quand mme le commentaire pour bien montrer que vous savez sparer votre code et le regrouper par thme . Comme c'est votre premier TP, je vais tre gentil et vous donner un aperu en franais de ce que sera votre code : Code : PHP

www.siteduzero.com

Partie 1 : Les bases du PHPEt voil, vous avez tout en mains.

138/374En vous appuyant sur ces quelques commentaires et sur tout ce que vous devriez avoir

appris jusqu' prsent, vous devriez arriver faire ce que je vous demande. Il ne me reste plus qu' vous souhaiter bonne chance, et bon courage surtout.

www.siteduzero.com

Partie 1 : Les bases du PHP

139/374

Correction !Bon, si vous tes l, c'est que soit vous avez brillamment russi, soit vous vous tes lamentablement plants et vous cdez la tentation. Si vous n'avez pas russi ce script, mais que vous avez cherch longtemps (plusieurs dizaines de minutes au moins, si pas des heures !), regardez la correction, a vous aidera. Par contre, si vous n'avez pas cherch, ne regardez pas ! a ne vous apportera rien du tout. Code : PHP Oprande n1 :
Oprande n2 :
Opration : Addition Soustraction Multiplication Division Modulo

$display = false; $result = false; $error = false;

Pas si mal, ce code, hein ? Vous avez d obtenir un code proche, mais si vous n'avez pas la mme chose, ce n'est pas grave. C'est mme normal. Le but du jeu, pour le moment, c'est que le script fonctionne. Je n'ai pas mis de commentaires. Il y a deux raisons cela. La premire, c'est que le script est ridiculement simple et court. La seconde, c'est que tous les commentaires sont un petit peu au-dessus, cachs dans les conseils. Maintenant que vous avez eu un aperu de vrai code, je dois vous avouer un truc : avec ce que vous connaissez, on peut faire bien plus court et efficace !

www.siteduzero.com

Partie 1 : Les bases du PHP

141/374

www.siteduzero.com

Partie 1 : Les bases du PHP

142/374

Peut mieux faire !On vient de voir un code qui fonctionne. J'insiste bien l-dessus, il fonctionne. Mais il est loin d'tre idal. C'est un code que je qualifierais de simplet, il n'y a pas de rflexion, pas d'utilisation de ce qu'on a appris pour simplifier le script. Et la logique mme du script est assez moyenne et nave. C'est pour a que je vais vous montrer un second code : le rendu est strictement identique, mais ce second script est bien mieux ! Code : PHP Oprande n1 :
Oprande n2 :
Opration : Addition Soustraction Multiplication Division Modulo

143/374

Vous voil confronts deux scripts qui font la mme chose. L'un des deux est meilleur, le second. Mais pourquoi ? Tout d'abord, la longueur. En effet, si l'on omet les commentaires, le second script est moins long que le premier. Mais bon, si ce n'tait qu'une histoire de nombre de lignes, je vous le dis tout net : a ne sert rien de s'embter. Vous constatez que les modifications sont nombreuses dans les sections concernant la dclaration des fonctions et concernant le traitement des donnes. En effet, l'affichage est quelque chose de relativement statique : il n'y a pas de moyen pour amliorer rellement a. Au mieux, on peut gagner quelques microsecondes et amliorer la clart. C'est toujours le traitement des donnes qui prend le plus de temps dans un script PHP, c'est donc l-dessus que vous devez porter votre attention pour essayer d'amliorer a.

www.siteduzero.com

Partie 1 : Les bases du PHP

144/374

La plus grande amlioration dans la fonction, c'est la diminution du nombre de structures conditionnelles. Dans le premier script, il y en a six, alors que dans le second il n'y en a que trois, moiti moins. Mais en quoi est-ce utile ? Eh bien, quand vous avez une structure conditionnelle, le PHP value l'expression entre les parenthses, ce qui prend du temps. Moins d'valuation, moins de temps perdu. C'est particulirement vrai dans les boucles. En effet, dans les boucles, les conditions sont rvalues chaque fois, donc si l'on peut supprimer ne serait-ce qu'une d'entre elles, on pourrait viter beaucoup d'valuations inutiles. Pour viter de devoir faire beaucoup de conditions, vous voyez que j'ai utilis un array. En effet, les cls de cet array vont de 0 4, tout comme les attributs value de mon formulaire. Je peux donc trs simplement rcuprer le rsultat du calcul en utilisant un array et la valeur de l'attribut value. Mais je ne pouvais pas mettre les cinq oprations tout de suite dans mon array. En effet, si je l'avais fait, j'aurais eu une erreur : Code : Console Warning: Division by zero in C:\wamp\www\OwnBB\index.php on line 93

Cette erreur m'indique qu' la ligne 93, j'ai divis un nombre par zro. Si vous rencontrez cette erreur, faites des echo et des var_dump() de vos expressions pour savoir d'o vient le problme (c'est grce ces deux structures / fonctions qu'on peut identifier la plupart des bogues !). Pour la dclaration des fonctions, c'est fini. On va maintenant passer au traitement des donnes, qui a aussi subi un petit lifting. La premire chose qui a t modifie, c'est la condition pour vrifier si les variables existent et ne sont pas vides. Tout d'abord, vous devez savoir une chose que je ne vous ai pas encore dvoile : quand un formulaire est soumis (avec un bouton submit ou un bouton image), toutes les associations que peut crer ce formulaire existent. Peu importe que vous ayez rempli ou non le formulaire, tout existe ds que le formulaire est soumis. La seule exception est la case cocher, mais a, vous le savez dj. On peut donc affirmer que si le formulaire n'a pas t soumis, $_POST est un array vide, sinon c'est un array rempli avec des associations. Or, si l'on se souvient bien de nos notions de transtypage, on sait que quand on transtype un array en boolen, deux cas sont possibles : si l'array est vide, le boolen vaut false ; sinon, le boolen vaut true. Maintenant, le foreach : vous savez que a sert parcourir un array. Ce qui est bien avec cette structure, c'est qu'elle ne gnre pas d'erreur si l'array qu'on lui passe est vide. Avant mon foreach, je cre une variable boolenne qui vaut true. Je parcours le tableau et j'assigne cette variable le retour de trim($val) == ''. Cette expression peut retourner soit true, soit false. Si la variable est constitue uniquement d'espaces ou si elle est vide, a retourne true, sinon false. En clair, si une seule des valeurs contenues dans $_POST est vide (la chane vide '' ou une chane faite uniquement d'espaces), $is_valid vaudra false. Je n'tais pas oblig de vous montrer cela, a n'a pas grand intrt ici. Mais quand vous aurez vrifier si quarante petites zones de texte sont remplies, a vous sera trs utile. La condition, vous devez la comprendre : on vrifie que $_POST n'est pas vide et que tous les champs sont remplis. La deuxime grosse amlioration, c'est la suppression des cinq conditions ! On la rsume en une seule grce aux arrays pour la deuxime fois. Ce second script est plus propre et plus efficace que le premier. Ce que je veux que vous compreniez, c'est qu'il y a toujours moyen de voir un problme sous un autre angle. Le but du jeu, c'est de trouver l'angle qui vous donnera la solution la plus performante. Cette recherche de la solution la plus efficace, on appelle a l'optimisation. En PHP, le meilleur moyen d'optimiser son code (qu'il soit le plus rapide possible), c'est de revoir sa logique, d'essayer de supprimer des structures coteuses en performance (comme des conditions, des boucles, des fonctions lourdes...).

www.siteduzero.com

Partie 2 : MySQL, PHP et MySQL

145/374

Beaucoup de gens vont vous donner des petits trucs , comme utiliser ' la place de " pour dlimiter vos chanes de caractres. Ce genre de truc n'est pas faux, c'est vrai. Mais le temps que vous gagnerez est vraiment ngligeable compar ce que vous pourriez gagner en revoyant votre logique. C'est pour a que je n'appelle pas ce genre de pratique de l'optimisation, mais du bricolage, du chipotage. C'est comme si vous deviez aller de Paris Marseille. Vous avez une 2 CV, vous demandez votre voisin : ton avis, j'irais plus vite si je gonfle un peu mes pneus ? a ne vous fera gagner que quelques minutes. Alors que si vous revoyiez votre logique et que vous preniez le TGV la place de cette voiture, vous gagneriez des dizaines d'heures. Dsormais, quand vous regarderez un script, vous devrez toujours vous demander :