Home
Programmation Web PHP
Contents
1. r seau physique e l interface r seau la carte r seau de l ordinateur assure les fonctions des couches 1 et 2 du mod le O SI e lacouche IP Internet Protocol assure les fonctions de la couche 3 r seau e la couche TCP Transfer Control Protocol ou UDP User Datagram Protocol assure les fonctions de la couche 4 transport Le protocole TCP s assure que les paquets de donn es chang s par les machines arrivent bien destination Si ce n est pas les cas il renvoie les paquets qui se sont gar s Le protocole UDP ne fait pas ce travail et c est alors au d veloppeur d applications de le faire C est pourquoi sur l internet qui n est pas un r seau fiable 100 c est le protocole TCP qui est le plus utilis On parle alors de r seau TCP IP e la couche Application recouvre les fonctions des niveaux 5 7 du mod le OSI Les applications web se trouvent dans la couche A pplication et s appuient donc sur les protocoles TCP IP Les couches A pplication des machines clientes et serveur s changent des messages qui sont confi es aux couches 1 4 du mod le pour tre achemin es destination Pour se comprendre les couches application des deux machines doivent parler un m me langage ou protocole Celui des applications Web s appelle HTTP HyperText Transfer Protocol C est un protocole de type texte c a d que les machines changent des lignes de texte sur le r seau pour se compr
2. le site de l TSTLA ici Dans cet exemple le serveur Apache a t configur pour travailler sur le port 81 Son port par d faut est 80 Ce point est contr l par la ligne suivante du fichier httpd conf d j rencontr Port 81 6 3 3 Le fichier de configuration d A pache htpd conf Lorsqu on veut configurer un peu finement Apache on est oblig d aller modifier la main son fichier de configuration httpd conf situ ici dans le dossier lt easyphp gt apache conf Address E Program Files EasyPHP apache cont pe ul 1 Nom re a access zonf access default conf conf a httpd conf a heal httpd_cefault cont S lectionnez un l ment pour obtenir magic une description La magie SHALE Voir aussi mime ty pes Mes documents ja mime types default Favoris r seau ja srm corf Poste de travail N 38 srm default conf Voici quelques points retenir de ce fichier de configuration EE r le erverRoot D Frogram Files Apache Group Apache indique le dossier o se trouve l arborescence de pache Port 80 indique sur quel port va travailler le serveur Web Classiquement c est 80 En changeant cette ligne on peut faire travailler le serveur Web sur un autre port ServerAdmin root istia univ angers fr l adresse email de l administrateur du serveur Apache ServerName stahe istia uang le nom de la machine sur laquelle tourne le serveur Apache Annexes 141 ServerRoot E
3. l application s affranchit du mode de passage des valeurs du formulaire au serveur Dans les deux cas possibles GET et POST le dictionnaire des valeurs pass es est r f renc e par param Bese Tne EAST ieee GET else param POST partir du contenu du champ areaSaisie lignel nligne2 n on cr e un tableau de cha nes par ex plode r n param areaSaisie On a donc le tableau lignel liqne 2 A partir de celuici on cr e la cha ne lignel lt br gt ligne lt br gt avec la fonction implode la valeur de la liste s lection multiple Ist2 est un tableau par exemple option3 option5 A partir de celui ci on cr e une cha ne de caract res option3 lt br gt option5 avec la fonction implode l application v rifie que tous les param tres ont t positionn s Il faut se rappeler ici que n importe quelle URL peut tre appel e la main ou par programme et qu on n a pas n cessairement les param tres attendus S il manque des param tres la page balises html est affich e sinon la page parameters pl php Celle ci affiche les valeurs r cup r es et calcul es dans parameters php dans un tableau lt ht ml gt lt head gt lt title gt R cup ration des param tres d un formulaire lt title gt lt head gt lt body gt Programmation PHP 68 lt table border 1 gt lt tr gt lt td gt R1 lt td gt lt td gt lt php echo R1 gt lt td gt lt tr gt lt tr gt
4. 2 A Qsearch Favorites PMedia lt 4 Address a http flocalhost poly intro heure php Une page PHP g n r e dynamiquement 2 10 02 06 13 47 chaque fois que vous rafraichissez la page l heure change La partie dynamique de la page a t g n r e par du code PHP lt php maintenant ti me echo date j m y h i s maintenant gt Que s est il pass exactement Le navigateur a demand l URL http localhost _poly intro heurephp Le serveur web dans l exemple Apache a re u cette demande et a d tect cause du suffixe php du document demand qu il devait faire suivre cette demande l interpr teur PHP Celui ci analyse alors le document heure php et ex cute toutes les portions de code situ es entre les balises lt php gt et remplace chacune d elles par les lignes crites par les instructions PHP echo ou print Ainsi l interpr teur PHP va ex cuter la portion de code ci dessus et la remplacer par la ligne crite par l instruction echo Programmation PHP 2 10 02 06 13 47 Une fois que toutes les portions de code PHP ont t ex cut es le document PHP est devenu un simple document HTML qui est alors envoy au client On cherchera viter au maximum de m langer code PHP et code HTML Dans ce but on pourrait r crire l application pr c dente de la fa on suivante lt code PHP gt lt php 11 on r cup re l heure du moment maintenant ti me
5. A l ex cution lorsque des valeurs sont saisies dans le formulaire et envoy es au serveur le navigateur refl te dans son champ URL le fait que les valeurs ont t envoy es par la m thode GET Q http flocalhost poly Formulaire nomage 2 php txtNom aa amp txtAge wwe amp cmdEffacer Envoyer 2 7 R cup rer les ent tes http envoy s par un client web Lorsqu un navigateur fait une demande un serveur web il lui envoie un certain nombre d ent tes HTTP Il est parfois int resant d avoir acc s ceux ci On peut s aider dans un premier temps du tableau associatif SERVER Celui ci contient diverses informations qui lui sont donn es par le serveur web dont entre autres les ent tes HTTP fournis par le client Consid rons le programme suivant qui affiche toutes les valeurs du tableau SERVER lt php I affiche les variables li es au serveur web on envoie du texte simple Meade T E eee Type text plain parcours du tableau associatif SERVER reset SERVER while fist cle val eur each SERVER echo cl valeur n while gt Sauvegardons ce code dans headers php et demandons cette URL avec un navigateur Programmation PHP 49 Q 6 Q Q Q x http flocalhost poly headers headers php COMSPEC C WINNT system32 cmd exe DOCUMENT_ROOT e program files easyphp www HTTP_ACCEPT text xml application xml application xhtml xml text html q 0 9 te HTTP_ACCEPT CHARSET 150 8859
6. nombre d arguments if args length 2 iii St 11 int port 0 erreur syntaxe 1 on note le nom du serveur ring serveur args 0 le port doit tre entier gt 0 boolean erreurPort false Exception E null in c er j y port Integer parselnt args 1 atch Exception e E e erreurPort true reurPort erreurPort port lt 0 f erreurPort LST De ea ea Dort incorrect E 2 I peut y avoir des probl mes on se connecte au service client new Socket serveur port catch Exception ex Il erreur erreur lmpossible de se connecter au service serveur port erreur ex getMessage 3 Hib Vi return catch on cr e les threads de lecture criture new ClientSend client start new ClientReceive client start II re HI af bli I Sy il Sy fin thread min turn main fichage des erreurs ic static void erreur String msg int exitCode affichage erreur tem err print n msg arr t avec erreur stem exit exitCode c 5 f S lerreur classe class ClientSend extends Thread 11 classe charg e de lire des commandes tap es au clavier x et de les envoyer un serveur via un client tcp pass en param tre private Socket client le client tcp fa pub t l Qi nier fal pub AN l P BufferedReade constructeur c ClientSend Socket client on note le client tcp is client client
7. 4 Le serveur d livre la page WEB construite par programme SA SB SC Cette tape est identique a l tape 2 pr c dente Les changes se font d sormais selon les tapes 2 et 3 1 3 Quelques ressources Ci dessous on trouvera une liste de ressources permettant d installer et d utiliser certains outils permettant de faire du d veloppement web On trouvera en annexe une aide l installation de ces outils Serveur Apache http www apache org Les bases de la programmation web 7 Apache Installation et Mise en uvre O Reilly Serveur 11S PWS http www microsoft com PERL http www activestate com Programmation en Perl Larry Wall O Reilly Applications CGI en Perl Neuss et Vromans O Reilly la documentation HT ML livr e avec Active Perl PHP http www php net Prog Web avec PHP Lacroix Eyrolles Manuel d utilisation de PHP r cup rable sur le site de PHP VBSCRIPT ASP http msdn microsoft com scripting vbscript download vbsdoc exe http msdn microsoft com scripting default htm scripting vbscript Interface entre WEB et Base de donn es sous WinNT Alex Homer Eyrolles J AVASCRI PT http msdn microsoft com scripting jscript down load jsdoc exe http developer netscape com docs manuals index htm HT ML http deve loper netscape com docs manuals index html J AVA http www sun com JAVA Servlets Jason Hunter O Reilly Programmation r seau avec Java Elliotte Rusty Harold O R
8. 8 1 2 Le code lt ht ml gt lt head gt RA f lt title gt Un formulaire trait par Javascript lt title gt lt script language javascript gt function afficher affiche dans une liste les infos du formulaire Annexes 166 on efface d abord effacerInfos on affiche la valeur des champs with document frmExemple champ cach ecrire champ cach cache value champ textuel simple ecrire champ textuel simple simple value champ textuel multiple ecrire champ textuel multiple lignes value boutons radio for i 0 i lt radio length itt texte radio tit tradio i value if radio i checked textet coch ecrire texte for cases cocher for i 0 i lt qcm length i 1 texte qcm i qcm i value if qcem i checked textet coch ecrire texte for liste d roulante ecrire index s lectionn dans le menu tmenu selectedIndex for i 0 i lt menu length itt texte menu it J menu options i text if menu options i selected texte s lectionn ecrire texte for liste choix multiple for i 0 i lt lstVoitures length itt texte IstVoitures tit J lstVoitures options i text if lstVoitures options i selected texte s lectionn ecrire texte for mot de passe ecrire mot de passe tpasswd value with function function ecrire texte crit texte dans la liste des infos
9. Dans la zone 1 ci dessus op rons un copier coller de l attribut IN PUT submit vers un attribut IN PUT fantaisie Cet attribut fixera la pr sentation de la balise HTML lt INPUT class fantaisie gt 31 82 83 54 65 86 ar ley 89 90 91 92 93 94 95 96 97 95 99 190 101 102 103 104 Utilisons la zone 2 pour modifier certaines des propri t s de l attribut IN PUT fantaisie background D1E1F8 background attachment fixed text align center vertical align middle font family Garamond SELECT TEXT ES background 6495ED text align center color Aqua INPUT fantaisie font family Times New Roman font size 16px background FA8072 border 2px double Green T font weight bold text align center vertical align middle cursor pointer Annexes Style Inspector Internet Explorer 6 background color background image background repeat background attachment background position El border border width border style color cursor font family font size font weight text align vertical align hack oaround attachment 4 ry backround 22072 EM FAs072 2px double Green 2px double E Green pointer Times New Roman 16px bold center middle 187 91 text align center Style Inspector 92 color Aqua ae ss Internet Explorer 6 RE Q g4 E background transparent al g5 INPUT fantaisie background col
10. E Program Files jdk1 4 jrellibijaws jar E Program Filesfdk14freflibtice jar Edit Dans la partie JD K Sdtings d dessus on a normalement dans le champ Name un JDK 1 3 1 Si vous avez un JDK plus r cent utilisez le bouton C hange pour d signer le r pertoire d installation de ce demier Ci dessus on a d sign le r pertoire E Program Files jdk14 o avait install un JDK 1 4 D sormais JBuilder utilisera ce JDK pour ses compilations et ex cutions D ans la partie Class Siurce Documentation on a la liste de toutes les biblioth ques de classes qui seront explor es par JBuilder ici les classes du JDK 1 4 Les classes de celui ci ne suffisent pas pour faire du d veloppement web en Java Pour ajouter d autres biblioth ques de classes on utilise le bouton dd et on d signe les fichiers jar suppl mentaires que l on veut utiliser Les fichiers jar sont des biblioth ques de classes Tomcat 4 x am ne avec lui toutes les biblioth ques de classes n cessaires au d veloppement web Elles se trouvent dans lt tomcat gt common lib o lt tomat gt est le r pertoire d installation de Tomcat Annexes 154 Address E Program Files 4pache Tomcat 4 0 ccmmonilib a 1 Nom _ EL E activation jar 45KB Executable Jar File 02 03 2002 00 48 E idbc2_0 stdext jar 83KB Executable Jar File 02 03 2002 00 48 lib E jndi jar 97KB Executable Jar File 02 03 2002 00 48 H jta speci_0_1 jar 9KB Executable Jar File 02 03 2
11. HOMEPATH INCLUDE C Program Files Microsoft Visual Studio NET FrameworkSDK include LIB C Program Files Microsoft Net Odbc Net LOGONSERVER TAHE NetSamplePath C PROGRA 1 MICROS 1 NET FRAMEW 1 Samples netsdk PROGRA 1 MICROS 1 NET FRAMEW 1 NUMBER OF PROCESSORS 1 O35 Windows NT On voit par exemple ci dessus que le serveur web php s ex cute sous l OS Windows NT Programmation PHP 51 2 9 Exemples 2 9 1 G n ration dynamique de formulaire 1 Nous prenons comme exemple la g n ration d un formulaire n ayant qu un contr le un combo Le contenu de ce combo est construit dynamiquement avec des valeurs prises dans un tableau Dans la r alit elles sont souvent prises dans une base de donn es Le formulaire est le suivant SS http localhost polyfexemples 1 valeurs php ti Choisissez un nombre quatre x Envoyer Si sur l exemple ci dessus on fait E nvoyer on obtient la r ponse suivante Q 6 Q Q Q S http flocalhost polyfexemples 1 valeurs php Vous avez choisi le nombre quatre Le code HTML du formulaire initial une fois celui ci g n r est le suivant lt ht ml gt lt head gt lt title gt G n ration de formul aire lt title gt lt head gt lt body gt lt h2 gt Choisissez un nombre lt h2 gt lt hr gt lt form name frmvaleurs method post action valeurs php gt lt select name cmbValeurs size 1 gt lt op
12. l interpr teur XSL qu on veut produire du HTML indent La balise lt xsl template match l ment gt sert d finir l l ment du document XML sur lequel vont s appliquer les instructions que l on va trouver entre lt xsl template gt et lt xsl template gt lt xsl template match gt lt xsl template gt Dans l exemple ci dessus l l ment d signe la racine du document Cela signifie que d s que le d but du document XML va tre rencontr les commandes X SL situ es entre les deux balises vont tre ex cut es Tout ce qui n est pas balise XSL est mis tel quel dans le flux de sortie Les balises XSL elles sont ex cut es Certaines d entre elles produisent un r sultat dans le flux de sortie Etudions l exemple suivant lt xsl template match gt lt ht ml gt lt head gt lt title gt Simulations de calculs d imp ts lt title gt lt head gt lt body gt lt center gt lt h3 gt Si mulations de calculs d imp ts lt h3 gt lt hr gt lt table border 1 gt lt th gt mari lt th gt lt th gt enfants lt th gt lt th gt sal aire lt th gt lt th gt i mpot lt th gt lt xsl apply templates select si mul ations si mul ation gt lt table gt lt center gt lt body gt lt ht ml gt lt xsl template gt Rappelons que le document X ML analyse est le suivant lt xml version 1 0 encoding wi ndows 1252 gt lt simul ations gt lt si mulation marie oui enfan
13. lt a href ie php ac invalider gt Ilnvalider la session lt a gt lt a href cycledevie php h tion hp gt Recharger la page lt a gt p p L interpr teur PHP a donc de lutm me r crit les URL des deux liens en y ajoutant le jeton de session Ainsi celui ci est bien transmis par le navigateur lorsque les liens sont activ s Ce qui explique que m me sans les cookies activ s la session reste correctement g r e 2 10 4 Exemple 3 Nous nous proposons d crire une application php qui serait cliente de l application compteur pr c dente Elle l appellerait N fois de suite o N serait pass en param tre Notre but est de montrer un client web programm et la fa on de g rer le jeton de session Notre point de d part sera un client web g n rique ap pel de la fa on suivante clientweb URL GET HEAD URL url demand e GET HEAD GET pour demander le code HTML de la page HEAD pour se limiter aux seuls ent tes HTTP Voici un exemple avec l URL http localhost poly sessions 2 cydedeviephp Ce programme est celui d j d crit avec une l g re diff rence Ii on fixe le chemin du cookie session set cookie params 0 poly sessions 2 on d marre une session session start La fonction session set cookie params permet de fixer certains param tres du cookie qui va contenir le jeton de session Le ler param tre est la dur e de vie du cookie Une dur e de vie nulle signifie que le cookie est s
14. maintenant date j my h i s maintenant gt lt code HTML gt lt ht ml gt lt head gt lt title gt Une page php dynami que lt title gt lt head gt lt body gt lt center gt lt hl gt Une page PHP g n r e dynamiquement lt h1 gt h lt h2 gt lt php echo maintenant gt lt h2 gt lt br gt A chaque fois que vous rafraichissez la page l heure change lt body gt lt ht ml gt Le r sultat obtenu dans le navigateur est identique Une page php dynamique Microsoft Internet Explorer File Edit View Favorites Tools Help Bak G A A Aseach Favorites Meda lt 4 Address E http fflocalhost poly introfheurez php Une page PHP g n r e dynamiquement 2 10 02 06 48 54 A chaque fois que vous rafra chissez la page l heure change La seconde version est meilleure que la premi re car il y a moins de code PHP dans le code HTML La structure de la page est ainsi plus visible O n peut aller plus loin en mettant le code PHP et le code HTML dans deux fichiers diff rents Le code PHP est stock dans le fichier heure3 php lt code PHP gt lt php on r cup re l heure du moment maintenant ti me gmaintenant date j my h i s maintenant 11 on affiche la r ponse include heure3 pagel php gt Le code HTML est lui stock dans le fichier heure3 pagel php lt code HTML gt lt ht ml gt lt head gt lt title gt Une
15. onstructeur EC node Run du thread c void run donn es locale f intWriter OUT n He 11 flux d criture r seau r IN null 11 flux clavier Annexes 159 String commande null commande lue au clavier 11 gestion des erreurs try cr ation du flux d criture r seau OUT new Print Writer client pS ee eae true i cr ation du flux d entr e clavie N new BufferedReader new input Str eontoadert System tn 11 boucle saisie envoi des commandes eee em out println Commandes while true lecture commande tap e au clavier connate N readLine trim ini if commande toLowerCase equals fin break envoi commande au serveur OUT pri ntl n commande commande suivante whil catch Exception ex I erreur a A L erreur suivante s est produite ex getMessagel catc HP tim on rerna les Tix try OUT cl ose client close c catch Exception ex on signale la fin du thread System out printIn Envoi oan du thread d envoi des commandes au serveur lrun lIclasse class AE extends Thread Il cla charg e de lire les lignes de texte destin es un Hi eli t pass en param tre private Socket client le client tcp constructeur public RARES ES ket client on note le client tcp this client client constructeur m thode Run du thread public void run 11 donn es locales BufferedReader IN null IJ flux lecture r seau Str
16. 1 array array action gt updatearticle phase gt 0 dPrec updatearticle 2 array action gt updatearticle phase gt 1 array action gt updatearticle phase gt 3 Ny dPrec updatearticle 3 ar A array action gt UE tale phase gt 2 on d article suppressi i dP Been deletearticle 0 array dP recl deletearticle l array array action gt deletearticle phase gt 0 li dPrec deletearticle IL 2 Jeu array action cl deal cicariicle phase ss ii He s lection d articles SdPrec selectarticle 0 dPrec s electarticle ie a EG array action gt ne ike phase as array action gt selectarticle Vee gt 2 E dPrec selectarticle 2 ar n array action gt eletere eie phase gt 1 requ te administrateur dPrec sql E dPrec sql 1 arr ay array action gt sql phase gt Dealt array action gt sql phase gt Px dPrec sql 2 array array action gt sql phase gt 1 dPrecl action phase est un tableau qui contient les actions qui peuvent pr c der l action et la phase qui servent d index au dictionnaire Ces actions pr c dentes sont elles aussi repr sent es par un dictionnaire deux cl s action et phase Si une action peut tre pr c d e par toute action alors dPrecl action l phase sera un tableau vide L absence d une action dans le dic
17. Connection close Cookie PHPSESSID 2425e00d1d65c2bdcbafclce6244f7ea HTTP 1 1 200 OK Date Thu 10 Oct 2002 06 32 03 GMT Server Apache 1 3 24 Win32 Expires Thu 19 Nov 1981 08 52 00 GMT Cache Control no store no cache must revalidate post check 0 pre check 0 Pragma no cache Connection close Transfer Encoding chunked Content Type text html compteur est gal 3 On voit ici que d s le 1er appel du client le serveur re oit un cookie de session valide On pointe peut tre l un trou de s curit potentiel Si je suis capable d intercepter sur le r seau un jeton de session je suis alors capable de me faire passer pour celui qui avait initi celle ci Dans notre exemple le premier appel sans jeton de session repr sente celui qui initie la session peut tre avec un login et mot de passe qui vont lui donner le droit d avoir un jeton et le second appel avec jeton de session repr sente celui qui a pirat le jeton de session du premier appel Si l op ration en cours est une op ration bancaire cela peut devenir ennuyeux Le code du client est le suivant lt php 11 syntaxe 0 URL N PHPSESSID il faut trois arguments if argc 3 amp amp a msg d EURE fputs STDERR syntaxe argv 0 URL N PHPSESSID mere HE connexion et affichage du r sultat Sr sultats get URL SURL SN SPHPSESSID if isset Sr sultats gt erreur erreur echo L erreur suivante s
18. N new BufferedReader new InputStreamReader System in I boucle saisie envoi des commandes whil e true identification client ystem out print gt D4 pummel heme a on lecture r ponse tap e au Clavier ponse N readLine tri mf i tinh 2 f r ponse tolowerCase equals fin break envoi r ponse au serveur UT WET y ronteet l Pone suivante whil Veal Ce ton ex Il erreur Sy l l S l A l i 0 l l 7 anem err printlin L erreur suivante s est produite ex getMessagel atch i rm on ferme les flux ET f OUT cl ose client close catch Exception ex n e C fi U t K signale la fin du thread n w icl class ServeurReceive extends Thread 11 classe charg e de lire les lignes de texte envoy es au serveur via un client tcp pass au constructeur un l ys asse Socket client le client tcp int numClient n de client constructeur public ServeurReceive Socket client int numClient on note le client tcp this client client M OE SON mS this numCl i ent numClient constructeur m thode Run du thread public void run f 11 donn es locales BufferedReader N null IJ flux lecture r seau String r ponse null II r ponse serveur 1 suivi System out printin Thread de lecture des demandes du client numClient lanc I gestion des erreurs try cr ation du flux lecture r seau N new BufferedReader new Input
19. i e meet veya amp amp sa deleteArticle CoH ase ey f sAction deletearticle amp amp sPhase 1 deleteArticle_1 dConfig dSession if sAction deletearticle amp amp sPhase 2 deleteArticle 2 dConfig dSessi on fesses consultation d articles Annexes 189 M em ne amp amp a Sel ectArti Ce o ee if sAction Selectarticle amp amp sPhase 1 selectArticle_ 1 dConfig dSession if sAction selectarticle amp amp sPhase 2 selectArticle 2 dConfig dSession Il mission d une requ te SQL i if sAction sql amp amp sPhase 0 sql_O dConfig dSession if sAction sql amp amp sPhase 1 sql_1 dConfig dSession if sAction sgl amp amp sPhase 2 sql 2 dConfig dSession Il action erron e on pr sente la page d authentification session destroy authentifier 0 dConfig 0 2 gt On notera les points suivants Jes fonctions traitant une demande particuli re du client se terminent par la g n ration de la page r ponse et par une instruction exit qui termine l ex cution du script apparticles php Autrement dit on ne revient pas de ces fonctions Jes fonctions admettent un ou deux param tres o dConfig est un dictionnaire contenant des informations issues du fichier de configuration config php Toutes les fonctions l utilisent o dSession est un dictionnaire contenant des informations de session I n existe que lorsque la session a t cr e c
20. leclient n est plus un navigateur mais un client php autonome Son interface console est celle de la version 4 Le lecteur est invit relire le code de l application cltImpots php qui tait le client programm de la version 4 Celui ci recevait un document document du serveur Celui ci tait alors un document HTML C est maintenant un document XML Le document HTML document tait analys par la fonction suivante function Ta lot tai nan 11 document ocument L Ii on cherche sote la Tiste d erreurs 11 soit le tableau des simulations reurs array l ation du r sultat i f i i mulation s array return i mpots getinfos La fonction recevait le document HTML document l analysait et rendait un dictionnaire impots deux attributs 1 erreurs un tableau d erreurs 2 simulations un tableau de simulations chaque simulation tant elle m me un tableau quatre l ments marie enfants salaire impot L application cltImpots php devient maintenant cltX mlSimulations php Seule la partie qui traite le document re u du serveur doit changer pour tenir compte du fait que c est maintenant un document X ML La fonction getInfos devient alors la suivante l function getinfos document 11 document document XML fl on cherche soit la liste d erreurs 11 soit le tableau des simulations global impots balises pr paration du r sultat ae mpots erreurs array impots ne 1 balises en cours
21. nfiguration O utils d administration Sources de donn es O D BC ODBC Data Source Administrator xi User DSN System DSN File DSN Drivers Tiacing Connection Pooling About User Data Sources Add ccess Microsoft Access Driver mdb dBASE Files Microsoft dBase Driver dbf Remove dBase Files Word Microsoft dBase YFP Driver dbf im Excel Files Microsoft Excel Driver xls Configure FoxPro Files Word Microsoft FoxPro YFP Driver dbf _Corioue impots access Microsoft Access Driver mdb MS Access Database Microsoft Access Driver mdb mysql articles MySQL mysql dbimpots MySQL odbe dbimpots MySQL odbre emninues Driver da Microsoft Access mdhil zi An ODBC User data source stores information about how to connect to the indicated data provider A User data source is only visible to you and can only be used on the current machine Annuler Appliquer Aide On utilise le bouton Add pour ajouter une nouvelle source de donn es ODBC Ms 3 iS Select a driver for which you want to set up a data source Microsoft ODBC for Oracle Microsoft Paradox Driver db Microsoft Paradox Treiber db Microsoft Text Driver txt csv Microsoft Text Treiber txt csv Microsoft Visual FoxPro Driver Microsoft Visual FoxPro T reiber MySQL SQLk rver NOMME EEE IN lt Pr c dent Annuler Programmation PHP 6
22. sont les suivantes La demande du client est r cup r e et analys e Celle ci est param tr e ou non Lorsqu elle est param tr e les param tres attendus sont les suivants action action amp phase phase amp PH PSE SSID PH PSE SSID Si la demande n est pas param tr e ou si les param tres r cup r s ne sont pas ceux attendus le serveur envoie comme r ponse la page d authentification login mot de passe D s que l utilisateur se sera identifi correctement une session est cr e Elle servira stocker des informations tout au long des changes client serveur Si une demande est correctement reconnue elle est trait e par un module qui d pend et de l action et de la phase en cours Tous les acc s la base de donn es se font par l interm diaire de la classe m tier articles php Le traitement d une demande se termine toujours par l envoi au client de la page main php dans laquelle on a pr cis dans main contenu l URL de la page mettre dans la zone 4 de la page type Le squelette du script apparticles php pourrait tre le suivant lt php 1 gesti qr d une table d articles include config php include articles php action entreprendre SSAC ont POS Acr on 2 S POSM aceon S_ GEM accion 2 e GET aCtion i amp auicheineti ier sActi on CS USE AQU phase ventuel sPhase _ POST phase S POST Hnase s o Ger phas il t S GET phase tn
23. Imp t 16400 Calculer Effacer R sultats des simulations Mari Enfants Salaire annuel F Imp ts payer F oui l2 200000 22504 non 2 200000 33388 non 3 200000 22504 oui 3 200000 16400 Le programme d affichage de la page ci dessus est le suivant lt php formulaire des imp ts gt lt ht ml gt lt head gt lt title gt imots lt titl e gt lt script APR os type text javascript gt function effacer leffacer IN peceeosseese ore ooesme esos pease function calculer calculer lt script gt lt head gt lt body background poly impots images standard jpg gt lt center gt Calcul d imp ts lt hr gt lt form name frm mpots method POST gt lt table gt lt tr gt lt td gt Etes vous mari e lt td gt lt td gt lt input type radio name optMarie value oui lt php echo Srequ te chkoui gt gt oui lt input type radio name optMarie value non lt php echo Srequ te chknon gt gt non lt td gt lt tr gt lt tr gt lt td gt Nombre d enfants lt td gt lt td gt lt input type text size 5 name txtEnfants value lt php echo Srequ te enfants gt gt lt td gt Exemples 105 lt td gt Salaire annuel lt td gt lt td gt lt input type text size 10 name txtSalaire value lt php echo Srequ te salaire gt gt lt td gt lt tr
24. La classe compl te est la suivante lt php d finition d une classe objimpots class ImpotsDSN attributs les 3 tableaux de donn es var Slimites tableau des limites var ScoeffR tableau des coeffR var ScoeffN tableau des coeffN var Serreurs tableau des erreurs constructeur function ImpotsDSN Simpots impots dictionnaire co p ntenant les champs suivants 1 dsn nom DSN de la source ena ODBC de donn es contenant les valeurs des tableaux limites coeffR coeffN user nom d un utilistaeur ayant un droit de lecture sur la source ODBC pwd son mot de passe table nom de la table contenant les valeurs limites coeffR coeffN limites nom de la colonne contenant les valeurs limites Exemples 95 coeffR nom de la colonne contenant les valeurs coeffR 11 coeffN nom de la colonne contenant les valeurs coeffN au d part pas d erreurs gt this gt erreurs array Il v rification de l appel if isset impots dsn isset impots user isset impots pwd isset impots table Beet moral imit eeN isset impots coeffR isset impots coeffN erreur tie gt erreurs Appel incorrect Hl return lif ouverture de la base DSN connexion odbc_connect i mpots dsn i mpots user i mpots pwd ii erreur if connexi on 11 erreur use gt erreurs Impossible d ouvrir la base DSN impots dsn odbc error in r
25. La fonction startE lement permet de r cup rer les attributs de l l ment gr ce au param tre attributs Celui ci est un dictionnaire des attributs de la balise A insi si on a la balise suivante lt si mulation marie oui enfants 2 salaire 200000 i mpot 22504 gt le dictionnaire attributs sera le suivant array marie gt oui enfants gt 2 salaire gt 200000 impot gt 22504 Une fois d finis le parseur et les m thodes pr c dentes l analyse d un document se fait la fonction xml_parse Ii exploitation du fichier xml par blocs de 4096 octets while data fread fp 4096 Me analyse des donn es lu if xml_parse xml arser data feof fp ilif while ane H Tee d un function xml_parse parser doc fin le parseur parser analyse le document doc doc peut tre un morceau d un document plus im portant Le param tre fin indique si c est le dernier morceau true ou non false Lors de l analyse du document doc les fonctions d finies par xml_set_element_handler sont appel es chaque d but et fin de balise La fonction d finie par xml_set_character data handler est elle appel e chaque fois que le contenu d une balise a t obtenu Pendant l analyse du document XML il peut se produire des erreurs notamment si le document XML est mal form par exemple lors de l oubli de balises de fermeture D ans ce cas la fonction xml_parse rend une valeur valu e faux if xml_parse xml_
26. Le serveur a pris soin ventuellement d associer des informations ce jeton Programmation PHP 70 o le client fait sa seconde demande en renvoyant le formulaire Le serveur r cup re dans celui ci le jeton Il peut alors traiter la seconde demande du client en ayant acc s gr ce au jeton aux informations calcul es lors de la premi re demande De nouvelles informations sont ajout es au dossier li au jeton une seconde r ponse est faite au client et la connexion est ferm e pour la seconde fois Le jeton a t mis de nouveau dans le formulaire de la r ponse afin que l utilisateur puisse le pr senter lors de sa demande suivante o et ainsi de suite L inconv nient principal de cette technique est que le jeton doit tre mis dans un formulaire Si la r ponse du serveur n est pas un formulaire la m thode du champ cach n est plus utilisable celui du cookie o le client fait sa premi re demande le serveur le reconna t au fait que le client n a pas de jeton o le serveur fait sa r ponse en ajoutant un cookie dans les ent tes HTTP de celle ci Cela se fait l aide de la commande HTTP Set Cookie Set Cookie parami valeurl param2 valeur2 o parami sont des noms de param tres et valeursi leurs valeurs Parmi les param tres il y aura le jeton Bien souvent il n y a que le jeton dans le cookie les autres informations tant consign es par le serveur dans le dossier li au jeton Le navigateur qui re oit le coo
27. Les bases de la programmation web 28 Etes vous mari e C Oui Non Cases cocher G1 M2 O3 Champ de saisie aas mots Mot de passe SS lignel ligne2 x combo choix2 liste choix simple Bo te de saisie liste choix multiple bouton Effacer envoyer Envoyer r tablir R tablir if Le code HTML g n r par FrontPage et un peu pur est le suivant lt ht ml gt lt head gt lt title gt balises lt title gt lt script language JavaScript gt function effacer alert Vous avez cliqu sur le bouton Effacer effacer lt script gt lt body background i mages standard jpg gt lt form method POST gt lt table border 0 gt lt tr gt lt td gt Etes vous mari e lt td gt lt td gt lt input type radio value Oui name R1 gt Oui lt input type radio name R1 value non checked gt Non lt td gt lt tr gt lt tr gt lt td gt Cases a cocher lt td gt lt td gt lt input type checkbox name C1 value un gt 1 lt input type checkbox name C2 value deux checked gt 2 lt input type checkbox name C3 value trois gt 3 lt td gt lt li lt tr gt lt td gt Champ de saisie lt td gt lt td gt lt input type text name txtSaisie size 20 value qqs mots gt lt td gt Les bases de la programmation web 29 lt tr gt lt tr gt lt td gt Boite de saisie lt td gt lt td lt textarea rows 2 name
28. On voit aussi que les ent tes HTTP se terminent par une ligne vide Elaborons une r ponse notre client L utilisateur au clavier est ici le v ritable serveur et il peut laborer une r ponse la main Rappelons nous la r ponse faite par un serveur Web dans un pr c dent exemple HTTP 1 1 200 OK Date Mon 13 May 2002 07 30 58 GMT Server Apache 1 3 12 Unix Red Hat Linux PHP 3 0 15 mod perl 1 21 Last Modified Wed 06 Feb 2002 09 00 58 GMT ETag 23432 2bf3 3c60f0ca Accept Ranges bytes Content Length 11251 Connection close Content Type text html lt html gt lt Host localhost 88 amp lt Connection Keep Alive HTTP 1 1 200 OK Server serveur tcp generique Connection close Content Type text html Annexes 162 lt html gt lt head gt lt title gt Serveur generique lt title gt lt head gt lt body gt lt center gt lt h2 gt Reponse du serveur generique lt h2 gt lt center gt lt body gt lt html gt fin L erreur suivante s est produite Impossible de lire les donn es de la connexion de transport fin du Thread de lecture des demandes du client 2 fin du Thread de lecture des r ponses du serveur au client 2 2 3 Zoi 2s 2s 2s 2s 2 2 2 Les lignes commencant par 2 sont envoy es du serveur au client n 2 La commande fin clot la connexion du serveur au client Nous nous sommes limit s dans notre r ponse aux ent tes HTTP suivants HT
29. areaSaisie cols 20 gt lignel ligne2 ligne3 lt textarea gt lt td gt lt tr gt lt tr gt lt td gt combo lt td gt lt td gt lt select size 1 name cmbValeurs gt lt option gt choix1 lt option gt lt option selected gt choix2 lt option gt lt option gt choix3 lt option gt lt select gt lt td gt lt tr gt lt tr gt lt td gt liste a choix simple lt td gt lt td gt lt select size 3 name 1st1 gt lt option selected gt listel lt option gt lt option gt liste2 lt option gt lt option gt liste3 lt option gt lt option gt liste4 lt option gt lt option gt liste5 lt option gt lt select gt lt tr gt lt td gt liste choix multiple lt td gt lt td gt lt select size 3 name 1st2 multiple gt lt option gt listel lt option gt lt option gt liste2 lt option gt lt option selected gt liste3 lt option gt lt option gt liste4 lt option gt lt option gt liste5 lt option gt lt select gt lt tr gt lt t d gt bouton lt td gt lt td gt lt input type button value Effacer name cmdEffacer onclick effacer gt lt td gt lt tr gt lt tr gt lt td gt envoyer lt td gt lt td gt lt input type submit value Envoyer name cmdRenvoyer gt lt input type reset value R tablir name cmdR tablir gt lt td gt lt tr gt lt table gt lt input type hidden name secret value uneValeur gt lt body gt
30. http www w3 org 1999 XSL Transform gt lt xsl output method html indent yes gt lt xsl template match gt lt ht ml gt lt head gt lt title gt Simulations de calculs d imp ts lt title gt lt head gt XML et PHP 121 lt body gt lt center gt lt h3 gt Si mulations de calculs d imp ts lt h3 gt lt hr gt lt table border 1 gt lt th gt mari lt th gt lt th gt enfants lt th gt lt th gt sal aire lt th gt lt th gt i mp t lt th gt lt xsl apply templates select simulations simulation gt lt table gt lt center gt lt body gt lt ht ml gt lt xsl template gt lt xsl template match si mulation gt lt tr gt lt td gt lt xsl value of select marie gt lt td gt lt td gt lt xsl value of select enfants gt lt td gt lt td gt lt xsl value of select salaire gt lt td gt lt td gt lt xsl value of select i mpot gt lt td gt lt tr gt lt xsl template gt lt xsl stylesheet gt produit le texte HT ML suivant lt ht ml gt lt head gt lt title gt Simulations de calculs d imp ts lt title gt lt head gt lt body gt lt center gt lt h3 gt Simulations de calculs d impots lt h3 gt lt hr gt lt table border 1 gt lt th gt mari lt th gt lt th gt enfants lt th gt lt th gt sal aire lt th gt lt th gt i mp t lt th gt lt tr gt lt td gt oui lt td gt lt td gt 2 lt td gt lt td gt 200000 lt td g
31. isset S requ tel mari isset requ te enfants isset requ te salaire affichage formulaire vide include formulairelmpots in termi nerSession session ilif Il v rification param tres grequ te v rifier requ te I des erreurs if count requ te erreurs 0 affichage erreurs au format XML header Content type text xml include SerreursImpots Tn erminerSession session t lif 11 calcul de l imp t payer T i ay Srequ teli mpots M ae obj mpots gt calculer array mari gt requ te mari enfants gt requ te enfants salaire gt requ te salaire une simulation de plus session si mul ations array requ te mari requ te enfants requ te salaire requ te impots requ te si mul ations session simul ations affichage simulations au format XML header Content type text xml include SsimulationsImpots Hie tm termi nerSessi on sessi on Nous avons pr c demment pr sent et tudi les deux types de r ponse X ML fournir ainsi que les feuilles de style qui doivent les accompagner Le code de l application impots_simulations php est le suivant lt php II g n re le code XML de la page de simulations de l application impots 11 qqs constantes xs Simulations si mul ations xsl I ent tes XML echo lt xml version 1 0 encoding 1S0 8859 1 gt n echo lt xml stylesheet type text
32. les valeurs sont mises dans un tableau Svaleurs array while Sligne mysql_fetch_row SselectValeurs Svaleurs Sligne 0 while fermeture de la connexion si elle est persistante elle ne sera en fait pas ferm e mysql_close Sconnexion retour du r sultat return array Svaleurs getValeurs gt Cette fois ci les valeurs mettre dans le combo ne sont pas fournies par un tableau mais par la fonction gV aleurs Cette fonction ouvre une connexion persistante mysql pconnect avec le serveur mySQL en passant un nom d utilisateur enregistr et son mot de passe une foix la connexion obtenue une requ te select est mise pour r cup rer les valeurs pr sentes dans la table tvaleurs de la base dbV aleurs le r sultat du select est mis dans le tableau valeurs qui est rendu au programme appelant la fonction rend en fait un tableau deux r sultats erreur valeurs o le premier l ment est un ventuel message d erreur ou la chaine vide sinon l programme appelant teste s il y a eu erreur ou non et si oui fait afficher la page valeurs err php Celle ci est la suivante lt ht ml gt lt head gt lt title gt Erreur lt title gt lt head gt lt body gt i lt h3 gt L erreur suivante s est produite lt h3 gt lt font color red gt lt h4 gt lt php echo erreur gt lt h4 gt lt font gt lt body gt lt ht ml gt sil n y a pas eu erreur le pro
33. lt html gt I c est a dire exactement ce qu on a envoy depuis le serveur g n rique Le code du serveur tcp g n rique est le suivant Annexes 163 public class serveur TCPgeneriquef l pe oor Amme principal ublic static void main String args e des demandes des clients cr e un thread pour re les demandes du client celles ci seront affich es l cran cr e un thread pour lire des commandes tap es au clavier celles ci seront envoy es comme r ponse au client le tout se termine avec la commande fin tap e au clavier recolr Ie port al aconi i SN er final String syntaxe Syntaxe pg port Il variable d instance I y a t il un ar ument if args length 1 erreur syntaxe l le port doit tre entier gt 0 int port 0 boolean erreurPort false Exception E null try at rt Integer parselnt args 0 catch Exception e E e erreurPort true erreurPort erreurPort port lt 0 if erreurPort eae ele en De Dori Imeorreci Emens a 2 on cr e le servive d coute ServerSocket ecoute nul ine noclienrsetr 1 Dre de clients trait s try I ec Ii suivi a T A System out printin Serveur g n rique lanc sur le port port boucle de service aux clients Socket client null while true boucle infinie sera arr t e par Ctrl C attente d un client client ecoute accept I le service est assur des threads s par s nbClients 11 on cr e les t
34. lt form name frmlistes gt lt table gt lt tr gt lt td gt lt input type button name cmdAjouter value Ajouter onclick ajouter lst1A 1st1B txtElement gt lt input type text name txtEl ement gt lt td gt lt tr gt lt table gt Annexes 172 lt table gt lt tr gt lt td align center gt liste 1 lt td gt align center gt lt input type button value gt gt onclick transfert 1st1A 1st2A true lt td gt align center gt lt input type button value lt lt onclick transfert 1st2A 1st1A true lt td gt lt td align center gt liste 2 lt td gt lt td width 30 gt lt td gt lt td align center gt liste l lt td gt align center gt lt input type button value gt gt onclick transfert 1st1B 1st2B false lt td gt align center gt lt input type button value lt lt onclick transfert 1st2B 1st1B false lt td gt lt td align center gt liste 2 lt td gt lt tr gt lt tr gt lt t d gt lt td gt lt td align center gt 4 lt select name Ist1A size 5 gt lt select gt lt td align center gt lt select name Ist2A size 5 gt lt select gt lt td gt lt td gt lt td gt lt td gt lt td gt lt td gt lt td align center gt lt select name Ist1B size 5 multiple gt lt select gt lt td gt lt td align center gt lt select name st2B size 5 multi ple gt lt select gt
35. lt head gt lt title gt Simulations de calculs d imp ts lt title gt lt head gt lt body gt lt center gt lt h3 gt Simulations de calculs d imp ts lt h3 gt lt hr gt lt table border 1 gt lt th gt mari lt th gt lt th gt enfants lt th gt lt th gt sal aire lt th gt lt th gt i mp t lt th gt lt xsl apply templates select simulations simulation gt lt table gt lt center gt lt body gt lt ht ml gt lt xsl template gt lt xsl template match si mulation gt lt tr gt lt td gt lt xsl value of select marie gt lt td gt lt td gt lt xsl value of select enfants gt lt td gt lt td gt lt xsl value of select salaire gt lt td gt lt td gt lt xsl value of select i mpot gt lt td gt lt tr gt lt xsl template gt XML et PHP 119 lt xsl stylesheet gt une feuille de style XSL est un fichier XML et en suit donc les r gles I doit tre en autres choses bien form c est a dire que toute balise ouverte doit tre ferm e lefichier commence par deux commandes X ML qu on pourra garder dans toute feuille de style X SL sous Windows lt xml version 1 0 encoding windows 1252 gt lt xsl stylesheet version 1 0 xmins xs http 7 www w3 or g 19997 XSL Transform gt L attribut eooding windows 1252 permet d utiliser les caract res accentu s dans la feuille de style La balise lt xsl output method html indent yes gt indique
36. ns ur ff on ik la r ponse du serveur gt d abord les emt tes Ke la premiere ligne ligne fgets S connexion 10000 URL trouv e DE pied match 200 OK s ligne Ri URE Ad le retour avec erreur return array erreurs gt array L URL urllmpots path n a pu tre trouv e li on lit les autres ent tes HTTP whi FTE LE omna a ANa amp amp lignez r LEE NS RS ARE Ii recherche du jeton si on ne l a pas encore trou if jeton Il recherche de la ligne Set cookie if preg_ mat ch Set Cookie PHPSESSI D i ligne champs on a trouv le jeton on le m morise j eton champs 1 iiif lif ligne suivante on lit le document qui suit document whi le ligne fread connexion 10000 document ligne while 1 on ferme la connexion fclose connexi on I on analyse le document i mots getl nfos document on rend le r sultat return array jeton gt jeton erreurs gt i mpots erreurs si mul ati ons gt i mpots si mul ations get mots sossrecsrospesespogenaceesesodaespeorpenmenerposeneccesemecesse function POST connexion url jeton param tres II connexion la connexion a serveur web su URL interroger parametres dictionnaire des param tres poster 11 on pr pare le POST A while list param tre val eur each param tres gpost parametre url encode val eur amp i w
37. return J if c est bon on envoie le formulaire au serveur submit with calculer lt script gt lt head gt lt body background poly impots images standard jpg gt lt body gt lt ht ml gt Exemples 103 On notera les changements suivants le bouton Calculer n est plus de type submit mais de type button associ une fonction appel e calculer C est celle ci qui fera l analyse des champs txtE nfants et txT salaire Si elles sont correctess les valeurs du formulaire seront envoy es au serveur submit sinon un message d erreur sera affich Voici un exemple d affichage en cas d erreur Calcul d imp ts Etes vous mari e C om non Nombre d enfants ec Salaire annuel Imp t Calculer Effacer A Le nombre d enfants n a pas t donn ou est incorrect 3 5 Application Imp ts version 3 Nous modifions l g rement l application pour y introduire la notion de session Nous consid rons maintenant que l application est une application de simulation de calcul d imp ts Un utilisateur peut alors simuler diff rentes configurations de contribuable et voir quelle serait pour chacune d elles l imp t payer La page web ci dessous donne un exemple de ce qui pourrait tre obtenu Exemples 104 6 Q ne http flocalhost poly impots 4 impots php Calcul d imp ts Etes vous mari oui non Nombre d enfants B Salaire annuel 00000
38. t qu en conjonction avec l application web Celle ci va cr er un objet articles qu elle va m moriser dans une session Si celle ci va tre capable de conserver la plupart des attributs de l objet au fil des changes client serveur successifs elle n est pas capable cependant de garder lattribut repr sentant la connexion ouverte Celle ci devra donc tre r ouverte chaque nouvel change client serveur On demandera une connexion persistante afin que la connexion ouverte soit stock e dans un pool de connexions et reste ouverte de fa on permanente Ainsi lorsque le script demandera une nouvelle connexion celle ci sera r cup r e dans le pool de connexions On arrive donc au m me r sultat que si la session avait pu m moriser la connexion ouverte la m thode existeUser permet au constructeur de savoir si l utilisateur sUser identifi par le mot de passe sMdp existe bien Si oui la m thode permet de savoir s il est administrateur ou non indiqu dans la table USERS et m morise cette information dans l attribut bAdmin S il n est pas administrateur la m thode va r cup rer ses droits dans la table DROITS et les met dans l attribut dD roits qui est un dictionnaire double indexation dD roits table droit vaut y si l utilisateur sUser a le droit droit sur la table table et vaut n sinon crire la classe articles Les acc s la base de donn es seront faits l aide de la biblioth que PEAR DB qui permet de s af
39. td gt lt td gt cellule 1 3 lt td gt lt tr gt KEES lt td gt cellule 2 1 lt td gt lt td gt cellule 2 2 lt td gt lt td gt cellule 2 3 lt td gt lt tr gt lt table gt lt table border 0 gt lt tr gt lt td gt Une i mage lt td gt lt td gt lt img border 0 src images univ0l gif width 80 height 95 gt lt td gt lt tr gt lt td gt le site de l ISTIA lt td gt lt td gt lt a href http istia univ angers fr gt ici lt a gt lt td gt lt table gt lt body gt lt ht ml gt Ont t mis en relief dans le code les seuls points qui nous int ressent balises et exemples HTML ie pes lt title gt balises lt title gt balises appara tra dans la barre de titre du navigateur qui affichera le document p arre lt hr gt affiche un trait horizontal orizontale tableau lt table attributs gt lt table gt pour d finir le tableau lt tr attributs gt lt tr gt pour d finir une ligne lt td attributs gt lt td gt pour d finir une cellule exemples lt tableborder 1 gt lt table l attribut border d finit l paisseur de la bordure du tableau lt td valim middle align nte width 150 gt lulq1 2 lt td gt d finit une cellule dont le contenu sera cellule 1 2 Ce contenu sera centr verticalement valign middle et horizontalement align center La cellule aura une largeur de 150 pixels width 150
40. tude pr c dente que le client web disposait de deux m thodes pour envoyer a un serveur web les valeurs d un formulaire qu il a affich les m thodes GET et POST Voyons sur un exemple la diff rence entre les deux m thodes Nous reprenons l exemple pr c dent et le traitons de la facon suivante 1 un navigateur demande l URL de l exemple un serveur web 2 une fois le formulaire obtenu nous le remplissons 3 avant d envoyer les valeurs du formulaire au serveur web en cliquant sur le bouton E nvoyer de type submit nous arr tons le serveur web et le remplacons par le serveur TCP g n rique d j utilis pr c demment Rappelons que celui ci affiche a l cran les lignes de texte que lui envoie le client web Ainsi nous verrons ce qu envoie exactement le navigateur Le formulaire est rempli de la fa on suivante Etes vous man e Oui Non Cases cocher MIiMF2r3 Champ de saisie programmation web Mot de passe Fee les bases de la programmation web combo choix gt liste choix simple Boite de saisie bouton Effacer r tablir R tablir L URL utilis e pour ce document est la suivante Les bases de la programmation web 36 balises Microsoft Internet Explorer File Edit View Favorites Tools Help 4m Back gt 7 B Search JF Address E http flocalhost 81 html balises htm 1 8 2 1 M thode GET Le document HTML est programm pour que le navigateur uti
41. un client donn tout ce qui arrive de ce tuyau vient de ce client et tout ce qui est envoy dans ce tuyau arrive ce m me client Le m canisme du client serveur HTTP suit le sch ma pr c dent avec cependant la particularit que le dialogue client serveur est limit un unique change entre le client et le serveur Je client ouvre une connexion vers le serveur et fait sa demande le serveur fait sa r ponse et ferme la connexion Si au temps T1 un client C fait une demande au serveur il obtient une connexion C1 qui va servir l change unique demande r ponse Si au temps T2 ce m me client fait une seconde demande ai serveur il va obtenir une connexion C2 diff rente de la connexion C1 Pour le serveur il n y a alors aucune diff rence entre cette seconde demande de l utilisateur C et sa demande initiale dans les deux cas le serveur consid re le client comme un nouveau client Pour qu il y ait un lien entre les diff rentes connexions du client C au serveur il faut que le client C se fasse reconna tre par le serveur comme un habitu et que le serveur r cup re les informations qu il a sur cet habitu Imaginons une administration qui fonctionnerait de la fa on suivante Tlyaune unique file d attente Tl ya plusieurs guichets D onc plusieurs clients peuvent tre servis simultan ment Lorsqu un guichet se lib re un client quitte la file d attente pour tre servi ce guichet Si c est la premi re
42. 0 main liens selectArticle sUrlAppArticles action selectArticle amp phase 0 gmain liens sgl sUrlAppArticles acti on sql amp phase 0 on m morise main dans la configuration dConfigl main main gt 9 5 4 La feuille de style associ e ala page type Nous avons vu que la r ponse du serveur avait un format unique celui de main php On aura pu remarquer que ce script produit une page brute d pourvue d effets de pr sentation C est une bonne chose pour plusieurs raisons le d veloppeur n a pas se soucier de la pr sentation graphique de la page qu il cr e Il n a en effet pas n cessairement les comp tences pour cr er des pages graphiques attractives Il peut ici se concentrer enti rement sur le code la maintenance des scripts est facilit e Si ceux ci comportaient des attributs de pr sentation ni la structure du code ni celle de la pr sentation n appara traient clairement L aspect graphique des feuilles est souvent d l gu un graphiste Celui n aimerait probablement pas devoir chercher dans un script qu il ne comprend pas o sont les attributs de pr sentation qu il doit modifier Il faut pourtant bien se soucier de l aspect graphique des pages En effet c est cela qui attire les internautes vers un site Ici la pr sentation est d l gu e une feuille de style La page main php indique dans son code la feuille de style utiliser pour l afficher Annexes 184 lt hea
43. 0200 CEST lt NOC RENATER2 0800 77 47 95 33 01 40 78 64 00 Email noc r2 cssi renater fr lt OK Pop server at istia univ angers fr signing off fin du thread de lecture des r ponses du serveur fin fin du thread d envoi des commandes au serveur Les principales commandes sont les suivantes e user login o on donne son login sur la machine qui d tient nos m ls e pass password o on donne le mot de passe associ au login pr c dent e list pour avoir la liste des messages sous la forme num ro taille en octets e retri pour lire le message n i e quit pour arr ter le dialogue D couvrons maintenant le protocole de dialogue entre un client et un serveur Web qui lui travaille habituellement sur le port 80 Dos gt java clientTCPgenerique istia univ angers fr 80 Commandes GET index html HTTP 1 0 HTTP 1 1 200 OK Date Mon 13 May 2002 07 30 58 GMT Server Apache 1 3 12 Unix Red Hat Linux PHP 3 0 15 mod perl 1 21 Last Modified Wed 06 Feb 2002 09 00 58 GMT ETag 23432 2bf3 3c60f0ca Accept Ranges bytes Content Length 11251 Connection close Content Type text html lt html gt Annexes 157 lt head gt lt meta http equiv Content Type content text html charset iso 8859 1 gt lt meta name GENERATOR content Microsoft FrontPage Express 2 0 gt lt title gt Bienvenue a l ISTIA Universite d Angers lt title gt lt head gt face Verdana gt Der
44. 1 utf 6 q 0 66 q 0 66 HTTP_ACCEPT ENCODING gzip deflate compress q 0 9 HTTP_ACCEPT LANGUAGE en us en q 0 50 HTTP CACHE CONTROL max age 0 HTTP_CONNECTION keep alive HTTP_HOST localhost HTTP_KEEP ALIVE 3 0 HTTP_USER_AGENT Mozilla 5 0 Jindows U Windows NT 5 0 en US rv 1 0 1 Gec PATH E Perl bin C WINNT 4 system32 C WINNT C WINNT System32 Whem C REMOTE ADDR 127 0 0 1 REMOTE PORT 1095 SCRIPT FILENAME e data serge web php poly headers headers phs SERVER_ADDR 127 0 0 1 SERVER_ADMIN admin localhost SERVER NAME localhost SERVER_PORT 80 SERVER_SIGNATURE lt ADDRESS gt Apache 1 3 24 Server at lt A HREF mailto admin loca SERVER_SOFTWARE Apache 1 3 24 Win32 SystemRoot C WINNT WINDIR C WINNT GATEWAY INTERFACE CGI 1 1 SERVER_PROTOCOL HTTP 1 1 REQUEST METHOD GET QUERY_STRING REQUEST URI poly headers headers php SCRIPT NAME poly headers headers php PATH TRANSLATED e data serge web php poly headers headers ph2 PHP SELF poly headers headers php Nous r cup rons un certain nombre d informations dont les ent tes HTTP envoy s par le navigateur Ceux ci sont les valeurs associ es aux cl s commen ant par HTTP D taillons certaines des informations obtenues ci dessus RTC CEA HTTP_ACCEPT CHARSET HTTP_ACCEPT_ENCODI NG HTTP_ACCEPT_LANGUAGE HTTP_CONNECTI ON types de documents accept s par le client web types de carac
45. 15 11 00 H doc LIB 15 11 00 Iip SRC 15711700 z src WEBAPPS 15 11 00 webapps BIN 15 11 00 bin WORK 15 11 00 work 6 10 2 D marrage A rr t du serveur Web Tomcat Tomcat est un serveur Web comme l est Apache ou PWS Pour le lancer on dispose de liens dans le menu des programmes Start Tomcat nour lancer Tomcat Stop Tomcat pourl arr ter Lorsqu on lance Tomcat une fen tre Dos s affiche avec le contenu suivant Fal Start Tomcat tarting service Tomcat Standalone pache Tomcat 4 8 3 tarting service Tomcat fipache pache Tomcat 4 6 3 On peut mettre cette fen tre Dos en icone Elle restera pr sente pendant tant que Tomcat sera actif On peut alors passer aux premiers tests Le serveur Web Tomcat travaille sur le port 8080 Une fois Tomcat lanc prenez un navigateur Web et demandez l URL http localhost 8080 V ous devez obtenir la page suivante Annexes 152 Address a http flocalhost 8080 index html Tomcat Version 4 0 3 If you re seeing As you may have gue filesystem at Suivez le lien Servlet Examples Hello World ye Execute P Source Request Info E Execute 2P Source Request Headers ye Execute 2P Source Request Parameters E Execute 2P Source Cookies eg Execute P Source Cliquez sur le lien E x ecute de R equestParameers puis sur celui de Source Vous aurez un premier aper u de ce qu est une servlet Java Vous pourrez faire de m me avec les liens sur les pages JSP Po
46. 2 cycledevie php 2 GET poly sessions 2 cycledevie php HTTP 1 1 Host localhost 80 Connection close HTTP 1 1 200 OK Date Thu 10 Oct 2002 07 21 19 GMT Server Apache 1 3 24 Win32 Set Cookie PHPSESSID 573212ba82303d7903caf8944ee7a86f path poly sessions 2 Expires Thu 19 Nov 1981 08 52 00 GMT Cache Control no store no cache must revalidate post check 0 pre check 0 Pragma no cache Connection close Transfer Encoding chunked Content Type text html Programmation PHP 84 compteur est gal 0 GET poly sessions 2 cycledevie php PHPSESSID 573212ba8230347903caf8944ee7a86f HTTP 1 1 Host localhost 80 Connection close HTTP 1 1 200 OK Date Thu 10 Oct 2002 07 21 19 GMT Server Apache 1 3 24 Win32 Expires Thu 19 Nov 1981 08 52 00 GMT Cache Control no store no cache must revalidate post check 0 pre check 0 Pragma no cache Connection close Transfer Encoding chunked Content Type text html compteur est gal 1 Lors du premier appel le client demande l URL sans jeton de session Le serveur lui r pond en lui envoyant le jeton Le client r interroge alors la m me URL en adjoignant le jeton re u celle ci On voit que le compteur est bien incr ment preuve que le serveur a bien reconnu qu il s agissait de la m me session 2 10 6 Exemple 5 Cet exemple montre une application compos e de trois pages qu on appellera pagel page et page3 L utilisateur doit les obtenir dans ce
47. 70 II session session start dSession SESSI ON session II y a t il une un en cours tC isset dSession LI N iai de l utilisateur if sAction authentifier amp amp sPhase 0 authentifier 0 dConfig NE n authentifier amp amp sPhase 1 authentifier DU if sAction authentifier amp amp sPhase 2 authentifier 2 dConfig i demande incorrecte authentifier 0 dConfig Lif pas de session 11 on r cup re la session i dSession unserialize dSession traitement de la demande I cess authentification if sAction authentifier amp amp sPhase 0 authentifier 0 dConfi g if sAction authentifier amp amp sPhase authentifier 1 dConfi gq if sAction authentifier amp amp sPhase 2 authentifier 2 dConfig I ace ajout d article if sAction addarticle amp amp Ponte cet addArticle Ses caa if sAction addarticle amp amp sPhase 1 addArticle 1 dConfig dSession if sAction addarticle Ak sPhase 2 addArticle_2 dConfig dSessi on Li spese mise a jour d article i if sAction updatearticle amp amp sPhase 0 updateArticle_O dConfig dSession if sAction updatearticle amp amp sPhase 1 updateArticle_1 dConfig dSession if ee Le icle amp amp porn updateArticle reat eae tnt f sAct on updatearticl e amp amp sPhase 3 updateArticle 3 dConfig dSession Il esane Suppression d article
48. A GQsearch Favorites 4 B amp X Address a http localhost 81 fessais essail html gt eGo Liens all Une page statique E Done BE Local intranet Y Utilisons une nouvelle fois notre client TCP g n rique pour demander la m me ressource mais cette fois ci avec la commande HEAD qui demande seulement les ent tes de la r ponse Dos gt java bat clientTCPgenerique localhost 81 Commandes HEAD essais essail html HTTP 1 1 Host localhost oi HTTP 1 1 200 OK Date Mon 08 Jul 2002 09 07 25 GMT Server Apache 1 3 24 Win32 PHP 4 2 0 Last Modified Mon 08 Jul 2002 08 00 30 GMT ETag 0 al 3d29469e Accept Ranges bytes Content Length 161 Content Type text html Nous obtenons le m me r sultat que pr c demment sans le document HTML Notons que dans sa demande HEAD le client a indiqu qu il utilisait le protocole HTTP version 1 1 Cela l oblige envoyer un second ent te HTTP pr cisant le couple machineport que le client veut interroger Host localhost 81 Maintenant demandons une image aussi bien avec un navigateur qu avec le client TCP g n rique Tout d abord avec un navigateur Les bases de la programmation web 22 http localhost 81 images univO1 git DsOft Le E Oj x File Edit View Favorites Help Back Q A A Qsearch Favorites lt 4 gt Address a http localhost 81 simages univO1 gif Go Liens za ae 7 univ
49. EN EST BT TT ST IR EEA EE LE ERAT NRE RESTA RENAE RSE ee aE unction getValeurs Hii r cup re les valeurs dans une base MySQL admDbValeurs mdpDbVal eurs bValeurs odbc valeurs tval eurs mp val eur ouverture d une connexion persistante au serveur MySQL ou sinon d une connexion normale connexion odbc pconnect dsn user pwd connexion odbc_connect dsn user pwd f connexi on return array 1 Base de donn es indisponible odbc error Veuillez recommencer ult rieurement 11 obtention des valeurs select Valeurs odbc_prepare connexion select champ from table if odbc a et return oo Base de donn es indisponible odbc error Veuillez recommencer ult rieurement les valeurs sont mises dans un tableau valeurs array while odbc_fetch row selectVal eurs ee result selectValeurs champ while fe re de la connexion si elle est persistante elle ne sera en fait pas ferm e C_ connexi on retour du r sultat return array valeurs I rmet u odbc_close get Valeurs Programmation PHP 63 gt Si on ex cute la nouvelle application sans activer la base de donn es odbc valeurs on obtient le r sultat suivant Q Q R Q http flocalhost poly exemples valeurs php L erreur suivante s est produite Base de donn es indisponible S1000 Veuillez recommencer ult rieurement On remarquera que le cod
50. GENERATION DYNAMIQUE DE FORMULAIRE 2 2 9 3 GENERATION DYNAMIQUE DE FORMULAIRE 3 2 9 4 GENERATION DYNAMIQUE DE FORMULAIRE 4 2 9 5 RECUPERER LES VALEURS D UN FORMULAIRE 2 10 SUIVI DE SESSION 2 10 1 LE PROBLEME 2 10 2 L API PHP POUR LE SUIVI DE SESSION 2 10 3 EXEMPLE 1 2 10 4 EXEMPLE 3 2 10 5 EXEMPLE 4 2 10 6 EXEMPLES 3 3 1 3 2 3 3 EXEMPLES APPLICATION IMPOTS INTRODUCTION APPLICATION IMPOTS LA CLASSE IMPOTS DSN APPLICATIONIMPOTS VERSION 1 D n ASIn EDN PET Boo SOUNA 26 36 92 92 94 98 34 APPLICATION IMPOTS VERSION 2 3 5 APPLICATION IMPOTS VERSION 3 3 6 APPLICATION IMPOTS VERSION 4 3 7 APPLICATION IMPOTS CONCLUSION 4 XML ET PHP 4 1 FICHIERS XML ET FEUILLES DE STYLE XSL 4 2 APPLICATION IMPOTS VERSION 5 4 2 1 LES FICHIERS XML ET FEUILLES DE STYLE XSL DE L APPLICATION IMPOTS 4 2 2 L APPLICATION XMLSIMULATIONS 4 3 ANALYSE D UN DOCUMENT XML EN PHP 4 4 APPLICATION IMPOTS VERSION 6 4 5 CONCLUSION 5 A SUIVRE ANNEXES 6 LES OUTILS DU DEVELOPPEMENT WEB 6 1 SERVEURS WEB NAVIGATEURS LANGAGES DE SCRIPTS 6 2 OU TROUVER LES OUTILS 6 3 EASYPHP 6 3 1 ADMINISTRATION PHP 6 3 2 ADMINISTRATION APACHE 6 3 3 LE FICHIER DE CONFIGURATION D APACHE HTPD CONF 6 3 4 ADMINISTRATION DE MYSQL AVEC PHPMYADMIN 6 4 PHP 65 PERL 6 6 VBSCRIPT JAVASCRIPT PERLSCRIPT 6 7 JAVA 6 8 SERVEUR APACHE 6 8 1 CONFIGURATION 6 8 2 LIEN PHP APACHE 6 8 3 LIEN PERL APACHE 6 9 LE
51. PWS script vbs1 html dans lt pws D ocumentR oot gt demander l url http localhost vbs1 html avec le navigateur IE 1 6 2 Une page Web avec un script Javascript c t navigateur La page jsi html lt ht ml gt lt head gt lt title gt essai 4 une page web avec un script Javascript lt title gt lt script language Jjavascript gt function reagir alert Vous avez cliqu sur le bouton OK lt script gt lt head gt lt body gt lt center gt lt hl gt Une page Web avec un script Javascript lt h1 gt lt table gt lt t r gt lt td gt Cliquez sur le bouton lt td gt lt tr gt lt table gt lt body gt lt ht ml gt On a l quelque chose d identique a la page pr c dente si ce n est qu on a remplac le langage VBScript par le langage Javascript Celui ci pr sente l avantage d tre accept par les deux navigateurs IE et Netscape Son ex cution donne les m mes r sultats Les bases de la programmation web 14 Une page Web avec un script Javascript Cliquez sar le bouton ok Les tests serveur pache script jst html dans lt apache D ocumentR oot gt demander l url http localhost js1 html avec le navigateur IE ou Netscape serveur PWS script jst html dans lt pws D ocumentR oot gt demander l url http localhost js1 html avec le navigateur IE ou Netscape 1 7 Les changes client serveur Revenons a notre sch ma de d par
52. Si PWS ayant t lanc on demande l URL http localhost on obtient une page analogue la suivante Annexes 150 Personal Web Server Bienvenue dans le Serveur Web personnel Microsoft 4 0 6 9 3 Lien PHP PWS 1 Ci dessous on trouvera un fichier reg destin modifier la base de registres D ouble cliquer sur ce fichier pour modifier la base Ici la dll n cessaire se trouve dans d php4 avec l ex cutable de php Modifier si besoin est Les doivent tre doubl s dans le chemin de la dll REGEDI T4 HKEY LOCAL MACHI NE SYSTEM Current Control Set Services w3svc parameters Script Map php d php4 phpdisapi dll 2 Relancer la machine pour que la modification de la base de registres soit prise en compte 3 Cr er un dossier php dans d inetpub wwwroot qui est la racine du serveur PWS Ceci fait activez PWS et prendre l onglet Avanc S lectionner le bouton Ajouter pour cr er un dossier virtuel R pertoire Paroourir d inetpub wwwroo php A lias php Cocher la case ex cuter 4 Valider le tout et relancer PWS Mettre dans d inetpub wwwroot php le fichier intro php ayant la seule ligne suivante lt phpinfo gt 5 Demander au serveur PWS l URL http localhost php intro php On doit voir la liste d informations php d j pr sent es avec Apache 6 10 Tomcat servlets Java et pages JSP Java Server Pages Tomcat est un serveur Web permettant de g n rer
53. action authentifier amp phase 1 authentifier 2 fonction traite la demande param tr e action authentifier amp phase 2 addarticle 0 fonction traite la demande param tr e action addA rticle amp phase 0 addarticle 1 fonction traite la demande param tr e action addA rticle amp phase 1 Annexes addarticle 2 fonction traite la demande param tr e action addArticle amp phase 2 updatearticle 0 fonction traite la demande param tr e action updatearticle amp phase 0 updateart role fonction traite la demande param tr e action updatearticle amp phase 1 updateart RER fonction traite la demande param tr e action updatearticle amp phase 2 updateart ils fonction traite la demande param tr e action updatearticle amp phase 3 deletearticle 0 fonction traite la demande param tr e action deletearticle amp phase 0 deletearticle 1 fonction traite la demande param tr e action deletearticle amp phase 1 deletearticle 2 fonction traite la demande param tr e action deletearticle amp phase 2 selectarticle 0 fonction traite la demande param tr e action selectarticle amp phase 0 eae fonction traite la demande param tr e action selectarticle amp phase 1 selectarticle 2 fonction traite la demande param tr e action selectarticle amp phase 2 sql _0 fonction traite la demande param tr e action sql amp phase 0 sql_1 fonction traite la demande param tr e action sql amp phase 1 sil fonction traite la demande param tr e action sql amp phase 2 main
54. application nomagep php en lui fournissant les valeurs nom age post faux L application nomagep1 php affiche alors un formulaire vide 2 L utilisateur remplit le formulaire et utilise le bouton E nvoyer de type submit Les valeurs du formulaire tx tN om txtA g sont alors post es nethod post dans lt form gt l application nomagephp attribut adion non d fini dans lt form gt L application nomagephp calcule nom age post txtN om txtA ge vrai et les transmet l application nomagep1 php qui affiche alors un formulaire d j rempli ainsi que le tableau des valeurs r cup r es 2 6 2 par un GET Dans le cas o les valeurs du formulaire sont transmises au serveur par un GET l application nomagephp devient l application nomage php suivante lt php II a t on les param tres attendus RER GET txtNom amp amp isset GET txtAge yey i on r cup re les param tres txtNom et txtAge GETT s par le client ne GET txt Nom age _GET txtAge Programmation PHP 48 else nom age PTE ll affichage de la page include nomage p2 php gt L application nomagep2 php est identique l application nomagep php aux d tails pr s suivants la balise form est modifi e lt form name frmersonne method get gt l application r cup re maintenant une variable g plut t que post lt php I o eu des valeurs envoy es au serveur ll get gt
55. arborescence C est ce qui maintient la session un compteur qui est incr ment au fil des demandes du navigateur et qui montre que la session est bien maintenue un lien permettant de supprimer les donn es attach es la session en cours Ceci est fait par la fonction session_destroy un lien pour recharger la page Le code de l application cydedevie php est le suivant lt php i cycledevie php configuration ini_set register_globals off ini_set display_ errors off 11 on d marre une session SESS OM_ St art 0 Il faut il l invalider Saction GET action if action invalider fin session session _destroy DA AE 11 gestion du compteu if isset SESSI ON compteur le compteur n existe pas on le cr e ee ee r 0 le compteur ste on l incr mente else _ SESS ON compteur n r cup re l ID de la session courante 0 idSession session_id l on r cup re le compteur compteur SESSION compteur I on in De la main la page de visualisation ude cycledevie pl php gt Notons les points suivants d s le d but de l aplication une session est d marr e Si le client a envoy un jeton de session c est la session ayant cet identificateur qui est red marr e et toutes les donn es qui lui sont li es sont plac es dans le dictionnaire SESSION Sinon un nouveau jeton de session est cr e si le clien
56. arr return r sultats lif ouverture d une connexion sur le port Sport de Shote Sconnexion fsockopen Shote Sport amp Serrno amp Serreur 77 retour si erreur if connexi on gr sultats gt erreur Echec de la connexion au site hote port erreur return r sultats fit connexion repr sente un flux de communication bidirectionne ntre le client ce programme et le serveur web contact e canal est utilis pour les changes de commandes et d informations e protocole de dialogue est HTTP le client envoie la commande get pour demander l URL syntaxe get URL HTTP 1 0 les ent tes headers du protocole HTTP doivent se terminer par une ligne vide fputs Sconnexion Sheader Schemin HTTP 1 0 n n le serveur va maintenant r pondre sur le canal Sconnexion Il va envoyer toutes ces donn es puis fermer le canal Le client lit donc tout ce qui arrive de Sconnexion jusqu la fermeture du canal Sr sultats gt r ponse while Sligne fgets Sconnexion 10000 Sr sultats gt r ponse Sligne Programmation PHP 77 le client ferme la connexion son tour fclose Sconnexion retour return r sultats get URL eS Commentons quelques points de ce programme le programme admet deux param tres une URL http dont on veut afficher le contenu l cran une m thode GET ou HEAD utiliser selon que l on veut seulement les ent tes HTTP HEAD ou
57. balises array on cr e un objet d analyse de texte xml Sxml_parser xml_parser_create on indique quelles fonctions ex cuter en d but et fin de balise xml_set_element_handler Sxml_parser startElement endElement on indique quelle fonction ex cuter lors de la rencontre de donn es xml_set_character_data_handler Sxml_parser getData on fait l analyse de document xml_parse Sxml_parser Sdocument on lib re les ressources occup es par l analyseur xml xml_parser_ free Sxml_parser return impots Igetinfos i p sakben aa a an aa sedemeidid t gh o S Sg pen spre esde ogne 11 fonction appel e lors de la rencontre d une balise de d but function startElement parser name attri buts global impots balise balises contenu on note le nom de la balise et son contenu balise strtolower name contenu 11 on ns la pile des balises array _ push balises balise H s agit il d une simulation if balise si mul ation i on note les attributs de la simulation impots si mul ations array attributs MARIE attributs ENFANTS attributs SALAI RE attributs I MPOT XML et PHP 133 u oc artEl ement 11 la fonction appel e lors de la rencontre d une balise de fin function endElement parser name 11 on r cup re la balise courante global impots balises contenu Sbalise array_pop balises s agit il d une balise d erreur H
58. bdl mots simulations gt array ee omen mare gt erreurs 0 que sarray erreurs gt session objl mots gt erreurs fichage page d erreurs c a erreursl mpots in ession array er mi ner Sessi onl Ssessi on on r cup re requ te mari Srequ te l enfant Srequ te salair I a t on tous les param tres a isset requ tel mari VAN isset requ telenfants isset requ telsalaire affichage formulaire PE array chkoui gt Chknon gt checked enfants gt salaire gt impots gt erreurs ns ne eee 4 include formul airel mpots i iia ne rminerSession session iat we on parametres fier requ te oo lt A BE Eu F gt e erreurs 0 ii seei r e Kel ude formulairelmpots i mi d n n erSession session l er if calcul de l imp t payer Srequ ete impots session obj mpots gt calculer array mari gt requ te mari enfants gt requ te enfants salaire gt requ te salaire Il une simulation de plus T r KAI session si mul E rray requ te mari requ te enfants requ te salaire requ te i mots Srequ telsimulations sessi on si mul ations Il affichage formulaire include formul airel mots Hi in terminerSession session ss22025055220ssecetc0cecceococecesesececececeetresecrcens function v rifier requ te 11 v rifie la validit des param tres de la requ te au d part
59. bin lt cgi bin gt o lt cgi bin gt est le dossier o on pourra placer des scripts CGI CGI Common G ateway Interface est une norme de dialogue serveur WEB lt gt Applications Un client demande au serveur Web une page dynamique c a d une page g n r e par un programme Le serveur WEB doit donc demander a un programme de g n rer la page CGI d finit le dialogue entre le serveur et le programme notamment le mode de transmission des informations entre ces deux entit s Si besoin est modifiez la ligne ScriptA lias og bin lt gi bin gt et relancez le serveur Apache Faites ensuite le test suivant 1 crire le script c perl bin perl exe Annexes 149 script PERL affichant l heure modules use strict programme l i my secondes mi nutes heure localtime time print lt lt Fl NHTML Content Type text htm lt ht ml gt lt head gt lt title gt heure lt title gt lt head gt lt body gt lt hl gt ll est heure mi nutes secondes lt hl gt lt body gt FINHT ML 2 Mettre ce script dans lt cgi bin gt herepl o lt qj bin gt est le dossier pouvant recevoir des scripts CGI cf httpd conf La premi re ligne c perl bin perl ex e d signe le chemin de l ex cutable perl exe Le modifier si besoin est 3 Lancer Apache si ce n est fait 4 Demander avec un navigateur l URL http localhost ogi bin heure pl O n obtient la page suivante Address JE hetp flocalhost ca b
60. caution requ te gt nom Srequ te gt erreurs array include pagel php exit 0 Ilif I y a t il eu des erreurs if count page gt erreurs 0 page 2 avec erreurs Srequ te gt erreurs page gt erreurs include page2 php exit 0 Hif pas d erreur m morisation de l ge dans la session session gt age requ te gt age _SESSION session session Il affichage page 3 include page3 php Hi ti exit 0 calculerPage function calculerPage Srequ te v rifie la validit de la requ te Srequ te rend un tableau d erreurs dans Spage gt erreurs au d part pas d erreurs Programmation PHP 90 Spage gt erreurs array l ge doit avoir un format valide if preg_match s d 1 3 s sS Srequ te gt age Spage gt erreurs age incorrect retour page return Spage calculerPage le programme commence par r cup rer le nom dans la session provenant de pagel et l ge dans le formulaire de page S il manque l une de ces informations la page pagel est affich e la validit de l ge est ensuite v rifi e Si l ge est incorrect la page page2 est r affich e avec une liste d erreurs Si l ge est correct c est la page page3 qui est affich e Celle ci se contente d afficher les deux valeurs nom age obtenues par les deux formulaires page1page2 lt page3 php gt lt ht ml gt lt head gt lt title gt page 3 lt tit
61. cette connaissance est n cessaire et peut tre acquise au travers de l utilisation de logiciels WY SIWYG de construction de pages Web tels que Word FrontPage DreamWeaver et des dizaines d autres Une autre fa on de d couvrir les subtilit s du langage HTML est de parcourir le web et d afficher le code source des pages qui pr sentent des caract ristiques int ressantes et encore inconnues pour vous 1 8 1 Un exemple Consid rons l exemple suivant cr avec FrontPage Express un outil gratuit livr avec Internet Explorer Le code g n r par Frontpage a t ici pur Cet exemple pr sente quelques l ments qu on peut trouver dans un document web tels que e un tableau e uneimage e unlien Les bases de la programmation web 26 balises Microsoft Internet Explorer 0 x File Edit View Favorites Tools Help v if Back Address a http localhost 81 html balises htm T Ga ee ae Les balises HTML cellule 1 1 cellule 1 2 cellule 1 3 cellule 2 1 cellule 2 2 icellule 2 3 le site de TSTLA ici E FB Local intranet KES Un document HTML a la forme g n rale suivante lt ht ml gt lt head gt lt title gt Un titre lt title gt lt head gt lt body attributs gt lt body gt lt html gt L ensemble du document est encadr par les balises lt html gt lt html gt I est form de deux partie
62. d pil e La balise courante est galement not e dans balise Dans le dictionnaire attributs on trouve les attributs de la balise rencontr e ces attributs tant en majuscules o enregistre les attributs dans le dictionnaire global impots simulations s il s agit d une balise de simulation la fonction getD ata parser data lorsque le contenu data d une balise a t r cup r Ici on a pris une pr caution Dans certaines API notamment Java de traitement de documents XML il est indiqu que cette fonction peut tre appel e de fa on r p t e cad qu on n a pas forc ment le contenu data d une balise en une seule fois Ici la documentation PHP n indique pas cette restriction Par pr caution on cumule la valeur data obtenue une variable globale contenu Ce n est qu la rencontre du symbole de fin de balise qu on estimera avoir obtenu l int gralit du contenu de la balise La seule balise concern e par ce traitement est la balise lt areur gt la fonction endElement parser name est appel e chaque fin de balise Elle est utilis e ici pour ch anger le nom de la balise courante en enlevant la derni re balise de la pile de balises et pour ajouter le contenu de la balise lt q reur gt qui se termine au tableau impots erreurs Voici quelques exemples d ex cution tout d abord avec un SG BD qui n a pas t lanc dos gt e php43 php exe cltXmlSimulations php http localhost poly impots 8 xmlsimulat
63. des informations utiles et d autres qui ne sont l que pour la mise en page HTML Les expressions r guli res de PHP peuvent nous aider trouver les informations utiles dans le flot des lignes envoy es par le serveur Pour cela nous avons besoin de conna tre le format exact des diff rentes r ponses du serveur Pour cela nous pouvons interroger le service web avec un navigateur et regarder le code source qui a t envoy On notera que cette m thode ne permet pas de conna tre les ent tes HTTP de la r ponse du serveur web Il est parfois utile de conna tre ceux ci On peut alors utiliser l un des deux clients web g n riques vus dans le chapitre pr c dent Si nous r p tons les exemples pr c dents voici le code HTML re u par le navigateur pour le tableau des simulations lt h2 gt R sultats des simulations lt h2 gt lt table border 1 gt lt tr gt lt td gt Mari lt td gt lt td gt Enfants lt td gt lt td lt tr gt lt td gt oui lt td gt lt td gt 2 lt t d gt lt td gt 200000 lt lt tr gt lt td gt oui lt td gt lt td gt 3 lt td gt lt td gt 200000 lt lt table gt gt lt td gt Il m ts payer F lt td gt lt tr gt C est une table HTML la seule dans le document envoy Ainsi l expression r guli re lt tr gt sk lt td gt 2 lt td gt lt td gt lt td gt st lt td gt 2 lt td gt lt td gt lt td gt s lt tr gt doit elle permettre de retrouver dans le document le
64. donn es transmettre au serveur 2 La ligne Content Type application x www form urlencoded indique quel type de donn es va envoyer le navigateur Ce sont des donn es de formulaire x www form cod es urlencoded Ce codage fait que certains caract res des donn es transmises sont transform es afin d viter au serveur des erreurs d interpr tation Ainsi l espace est remplac par la marque de fin de ligne par 0 D OA De fa on g n rale tous les caract res contenus dans les donn es et susceptibles d une interpr tation erron e par le serveur amp sont transform s en XX o XX est leur code hexad cimal 3 La ligne Content Length 210 indique au serveur combien de caract res le client va lui envoyer une fois les ent tes HTTP termin s c a d apr s la ligne vide signalant la fin des ent tes 4 Les donn es 210 caract res R1 Oui amp C 1 un amp C2 deux amp txtSaisie programmation web amp txtM dp ceciestsecret amp areaSaisie les bases de la 0D 0Aprogrammation web amp cmbValeurs choix3 amp Ist1 liste3 amp Ist2 liste1 amp Ist2 liste3 amp cmd Renvoyer E nvoyer amp secret uneValeur On remarque que les donn es transmises par POST le sont au m me format que celle transmises par GET Y at il une m thode meilleure que l autre Nous avons vu que si les valeurs d un formulaire taient envoy es par le navigateur avec la m thode GET le navigateur affichait dans son champ Adresse l URL demand e sous
65. du client est accomplie par le script principal de l application appel apparticles php Son travail est de construire la r ponse au client I proc dera toujours de la m me fa on grace au nom de l action et la phase en cours il d l guera la demande une fonction sp cialis e Celle ci traitera la demande et g n rera la page r ponse ad quate Pour chaque demande du client il peut y avoir plusieurs pages r ponse possibles pagel page2 pagen Ces pages contiennent des informations qui doivent tre calcul es par la fonction Ce sont donc des pages param tr es Elles seront g n r es par des scripts pageLphp page2 php pagen php par souci d homog n it les parties variables des pages afficher dans la zone 4 de la page type seront elles aussi plac es dans le dictionnaire main Supposons qu en r ponse a une demande le serveur doive envoyer la page pagex php au client I proc dera de la fa on suivante il placera dans le dictionnaire main les valeurs n cessaires la page pagex php il mettra dans main contenu qui d signe l URL de la page afficher en zone 4 de la page type l URL de pagex php il demandera l affichage de le page type avec l instruction include main php La page type sera alors affich e avec dans la zone 4 le code du script pagex php qui sera valu pour g n rer le contenu de la zone 4 On se rappellera que celle ci est une simple cellule d un tableau I ne
66. e de fa on r p t e l analyse de celle ci est faite chaque fois ce qui est inutile Une fois pr par e la requ te est ex cut e par res odbc_execute requ tePr par e rend vrai ou faux selon que l ex cution de la requ te r ussit ou non ment des Le r sultat d un select est une table donc un ensemble de lignes et de colonnes Cette table est accessible via requ tePr par e res odbc_fetch_row requ tePr pare e lit une ligne de la table r sultat du select Rend vrai ou faux selon que l ex cution de la requ te r ussit ou non Les l ments de la ligne r cup r e sont disponibles via la fonction odbc_result val odbc_result requ teP r par e i colonne i de la ligne qui vien d tre lue val odbc_result requ tePr par e nomColonne colonne nomColonne de la ligne qui vient d tre lue La fonction odbc f ch_ row peut tre appel e de fa on r p t e A chaque fois elle lit une nouvelle ligne de la table des r sultats Lorsque la fin de la table est atteinte la fonction rend la valeur false Ainsi la table des r sultats peut elle tre exploit e de la fa on suivante whildodbc fetch row r sultats traitela ligne urante avec odbc result while meture de la odbc_close connexion connexion connexion une connexion au SGBD MySQL La fonction getV aleurs charg e de r cup rer les valeurs dans la base de donn es O D BC est la suivante l f A PA E A EE PR TTT
67. envoie qu une demande GET essais essail html HTTP 1 0 Cette ligne a trois composantes GET commande HTTP pour demander une ressource Il en existe d autres HEAD demande une ressource mais en se limitant aux ent tes HTTP de la r ponse du serveur La ressource elle m me n est pas envoy e PUT permet au client d envoyer un document au serveur lessais essail htm ressource demand e HTTP 1 0 niveau du protocole HTTP utilis Ici le 1 0 Cela signifie que le serveur fermera la connexion d s qu il aura envoy sa r ponse Les ent tes HTTP doivent toujours tre suivis d une ligne vide C est ce qui a t fait ici par le client C est comme cela que le client ou le serveur sait que la partie HTTP de l change est termin Ici pour le client c est termin I n a pas de document envoyer Commence alors la r ponse du serveur compos e dans notre exemple de toutes les lignes commen ant par le signe lt I envoie d abord une s rie d ent tes HTTP suivie d une ligne vide HTTP 1 1 200 OK Date Mon 08 Jul 2002 08 07 46 GMT Server Apache 1 3 24 Win32 PHP 4 2 0 Last Modified Mon 08 Jul 2002 08 00 30 GMT ETag 0 al 3d29469e Accept Ranges bytes Content Length 161 Connection close Content Type text html HTTP 1 1 200 OK le serveur dit e qu il comprend le protocole HTTP version 1 1 e qu il a la ressource demand e code 200 message OK Date la date heure de la r ponse On le serveur s identifie Ici
68. est dire apr s que l authentification de l utilisateur a r ussi C est pourquoi les fonctions authentifier n ont pas ce param tre 9 5 6 La page d erreurs Toute application logicielle doit savoir g rer corredement les erreurs qui peuvent survenir Une application web n chappe pas cette r gle Ici lors d une erreur nous placerons la page erreurs php suivante dans la zone 4 de la page type Les erreurs suivantes se sont produites lt ul gt lt php for i 0 i lt count main erreurs i echo lt li gt main erreurs i lt li gt n for gt lt ul gt lt a href lt php echo main href gt gt lt php echo main lien gt lt a gt Elle pr sente la liste d erreurs d finie dans main erreurs Par ailleurs elle peut proposer un lien de retour en g n ral vers la page qui a pr c d la page d erreurs Ce lien sera d fini par un libell main lien et une URL main href Pour ne pas avoir ce lien il suffira de mettre la cha ne vide dans main lien Voici un exemple de page d erreurs dans le cas o l utilisateur s identifie incorrectement gt 5 Gestion d articles gA uthentification E Utilisation oA T t l S Les erreurs suivantes se sont produites o 1 Lif j Supprimer un article L utilisateur x n a pas t reconnu o ter des article A X Retour la page de login Administration O Ki l Annexes 190 9 5 7 La page
69. est ensuite affich e l cran Le programme a t crit en Java et on le trouvera en annexe On l utilise ici dans une fen tre D os sous windows et on l appelle de la fa on suivante java clientT CPgenerique machine port avec machine nom de la machine o officie le service contacter port port o le service est d livr Avec ces deux informations le programme va ouvrir une connexion TCP IP avec la machine et le port d sign s Cette connexion va servir aux changes de lignes de texte entre le client et le serveur web Les lignes du client sont tap es par l utilisateur au clavier et envoy es au serveur Les lignes de texte renvoy es par le serveur comme r ponse sont affich es l cran Un dialogue peut donc s instaurer directement entre l utilisateur au clavier et le serveur web Essayons sur les exemples d j pr sent s Nous avions cr la page HTML statique suivante lt ht ml gt lt head gt lt title gt essai 1 une page statique lt title gt lt head gt lt body gt lt center gt lt hl gt Une page statique lt h1 gt lt body gt lt ht ml gt que nous visualisons dans un navigateur Address ei http llocalhost 81 essais essail html Go Liens Une page statique Done El BE Local intranet f On voit que l URL demand e est http localhost 81 essais essai1 html La machine du service web est donc localhost machine locale et
70. faut donc pas que le code HTML g n r par pagex php commence par les balises lt HTML gt lt HEAD gt lt BODY gt Celles ci ont d ja t mises au d but de la page type Voici par exemple quoi pourrait ressembler le script login php qui g n re la zone 4 de la page d accueil lt form name frmLogin method post action K7php echo main post T gt lt table gt lt tr gt lt td gt login lt td gt ree RU type text value K php echo main login gt name txtLogin lass text gt lt td gt lt tr gt lt tr gt lt td gt mot de passe lt td gt lt td gt lt input type password value name txtMdp class text P lt td gt mee type submit value Connexion class submit gt lt td gt lt tr gt lt table gt lt form gt On voit que la page est r duite un formulaire est param tr e la fois par le dictionnaire main et la feuille de style Annexes 183 9 5 3 Le fichier de configuration On a toujours int r t param trer le plus possible les applications afin d viter d aller dans le code simplement parce qu on a d cid par exemple de changer le chemin d un script ou d une image L application principale apparticles php chargera donc un fichier de configuration config php son d marrage LI che en ne du fichier de configuration include config php On mettra dans ce fichier des directives de configuration destin es PHP et des initialisations de variabl
71. frmInfos 1lstInfos options frmInfos lstInfos lengthjJ new Option texte crire function effacerInfos frmInfos lstInfos length 0 effacerInfos lt script gt lt head gt lt center gt lt h2 gt Un formulaire trait par Javascript lt h2 gt he lt form method POST name frmExemple gt lt input type hidden name cache value secret gt lt table border 0 gt Cie lt td align center gt Un champ textuel simple lt td gt lt td align center width 100 gt nbsp lt td gt lt td align center gt Un champ textuel sur plusieurs lignes lt td gt lt tr gt Era lt td align center gt lt input type text size 20 name simple gt lt td gt lt td align center width 100 gt nbsp lt td gt lt td align center gt lt textarea name lignes rows 2 cols 40 gt Ce texte est modifiable lt textarea gt lt td gt lt tr gt lt table gt lt table border 0 gt SETS lt td gt lt strong gt Des boutons radio lt strong gt lt td gt lt td gt Annexes 167 lt input type radio checked name radio value FM gt FM lt td gt lt td gt lt input type radio name radio value GO gt GO lt td gt lt td gt lt input type radio name radio value PO gt PO lt td gt lt td gt amp nbsp lt td gt lt td gt lt strong gt Des choix multiples lt strong gt lt td gt lt td gt lt input type checkbox name qem value un gt un lt td gt lt td gt
72. galement le corps du document associ al URL GET les deux param tres sont pass s la fonction getURL Celle ci rend un objet r sultats Celui ci a un champ araur s il y a une erreur un champ r ponse sinon Le champ erreur sert stocker un ventuel message d erreur Le champ r ponse est la r ponse du serveur web contact la fonction gtURL analyse l URL URL avec la fonction parse url L instruction url parse url URL va cr er le tableau associatif url avec les cl s ventuelles suivantes scheme le protocole de l URL http ftp host la machine de l URL port le port de l URL path le chemin de l URL querystring les param tres de l URL Une url sera correcte si elle est de la forme http machind port hemin le param tre header est galement v rifi une fois les param tres v rifi s et corrects on cr e une connexion TCP sur la machine hote port puis on envoie la commande HTTP GET ou HEAD selon le param tre header on lit alors la r ponse du serveur qu on met dans r sultats gt r ponse L ex cution du programme donne les r sultats suivants dos gt e php43 php exe geturl php http localhost poly sessions 2 cycledevie php get HTTP 1 1 200 OK Date Wed 09 Oct 2002 14 56 55 GMT Server Apache 1 3 24 Win32 Set Cookie PHPSESSID ea0d2673811ed069e7289d86933a4c0a path poly sessions 2 Expires Thu 19 Nov 1981 08 52 00 GMT Cache Control no store no cache mus
73. gt lt td gt lt font color green gt l mpot lt font gt lt td gt lt td gt lt input type text size 10 name txtImpots value lt php echo Srequ te impots gt readonly gt lt td gt lt tr gt lt tr gt lt tr gt lt tr gt lt td gt lt input type button value Calculer onclick calculer gt lt td gt lt td gt lt input type button value Effacer onclick effacer gt lt td gt lt tr gt lt table gt lt form gt ne lt p a Megiel des erreurs if count Srequ te erreurs 0 affichage des erreurs echo lt hr gt n lt font color red gt n echo Les erreurs suivantes se sont produites lt br gt echo lt ul gt for Si 0 Si lt xcount Srequ te erreurs Sitt echo lt li gt Srequ te erreurs i lt li gt n echo lt ul gt n lt font gt n else if count Srequ te simulations 0 affichage des simulations echo lt hr gt n lt h2 gt R sultats des simulations lt h2 gt n echo lt table border 1 gt n echo lt tr gt lt td gt Mari lt td gt lt td gt Enfants lt td gt lt td gt Salaire annuel F lt td gt lt td gt Imp ts a payer F lt td gt lt tr gt n for Si 0 Si lt xcount Srequ te simulations Sit t echo lt tr gt lt td gt Srequ te simulations Si 0 lt td gt lt td gt Srequ te simulations Si 1 lt td gt lt td gt Srequ te simulations i 2 lt td gt lt td gt S
74. le port 81 Si on demande voir le texte HTML de cette page Web Affichage Source on retrouve le texte HTML initialement cr fj essail 1 Bloc notes Fichier Edition Format lt title gt essai 1 une page szatique lt titlez lt head gt lt body gt lt center gt lt hl gt Une page statique lt hl gt lt body gt lt html gt Maintenant utilisons notre client TCP g n rique pour demander la m me URL Dos gt java clientTCPgenerique localhost 81 Commandes GET essais essail html HTTP 1 0 lt HTTP 1 1 200 OK lt Date Mon 08 Jul 2002 08 07 46 GMT lt Server Apache 1 3 24 Win32 PHP 4 2 0 Les bases de la programmation web 20 Last Modified Mon 08 Jul 2002 08 00 30 GMT ETag O a1 3d29469e Accept Ranges bytes Content Length 161 Connection close Content Type text html lt html gt lt head gt lt title gt essai 1 une page statique lt title gt lt head gt lt body gt lt center gt lt h1 gt Une page statique lt h1 gt lt body gt lt lt html gt Au lancement du client par la commande java clientT CPgenerique localhost 81 un tuyau a t cr entre le programme et le serveur web op rant sur la m me machine localhost et sur le port 81 Les changes client serveur au format HTTP peuvent commencer Rappelons que ceux ci ont trois composantes 1 ent tes HTTP 2 ligne vide 3 donn es facultatives Dans notre exemple le client n
75. le script suivant et sauvegardez le sous le nom datephp lt Il script php affichant l heure ae ee Tee a A Ban AC echo Nous sommes le maintenant gt D ans une fen tre D OS placez vous dans le r pertoire de date php et ex cutez le E data serge php essais gt e program files easyphp php php exe date php X Powered By PHP 4 2 0 Content type text html Nous sommes le 18 07 02 09 31 01 6 5 PERL Il est pr f rable que Internet Explorer soit d j install S il est pr sent Active Perl va le configurer afin qu il accepte des scripts PERL dans les pages HTML scripts qui seront ex cut s par IE luim me c t client Le site de Active Perl est l URL http www activestate comA l installation PERL sera install dans un r pertoire que nous appelerons lt perl gt Il contient l arborescence suivante DEISL1 ISU 32 403 23 06 00 16 DeIsLl isu BIN 23 06 00 15 bin LIB 23 06 00 15 lib HTML 23 06 00 15 html EG 23 06 00 15 eg SITE 23 06 00 15 site HTMLHELP 28 06 00 37 htmlhelp Annexes 144 L ex cutable pal e est dans lt perl gt bin Perl est un langage de scripts fonctionnant sous Windows et Unix Il est de plus utilis dans la programmation WEB Ecrivons un premier script script PERL affichant heure modules USE SEPELE programme A a ER EN EUR print Il est heure minutes secondes n Sauvegardez ce script dans un fichier heurepl Ouvrez une fen tre DOS placez v
76. livr es par le serveur apache d EasyPHP cgi bin arborescence o l on peut palcer des script CG I pour le serveur Apache L int r t principal d EasyPHP est que l application arrive pr configur e Ainsi Apache PHP MySQL sont d j configur s pour travailler ensemble Lorsqu on lance E asyPhp par son lien dans le menu des programmes une ic ne se met en place en bas droite de l cran gf D sinstallzr EasyPHP i e EasyPHP C est le E avec un point rouge qui doit clignoter si le serveur web A pache et la base de donn es MySQL sont op rationnels Lorsqu on clique dessus avec le bouton droit de la souris on acc de des options de menu GNR FOR B Aide gt Fichiers Log gt Configuration Administration Web local Red marrer Arr ter Quitter L option A dministration permet de faire des r glages et des tests de bon fonctionnement ADMINISTRATION Vos alias G2 Donn es MySQL datadir r pertoire actuel CAProgram Files EasyPHPimysalidata Administrez vos bases de donn es Cliquez sur s bases de donn es n Environnement EasyPHP Ces pe vous informeront sur le bon fonctionnement de PHP sa configuration et sur les elements install s infos php extensions param tres SN retour HP Pour verifier le fonctionnement de N VOUS pouvez acc der au centre u site d 6 3 1 Administration PHP Le bouton infos php doit vous permettre de v rifier le bon fonction
77. lt html gt L association contr le visuel lt gt balise HTML est le suivant Contr le balise HTML ormulaire lt form method POST gt p lt input type text name txtSaisie size 20 value qqs mots gt Les bases de la programmation web 30 Ro Re lt input type password name txtMdp size 20 value unMotD ePasse gt ae de lt textarea rows 2 name areaSaisie cols 20 gt multilignes ligne1 ligne2 ligne3 lt textarea gt boutons radio lt input type radio value 0 ui name R1 gt O ui lt input type radio name R1 value non checked gt Non 7 de lt input type checkbox name C 1 value un gt 1 lt input type checkbox name C2 value deux checked gt 2 lt input type checkbox name C3 value trois gt 3 Combo lt select size 1 name cmbValeurs gt lt option gt choix1 lt option gt lt option select ed gt choix2 lt option gt lt option gt choix3 lt option gt lt select gt ae F lt select size 3 name st1 gt unique lt option selected gt listel lt option gt lt option gt liste2 lt option gt lt option gt liste3 lt option gt lt option gt liste4 lt option gt lt option gt liste5 lt option gt lt select gt ma x a lt select size 3 name Ist2 multiple gt mul tiple lt option gt listel lt option gt lt option gt liste2 lt option gt lt option selected gt liste3 lt option gt lt option gt liste4 lt op
78. lt input type checkbox name qcm value deux gt deux lt td gt lt td gt lt input type checkbox name qcem value trois gt trois lt td gt lt tr gt lt table gt lt table border 0 gt Lio lt td gt Un menu d roulant lt td gt Kiel lt select name menu size 1 gt lt option gt 50 F lt option gt lt option gt 60 F lt option gt lt option gt 70 F lt option gt lt option gt 100 F lt option gt lt select gt lt td gt lt td gt Une liste lt td gt SEC lt select name lstVoitures multiple size 3 gt lt option gt Renault lt option gt lt option gt Citro n lt option gt lt option gt Peugeot lt option gt lt option gt Fiat lt option gt lt option gt Audi lt option gt lt select gt lt td gt fers lt table gt lt table border 0 gt Ge lt td gt Un mot de passe lt td gt lt td gt lt input type password size 21 name passwd gt lt td gt lt td gt nbsp lt td gt lt td gt Un champ de contexte cach lt td gt ACT lt table gt lt form gt Le lt h2 gt Informations du formulaire lt h2 gt lt form name frmInfos gt lt table gt SET lt td gt lt input type button value Effacer onclick effacerInfos gt lt td gt lt td gt lt select name Istinfos multiple size 3 gt lt select gt lt td gt lt td gt lt input type button name cmdAfficher value Afficher onclick afficher gt lt td gt SET gt lt f or
79. lue sans tre analys e sauf pour la premi re ligne qui nous permet de savoir si le serveur web a trouv ou non l URL qu on lui a demand e En effet si l URL a t trouv e le serveur web r pond HTTP LX 200 OK o X d pend de la version de HTTP utilis e 1 URL trouv if preg He ath 200 Ose Si Sill Me A URL inaccessible retour avec erreur a bas array erreurs gt array L URL urll mpots path n a pu tre trouv e i le document est analys l aide de la fonction getInfos I on analyse le document i mots getl nfos document Le r sultat rendu est un dictionnaire deux champs erreurs liste des erreurs peut tre vide simulations liste des simulations peut tre vide ceci fait la fonction getImpots peut rendre son r sultat sous la forme d un dictionnaire 11 on rend le r sultat return array jeton gt jeton erreurs gt i mots erreurs simulations gt i mpots si mul ations Exemples 114 analysons maintenant la fonction POST I function POST connexion url j eton parametresi l connexion la connexion serveur web 11 url I URL interroger II param tres dictionnaire des param tres poster pr pare le POST n st akii ile list param tre val eur ee post parametre url encode val eu amp while on enl ve le dernier caract re Spost substr post 0 1 on pr pare la requ te HTTP au format HTTP 1 0 HTTP POST url
80. m gt lt body gt lt html gt 8 2 Les expressions r guli res en Javascript Annexes 168 C t navigateur Javascript peut tre utilis pour v rifier la validit des donn es entr es par l utilisateur avant de les envoyer au serveur Voici un programme de test de ces expressions r guli res 8 2 1 La page de test aa _douerletest Ajouterewxexemples lly amp correspondance champs 0 45abcd67 champs 1 45 PAANS z 45cbca67 ourien 8 2 2 Le code de la page lt ht ml gt lt head gt lt title gt Les expressions r guli res en Javascript lt title gt lt script language javascript gt function afficherInfos with document frmRegExp qq chose faire if verifier return c est bon on efface les r sultats pr c dents effacerInfos v rification du mod le modele new RegExp txtModele value champs modele exec t xtChaine value if champs null pas de correspondance entre mod le et chaine ecrirelnfos pas de correspondance else correspondance on affiche les r sultats obtenus ecrireInfos Il y a correspondance for i 0 i lt champs length i ecrireInfos Champs ti J champs i else with function function ecrireInfos texte crit texte dans la liste des infos document frmRegExp I1stInfos options document frmRegExp lstInfos length new Option texte Annexes 169 crire function effac
81. n PZE gt lt body gt lt ht ml gt La page PHP se contente d afficher des informations qui lui sont pass es par le programme principal de l application dans la variable requ te qui est un objet avec les champs suivants chkoui chknon attributs des boutons radio oui non ont pour valeurs possibles checked ou afin d allumer ou non le bouton radio correspondant enfants le nombre d enfants du contribuable salaire son salaire annuel impots le montant de l imp t a payer erreurs une liste ventuelle d erreurs peut tre vide La page envoy e au client contient un script javascript contenant une fonction dfacer associ e au bouton E ffa r dont le r le est de remettre le formulaire dans son tat initial bouton non coch champs de saisie vides On notera que ce r sultat ne pouvait pas tre obtenu avec un bouton HTML de type rest En effet lorsque ce type de bouton est utilis le navigateur remet le formulaire dans l tat o il l are u Or dans notre application le navigateur re oit des formulaires qui peuvent tre non vides L application qui traite le formulaire pr c dent est la suivante lt php traite le formulaire des imp ts bibiloth ques include ImpotsDSN php configuration de l application ini_set register_globals off ini_set display_errors off SformulaireImpots impots_form php SerreursImpots impots_erreurs php SbdImpot s array dsn gt my
82. navigateur n envoie que des ent tes HTTP et aucun document le serveur lui r pond Il envoie tout d abord des ent tes HTTP indiquant quel type de r ponse il envoie Ce peut tre une erreur si la page demand e n existe pas Si la page existe le serveur dira dans les ent tes HTTP de sa r ponse qu apr s ceux ci il va envoyer un document HTML HyperText Markup Language Ce document est une suite de lignes de texte au format HTML Un texte HTML contient des balises marqueurs donnant au navigateur des indications sur la fa on d afficher le texte le client sait d apr s les ent tes HTTP du serveur qu il va recevoir un document HTML Il va analyser celui ci et s apercevoir peut tre qu il contient des r f rences d images Ces derni res ne sont pas dans le document HTML Il fait donc une nouvelle demande au m me serveur web pour demander la premi re image dont il a besoin Cette demande est identique celle faite en 1 si ce n est que la resource demand e est diff rente Le serveur va traiter cette demande en envoyant son client l image demand e Cette fois ci dans sa r ponse les ent tes HTTP pr ciseront que le document envoy est une image et non un document HTML le client r cup re l image envoy e Les tapes 3 et 4 vont tre r p t es jusqu ce que le client un navigateur en g n ral ait tous les documents lui permettant d afficher l int gralit de la page Le protocole HTTP D couvrons le protocole HTTP su
83. ocumentR oot qui d signe la racine de l arborescen des pages Web est e program files easyphp www 6 8 2 Lien PHP Apache Pour tester cr er le fichier intro php avec la seule ligne suivante lt phpinfo gt Annexes 148 et le mettre la racine des pages du serveur Apache D ocumatR oot d dessus Demander l URL http localhost intro php On doit voir une liste d informations php Windows NT 5 0 build 2195 Build Date Apr 20 2002 18 36 03 Co This program makes use of the Zend Scripting Language Engine Zend Engine v1 2 0 Copyright c 1998 2002 Zend Technologies Le script PHP suivant affiche l heure Nous l avons d j rencontr lt time nb de millisecondes depuis 01 01 1970 II format affichage date heure d jour sur 2 chiffres Ii m mois sur 2 chiffres lI i ann e sur 2 chiffres ii heure 0 23 Il i minutes 11 s secondes print Nous sommes le date d m y H i s time gt Placons ce fichier texte la racine des pages du serveur Apache D oume tRoot et pelons le date php Demandons avec un navigateur l URL http localhost date php On obtient la page suivante Address lei http localhost date php Nous sommes le 18 07 02 09 46 58 6 8 3 Lien PERL APACHE Il est fait grace une ligne de la forme SaiptAlias cog bin E Program Files EasyPHP og bin du fichier lt apache gt conf httpd conf Sa syntaxe est ScriptAlias cgi
84. oui enfants 2 salaire 200000 i mpot 22504 lt simulation marie non enfants 2 salaire 200000 i mpot 33388 lt simul ations gt La commande X ML XML et PHP 118 lt xml stylesheet type text xsl href simulations xsl gt d signe le fichier simulations xs comme un feuille de style xml stylesheet de type text xsl c a d un fichier texte contenant du code XSL Cette feuille de style sera utilis e par les navigateurs pour transformer le texte XML en document HTML Voici le r sultat obtenu avec Netscape 7 lorsqu on charge le fichier XML simulations xml File HE data serge xmlsimpots Ojsimulations xml Simulations de calculs d imp ts mari enfants salaire imp t oui 2 200000 22504 non 2 200000 33388 Lorsque nous regardons le code source du document View Source nous retrouvons le document X ML initial et non le document HTML affich N Source of file E data serge xml impots 0 simulations xml Netscape a File Edit View Help lt simulations gt lt simulation marie oui enfants 2 salaire 200000 impot 22504 gt lt simulation marie non enfants 2 salaire 200000 impot 33388 gt lt simulations gt Netscape a utilis la feuille de style simulations xsl pour transformer le document XML ci dessus en document HTML affichable I est maintenant temps de regarder le contenu de cette feuille de style lt xsl template match gt lt ht ml gt
85. partir de maintenant on peut compiler des programmes java conformes la norme J2EE notamment les servlets Java Jbuilder ne sert qu la compilation l ex cution tant ult rieurement assur e par Tomcat selon des modalit s expliqu es dans le cours 7 Code source de programmes 7 1 Le client TCP g n rique Beaucoup de services cr s l origine de l Internet fonctionnent selon le mod le du serveur d cho tudi pr c demment les changes client serveur se font pas changes de lignes de texte Nous allons crire un client tcp g n rique qui sera lanc de la fa on suivante java cltT C Pgenerique serveur port Ce client TCP se connectera sur le port port du serveur saveur Ceci fait il cr era deux threads 1 un thread charg de lire des commandes tap es au clavier et de les envoyer au serveur 2 un thread charg de lire les r ponses du serveur et de les afficher l cran Pourquoi deux threads Chaque service TCP IP a son protocole particulier et on trouve parfois les situations suivantes e le client doit envoyer plusieurs lignes de texte avant d avoir une r ponse e la r ponse d un serveur peut comporter plusieurs lignes de texte Annexes 155 Aussi la boucle envoi d une unique ligne ai serveur r ception d une unique ligne envoy e par le serveur ne convient elle pas toujours On va donc cr er deux boucles dissoci es e une boucle de lecture des commandes tap es au clavier pour tre envoy es au serveu
86. pas d erreurs grequ te erreurs array 11 statut valide requ te mari strto loner raano ei mertal if requ te mari amp amp requ te mari non une erreur grequ te erreurs Statut marital requ te mari incorrect nbre d enfants valide x BI prec _match s d t s requete enfants une erreur grequ te erreurs Nombre d enfants requ te enfants incorrect salaire gol ole f if preg _match s dt s requ te salaire une erreur l requ te erreurs Salaire requ te salaire incorrect tat des boutons radio if requ te mari oui ot dede Exemples 107 Srequ te chknon jelse grequ te chknon checked grequ te chkoui on rend la requ te return requ te v rifier ss2s2025282s220smececcsccacecoccccsccececocccceaneseercnne function termi nerSession sessi on on m mrise la session SESSI ON session session Li in Seriot exit 0 termi nerSession tout d abord cette application g re une session On lance donc une session en d but de script session start lasession m morise une seule variable le dictionnaire session Ce dictionnaire a deux champs o objImpots un objet ImpotsD SN On m morise cet objet dans la session du client afin d viter des acc s successifs inutiles la base de donn es OD BC o simulations le tableau des simulations pour se
87. php script g n re la page type login php script g n re la page de login erreurs php script g n re la page d erreurs infos php script g n re la page d informations addarticle php script g n re la page d ajout d un article updatearticlel php script g n re la page 1 de la modification d un article updatearticle2 php script g n re la page 2 de la modification d un article deletearticlel php script g n re la page 1 de la suppression d un article deletearticle2 php script g n re la page 2 de la suppression d un article select php script g n re la page 1 de la s lection d articles select2 php script g n re la page 2 de la s lection d articles sql 1 php script g n re la page 1 de l mission de requ tes Sql 2 php script g n re la page 2 de l mission de requ tes 9 7 Faire voluer l application Nous avons ce point une application qui fait qu elle doit faire avec une ergonomie acceptable Nous allons la faire voluer sur diff rents points le SGBD sa s curit son look ses performances 9 7 1 Changer le type de la base de donn es Notre tude supposait que le SG BD utilis tait MySQL Changez de SG BD et montrez que la seule modification faire est dans la d finition de la variable dD SN dans le fichier de configuration config php 9 7 2 Am liorer la s curit Lors du d veloppement d une application web il ne faut jamais faire l hypoth se que le client est un navigateur et qu
88. php43 php exe xmlParser php syntaxe xmlParser php fichierXML L application xmlParser php admet un param tre l URI Uniform Resource Identifier du document XML analyser Dans notre exemple cette URI sera simplement le nom d un fichier XML plac dans le r pertoire de l application x mlParser php Consid rons deux exemples d ex cution D ans le premier exemple le fichier XML analys est le fichier erreurs xml suivant lt xml version 1 0 encoding S0 8859 1 gt lt xml stylesheet type text xsl href erreurs xsl gt lt erreurs gt lt erreur gt erreur l lt erreur gt lt erreur gt erreur 2 lt erreur gt lt erreurs gt L analyse donne les r sultats suivants dos gt e php43 php exe xmlParser php erreurs xml ERREURS ERREUR erreur 1 ERREUR ERREUR erreur 2 ERREUR ERREURS XML et PHP 129 Nous n avions pas encore crit ce que faisait l application xmlParser php mais l on voit ici qu elle affiche la structure du document XML analys Le second exemple analyse le fichier XML simulations xml suivant lt xml version 1 0 encoding 1S0 8859 1 gt lt xml stylesheet tupea tenisi href si mulati ons xsl gt lt si mul ations gt lt simulation marie oui enfants 2 sa lt simulation marie non enfants 2 sa lt simulations gt D a Do Wout NN ee ee ee ee ee 3 O o LL wh Wh wu oo o L analyse donne les r sultats suivants dos gt e php43 php exe xmlP
89. qui change d une action l autre les autres restant identiques Le script PHP g n rant cette page type s appellera main php et pourrait tre le suivant lt ht ml gt lt head gt lt title gt Gestion d articles lt title gt lt table gt lt tr height 60 gt lt td colspan 3 align left valign top gt lt hl gt lt td gt lt tr gt lt tr gt lt t d gt lt table gt lt tr gt lt td ass menutitle gt lt a href x php echo main Tiens J Togin gt f gt Authentification lt a gt lt td gt lt tr gt lt tr gt lt td gt lt br gt lt td gt lt tr gt lt tr gt lt td FES gt Utilisation lt td gt lt tr gt lt tr height 10 gt lt tr gt lt tr gt lt td ESS ENT gt lt img alt src images radio gif gt lt a href K php echo S main liens l addArticle gt Ajouter un article D ais Annexes 181 lt a gt lt td gt lt tr gt lt tr gt lt td TEEN gt lt img alt src images radio gif gt lt a het SRE EEE gt Modifier un article lt a gt lt td gt lt tr gt lt td ET gt lt img alt src images radio gif gt lt a href K7php echo main Tiens deleteArticle 7 gt j gt Supprimer un article lt a gt lt td gt lt tr gt lt tr gt lt td EDEN gt lt img alt src images radio gif gt lt a href K php echo main Lens selectArticl
90. rappeler d un change l autre les simulations des changes pr c dents une fois la session d marr e on r cup re la variable session Si celle ci n existe pas encore c est que la session d marre On cr e alors un objet ImpotsD SN et un tableau de simulations vide Si besoin est des erreurs sont signal es on r cup re les param tres de la session session SESSION session fl session valide if isset sessi on isset session objlmpots isset session simul ations on d marre une nouvelle session session array obj Av ots gt new mpotsDSN bdl mpots si mul ati ons gt array des erreurs if count session obj mpots gt erreurs 0 requ te array erreurs gt session obj mpots gt erreurs 11 affichage page d erreurs HE erreursl mpots session array termi ner Sessi on sessi on Ai lif une fois la session correctement initialis e les param tres de l change sont r cup r s S il n y a pas tous les param tres attendus un formulaire vide est envoy i On T CUP ME ma param tres de l change en cours grequ te mari POST optMarie oe ee See ee oe requ te salaire POST txtSalaire I a t on tous les param tres f is en D al isset requ te lenfants isset requ te salaire II affichage formulaire vi req Pipe te array chkoui gt nee ed enfants gt salaire gt imots gt e inc u
91. reurs php et impots simulations php pour qu elle g n rent du XML au lieu du HTML Le reste de l application ne change pas Le code devient alors le suivant lt ph I traite le formulaire des imp ts 11 bibiloth ques include I mpotsDSN php 11 d marrage session session start I configuration de l application ini set register globals off ini set display errors off Sformulairelmpots xmlsimulations html SerreursImpots impots_erreurs php SsimulationsImpots impots_simulations php bdl mots array dsn gt mysql dbi mpots user gt admi mpots pwd gt mdpi mpots tabl e gt i mots limites gt limites coeff R gt coeffR DE re on r cup re les param tres de la session session SESSI ON session I session valide if isset session gage tia edi isset session si mul ations on d marre une nouvelle sessi session array obj mpots gt new TR DSN GDA mots simulations gt array des erreurs Rennes an gt erreurs 0 requ te array erreurs gt session objimpots gt erreurs affichage page d erreurs au format XML header Content type text xml include SerreursImpots session array Ss n terminerSessio en BU lif 11 on r cup re les param tres de l change en cours requ te mari POST optMarie us E ORTAR regqu te salaire POST txtSalaire XML et PHP 126 I a t on tous les param tres if
92. script gt La fonction effacer affich e un message Microsoft Internet Explorer xj A Yous avez cliqu sur le bouton Effacer 1 8 1 10 Bouton de type submit bouton de spi i All ES type subali lt input type submit value E nvoyer name andR envoyer envoyer Envoyer balise HTML lt input type submit value Envoyer name cmdRenvoyer gt attributs type submit d finit le bouton comme un bouton d envoi des donn es du formulaire au serveur web Lorsque le client va cliquer sur ce bouton le navigateur va envoyer les donn es du formulaire l URL d finie dans l attribut action de la balise lt form gt selon la m thode d finie par l attribut method de cette m me balise value Envoyer le texte affich sur le bouton 1 8 1 11 Bouton de type reset bouton de lt input type reset value R tablir name andR ablir gt type reset r tablir R tablir balise HTML lt input type reset value R tablir name cmdR tablir gt attributs type reset d finit le bouton comme un bouton de r initialisation du formulaire Lorsque le client va cliquer sur ce bouton le navigateur va remettre le formulaire dans l tat o il l a re u value R tablir le texte affich sur le bouton 1 8 1 12 Champ cach champ cach lt input type hidden name secret value uneV aleur gt balise HTML lt input type hidden name value gt attributs type hidden pr cis
93. se rappellera que notre client g n rique y donne acc s ce qui peut tre utile pour les comprendre La premi re ligne par exemple lt HTTP 1 1 200 OK indique que le serveur Web contact comprend le protocole HTTP 1 1 et qu il a bien trouv le fichier demand 200 OK 200 tant un code de r ponse HTTP Les lignes lt Content Length 11251 lt Connection close lt Content Type text html disent au client qu il va recevoir 11251 octets repr sentant du texte HTML HyperText Markup Language et qu la fin de l envoi la connexion sera ferm e On a donc la un client tcp tr s pratique Il fait sans doute moins que le programme tdne que nous avons utilis pr c demment mais il tait int ressant de l crire nous m mes Le programme du client tcp g n rique est le suivant I paquetages import s import java io import java net public class clientTCPgeneri que Annexes 158 re oit en param tre les caract ristiques d un service sous la forme serveur port se connecte au service cr e un thread pour lire des commandes tap es au clavier celles ci seront envoy es au serveur cr e un thread pour lire les r ponses du serveur celles ci seront affich es l cran le tout se termine avec la commande fin tap e au clavier ee e S variable d instance private static Socket client public static void main String args 1 MG a final String syntaxe pg serveur port
94. selected si ce mot cl est pr sent pour un l ment de liste ce dernier apparait s lectionn dans la liste D ans notre exemple ci dessus l l ment de liste choix2 appara t comme l l ment s lectionn du combo lorsque celui ci est affich pour la premi re fois 1 8 1 7 Liste sdection unique ae lt sdect size 3 name Istl gt uni que lt option selected gt listel lt option gt lt option gt list lt option gt lt option gt liste3 lt option gt lt option liste4 lt option gt Les bases de la programmation web 33 liste choix simple balise HTML attributs lt option gt listed lt option gt lt select gt liste2 liste3 lt select size name gt lt option selected gt lt option gt lt select gt affiche dans une liste les textes compris entre les balises lt option gt lt option gt les m mes que pour la liste d roulante n affichant qu un l ment Ce contr le ne diff re de la liste d roulante pr c dente que par son attribut size gt 1 1 8 1 8 Liste a s lection multiple iste a selection uni que balise HTML attributs lt select size 3 name lst2 multiple gt lt option selected gt listel lt option gt lt option gt liste2 lt option gt lt option selected gt liste3 lt option gt lt option gt liste lt option gt lt option gt liste5 lt option gt lt select gt lt select size nam
95. st php articles gestion articles8 apparticles php action addArticlegphase 0 amp PHPSESSID 006a63e6027f16c 70b63cdae93405eeb Directement dans le champ A dresse du navigateur nous modifions l URL de la fa on suivante http localhost 81 st php articles gestion articles8 apparticles php action deleteArticle amp phase 1 amp PHPSESSID 006a63e6027 16c70b63cdae93405eeb Nous obtenons alors la page d authentification QO 6 Q Q Q http flocalhost 81 st php articles gestion articles8 zpparticles php action deleteArticle amp phase 2 S Gestion d articles hono Gestion d articles 1 amp PHPSESSI J e Ajouter un article e Modifier un article login e Supprimer un article pP motdepase DEN e Lister des articles Cela m rite une explication Lorsqu on demande une URL en tapant directement son identit dans le champ adresse du navigateur celui ci n envoie pas l ent te HTTP REFERER Notre application n y trouve donc pas l URI de l action pr c dente URI qu elle avait m moris e dans la session Elle renvoie alors la page d authentification en r ponse Ce m canisme est efficace pour les navigateurs mais nullement pour un client programm Celui ci peut envoyer l ent te HTTP_REFERER qu il veut Il peut donc tricher en disant qu il est bien pass par telle tape alors qu il ne l a pas fait Il faut alors Annexes 206 s assurer que l encha nement des tapes est respect Ainsi
96. suivant lt ht ml gt lt head gt lt title gt i mots lt title gt lt script POT ar ee type text javascript gt function effacer 11 raz du formulaire h document vei Moksi tMarie 0 checked false rie 1 checked true fants value laire value pots value ce M E S l it c a n a mi h e r n calculler ification des parametres avant de les envoyer au serveur document frm mpots bre d enfants mps s d s exec txtEnfants value tS eee le mod le n est pas v rifi lert Le DE d enfants n a Enfants focus it f pas t donn ou est incorrect s exec txtSalaire value st pas v rifi re n a pas t donn ou est incorrect XML et PHP 124 est bon on envoie t a lt scri He lt body background pol y impots 7 images standard jpg gt lt center gt Calcul d imp ts lt hr gt lt td gt Etes vous mari e lt td gt lt td gt lt input type radio name optMarie value oui gt ou lt input type radio name optMarie value non checked gt non lt td gt lt tr gt lt tr gt lt td gt Nombre d enfants lt td gt lt td gt lt input type text size 3 name txtEnfants value gt lt td gt lt tr gt lt tr gt lt td gt Salaire annuel lt td gt lt td gt lt input type text size 10 name txtSalaire value gt lt td gt lt tr gt lt tr gt lt tr g
97. xsl href xsl Simulations CSN les simulations echo in ations gt n for i 0 i lt count requ tel si mul ations i Il si on i echo lt si mulation marie P ee IS CMS Ne enfants Srequ te si mul ations i 1 L H alpes requ te simulations i pt mpot requ ete simulations i 3 A gt n un If or ho lt simulations gt n EE gt Ce code permet a partir du dictionnaire requ tede g n rer du code X ML analogue au suivant lt xml version 1 0 Se re gt lt xml stylesheet type text xsl href simulations xsl gt lt si mul ations gt lt si mulation marie non enfants 3 salaire 200000 ji mpot 22504 gt lt si mulation marie oui enfants 3 salaire 200000 impot 16400 gt lt si mulation marie oui enfants 2 salaire 200000 i mpot 22504 gt lt si mulati ons gt La feuille de style simulations xsl transformera ce code XML en code HTML Le code de l application impots_erreurs php est le suivant lt php I g n re le code XML de la page d erreurs de l application impots 11 qqs constantes xslErreurs erreurs xsl XML et PHP 127 ent tes XML ho lt xml version 1 0 encoding 1S0 8859 1 gt n ho lt xml stylesheet type text xsl href xslErreurs gt n les erreurs ho lt erreurs gt n r i 0 i lt count requ te erreurs i if erreur Si x echo lt erreur
98. 0 0 55 30710 195000 0 60 39312 0 0 65 49062 La 1 re colonne sera plac e dans l attribut limites de la classe ImotsD SN la seconde dans l attribut coeffR la troisi me dans coeffN Ces trois attributs sont initialis s par le constructeur de la classe Celui ci va chercher les donn es dans une source de donn es ODBC Diverses erreurs peuvent se produire lors de la construction de l objet Ces erreurs sont rapport es dans l attribut erreurs sous la forme d un tableau de messages d erreurs le constructeur re oit en param tre un dictionnaire impots avec les champs suivants dsn nom DSN de la source ODBC de donn es contenant les valeurs des tableaux limites coeffR coeffN user nom d un utilisateur ayant un droit de lecture sur la source ODBC pwd son mot de passe table nom de la table contenant les valeurs limites coeffR coeffN limites nomde la colonne contenant les valeurs limites coeffR nom de la colonne contenant les valeurs coeffR coeffN nom de la colonne contenant les valeurs coeffN RE ee ee Le param tre du constructeur apporte toutes les informations n cessaires pour aller lire les donn es dans la source de donn es ODBC une fois l objet ImpotsD SN construit les utilisateur de la classe pourront appeler la m thode calaulerl mpots de l objet Celui ci re oit en param tre un dictionnaire personne 11 personne mari oui non Mi ne nombre d enfants 11 personne salaire salaire annuel
99. 002 00 48 S lectionnez un l ment pour obtenir H mail jar 275KB Executable Jar File 02 03 2002 00 48 une description E naming zommon jar 26KB Executable Jar File 02 03 2002 00 48 Voir aussi naming esources 36KB Executable Jar File 02 03 2002 00 48 Mes documents E servlet ar 77KB Executable Jar File 02 03 2002 00 48 Favoris r seau E tools jar 4712KB Executable Jar File 07 02 2002 12 52 Poste de travail a tyrex license 2KB Fichier LICENSE 02 03 2002 00 48 E tyrex 0 9 7 0 jar 296KB Executable Jar File 02 03 2002 00 48 E xerces jar 1770KB Executable Jar File 02 03 2002 00 48 Avec le bouton dd on va ajouter ces biblioth ques une une la liste des biblioth ques explor es par JBuilder Class Source Documentation E Program Files Apache Tomcat 4 0fcommanilibfactivation jar E Program Files Apache Tomcat 4 0 commanilib idbc2_O stdext jar EProgram Files Apache Tomcat 4 0 commanilibsindi jar E Program Files Apache Tomcat 4 0 commanilibsjta speci_O_1 jar E Program Files Apache Tomcat 4 0 commanilib mail jar E Program Files Apache Tomcat 4 0 commanilib naming common jar E Program Files Apache Tomcat 4 0 commanilib naming resources je EvProgram Files Apache Tomcat 4 0 commanilib sernlet jar E Program Files Apache Tomcat 4 0 commanilibttools jar E Program Files Apache Tomcat 4 Ofcommanilibityrex 0 9 7 0 jar EProgram Files Apache Tomcat 4 0 commanilib xerces jar Move Up MOVE own A
100. 1 On s lectionne le pilote OD BC MySQL on fait Terminer puis on donne les caract ristiques de la source de donn es DX mysql Driver default configuration x This is in public domain and comes with NO WARRANTY of any kind Enter a database and options far connect Windows DSN name odbc valeus MySQL host name or IP focas Ss MySQL database name bValeus User JadmDbvaleurs Password Port ifmot 3306 SQL command on connect iia aa Options that affects the behaviour of MyODBC F Don t optimize column width f Pad CHAR to full length Tl Return matching rows J Return table names in SQLDescribeCol l Trace MyODBC Use compressed protocol D Allow BIG results I Ignore space after function names Don t prompt on connect Tl Force use of named pipes Simulate ODBC 1 0 Change BIGINT columns to INT I Ignore in table Tl No catalog exp 7 Use manager cursors exp D Read options from C my cnf I Don t use setlocale I Safety Check this if you have problems I Disable transactions Cancel Windows DSN name le nom donn la source de donn es O D BC odbevaleurs MySQL host le nom de la machine qui h berge le SG BD MySQL qui g re la source de donn es localhost MySQL database name le nom de la base MySQL qui est la source de donn es dbValeurs User un utilisateur ayant des droits d acc s suffisants sur la base MySQL g rer admD bV aleurs Password son mot de passe mdpD bV aleurs PH
101. 1290 5 2072 5 3309 5 4900 6898 9316 5 12106 16754 23147 5 30710 39312 127860 151250 172040 195000 0 de a 14 rows in set 0 00 sec l l l l l l l l l l l l l l D Ste Rees SR a mysql gt quit La base de donn es dbimpots est transform e en source de donn es O DBC de la fa on suivante e on lance le gestionnaire des sources de donn es OD BC 32 bits ODBC Data Source Administrator 2 x UserDSN System DSN File DSN Drivers Tiacing Connection Pooling About System Data Sources Name Driver Add ECDCMusi Microsoft Access Drrver mdb i Microsoft Access Drrver mdb Remove Configure e on utilise le bouton Add pour ajouter une nouvelle source de donn es ODBC Exemples 93 Create New Data Source x x Select a driver for which you want to set up a data source Microsoft ODBC fer Oracle Microsoft Paradox Driver db Microsoft Paradox Treiber db Microsoft Text Driver tt csv Microsoft Text Tre ber txt cs Microsoft Visual FoxPro Driver Microsoft Visual FoxPro T reiber MySQL SQL Server NOOR ED e on d signe le pilote MySQL et on fait Terminer TDX mysql Driver default configuration This is in public domain and comes with NO WARRANTY of any kind Enter a database and options or connect Password Port if not 3306 SQL command on connect e le pilote MySQL demande un certain nomb
102. 3 php exe cltImpots php http localhost poly impots 6 impots php oui 2 200000 Jeton de session a6297317667bc981C462120987b8dd1 8 Simulations Mari Enfants Salaire annuel F Imp ts payer F oui 2 200000 22504 Nous avons bien r cup r le montant de l imp t payer 22504 f Nous avons galement r cup r le jeton de session Nous pouvons maintenant l utiliser pour une seconde interrogation dos gt e php43 php exe cltImpots php http localhost poly impots 6 impots php oui 3 200000 a6297317667bc981c462120987b8dd18 Jeton de session a6297317667bc981c462120987b8dd18 Simulations Mari Enfants Salaire annuel F Imp ts payer F oui 2 200000 22504 oui 3 200000 16400 Nous obtenons bien le tableau des simulations envoy es par le serveur web Le jeton r cup r reste bien s r le m me Si nous interrogeons le service web alors que la base de donn es n a pas t lanc e nous obtenons le r sultat suivant dos gt e php43 php exe cltImpots2 php http localhost poly impots 6 impots php oui 3 200000 Jeton de session 8369014d5053212bc42f 64bbdfb152ee Les erreurs suivantes se sont produites Impossible d ouvrir la base DSN mysql dbimpots S1000 Lorsqu on crit un client web programm il est n cessaire de savoir exactement ce qu envoie le serveur en r ponse aux diff rentes demandes possibles d un client Le serveur envoie un ensemble de lignes HTML comprenant
103. 4679408 getAll fetches all the rows returned from a query data getAll SELECT id text date FROM mytable Will return array 1 gt array 4 four 2004 2 gt array 5 five 2005 3 gt array 6 six 2006 Annexes 215 wi The get family methods will do all the dirty job for you this is launch the query fetch the data and free the result Please note that as all PEAR DB functions they will return a PEAR DB _error object on errors 9 9 4 6 Getting more information from query results With PEAR DB you have many ways to retrieve useful information from query results These are Annexes numRows Returns the total number of rows returned from a SELECT query Number of rows echo res gt numRows numCols Returns the total number of columns returned from a SELECT query Number of cols echo res gt numCols affectedRows Returns the number of rows affected by a data manipulation query INSERT UPDATE or DELETE remember that this statement won t return a result object db gt query D ELETE FROM clients echo I have deleted db gt affectedRows clients tableInfo Returns an associative array with information about the returned fields from a SELECT query Table Info print r res gt tablelnfo 216
104. DERR Snare argv 0 URL GET HEAD Il arr t evel fe 9 lif le troisi me argument doit tre GET ou HEAD header peser VARIE D aoe amp amp ader head msg d erre fputs STDERR curiae argv 0 URL GET HEAD I arr t exit 2 lif le premier argument est une URL URL strtolower argv 1 pr paration de la connexion onnexion curl init URL aes de la connexion setopt connexion CURLOPT HEADER 1 header head curl setop connexion CURLOPT NOBODY 1 ex cution de la connexion _exec connexion fermeture de la connexion 1 deal credo fin IRON rs Le programme pr c dent utilise la biblioth que CURL connexion curl _init URL initialise un objet CURL avec l URL atteindre curl_setopt connexion option valeur fixe la valeur de certaines options de la connexion Citons les deux utilis es dans le programme CURLOPT HEADER 1 permet d avoir les ent tes HTTP envoy es par le serveur CURLOPT NOBODY 1 permet d ignorer le document envoy par le serveur derri re les ent tes HTTP r alise la connexion URL avec les options demand es Affiche sur l cran tout ce que le serveur envoie ferme la connexion curl _exec connexi on curl _close connexi on Le programme pr c dent est plut t simple Cependant la biblioth que CURL ne permet pas de manipuler finement la r ponse du serveur par exemple l analyser ligne par ligne Le programme suivant f
105. Envoyer secret uneValeur HTTP 1 1 On voit qu il est beaucoup plus complexe que ce qui avait t rencontr jusqu maintenant On y retrouve la syntaxe GET URL HTTP 1 1 mais sous une forme particuli re GET URL param1 valeurl amp param2 valeur2 amp HTTP 1 1 o les parami sont les noms des contr les du formulaire web et valeuri les valeurs qui leur sont associ es Examinons les de plus pr s Nous pr sentons ci dessous un tableau a trois colonnes colonne 1 reprend la d finition d un contr le HT ML de l exemple colonne 2 donne l affichage de ce contr le dans un navigateur colonne 3 donne la valeur envoy e au serveur par le navigateur pour le contr le de la colonne 1 sous la forme qu elle a dans la requ te GET de l exemple contr le HTML visuel valeur s renvoy e s Les bases de la programmation web 37 lt input type radio value 0 ui name R1 gt O ui lt input type radio name R1 value non checked gt Non lt input type checkbox name C1 value un gt 1 lt input type checkbox name C2 value deux checked gt 2 lt input type checkbox name C3 value trois gt 3 Cases cocher lt input type text name txtSaisie size 20 value qqs mots gt Champ de saisie lt input type password nam e txtMdp size 20 value unMotD ePasse gt Mot de passe lt textarea rows 2 name areaSaisie cols 20 gt lignel ligne2 ligne3 lt textarea gt Bo te
106. Introduction la programmation WEB en PHP serge tahe istia univ angers fr septembre 2002 1 1 1 1 2 1 3 1 4 1 5 1 5 1 LES BASES LES COMPOSANTES D UNE APPLICATION WEB LES ECHANGES DE DONNEES DANS UNE APPLICATION WEB AVEC FORMULAIRE QUELQUES RESSOURCES NOTATIONS PAGES WEB STATIQUES PAGES WEB DYNAMIQUES PAGE STATIQUE HTML HYPERTEXT MARKUP LANGUAGE 1 5 2 UNE PAGE ASP ACTIVE SERVER PAGES 1 5 3 UN SCRIPT PERL PRACTICAL EXTRACTING AND REPORTING LANGUAGE 1 5 4 UN SCRIPT PHP PERSONAL HOME PAGE HYPERTEXT PROCESSOR 1 5 5 UN SCRIPT JSP JAVA SERVER PAGES 1 5 6 CONCLUSION 1 6 1 6 1 SCRIPTS COTE NAVIGATEUR UNE PAGE WEB AVEC UN SCRIPT VBSCRIPT COTE NAVIGATEUR 1 6 2 UNE PAGE WEB AVEC UN SCRIPT JAVASCRIPT COTE NAVIGATEUR 1 7 LES ECHANGES CLIENT SERVEUR 1 7 1 LE MODELE OSI 1 7 2 LE MODELE TCP IP 1 7 3 LE PROTOCOLE HTTP 1 8 LELANGAGE HTML 1 8 1 UN EXEMPLE 1 8 2 ENVOI A UN SERVEUR WEB PAR UN CLIENT WEB DES VALEURS D UN FORMULAIRE 2 INTRODUCTION A LA PROGRAMMATION WEB EN PHP PROGRAMMATION PHP LE FICHIER DE CONFIGURATION DE L INTERPRETEUR PHP CONFIGURER PHP A L EXECUTION CONTEXTE D EXECUTION DES EXEMPLES UN PREMIER EXEMPLE RECUPERER LES PARAMETRES ENVOYES PAR UN CLIENT WEB PAR UN POST 2 6 2 PAR UN GET 2 9 2 9 1 RECUPERER LES ENTETES HTTP ENVOYES PAR UN CLIENT WEB RECUPERER DES INFORMATIONS D ENVIRONNEMENT EXEMPLES GENERATION DYNAMIQUE DE FORMULAIRE 1 2 9 2
107. JavaScript IIS PWS Perl Apache IIS PWS PHP Apache IIS PWS Java Apache Tomcat Langages NET Langages de scripts c t navigateur VBScript IE Javascript IE Netscape Perlscript IE Java IE Netscape 6 2 O trouver les outils Netscape http www netscape com lien downloads Internet Explorer http www microsoft com windows ie default asp PHP http www php net http www php net downloads php Windows Binaries PERL http www activestate com http www activestate com Products http www activestate com Products ActivePer Annexes 136 http msdn microsoft com scripting suivre le lien windows script http java sun com http java sun com downloads html JSE http java sun com j2se 1 4 download html Apache http www apache org http www apache org dist httpd binaries win32 PWS inclus dans NT 4 0 Option pack for Windows 95 inclus dans le CD de Windows 98 http www microsoft com ntserver nts downloads recommended NT 40 ptPk win95 asp IIS http www microsoft com windows NT 2000 Tomcat http jakarta apache org tomcat JBuilder http www borland com jbuilder http www borland com products downloads download_jbuilder html Easy PHP http www easyphp org http www easyphp org telechargements php3 6 3 EasyPHP Cette application est tr s pr
108. L n est pas au format http machine port chemin r AD AST o See Exemples 111 Pa AMA retour return url anal yseURL sssseneseseshssececesssescssess ersecshnas otscececcs ssdess function ARR SED E mon UL deI demande cha ne analyser doit tre ie la tees mari enfants salaire format vali a preg nr s oui non s s d 1 3 s s d s i demande champs format invalide return array erreur gt Format mari enfants salaire invalide M c est bon Smari strtolower champs 1 return array marie gt marie enfants gt champs 2 salaire gt champs 3 anal yseDemande ssssosesspecscoscecerantesssossespenserepesescescesacasarasces function get mpots urll mpots demande j eton urllmpots URL interroger 11 demande dictionnaire contenant les champs marie enfants salaire II jeton un ventuel jeton de session ouverture d une connexion sur le port urllmpots port de urll mots host connexion fsockopen urll mpots host urll mpots port amp errno amp erreur retour si erreur f connexi on urn array erreurs gt array Echec de la connexion au site urllmpots host url mpots port l et me on envoie les entetes HTTP au serveur POST connexion url mpots j eton array optMarie gt demande mari txtEnfants gt demande enfants txtSalaire gt demande salaire Ut
109. ML du serveur pour construire les feuilles de style qui vont l accompagner Rappelons que celles ci font l objet de fichiers XSL part et ind pendants de l aplication PHP L infographiste peut donc travailler ind pendamment du d veloppeur les concepteurs des applications clientes ont eux aussi simplement besoin de conna tre la structure de la r ponse XML du serveur Les modifications que pourrait apporter l infographiste aux feuilles de style n ont aucune r percussion sur cette r ponse X ML qui reste toujours la m me C est un norme avantage Comment le d veloppeur peut il faire voluer son application PHP sans tout casser Tout d abord tant que sa r ponse XML ne change pas il peut organiser son application comme il veut Il peut aussi faire voluer la r ponse XML tant qu il garde les l ments lt erreur gt et lt simulation gt attendus par ses clients Il peut ainsi ajouter de nouvelles balises cette r ponse L infographiste les prendra en compte dans ses feuilles de style et les navigateurs pourront avoir les nouvelles versions de la r ponse Les clients programm s eux continueront fonctionner avec l ancien mod le les nouvelles balises tant tout simplement ignor es Pour que cela soit possible il faut que dans l analyse X ML de la r ponse du serveur les balises cherch es soient bien identifi es C est ce qui a t fait dans notre client XML de l application imp ts o dans les proc dures on disait sp cifiqu
110. P 89 lt td gt lt input type text name age size 3 value lt echo Srequ te gt age gt gt lt td gt lt tr gt lt table gt lt input type submit value Suite gt lt f or m gt lt erreurs if count Srequ te gt erreurs 0 gt lt hr gt lt font color red gt T erreurs suivantes se sont produites lt ul gt lt for i 0 i lt count requ te gt erreurs i echo lt li gt requ te gt erreurs i for gt lt ul gt lt font gt a RE lt body gt lt ht ml gt Le principe de cette page est tr s analogue celui de page2 php Elle affiche le contenu d un objet requ te contenant les champs nom ageet erreurs Elle affiche un formulaire dont les valeurs seront trait es par etape3 php lt form name frmAge method POST action etape3 php gt Le programme amp ape3 php traite donc les valeurs du formulaire de page2 r duites ici l ge lt php etape3 php configuration iim sen fegisrer alobale ori iy ini_set display_errors off II d marrage session session start on r cup re les param tres nom et age Srequ te gt age _POST age Ssession S_SESSION session Srequ te gt nom session gt nom normalement on doit avoir un nom et un age if isset requ te gt age isset requ te gt nom IiI si appel incorrect on envoie pagel i SESSI ON sessi on par pr
111. P est capable de travailler avec des pilotes O D BC Le tableau suivant donne les fonctions utiles conna tre connexion au SGBD connexion odbc_pconnect dsn user pwd connexion odbc_connect dsn user pwd dsn nom DSN Data Source Name de la machine sur laquelle s ex cute le SG BD user nom d un utilisateur connu du SG BD pwd son mot de passe connexion la connexion cr e odbc_pconnect cr e une connexion persistante avec le SGBD Une telle connexion n est pas ferm e la fin du script Elle reste ouverte Ainsi lorsqu il faudra ouvrir une nouvelle connexion avec le SG BD PHP cherchera une connexion existante appartenant au m me utilisateur S il la trouve il l utilise Il y a l un gain de temps odbc_connect cr e une connexion non persistante qu on ferme donc lorsque le travail avec le SG BD est termin requ tes SQL requ tePr par e odbc_prepare connexion requ te requ te une requ te SQL insert delete update select connexion la connexion au SG BD Programmation PHP 62 fer Analyse la requ te requ te et pr pare son ex cution La requ te ainsi pr par e est r f renc e par le r sultat requ tePr par e Pr parer une requ te pour son ex cution n est pas obligatoire mais am liore les performances puique l analyse de la requ te n est faite qu une fois On demande ensuite l ex cution de la requ te pr par e Si on demande l ex cution d une requ te non pr par
112. PHP 6 3 4 Administration de MySQL avec PhpMyAdmin Sur la page d administration d EasyPhp on clique sur le bouton PhpMyAdmin Address http 127 0 0 1 mysql Accueil Choisissez une MySQL base de donn es es Annexes Cr er une base de donn es Documentation Cr er Recharger MySQL Documentation Utilisateurs et privil ges Documentation Statistiques sur les bases de donn es Bienvenue phpMyAdmin 2 2 6 MySQL 9 29 49 max nt sur le serveur localhost utilisateur root localhost phpMyAdmin m Language French fr n Documentation de phpMyAdmin Afficher l tat du serveur MySQL Documentation r Afficher les informations relatives PHP Afficher les variables du serveur MySQL Documentation m Site officiel de phpMyAdmin Afficher les processus Documentation ChangeLog CVS Lists 142 La liste d roulante sous A cual permet de voir les bases de Accueil donn es actuelles base de donn es Le nombre entre parenth ses est le nombre de tables Si on Accueil choisit une base les tables de celles ci s affichent mysql 6 mysql A columns_priv amp db f amp func D host A tables_priv f user La page Web offre un certain nombre d op rations sur la base Base de donn es mysqi sur le serveur jocaihost Table Action Enregistrements Type Taille columns priv Afficher S lectionner Ins rer Propri t s Supprimer Vider 0 MyI
113. Program Files EasyPHP apache DocumentRoot E Program Files EasyPHP www lt Di rectory E Program Files EasyPHP www gt ErrorLog logs error log Serpe Alias Coi lol inf Ves i Program Files EasyPHP cgi bin lt Directory E Program Files EasyPHP cgi bin gt LoadModule php Files EasyPHP AddModule mod pp Spina php le r pertoire d installation du serveur Apache Lorsque dans le fichier de configuration apparaissent des noms relatifs de fichiers ils sont relatifs par rap port ce dossier le dossier racine de l arborescence des pages Web d livr es par le serveur Ici l url http machine repl ficl html correspondra au fichier E Program Files E asyP H P www repl ficl html fixe les propri t s du dossier pr c dent dossier des logs donc en fait lt ServerR oot gt logs aror log E Program Files E asyPH P apacha logs error log C est le fichier consulter si vous constatez que le serveur A pache ne fonctionne pas E Program F iles E asyPH P cgi bin sera la racine de l arborescence o l on pourra mettre des scripts CGI Ainsi l URL http machine ogi bin repl scripti pl sera l url du script CGI E Progam Files E asyPH P cgi bin rep1 scriptt pl fixe les propri t s du dossier ci dessus lignes de chargement des modules permettant Apache de travailler avec PHP4 fixe les suffixes des fichiers a consid rer comme des fichiers comme devant tre trait s par
114. RESSION D UN ARTICLE 9 6 6 EMISSIONS DE REQUETES ADMINISTRATEUR 9 6 7 TRAVAIL A FAIRE 9 7 FAIRE EVOLUER L APPLICATION 9 7 1 CHANGER LE TYPE DELA BASE DE DONNEES 9 7 2 AMELIORER LA SECURITE 9 7 3 FAIRE EVOLUER LE LOOK 9 7 4 AMELIORER LES PERFORM ANCES 9 8 POUR ALLER PLUS LOIN 9 9 PEAR DB A UNIFIED API FOR ACCESSING SQL DATABASES 9 9 1 DSN 9 9 2 CONNECT 9 9 3 QUERY 9 9 4 FETCH 168 169 169 171 171 171 174 174 174 174 176 177 180 180 183 184 184 189 190 191 191 191 195 198 201 203 204 204 204 208 209 210 211 211 212 212 213 Introduction Ce document est un support de cours ce n est pas un cours complet Des approfondissements n cessitent l aide d un enseignant et par ailleurs un certain nombre de th mes n ont pas t abord s Le contenu du document est issu du cours Introduction la programmation Web en JAVA qu on trouvera l URL http shiva istia univ angers fr tahe pub servlets servletsetjsp pdf La structure des deux documents est la m me On a simplement remplac le code Java par du code PHP Pour le lecteur connaissant Java et PHP ces deux documents permettent de comparer une solution Java et une solution PHP pour un m me probleme L tudiant trouvera dans k pr sent document les informations lui permettant la plupart du temps de travailler seul Il comporte peut tre encore des erreurs toute suggestion constructive est la bienvenue l adresse se
115. S Sa SS SS SS SS SSS SSS function existeUser S sUser sMdp v rification de l existence de l utilisateur sUser ayant le mot de passe sMdp rend int iErreur string sAdmin hashtable dDroits 1 pour toute erreur d exploitation de la base la liste aErreurs est alors renseign e 1 si l utilisateur n est pas trouv absent ou pas bon mot de passe 2 si l utilisateur existe mais n a aucun droit dans la table des droits SiErreur 3 si l utilisateur existe et est administrateur SiErreur 0 si l utilisateur existe et n est pas administrateur SsAdmin y ssi l utilisateur existe et est administrateur iErreur 3 sinon il est gal la cha ne vide SdDroits est le dictionnaire des droits de l utilisateur s il n est pas administrateur iErreur 0 sinon c est un tableau vide les cl s du dictionnaire sont les tables sur lesquelles l utilisateur a des droits la valeur associ e cette table est son tour un dictionnaire o les cl s sont les droits consulter ajouter modifier supprimer et les valeurs les cha nes y yes ou n no selon les cas iErreur SiErreur iErreur existeUser PT SR RER SS SRE RSS function getCodes vend le tableau des codes getCodes classe gt Commentaires Ja classe articles utilise la biblioth que PEAR DB pour ses acc s la base de donn es d o la commande require once DB php Cette inclusion sippose que le script DB php so
116. SAM 10 Ko db Afficher S lectionner Ins rer Propri t s Supprimer Yider 1 MyISAM 3 1 Ka func Afficher S lectionner Ins rer Propri t s Supprimer Vider 0 MyISAM 1 0 Ko host Afficher S lectionner Ins rer Propri t s Supprimer Vider D MyISAM 10 Ka tables priv Afficher S lectionner Ins rer Propri t s Supprimer Wider O MyISAM 10 Ko user Afficher S lectionner Ins rer Propri t s Supprimer Yider 1 MyISAM 2 4 Ko 6 tables Somme 2 9 6 Ko Tout cocher Tout d cocher Pour la s lection gt Si on clique sur le lien A fficher de user Annexes 143 Base de donn es mysql table user sur le serveur jocaihost requ te SQL requ te SQL Modifier SELECT FROM user LIMIT 0 30 Host User Password Select priv Insert priv Update_priv Modifier Effacer localhost root y Y ig Ins rer un nouvel enregistrement Il n y aici qu un seul utilisateur root qui est l administrateur de MySQL En suivant le lien M odifier on pourrait changer son mot de passe qui est actuellement vide ce qui n est pas conseill pour un administrateur Nous n en dirons pas plus sur PhpM yA dmin qui est un logiciel riche et qui m riterait un d veloppement de plusieurs pages 6 4 PHP Nous avons vu comment obtenir PHP au travers de l application EasyPhp Pour obtenir PHP directement on ira sur le site http www php net PHP n est pas utilisable que dans le cadre du Web On peut l utiliser comme ngage de scripts sous Windows Cr ez
117. SERVEUR PWS 6 9 1 INSTALLATION 6 9 2 PREMIERS TESTS 6 9 3 LIEN PHP PWS 6 10 TOMCAT SERVLETS JAVA ET PAGES JSP JAVA SERVER PAGES 6 10 1 INSTALLATION 6 10 2 DEMARRAGE ARRET DU SERVEUR WEB TOMCAT 6 11 JBUILDER 7 CODE SOURCE DE PROGRAMMES 7 1 LECLIENT TCP GENERIQUE 7 2 LE SERVEUR TCP GENERIQUE 8 JAVASCRIPT 8 1 RECUPERER LES INFORMATIONS D UN FORMULAIRE 8 1 1 LE FORMULAIRE 8 1 2 LE CODE 103 104 109 116 118 118 123 123 124 129 132 135 135 136 136 136 136 137 138 139 141 142 144 144 145 147 148 148 148 149 150 150 150 151 151 151 152 153 155 155 160 166 166 166 166 8 2 LES EXPRESSIONS REGULIERES EN JAVASCRIPT 8 2 1 LA PAGE DE TEST 8 2 2 LECODEDE LA PAGE 8 3 GESTION DES LISTES EN JAVASCRIPT 8 3 1 LE FORMULAIRE 8 3 2 LE CODE TUDE DE CAS 9 GESTION D UNE BASE D ARTICLES SUR LE WEB 9 1 INTRODUCTION 9 2 LA BASE DES DONNEES 9 3 LES CONTRAINTES DU PROJET 9 4 LA CLASSE ARTICLES 9 5 LA STRUCTURE DE L APPLICATION WEB 9 5 1 LA PAGE TYPE DE L APPLICATION 9 5 2 LE TRAITEMENT TYPE D UNE DEMANDE D UN CLIENT 9 5 3 LE FICHIER DE CONFIGURATION 9 5 4 LA FEUILLE DE STYLE ASSOCIEE A LA PAGE TYPE 9 5 5 LE MODULE D ENTREE DE L APPLICATION 9 5 6 LA PAGE D ERREURS 9 5 7 LA PAGE D INFORMATIONS 9 6 LE FONCTIONNEMENT DE L APPLICATION 9 6 1 L AUTHENTIFICATION 9 6 2 AJOUT D UN ARTICLE 9 6 3 CONSULTATION D ARTICLES 9 6 4 MODIFICATION D ARTICLES 9 6 5 SUPP
118. StreamReader client getIinputStream boucle lecture lignes de texte du flux IN whil e true lecture flux r seau r ponse I N readLine 11 flux ferm if r ponse null break I affichage System out printin lt r ponse while catch Exception ex erreur System err printl n L erreur suivante s est produite ex get Message catch HE ten on ferme les flux try Annexes mout printin fin du Thread de lecture des r ponses du serveur au client numClient 165 IN close client closel catch Exception ex II on signale la fin du thread Ce ee du Thread de lecture des demandes du client numClient run i classe 8 JAVASCRIPT Nous montrons dans cette partie trois exemples d utilisation de Javascript dans les pages WEB Nous nous centrons sur la gestion des formulaires mais Javascript peut faire bien davantage 8 1 R cup rer les informations d un formulaire L exemple ci dessous montre comment r cup rer au sein du navigateur les donn es entr es par l utilisateur au sein d un formulaire Cela permet en g n ral de faire des pr traitements avant de les envoyer au serveur 8 1 1 Le formulaire On aun formulaire rassemblant les composants les plus courants et d un bouton Afficher permettant d afficher les saisies faites par l utilisateur Ce texte est modifiable champ cach secret champ textuel simple champ textuel multiple Ce texte est modifiable
119. T lt tr gt lt td gt lt input type text name txtModele size 20 gt lt td gt lt td gt lt input type text name txtChaine size 20 gt lt td gt name cmdAfficher value Jouer le test onclick afficherInfos gt lt input type button name cmdAjouter value Ajouter aux exemples onclick ajouter gt lt tr gt lt table gt lt hr gt eas de l instruction champs expression r guli re exec chai ne lt h2 gt lt ta e gt lt tr gt Annexes 170 lt td gt lt select name IstInfos size 3 gt lt select gt lt h2 gt Exempl es lt h2 gt lt table gt lt tr gt n center gt Model es lt t n center gt Chalnes lt t TO lt td gt lt select name lt opti on gt d lt option gt ARE lt option gt d lt option gt d lt select gt lt td gt lt t d gt lt select name lt option gt 67 lt option gt 56 5a 5 on gt i tion gt ines size 1 gt lt ion gt option gt ption gt ea lt option gt 45a lt option gt 4 lt select gt lt td gt lt td gt lt td gt lt tr gt lt form gt lt body gt lt ht ml gt os 8 3 Gestion des listes en JavaScript 8 3 1 Le formulaire aaa 8 3 2 Le code lt ht ml gt Annexes 171 lt head gt lt title gt Les listes en Javascript lt title gt lt script language javascript gt ajouter function ajouter L1 L2 T ajoute la valeur
120. TICLES Le m me conseiller fait d autres propositions il sait que dans le d veloppement logiciel il faut s parer nettement les couches pr sentation et les couches traitement L architecture d une application web est souvent la suivante Interface Logique Sources de utilisateur applicative donn es L interface utilisateur est ici un navigateur web mais ela pourrait tre galement une application autonome qui via le r seau enverrait des requ tes HTTP au service web et mettrait en forme les r sultats que celui ci lui envoie La logique applicative est constitu e des scripts traitant les demandes de l utilisateur ici des scripts PHP La source de donn es est souvent une base de donn es mais cela peut tre aussi un annuaire LD AP ou un service web distant Le d veloppeur a int r t maintenir une grande ind pendance entre ces trois entit s afin que si l une d elles change les deux autres n aient pas changer ou peu Le conseiller informatique du commer ant fait alors les propositions suivantes On mettra la logique m tier de l application dans une classe PHP Ainsi le bloc Logique applicative ci dessus sera constitu des l ments suivants Annexes 176 Sources de donn es D ans le bloc Logique A pplicative on pourra distinguer le bloc TE Interface d Entr e qui est la porte d entr e de l application Elle est la m me quelque soit le type de client le bloc Classes m tier qui regroupe des cla
121. TP 1 1 200 OK 2 Server serveur tcp generique 2 Connection close 2 Content Type text html 2 Nous ne donnons pas la taille du fichier que nous allons envoyer C ontent L ength mais nous contentons de dire que nous allons fermer la connexion Connection dose apr s envoi de celui ci Cela est suffisant pour le navigateur En voyant la connexion ferm e il saura que la r ponse du serveur est termin e et affichera la page HTML qui lui a t envoy e Cette derni re est la suivante lt html gt lt head gt lt title gt Serveur generique lt title gt lt head gt lt body gt lt center gt lt h2 gt Reponse du serveur generique lt h2 gt lt center gt lt body gt lt html gt L utilisateur ferme ensuite la connexion au client en tapant la commande fin Le navigateur sait alors que la r ponse du serveur est termin e et peut alors l affiche Serveur generique Microsoft Internet Explorer Fie Edit View Favorites Tools Help Bak gt A GQsearch Favorites 4 B Sp M S Address a http flocalhost 88 exemple html Reponse du serveur generique Si ci dessus on fait V iew Source pour voir ce qu a re u le navigateur on obtient A exemple 1 Bloc notes Fichier Edition Format lt html gt lt head gt lt title gt serveur generique lt tit le gt lt head gt lt body gt lt center gt lt h2 gt Reponse du serveur generique lt h2 gt lt center gt
122. To Subject test hene 1 ligne lgne3 Annexes 156 On remarquera que le service SMTP ne peut d tecter si un exp diteur est valide ou non Aussi ne peut on jamais faire confiance au champ from d un message Ici l exp diteur machin univ angers fr n existait pas Ce client tcp g n rique peut nous permettre de d couvrir le protocole de dialogue de services internet et partir de l construire des classes sp cialis es pour des clients de ces services D couvrons le protocole de dialogue du service POP Post Office Protocol qui permet de retrouver ses m ls stock s sur un serveur I travaille sur le port 110 Dos gt java client TCPgenerique istia univ angers fr 110 Commandes lt OK Qpopper version 4 0 3 at istia univ angers fr starting help lt ERR Unknown command help user st lt OK Password required for st pass monpassword lt OK st has 157 visible messages 0 hidden in 11755927 octets PIRES sta OK 157 visible messages 11755927 octets 1 892847 2 171661 156 2843 157 2796 SE Petr TIS lt OK 2796 octets lt Received from lagaffe univ angers fr lagaffe univ angers fr 193 49 144 1 lt by istia univ angers fr 8 11 6 8 9 3 with ESMTP id g4D6wZs26600 lt Mon 13 May 2002 08 58 35 0200 lt Received from jaume 193 49 146 242 lt by lagaffe univ angers fr 8 11 1 8 11 2 Ge020000215 with SMTP id g4D6wSd37691 lt Mon 13 May 2002 08 58 28
123. a demande au serveur Web et il va la faire en lui envoyant des lignes de texte des commandes au format HTTP Il va envoyer au serveur la partie chemin infosde l URL le serveur lui r pondra de la m me facon et dans le m me tuyau l un des deux partenaires prendra la d cision de fermer le tuyau Cela d pend du protocole HTTP utilis Avec le protocole HTTP 1 0 le serveur ferme la connexion apr s chacune de ses r ponses Cela oblige un client qui doit faire plusieurs demandes pour obtenir les diff rents documents constituant une page web ouvrir une nouvelle connexion chaque demande ce qui a un co t Avec le protocole HTTP 1 1 le client peut dire au serveur de carder la connexion ouverte jusqu ce qu il lui dise de la fermer Il peut donc r cup rer tous les documents d une page web avec une seule connexion et fermer lum me la connexion une fois le dernier document obtenu Le serveur d tectera cette fermeture amp fermera lui aussi la connexion Les bases de la programmation web 19 Pour d couvrir les changes entre un client et un serveur web nous allons utiliser un client TCP g n rique C est un programme qui peut tre client de tout service ayant un protocole de communication base de lignes de texte comme c est le cas du protocole HTTP Ces lignes de texte seront tap es par l utilisateur au clavier Cela n cessite qu il connaisse le protocole de communication du service qu il cherche atteindre La r ponse du serveur
124. a fonction PHP urlencode fait ce travail Le travail inverse est fait par urldecode Enfin on notera que si on a un jeton il est envoy avec un ent te HTTP Cookie PH PSE SSID jeton il nous reste tudier la fonction qui analyse la r ponse du serveur I function EY e do aumen document document HTML on cherche soit la liste d erreurs II soit le tableau des simulations reurs array ation du r sultat i i mul ations array pr par poorer impotsis rappelons que les erreurs sont envoy es par le serveur sous la forme lt li gt message d erreur lt li gt L expression r guli re lt li gt lt li gt doit permettre de r cup rer ces informations Nous avons ici utilis le signe pour d limiter l expression r guli re plut t que le signe car celui ci existe aussi dans l expression r guli re ellem me La fonction preg match all modde document champs PREG SET ORDER permet de r cup rer butes les occurrences de mod le trouv es dans document Celles ci sont mises dans le tableau champs Ainsi champs i repr sente l occurrence n i de modde dans document Dans champs iJ 0 est plac e la cha ne correspondant au mod le Si celui ci aait des parenth ses la cha ne correspondant la premi re parenth se est plac e dans champs i 1 la seconde dans champs i 2 et ainsi de suite Le code pour r cup rer les erreurs sera donc le suivant Exemples 115 Il y a t il u
125. a pr sentation de la page type soient chang es Les modifications auront lieu deux endroits dansle script main php qui d finit la structure de la page type Faites voluer celle ci dans la feuille de style qui donne le look de l application Changez celui ci Annexes 208 9 7 4 Am liorer les performances Pour l instant nous avons opt pour un navigateur client l ger il ne fait rien d autre que de la pr sentation On peut lui faire faire du traitement en incluant des scripts dans les pages Web qu on lui envoie Ceux ci peuvent tre en diff rents langages notablement vbscript et javascript Internet Explorer et Netscape dominent le march des navigateurs dans une proportion proche de 60 40 Par ailleurs IE n existe que dans le domaine Windows et pas sur Unix par exemple o c est Netscape qui pr domine Netscape n ex cute pas nativement les scripts vbscript alors que les deux navigateurs ex cutent les scripts javascript Comme Netscape occupe encore une part significative du march des navigateurs les scripts vbscript sont viter C est donc javascript qui est g n ralement utilis dans les scripts c t client Sont d l gu s aux scripts c t client des traitements o le serveur n a pas intervenir Dans notre application il serait int ressant que le navigateur client n envoie une demande au serveur qu apr s l avoir v rifi e Ainsi il est inutile d envoyer au serveur une demande d authentification alo
126. ae Sa ee erreur une erreur de plus ee ees EM UE trim contenu i endEl ement Hi I la fonction de traitement du contenu d une balise function get Data parser data 11 donn es globales global balise contenu H s agit il d une balise d erreur if balise erreur on cumule au contenu de la balise courante contenu data aa get Data Commentaires la fonction getInfos document commence par cr er un parseur puis le configure et enfin lance l analyse du document document on cr e un objet d analyse de texte xml xml parser xml parser create on indique quelles fonctions ex cuter en d but et fin de balise nl sot element _handler xml_parser startElement endEl ement on indique quelle fonction ex cuter lors de la rencontre de donn es ml_set character data handler xm _ parser getData on fait l analyse de document ml _parse xml_parser document au retour de l analyse on lib re les ressources allou es au parseur et on rend le dictionnaire impots on lib re les ressources occup es par l analyseur xml xml parser free xml parser Hi ila return i mpots la fonction startE lement parser name attributs est appel e a chaque d but de balise Elle o note la balise name dans un tableau de balises balises Ce tableau est g r comme une pile la rencontre du symbole de fin de balise la derni re balise empil e dans balises sera
127. age propri t s personne pl With pl wscript echo nom amp nom woe Se a age amp age End Wit Ce programme utilise des objets Appelons le objets vbs le suffixe vbs d signe un fichier vbscript Positionnons nous sur le r pertoire dans lequel il se trouve et ex cutons le E data serge windowsScripting vbscript poly objets gt cscript objets vbs Microsoft R Windows Script Host Version 5 6 Copyright C Microsoft Corporation 1996 2001 All rights reserved nom dupont age 18 Maintenant construisons le programme javascript suivant qui utilise des tableaux Annexes 145 tableau dans un variant tableau vide bleau new TO fiche t at eau tablea croit dynamiquement r i 0 i lt 3 i tableau push i 10 affichage tableau ffiche tableau encore or i 3 1 lt 6 i tabl eau push i 10 ffiche tabl eau tableaux P usieurs dimensions MBcirip eMo arssesoscusssssssosscsoesenee ne ush new Array pil arse i push i 10 4j 2 tabl eau2 fin ngth i ate aul i tableaulil affiche2 tabl eau ichage tableau i lt tabl eau ength i j 0 cea eaten length Baies noie echo tableau j tableau i j or j D y gt gt oeo Ssa Oo eo Ce programme utilise des tableaux Appelons le tableaux js le suffixe js d signe un fichier javascript Positionnons nous sur le r pertoire dans lequel il se tro
128. aire imp t jeton le jeton de session une fois le r sultat de getImpots obtenu le programme affiche les r sultats et se termine n jeton n 11 des erreurs if count impots erreurs 0 msg d erreurs echo Les erreurs suivantes se sont produites n for i 0 i lt count impots erreurs i echo impots erreurs i n pee jelsef 11 pas d erreurs affichage des simulations echo un note el nie for i 0 i lt count impots si mul ations i echo pu implode impots simulat ions i J n FEI Hi fin du programme exit 0 analysons maintenant la fonction getImpots urlImpots dem ande jeton qui doit o cr er une connexion TCP IP sur le port urlImpots port de la machine urll mpots host o envoyer au serveur web les ent tes HTTP qu il attend notamment le jeton de session s il y en a un o envoyer au serveur web une requ te PO ST avec les param tres contenus dans le dictionnaire demande o analyser la r ponse du serveur web pour y trouver soit une liste d erreurs soit un tableau de simulations l envoi des ent tes HTTP se fait l aide d une fonction POST II on envoie les entetes HTTP a sen POST connexion url mpots je array optMarie ne txt Enfants gt demande enfants txtSalaire gt demande salaire une fois les ent tes HTTP envoy s la fonction getImpots lit en totalit de la r ponse du serveur et la met dans document La r ponse est
129. ait la m me chose que le pr c dent mais avec les fonctions r seau de base de PHP Il sera le point de d part pour l criture d un client notre application cydedevie php lt php I syntaxe 0 URL GET HEAD il faut trois arguments if argc 3 Programmation PHP 76 1 msg d erre u ERS Gunners argv 0 URL GET HEAD r 1 mo I connexion et affichage gr sultats get URL argvil if isset resultats gt erre Il erreur on L erreur suivante s est produite r sultats gt erreur n else E antes iane r ponse du serveur echo r sultats gt r ponse H1 1 fin exit 0 function getURL URL header I se connecte URL I fait un GET ou un HEAD selon la valeur de header la r ponse du serveur forme le r sultat de la fonction yse de l URL rse url URL rotocole olower url scheme http a Des LEE URL n est pas au format http machine port chemin n r sultats u Bees v37 o oo oo oO gt gt erreur URL URL n est pas au format http machinel port chemnl sultats iS i po port port 80 path EAE a Oo a D query i ae T URL n est pas au format http machine port chemin sultats A SS Oo i D de header hea eo SG A Al Bees Nes Hs head fee EGET amp header HEAD msg rf erreur AU gt erreur m thode header doit tre GET ou HEAD
130. amp de saisie fun tete Mot de passe Fer lignei a Bo te de saisie lignez lignes ea combo liste choix simple choix3 x liste choix multiple liste2 Effacer bouton envoyer Envoyer r tablir R tablir S il appuie sur le bouton Envoyer le serveur lui renvoie la liste des valeurs du formulaire trois i lun texte tatMdp abcdefeh lene 1 ligne areaSasie ligne3 hgne4 hgne5 cmb Valeurs chorx3 stl liste5 liste3 is liste5 secret une Valeur TT Le formulaire est une page HTML statique balises html lt ht ml gt head gt i i lt title gt balises lt title gt Programmation PHP 65 lt script l anguage avaScript gt function effacer alert Vous avez cliqu sur le bouton Effacer leffacer lt script gt lt head gt lt body background images standard jpg gt lt form method POST action parameters php gt lt tr gt i lt td gt Etes vous mari e lt td gt lt td gt lt input type radio value oui name R1 gt Oui lt input type radio name R1 value non checked gt Non lt td gt Cases a cocher lt td gt lt td gt lt input type checkbox name C1 value un gt 1 lt input type checkbox name C2 value deux checked gt 2 lt input type checkbox name C3 value trois gt 3 lt td gt lt tr gt lt tr gt lt td gt Champ de saisie lt td gt lt td gt lt i
131. appelle valeurs p1 php pour g n rer le formulaire initial si la requ te du client tait vide ou valeurs p2 php pour g n rer la r ponse si on avait une requ te valide Le programme valeursi php est le suivant lt ht ml gt lt head gt lt title gt G n ration de formul aire lt title gt lt head gt lt body gt lt h2 gt Choisissez un nombre lt h2 gt lt hr gt lt form name frmvaleurs method post action valeurs php gt lt select name cmbValeurs size 1 gt lt Hae Se on leu Si it lt option gt valeurs i lt option gt n or Genes ue type submit value Envoyer name cmdEnvoyer gt lt f or m gt lt body gt lt html gt La liste des valeurs du combo est g n r e dynamiquement partir du tableau valeurs transmis par valeurs php Le programme valeurs p2 php g n re la r ponse lt ht ml gt lt head gt lt title gt r ponse lt title gt lt head gt lt body gt lt h2 gt Vous avez choisi le nombre lt php echo choix gt lt h2 gt lt body gt lt ht ml gt Ici on se contente d afficher la valeur de la variable choix l aussi transmise par valeurs php 2 9 2 G n ration dynamique de formulaire 2 Nous reprenons l exemple pr c dent en le modifiant de la fa on suivante Le formulaire propos est toujours le m me Q Q http fflocalhost poly exemples 2 valeurs php Q OL QO O O rasoen Choisissez un nombre quatre x SE La r ponse
132. arser php simulations xml SIMULATIONS SIMULATION MARIE oui ENFANTS 2 SALAIRE 200000 IMPOT 22504 SIMULATION SIMULATION MARIE non ENFANTS 2 SALAIRE 200000 IMPOT 33388 SIMULATION SIMULATIONS L application xmlParser php contient tout ce dont nous avons besoin dans notre application impots puisqu elle a t capable de retrouver soit les erreurs soit les simulations que pourrait envoyer le serveur web Examinons son code lt DU v rification appel if count argv 2 msg d erreur ier XML cture et le contenu du fichier fichierXML RES syntaxe argv 0 fichierXML n in SI EL lif Il initialisations file argv 1 11 le fichier xml f depth 0 11 niveau d indentation profondeur dans l arborescence le programme on cr e un objet d analyse de texte xml Sxml_parser xml_parser_create on indique quelles fonctions ex cuter en d but et fin de balise xml_set_element_handler Sxml_parser startElement endElement on indique quelle fonction ex cuter lors de la rencontre de donn es xml_set_character_data_handler Sxml_parser afficheData ae ea hie der ae d ouvrir le fichier xm file n exploitation du fichier xml par blocs de 4096 octets while data fread fp 4096 analyse des donn es lues if xml_parse Sxml_parser data feof Sfp il s est produit une erreur fprintf STDERR erreur XML s la ligne d n xml_error_stri
133. ati ons sarray champs ill1 champs i 2 champs i 3 retour r sultat return impots lif I pas normal d arriver la return i mpots getinfos 2S Commentaires champs i 4 le programme commence par v rifier la validit des param tres qu il a re us Il utilise pour ce faire deux fonctions analyseU RL qui v rifie la validit de l URL et analyseD emande qui v rifie les autres param tres le calcul de l imp t est fait par la fonction getI mpots impots getl mpots urllmpots demande argv 5 la fonction getImpots est d clar e comme suit eee ese cb obeosrscccssesossssebocecoesaneseassssecbcasesaceestss function get mpots ur lmpots demande j eton urllmpots URL interroger 11 demande dictionnaire contenant les champs marie enfants salaire II jeton un ventuel jeton de session urllmpots est un dictionnaire contenant les champs host machine o r side le service web port son port de service path le chemin de la ressource demand e demande est un dictionnaire contenant les champs mari oui non tat marital enfants nombre d enfants Exemples 113 salaire salaire annuel jeton est le jeton de session La fonction rend comme r sultat un dictionnaire ayant les champs erreurs tableau de messages d erreurs simulations tableau de simulations une simulation tant elle m me un tableau de quatre l ments mari enfants sal
134. atique en ce qu elle am ne dans un m me paquetage le serveur Web Apache 1 3 x le langage PHP 4 x le SGBD MySQL 3 23 x un outil d administration de MySQL PhpMyAdmin gt gt gt gt L application d installation se pr sente sous la forme suivante oa easyphp L installation d EasyPHP ne pose pas de probl me et une arborescence est cr e dans le syst me de fichiers Address IS C Program Files EasyPHP Modifi le phpmyadmin safe easy php exe ex cutable de l application Dossier de Fichiers Dossier de Fichiers Dossier de fichiers Dossier de Fichiers Dossier de Fichiers Dossier de Fichiers Dossier de Fichiers Dossier de Fichiers Dossier de Fichiers apache l arborescene du serveur apache Annexes 24 05 2002 08 18 24 05 2002 08 18 24 05 2002 08 18 24 05 2002 08 18 24 05 2002 08 18 24 05 2002 08 18 24 05 2002 08 18 24 05 2002 08 18 24 05 2002 08 18 E easyphp exe 120KB Applicetion 15 04 2002 10 52 easyphp ini 1KB Parametres de confi 09 07 2002 18 37 EasyPHP log SKB Fichier LOG 18 07 2002 07 53 2 licences txt 25KB Texte seulement 02 04 2002 14 36 G phpini exe 452KB Applicetion 10 06 2001 10 36 an uninsOO0 dat 74KB Fichier DAT 24 05 2002 08 18 gf unins000 exe 73KB Applicetion 24 05 2002 08 18 mysql l arborescence du SGBD mysql phpmyadmin l arborescence de l application phpmyadmin php l arborescence de php Wawa racine de l arborescence des pages web d
135. availler sur la partie 2 de la page puisqu il n a plus acc s au code HTML de celle ci Dans la premi re version il le pouvait Aucune des deux m thodes n est donc parfaite 2 9 3 G n ration dynamique de formulaire 3 Nous reprenons le m me probl me que pr c demment mais cette fois ci les valeurs sont prises dans une base de donn es Celle ci est dans notre exemple une base MySQL gt la base s appelle dbValeurs gt son propri taire est admD bValeurs ayant le mot de passe mdpD bValeurs Programmation PHP 55 gt la base a une unique table appel e tvaleurs gt cette table n a qu un champ entier appel valeur dos gt mysql database dbValeurs user admDbValeurs password mdpDbValeurs mysql gt show tables 1 row in set 0 00 sec mysql gt describe tvaleurs FH Field Type Null Key Default Extra valeur int 11 10 rows in set 0 00 sec Dans une application utilisant une base de donn es on trouvera g n ralement les tapes suivantes 1 Connexion au SGBD 2 Emission de requ tes SQ L vers une base du SG BD 3 Traitement des r sultats de ces requ tes 4 Fermeture de la connexion au SG BD Les tapes 2 et 3 sont r alis es de fa on r p t e la fermeture de connexion n ayant lieu qu la fin de l exploitation de la base C est un sch ma relativement classique pour toute personne ayant exploit une base de donn es de fa on interact
136. b amp txtMdp ceciestsecret area Saisie les tbases de lat0D 0Aprogrammation web cmbValeurs choix3 amp lsti liste3 amp lst2 listel amp lst2 liste3 amp cmdRenvoyer Envoyer secret uneValeur HTTP 1 1 L URL demand e est html balises htm On passe de plus a cette URL des valeurs qui sont celles du formulaire Pour l instant l URL html balises htm qui est une page statique n utilise pas ces valeurs Si bien que le GET pr c dent est quivalent a lt GET html balises htm HTTP 1 1 et c est pourquoi le serveur nous a renvoy de nouveau la page initiale On remarquera que le navigateur affiche bien lui l URL compl te qui a t demand e ET balises Microsoft Internet Explorer p Fie Edit View Favorites Tools Help Back A 2 A Search Favorites Meda lt 4 Es Sh ao a Address ciestsecret amp areaSaisie les bases de la0D 0Aprogrammation web amp cmbvaleurs choi 38lst1 liste38lst2 liste 1 amp lst2 listeS amp cmdRenvoyer Envoyer amp secret unevaleur v 1 8 2 2 M thode POST Le document HTML est programm pour que le navigateur utilise maintenant la m thode POST pour envoyer les valeurs du formulaire au serveur web lt form method POST gt Nous arr tons le serveur web et lan ons le serveur TCP g n rique d j rencontr mais un peu modifi pour l occasion sur le port 81 E data serge JAVA SOCKETS serveur g n rique gt java serveurTCPgenerique2 81 Serveur g n rique lanc s
137. c est un serveur A pache c st Modi fi ed date de derni re modification de la ressource demand e par le client ag x Accept Ranges bytes unit de mesure des donn es envoy es Ici l octet byte Content Length 161 nombre de bytes du document qui va tre envoy ap s les ent tes HTTP Ce nombre est en fait la taille en octets du fichier essail html E data serge web essais gt dir essail html Les bases de la programmation web 21 08 07 2002 10 00 161 essail htm Connection close le serveur dit qu il fermera la connexion une fois le document envoy Content type text html le serveur dit qu il va envoyer du texte text au format HTML html Le client re oit ces ent tes HTTP et sait maintenant qu il va recevoir 161 octets repr sentant un document HTML Le serveur envoie ces 161 oct ets imm diatement derri re la ligne vide qui signalait la fin des ent tes HTTP lt lt html gt lt head gt lt title gt essai 1 une page statique lt title gt lt head gt lt body gt lt center gt lt h1 gt Une page statique lt h1 gt lt body gt lt lt html gt On reconna t l le fichier HT ML construit initialement Si notre client tait un navigateur apr s r ception de ces lignes de texte il les interpr terait pour pr senter l utilisateur au clavier la page suivante essai 1 une page statique Microsoft Internet Explorer File Edit View Favorites Tools Help Bak gt O A
138. cal align font family SELEC TERU background text align Aqua Color BOT Garamond D1E1F8 fixed center middle Garamond 6495ED center Nous n entrerons pas dans les d tails de cette feuille de style Nous l accepterons telle quelle Un peu plus loin mus verrons comment la construire et la modifier Il existe des logiciels pour cela N anmoins indiquons le r le des attributs de pr sentation utilis s dans la feuille r git la pr sentation de la balise HTML FI ELDSET LEGEND NPUT NPUT TEXT NPUT SUBMI T TH TD menutitle TD menubl ock TD libell lt BODY gt lt H1 gt Header1 lt A gt Anchor fixe les attributs de pr sentation de l ancre lorsque l utilisateur passe la souris dessus lt FIELD SET gt cette balise n est pas reconnue par tous les navigateurs lt LEGEND gt cette balise n est pas reconnue par tous les navigateurs lt INPUT gt lt INPUT class TEXT gt lt INPUT class SUBMIT gt lt TH gt Table Header lt TD class menutitle gt Table D ata lt TD class menublock gt lt TD class libell gt Voyons sur un exemple comment peuvent tre crites ces r gles de pr sentation Dans cet exemple nous utiliserons le logiciel TopStyle Lite disponible gratuitement l URL http www bradsoft com Une fois charg e la feuille de style on a une fen tre a trois zones 1 une zone d dition de texte Les attribu
139. ch sinon il ne l est pas 1 8 1 5 Cases a cocher lt input type checkbox name C1 value un gt 1 lt input type check box name C 2 value deux check ed gt 2 lt input type check box name C 3 value trois gt 3 cases cocher Cases cocher O1 M2 O3 balise HTML lt input type checkbox attribut2 valeur2 gt texte affiche une case cocher avec texte c t attributs name C1 nom du contr le Les cases cocher peuvent porter ou non le m me nom Les cases portant le m me nom forment un groupe de cases associ es value valeur valeur affect e la case cocher Il ne faut pas confondre cette valeur avec le texte affich a c t du bouton radio Celui ci n est destin qu l affichage checked si ce mot cl est pr sent le bouton radio est coch sinon il ne l est pas 1 8 1 6 Liste d roulante combo Combo lt sde size 1 name anbV aleurs gt lt option gt choix 1 lt option gt lt option Sdected gt choix 2 lt option gt lt option gt choix 3 lt option gt lt select gt combo choix balise HTML lt select size Be name gt lt option selected gt lt option gt lt select gt affiche dans une liste les textes compris entre les balises lt option gt lt option gt attributs name cmbValeurs nom du contr le size 1 nombre d l ments de liste visibles size 1 fait de la liste l quivalent d un combobox
140. champs et envoie le tout au serveur avec le bouton Ajouter qui est de type submit Aucune v rification n est faite c t client C est le serveur qui les fait Il peut envoyer en r ponse une page d erreurs comme sur l exemple ci dessous Les erreurs suivantes se sont produites Prix x invalide Stock actuel x invalide Stock minimum x invalide Retour la page d ajout d article action utilisateur bouton Ajouter param tres envoy s action addArticle phase 1 amp PHPSESSID PHPSESSID page r ponse erreurs php Le lien Retour la page d ajout d article permet de revenir la page de saisie Annexes 194 Demande R ponse Ajouter un nouvel article erreurs Les erreurs suivantes se sont produites auet code Prix x invalide Stock actuel x invalide nom Stock minimum x invalide prix Retour la page d ajout d article stock actuel stock minimum x action utilisateur Jien Retour la page d ajout d article param tres envoy s action addArticle phase 2 amp PHPSESSID PHPSE SSID page r ponse article php Si l ajout se fait sans erreurs l utilisateur re oit un message de confirmation Demande R ponse nom calculatrice prix 100 stock actuel 11 stock minimum 2 action utilisateur bouton Ajouter param tres envoy s action addArticle phase 1 amp PH PSE SSID PHPSESSID page r ponse infos php 9 6 3 Consultation d articles Le lien du menu Lister
141. che PHP Windows Linux et IIS PHP Windows o la technologie ASP NET sur les plateformes Windows qui associent le serveur IIS un langage NET C VB NET o la technologie des servlets Java et pages JSP fonctionnant avec diff rents serveurs Tomcat Apache IIS et sur diff rentes plateformes Windows Linux C est cette deni re technologie qui sera plus particuli rement d velopp e dans ce document 1 6 Scripts c t navigateur Une page HTML peut contenir des scripts qui seront ex cut s par le navigateur Les langages de script c t navigateur sont nombreux En voici quelques uns Navigateurs utilisables V bscript IE Javascript IE Netscape Les bases de la programmation web 12 PerlScript IE Java IE Netscape Prenons quelques exemples 1 6 1 Une page Web avec un script Vbscript cot navigateur La page vbs1 html lt ht ml gt lt head gt lt title gt essai une page web avec un script vb lt title gt lt script language vbscript gt function reagir alert Vous avez cliqu sur le bouton OK end function lt script gt lt body gt lt center gt lt hl gt Une page Web avec un script VB lt h1 gt lt t abl e gt lt tr gt lt td gt Cliquez sur le bouton lt td gt lt tr gt lt table gt lt body gt lt ht ml gt La page HTML ci dessus ne contient pas simplement du code HTML mais galement un programme destin tre ex cut pa le navigateur qui aura charg cet
142. close Transfer Encoding chunked Content Type text html compteur est gal 1 GET poly sessions 2 cycledevie php HTTP 1 1 Host localhost 80 Connection close Cookie PHPSESSID 2425e00d1d65c2bdcbafclce6244f7ea HTTP 1 1 200 OK Date Thu 10 Oct 2002 06 27 48 GMT Server Apache 1 3 24 Win32 Expires Thu 19 Nov 1981 08 52 00 GMT Cache Control no store no cache must revalidate post check 0 pre check 0 Pragma no cache Connection close Transfer Encoding chunked Content Type text html compteur est gal 2 Le programme affiche les ent tes HTTP qu il envoie au serveur sous la forme gt ent t amp nvoy les ent tes HTTP qu il re oit sous la forme lt ent teRecu la valeur du compteur apr s chaque appel On voit que lors du premier appel le client n envoie pas de cookie le serveur en envoie un Set Cookie Programmation PHP 79 Pour les appels suivants Je client renvoie syst matiquement le cookie qu il a re u du serveur lors du ler appel C est ce qui va permettre au serveur de le reconna tre et d incr menter son compteur le serveur lui ne renvoie plus de cookie Nous relan ons le programme pr c dent en passant le jeton ci dessus comme troisi me param tre dos gt e php43 php exe clientCompteur2 php http localhost poly sessions 2 cycledevie php 1 2425e00d1d65c2bdcbhafclce6244f7ea GET poly sessions 2 cycledevie php HTTP 1 1 Host localhost 80
143. culs d imp ts le fichier simulations xsl qui sera la feuille de style X SL qui accompagnera cette r ponse XML Il nous faut pr voir galement le cas de la r ponse avec des erreurs Le prototype de la r ponse X ML dans ce cas sera le fichier erreurs xml suivant lt xml version 1 0 lt xml stylesheet typ lt erreurs gt lt erreur gt erreur l lt erreur gt lt erreur gt erreur 2 lt erreur gt lt erreurs gt ESRI Bil ANEGRE te e e its beers erreurs xsl Ts La feuille de style erreurs xsl permettant d afficher ce document X ML dans un navigateur sera la suivante lt xml version 1 0 encodi ng wi ndows 1252 gt lt xsl stylesheet version 1 0 xml ns xsl http www w3 or g 1999 XSL Transform gt lt xsl output method html indent yes gt lt xsl template match gt lt ht ml gt lt head gt lt title gt Simul ations de calculs d imp ts lt title gt lt head gt lt body gt lt center gt lt h3 gt Simulations de calculs d imp ts lt h3 gt lt center gt lt hr gt Les erreurs suivantes se sont produites lt ul gt lt xsl apply templates select erreurs erreur gt lt ul gt lt body gt lt ht ml gt lt xsl template gt lt xsl template match erreur gt lt li gt lt xsl value of select gt lt li gt lt xsl template gt lt xsl stylesheet gt Cette feuille de style introduit une commande X SL non encore rencontr e lt xsl valueof sd
144. d gt SHARE GENRE d arti elessititie gt La feuille de style utilis e dans ce document est la suivante BODY background url images standard j pg border 2px none FFDA 9 font family Garamond font size 16px margin left Opx sce EN 20px INPUT background EEE8AA border lpx solid EE82EE font family Garamond font size 18px INPUT submi t font family As New Roman font size 16 background AB072 border 2px double Green font weight bold text align center vertical align middle cursor pointer TD menutitle background image url images menugel gd gif height 23px text align center vertical align mi ddl e background url images menugelgd gif no repeat center TD menublock background aes images bandegrismenugd gif repeat x text align left vertical align ue A ere Comic Sans MS color FF7F50 font size 15px text decoration none A HOVER background FFAQ7A color Red FIELDSET border lpx solid A0522D background FFE4C4 margin 10px 10px 10px 10px padding left 10px padding right 10px padding bottom 10px LEGEND a A FFA500 TH background 228B22 text align center vertical align middle TD libell border lpx solid 008B8B color 339966 H1 Annexes 185 font bol color F background background attachment text align verti
145. d informations Parfois on voudra donner en r ponse l utilisateur une simple information par exemple que son identification a r ussi O n utilisera pour cela la page infos php suivante lt php echo main infos gt Pour afficher une information en retour a une demande d un client on mettra l information dans mainl infos mettra l URL de infos php dans main contenu Voici par exemple l information retourn e lorsque l utilisateur s est identifi correctement Vous tes connect la base des articles 9 6 Le fonctionnement de l application Nous avons maintenant une bonne id e de la structure g n rale de l application crire I nous reste pr senter les cheminement de l utilisateur dans l application les actions qu il peut faire et les r ponses qu il re oit du serveur Ceci fait nous pourrons crire les fonctions qui traitent les diff rentes demandes d un client Dans ce qui suit nous allons pr senter le fonctionnement de l application au travers des pages pr sent es l utilisateur en r ponse certaines de ces actions Nous pr ciserons chaque fois les points suivants action utilisateur action initiale de l utilisateur qui a amen la r ponse affich e param tres envoy s Jes param tres envoy s par le navigateur client au serveur en r ponse l action manuelle de l utilisateur page FEPONEE le script qui g n re la zone 4 de la page type 9 6 1 L authentification Avant de
146. de saisie lt select size 1 name cmbV aleurs gt lt option gt choix1 lt option gt lt option selected gt choix2 lt option gt lt option gt choix3 lt option gt lt select gt combo lt select size 3 name Ist1 gt lt option selected gt listel lt option gt lt option gt liste2 lt option gt lt option gt liste3 lt option gt lt option gt liste4 lt option gt lt option gt liste5 lt option gt lt select gt lt select size 3 name Ist2 multiple gt lt option selected gt listel lt option gt lt option gt liste2 lt option gt lt option selected gt liste3 lt option gt lt option gt liste4 lt option gt lt option gt listes lt option gt lt select gt lt input type submit value E nvoyer name cmdRenvoyer gt lt input type hidden name secret value uneValeur gt liste choix simple liste choix multiple Etes vous mari e Oui Non M1 M2 1713 programmation web les bases de la programmation web choix RI Oui la valeur de l attribut value du bouton radio coch par l utilisateur Ciun C2 deux valeurs des attributs value des cases coch es par l utilisateur txtSaisie programmation web texte tap par l utilisateur dans le champ de saisie Les espaces ont t remplac s par le signe txtMdp ceciestsecret texte tap par l utilisateur dans le champ de saisie areaSaisie les bases de 1la 0D 0A programmation w
147. des articles am ne la page suivante dans la zone 4 de la page type Annexes 195 D finissez les caract ristiques de la r qu te order by action utilisateur lien du menu Lister des articles param tres envoy s action selectArticle phase 0 amp PHPSE SSID PHPSE SSID page r ponse select1 php Une requ te select colonnes from articles where where orderby orderby sera mise sur la table des articles o colonnes where et orderby sont le contenu des champs ci dessus Par exemple 9 6 3 1 1 Demande D finissez les caract ristiques de la requ te colonnes coll col2 n where order by prix desc R ponse cle om tat i T E Retour la page de s lection d articles Annexes 196 action utilisateur bouton Afficher param tres envoy s action selectArticle phase 1 amp PHPSESSID PHPSESSID page r ponse select2 php La demande peut tre erron e auquel cas le client re oit une page d erreurs 9 6 3 1 2 Demande D finissez les caract ristiques de la requ te colonnes coll col2 d where order by prix desc 9 6 3 1 3 R ponse Les erreurs suivantes se sont produites Echec de la requ te select x from articles order by prix desc DB Erroz no such field Retour la page de s lection d articles Dans les deux cas erreurs ou pas le lien Retour la page de s lection d ar
148. des pages HTML gr ce des servlets programmes Java ex cut s par le serveur web o des pages JSP Java Server Pages pages m langeant code Java et code HTML C est l quivalent des pages ASP Active Server Pages du serveur IIS PWS de Microsoft o l on m lange code VBScript ou Javascript avec du code HTML 6 10 1 Installation Tomcat est disponible l URL http jakarta apache org On r cup re un fichier exe d installation Lorsqu on lance ce programme il commence par indiquer quel JDK il va utiliser En effet Tomcat a besoin d un JDK pour s installer et ensuite compiler et ex cuter les servlets Java Il faut donc que vous ayez install un JDK Java avant d installer Tomcat Le JD le plus r cent est conseill L installation va cr er une arborescence lt tomcat gt Annexes 151 Ca Apache Tomcat 4 0 C bin oof classes common H E conf C3 lb C1 logs C2 server C2 webapps C2 work consiste simplement d compresser cette archive dans un r pertoire Prenez un r pertoire ne contenant dans son chemin que des noms sans espace pas par exemple Program Files ceci parce qu il y a un bogue dans le processus d installation de Tomcat Prenez par exemple CA tomcat ou D tomcat Appelons ce r pertoire lt tomcat gt On y trouvera dedans un dossier appel jakarta tomcat et dans celui ci l arborescence suivante H A LOGS 15 11 00 LICENSE 18 04 00 15 LICENSE CONF 15 11 00 conf DOC
149. dification r ussie nom calculatrice prix 110 stock actuel 9 stock minimum 2 action utilisateur bouton Modifier param tres envoy s action updateArticle phase 2 amp PHPSESSID PHPSESSID page r ponse infos php L utilisateur peut faire des erreurs lors de la modification 9 6 4 1 1 1 Demande 9 6 4 1 1 2 R ponse Modifier un article erreurs Les erreurs suivantes se sont produites code nom calcul atrice prix 110 stock actuel Ox Stock actuel 9x invalide Retour la page de modification d article stock minimum 2 Le lien Retour la page de modification d article permet de revenir la page de saisie Annexes 199 code nom calcul atrice prix 110 stock actuel 9x PAZ stock minimum 2 action utilisateur lien Retour la page de modification d article para ma res ENVOYES action updateA rticle phase 3 amp PH PSESSID PHPSE SSID page r ponse updatearticle2 php 9 6 5 Suppression d un article Le lien du menu Supprimer un article am ne la page suivante dans la zone 4 de la page type Choisissez le code de l article supprimer FT action utilisateur lien du menu Supprimer un article parametres envoy s action deleteArticle phase 0 amp PHPSE SSID PHPSE SSID Pa EEE ROME deletearticle1 php L utilisateur choisit le code de l article supprimer dans une liste d roulante Demande R ponse Choisissez le code de l art
150. dows Microsoft a d velopp une interface appel e O DBC Open D ataBase Connectivity Cette couche cache les particularit s de chaque base de donn es sous une interface standard Il existe sous MS Windows de nombreux pilotes ODBC facilitant l acc s aux bases de donn es Voici par exemple une liste de pilotes O D BC install s sur une machine Windows Programmation PHP 59 Microsoft Access Driver mdb Microsoft dBase Driver dbf Microsoft Excel Driver xls Microsoft FoxPro Driver dbf Microsoft ODBC pour Oracle Microsoft Paradox Driver db Microsoft Text Driver txt csv pee ODBC Microsoft pour Oracle 3 51 102900 3 51 102900 3 51 102900 3 51 102900 2 73 728303 3 51 102900 3 51 102900 2 00 006325 3 50 NAN Microsoft Corporation Microsoft Corporation Microsoft Corporation Microsoft Corporation Microsoft Corporation Microsoft Corporation Microsoft Corporation Microsoft Corporation T pplIquer Le SGBD MySQL a lui aussi un pilote ODBC Une application s appuyant sur des pilotes ODBC peut utiliser n importe quelle bases de donn es ci dessus sans r criture Programmation PHP 60 Application Pilote O D BC Base de donn es Rendons notre base MySQL dbV aleurs accessible au travers d un pilote OD BC La proc dure ci dessous est celle de Windows 2000 Pour les syst mes Win9x la proc dure est tr s analogue On active le gestionnaire de ressources ODBC Menu D marrer Panneau de
151. du champ T aux listes L1 L2 aq chose faire champs s S exec T value if champs null le champ est vide alert Vous n avez pas indiqu la valeur ajouter txtElement focus return if on ajoute l l ment Ll options L1 length J new Option T value L2 options L2 length new Option T value T value ajouter vider function vider L vide la liste L L length 0 vider transfert function transfert L1 L2 simple transf re dans L2 les l ments s lectionn s dans la liste L1 qq chose faire index de l l ment s lectionn dans L1 index1 L1 selectedIndex if index1 1 alert Vous n avez pas s lectionn d l ment return if quel est le mode de s lection des l ments des listes if simple s lection simple elementi Ll options indexl text ajout dans L2 L2 options L2 length new Option element1 suppression dans L1 L1 options index1 null simple if simple s lection multiple on parcourt la liste 1 en sens inverse for i L1 length 1 1i gt 0 1i l ment s lectionn if L1l options i selected on l ajoute a L2 L2 options L2 length new Option Ll options i text on le supprime de L1 Ll options i null if for i if simple transfert lt script gt lt ead gt lt body bgcolor C0C0C0 gt lt center gt lt h2 gt Les listes en Javascript lt h2 gt lt hr gt
152. e XML et PHP 128 http flocalhost poly impots 7 xmlsimulations php Simulations de calculs d imp ts Le code re u par le navigateur est le suivant lt xml version 1 0 lt xml stylesheet typ lt si mulati ons gt TERE Ea gt e e text xsl href simulations xsl gt lt si mulation marie oui enfants 2 salaire 200000 impot 22504 gt lt si mulation marie non enfants 2 salaire 200000 i mpot 33388 gt lt si mulation marie non enfants 3 salaire 200000 i mpot 22504 gt lt si mulation marie oui enfants 3 salaire 200000 i mpot 16400 gt lt si mul ations gt On remarquera que notre nouvelle application est plus simple a maintenir que la pr c dente Une partie du travail a t transf r e sur les feuilles de style X SL L int r t de cette nouvelle r partition des t ches est qu une fois le format X ML des r ponses a t fix le d veloppement des feuilles de style est ind pendant de celui de l application 4 3 Analyse d un document X ML en PHP La prochaine version de notre application impots va tre un client programm de l application pr c dente x mlsimulations Notre client va donc recevoir du code XML qu il devra analyser pour en retirer les informations qui l int resse Nous allons faire ici une pause dans nos diff rentes versions et apprendre comment on peut analyser un document XML en PHP Nousle ferons partir de l exemple suivant dos gt e
153. e multiple gt lt option selected gt lt option gt lt select gt affiche dans une liste les textes compris entre les balises lt option gt lt option gt multiple permet la s lection de plusieurs l ments dans la liste Dans l exemple ci dessus les l ments listel et list sont tous deux s lectionn s 1 8 1 9 Bouton de type button bouton de type button bouton balise HTML attributs lt input type button value E ffacer name cmdE ffacer ondick effacer gt lt input type button value name onclick effacer gt type button d finit un contr le bouton Il existe deux autres types de bouton les types submit et reset value E ffacer le texte affich sur le bouton onclick fonction permet de d finir une fonction ex cuter lorsque l utilisateur clique sur le bouton Cette fonction fait partie des scripts d finis dans le document web affich La syntaxe pr c dente est une syntaxe javascript Si les scripts sont crits en vbscript il faudrait crire onclick fonction sans les parenth ses La syntaxe devient identique s il faut passer des param tres la fonction onclick fonction val1 val2 D ans notre exemple un clic sur le bouton E ffacer appelle la fonction javascript effacer suivante Les bases de la programmation web 34 lt script Re LE function effacer f alert Vous avez cliqu sur le bouton Effacer leffacer lt
154. e c est celle qui vous a t envoy e par m l Dans la version 7 cette cl est en fait la totalit d un fichier texte que l on peut placer par exemple dans le dossier d installation de JB7 Au moment o la cl est demand e on d signe alors le fichier en question Ceci fait la cl ne sera plus redemand e 153 Il y a quelques configurations utiles a faire si on veut utiliser JBuilder pour construire des servlets Java En effet la version dite Jbuilder personnel est une version all g e qui ne vient notamment pas avec toutes les classes n cessaires pour faire du d veloppement web en Java On peut faire en sorte que JBuilder utilise les biblioth ques de classes amen es par Tomcat On procede ainsi gt lancer JBuilder O JBuilder 7 E Program Files jb7 samples Welcome Welcome html File Edit Search View Project Run Wizards Tools Window Help aa E a a tl Jun Ga l gt Etoo i e En LS amp 1 E welcome jp x amp welcome EH Welcome jpx e a M rer Filestib7 sampleselcomeYelcome html Velcome html a WelcomeApp java gy WelcormeFrame java gt activer l option Tools C onfigure JD Ks OR sors hmmm ze B User Home JDK Settings gt ERATE RE E JBuilder Name java 1 4 0 b92 Rename JDK home path EProgram Files dk1 4 Change D Always debug with classic N Class Source Documentation E Program Files jdk1 4 jre lib charsets jar Add
155. e donc un ensemble de lignes et de colonnes Cette table est accessible via r sultats ligne mysql_ fetch row r sultats lit une ligne de la table et la met dans ligne sous la forme d un tableau Ainsi ligndi est la colonne i de la ligne r cup r e La fonction mysql fech row peut tre appel e de fa on r p t e A chaque fois elle lit une nouvelle ligne de la table r sultats Lorsque la fin de la table est atteinte la fonction rend la valeur false Ainsi la table r sultats peut elle tre exploit e de la fa on suivante while ligne mysql fech row r sultats 1 traitela ligne courante ligne while traitement des r sultats mysql_db_query base insert connexion r sultats d une 7 ue re 7 3 requ te de mise La valeur r sultats est vraie ou fausse selon que l op ration a r ussi ou chou En cas de succ s la jour fonction mysql_affected_rows permet de conna tre le nombre de lignes modifi es par l op ration de mise ajour fermeture de la i Pea mysql_close connexion connexion une connexion au SGBD MySQL Le code du frontal valeurs php devient le suivant lt php configuration imi sel register globals oni ini_set display_errors off ini_set track_errors on le tableau des valeurs list Serreur Svaleurs getValeurs y at il eu erreur if Serreur affichage page d erreur include valeurs err php fin I on r cup r
156. e gt gt Lister des articles lt a gt lt td gt lt tr gt lt tr gt lt td gt lt br gt lt td gt lt tr gt lt tr gt lt td ETES TETE gt Administration lt td gt lt tr gt lt tr height 10 gt lt tr gt lt tr gt lt td ETass nepUBTOCE gt lt img alt src images radio gif gt lt a href K php echo main Tiens J sqi 75 gt D Q lt a gt lt td gt lt tr gt lt table gt lt td gt lt td gt lt img alt src images pix gif width 10 height 1 gt lt td gt lt td gt lt fieldset gt lt legend gt K php echo main T gende 7 gt k l egend gt lt php include Emain contenu gt lt fieldset gt lt td gt lt tr gt lt table gt lt body gt lt ht ml gt Les zones param tr es de la page ont t mises en relief dans le listing ci dessus La page type est param tr e de plusieurs fa ons parun dictionnaire main ayant les cl s suivantes o title titre mettre en zone 1 de la page o liens dictionnaires des liens g n rer dans la colonne du menu Ces liens sont associ s aux options du menu de la zone 2 o contenu url de la page a afficher dans la zone 4 par un dictionnaire dConfig rassemblant des informations tir es d un fichier de configuration de l application appel config php par des classes faisant partie de la feuille de style utilis e par la page lt link type text css href l
157. e seules certaines actions sont autoris es Une URL param tr e par action tricher amp phase 0 amp PH PSE SSID PH PSE SSID serait rejet e car l action tricher n est pas une action autoris e Lorsque les param tres action phase ne sont pas reconnus notre application r pond par la page d authentification Cependant l application ne v rifie pas si les actions autoris es s encha nent correctement Par exemple les deux actions suivantes 1 action addArticle amp phase 0 amp PHPSE SSID PHPSESSID 2 action updateA rticle amp phase 1 amp PHPSE SSID PHPSESSID sont deux actions autoris es Cependant l action 2 n est pas autoris e a suivre l action 1 Comment suivre l encha nement des URL demand es par le navigateur client On peut s aider de deux variables PHP SERVER REQUEST_URI et SERVER HTTP_REFERER qui sont deux informations envoy es par les navigateurs clients dans leurs ent tes HTTP SERVERl REQUEST_URI C est l URI demand e par le client Par exemple apparticles php action addArticl e amp phase 0 amp PHPSESSI D PHPSESSI D SERVER HTTP_REFERER C est l URL qui tait visualis e dans le navigateur avant la nouvelle URL qu est en train de demander le navigateur l URI pr c dente Par exemple si le navigateur qui a visualis l URI voqu e pr c demment fait une nouvelle demande un serveur la variable SERVER HTTP REFERER de celui ci aura pour valeur http machine port ap
158. e d erreur renvoy par le pilote odbc odbc_error S1000 est peu explicite Si la base odbc valeurs est rendue disponible on obtient les m mes r sultats qu auparavant En conclusion on peut dire que cette solution est bonne pour la maintenance de l application En effet si la base de donn es doit changer l application n aura elle pas changer L administrateur syst me cr era simplement une nouvelle source de donn es OD BC pour la nouvelle base Toujours en vue de la maintenance il serait bon de mettre les param tres d acc s la base dsn user pwd dans un fichier s par que l application chargerait au d marrage indude 2 9 5 R cup rer les valeurs d un formulaire Nous avons d j plusieurs reprises r cup r les valeurs d un formulaire envoy es par un client web L exemple suivant montre un formulaire rassemblant les composants HTML les plus courants et s applique r cup rer les param tres envoy s par le navigateur client Le formulaire est le suivant Etes vous mari e Our Non Cases cocher Civ Bee CS Champ de saisie lags mots Mot de passe lignel ligne2 I ligne3 combo choix x liste choix simple Bo te de saisie liste choix multiple liste2 bouton Effacer envoyer Envoyer r tablir R tablir Il arrive pr repli Ensuite l utilisateur peut le modifier Programmation PHP 64 Etes vous mari e Oui Non Cases cocher Fir2 F3 Ch
159. e fichier X ML d origine N Source of file E data serge xml impots 0 simulations xml Netscape a File Edit View Help lt simulations gt lt simulation marie oui enfants 2 salaire 200000 impot 22504 gt lt simulation marie non enfants 2 salaire 200000 impot 33388 gt lt simulations gt Pourquoi Netscape n affichet il rien Parce qu il lui faut une feuille de style qui lui dise comment transformer le fichier XML en fichier HTML qu il pourra alors afficher Il se trouve que IE 6 a lui une feuille de style par d faut lorsque le fichier XML n en propose pas ce qui tait le cas ici Il existe un langage appel XSL eXtensible StyleSheet Language permettant de d crire les transformations effectuer pour passer un fichier X ML en un fichier texte quelconque XSL permet l utilisation de nombreuses instructions et ressemble fort aux langages de programmation Nous le d taillerons pas ici car il y faudrait plusieurs dizaines de pages Nous allons simplement d crire deux exemples de feuilles de style XSL La premi re est celle qui va transformer le fichier XML simulations xml en code HTML On modifie ce dernier afin qu il d signe la feuille de style que pourront utiliser les navigateurs pour le transformer en document HTML qu ils pourront afficher lt xml version 1 0 encoding wi ndows 1252 gt lt xml stylesheet type text xsl href simulations xs1 gt lt si mul ations gt lt si mulation marie
160. e l ventuel choix de l utilisateur Schoix POST cmbValeurs on calcule la liste des valeurs afficher HTMLval eurs for i 0 i lt count valeurs i si option courante est gale au choix on la s lectionne if isset choix amp amp choix valeurs i SHTMLvaleurs lt option selected gt valeurs i lt option gt n else HTMLvaleurs lt option gt valeurs i lt option gt n llfor on calcule la seconde partie de la page HTMLpart2 AR tn li SHTMLpart2 lt hr gt n SHTMLpart2 lt h3 gt Vous avez choisi le nombre choix lt h3 gt n lif I on affiche la r ponse include valeurs pl php Ri ia return function getValeurs r cup re les valeurs dans une base MySQL Suser admDbValeurs Spwd mdpDbValeurs Programmation PHP 57 Sdb dbValeurs Shote localhost Stable tvaleurs Schamp valeur ouverture d une connexion persistante au serveur MySQL ou sinon d une connexion normale Sconnexion mysql_pconnect Shote user Spwd Sconnexion mysql_connect Shote Suser Spwd if Sconnexion return array Base de donn es indisponible mysql_error Veuillez recommencer ult rieurement obtention des valeurs SselectValeurs mysql_db_query db select Schamp from Stable Sconnexion if SselectValeurs return array Base de donn es indisponible mysql_error Veuillez recommencer ult rieurement
161. e la demande qu il nous envoie est contr l e par le formulaire qu on lui a envoy avant cette demande N importe quel programme peut tre client d une application web et donc envoyer n importe quelle demande param tr e ou non l application Celle ci doit donc tout v rifier Si on se reporte au code du script apparticles php on constate qu aucune action autre que l authentification ne peut avoir lieu sans session Celle ci n existe que si l utilisateur a r ussi s authentifier Rappelons qu une session est identifi e par une cha ne de caract res assez longue appel e le jeton de session et qui a la forme suivante 176a43609572907333118333edf6d 1fb Ce jeton peut tre envoy l application de diverses fa ons par exemple en utilisant une URL param tr e apparticles php PH PSE SSID 176a43609572907333118333edf6d 1th Un programme qui demanderait de fa on r p t e l URL pr c dente en faisant varier le jeton de fa on al atoire dans l espoir de trouver le bon jeton a toute chance de mettre de nombreux jours avant de g n rer la bonne combinaison tellement le nombre des combinaisons possibles est grand D ici la la Annexes 204 session tant d une dur e limit e sera tr s probablement termin e Un autre risque serait que le jeton passant en clair sur le r seau soit intercept Le risque est r el On peut alors utiliser une connexion crypt e entre le serveur et son client qu une fois la session lanc
162. e mot de passe mdparticles C est dans cette base que prennent place toutes les tables de l application La table ARTICLES rassemble les informations sur les articles vendus par le commer ant Sa structure est la suivante Annexes 175 Field Type code code de l article cl primaire de la table 4 caract res exactement mom nom de l article code varchar 4 prix son prix nom varchar 30 StockActuel Je niveau actuel de son stock n ae stockMini mum Je niveau au dessous duquel une commande de r approvisionnement doit tre faite stockActuel int 11 stockMinimum int11 Son contenu utilis dans un premier temps comme test pourrait tre le suivant code nom prix stockActuel stockMinimum a100 cartable 20 5 3 b100 trousse 5 20 3 c100 lot de 6 crayons bille 4 30 10 d100 feuilles blanches lot de 500 10 32 6 9 3 Les contraintes du projet Le commer ant migre ici une application ACCESS locale en une application Web Il ne sait ce que deviendra celle ci et comment elle voluera Il voudrait cependant que la nouvelle application soit facile utiliser et volutive C est pour cette raison que son conseiller informatique a imagin pour lui lors de la conception des tables qu il pouvait y avoir divers utilisateurs avec diff rents droits cela permettra au commer ant de d l guer certaines t ches d autres personnes sans pour autant leur donner des droits d administration dans le futur d autres tables que la table AR
163. e pagel au serveur celui ci peut la renvoyer avec un code d erreur si le nom est vide 6 Q R Q http flocalhost poly sessions 3 etape2 php Te ee SN e ee nent Page 1 3 Votre nom Suite Les erreurs suivantes se sont produites Vous n avez pas indiqu de nom Lorsqu on soumet la page page2 au serveur celui ci peut la renvoyer avec un code d erreur si l ge est invalide 6 Q Q S http flocalhost poly sessions 3 etape3 php a page 2 Page 2 3 Nom martin Votre ge box Suite Les erreurs suivantes se sont produites ge incorrect L application est compos e de six programmes etapel php fait appel pagel php pagel php affiche pagel Le formulaire de page1 est trait par ape2 php etape2 phP traite les valeurs du formulaire de pagel S il y a des erreurs pagel est r affich e par pagel php sinon c est page2 qui est affich e par page2 php page2 php affiche page2 Le formulaire de page2 est trait par dape3 php etape3 php traite les valeurs du formulaire de page2 S il y a des erreurs page2 est r affich e par page php sinon c est page3 qui est affich e par page3 php page3 php affiche pages L tape 1 de l application est trait e par le programme gapel php suivant lt php Ii etapel php Programmation PHP configuration set register globals off l i ini_set display_errors off l n ni 11 d marrage session sessi
164. e que c est un champ cach Un champ cach fait partie du formulaire mais n est pas pr sent l utilisateur Cependant si celui ci demandait son navigateur l affichage du code source il verrait la pr sence de la balise lt input type hidden value gt et donc la valeur du champ cach Les bases de la programmation web 35 value uneValeur valeur du champ cach Quel est l int r t du champ cach Cela peut permettre au serveur web de garder des informations au fil des requ tes d un client Consid rons une application d achats sur le web Le client ach te un premier article artl en quantit ql sur une premi re page d un catalogue puis passe une nouvelle page du catalogue Pour se souvenir que le client a achet ql articles artl le serveur peut mettre ces deux informations dans un champ cach du formulaire web de la nouvelle page Sur cette nouvelle page le client ach te q2 articles art2 Lorsque les donn es de ce second formulaire vont tre envoy es au serveur submit celui ci va non seulement recevoir l information q2 art2 mais aussi q1 art1 qui fait partie galement partie du formulaire en tant que champ cach non modifiable par l utilisateur Le serveur web va alors mettre dans un nouveau champ cach les informations ql art1 et q2 art2 et envoyer une nouvelle page de catalogue Et ainsi de suite 1 8 2 Envoi aun serveur web par un client web des valeurs d un formulaire Nous avons dit dans l
165. e rapportant a X ML Pour analyser un document X ML notre application a besoin d un analyseur de code X ML appel habituellement un parseur on cr e un objet d analyse de texte xml xm _parser xm parser create Lorsque le parseur va analyser le document X ML il va mettre des v nements tels que j ai rencontr le d but du document le d but d une balise un attribut de balise le contenu d une balise la fin d une balise la fin du document Il transmet ces v nements des m thodes qu on doit lui d signer 11 on indique quelles fonctions ex cuter en d but et fin de balise xml _set_element_handler xml_parser startElement endElement on indique quelle fonction ex cuter lors de la rencontre de donn es xml _set_character data handler xm parser afficheData S l v nement mis par le m thode de traitement 3 m See ae nt function startE lement parser name attributs parser le parseur du document name nom de l l ment analys Si l l ment rencontr est lt simulations gt on aura name simulations gattributs liste des attributs de la balise sous la forme ATTRIBUT valeur o ATTRIBUT est le nom en majuscules de la balise XML et PHP 131 Pelee mt function afficheD ata parser data parser le parseur du document data les donn es de la balise Ib a SA A GU function endE lement parser name gt les param tres sont ceux de la m thode startE lement
166. e serait le cas dans l exemple ci dessus Jusqu maintenant nous avons toujours vu le client web comme demandant des informations un serveur web jamais lui donnant des informations Comment un client web fait il pour donner des informations celles contenues dans le formulaire un serveur web Nous y reviendrons dans le d tail un peu plus loin Il peut utiliser deux m thodes diff rentes appel es POST et GET L attribut method m thode avec m thode gale GET ou POST de la balise lt form gt indique au navigateur la m thode utiliser pour envoyer les informations recueillies dans le formulaire l URL pr cis e par l attribut adion U RL Lorsque l attribut method n est pas pr cis c est la m thode GET qui est prise par d faut 1 8 1 2 Champ de saisie Champ de saisie faqs mots Mot de passe champ de lt input type text name txtSaisie size 20 value qqs mots gt lt input type password name tx tM dp size 20 value unM otD eP asse gt balise HTML lt input type seal name s size ll value gt La balise input existe pour divers contr les C est l attribut type qui permet de diff rentier ces diff rents contr les entre eux attributs type text pr cise que c est un champ de saisie type password les caract res pr sents dans le champ de saisie sont remplac s par des caract res C est la seule diff rence avec le champ de saisie normal Ce type de contr le con
167. e3 lt option gt particulier Ist2 lt option gt liste4 lt option gt lt option gt listes lt option gt Programmation PHP 67 balise HT ML lt form method PO ST gt valeur r cup r e par PHP lt select gt champ cach lt input type hidden name secret value uneV aleur gt POST secret valeur value du champ ici uneV aleur D ans notre exemple les valeurs du formulaire sont adress es au programme parameters php lt form method POST action parameters php gt Le code de ce dernier est le suivant lt php l configuration Link ser regi ster gl owal et oni F ini_set display_errors off 11 m thode d appel m thode _SERVER REQUEST_METHOD 11 r cup ration des param tres i A 11 elle d pend de la m thode d envoi de ceux ci if Sm t hode GET Sparam S_GET else Sparam S_POST param C2 param C3 Sparam R 5 Cl param C1 te C3 txtSaisie param txtSaisie pie pes sien eee Ale NRA TSU TON SAT 1 requ te valide grequeteValide isset R1 amp amp isset Cl L isset C2 LI isset C3 amp amp isset txtSaisie amp amp isset txtMdp isset areaSai sie amp amp isset cmbValeurs amp amp isset lstl amp amp isset lst2 amp amp isset secret et affichage page Leas Nal taa inclu parameters pl php else include balises html gt D taillons quelques points de ce programme
168. ead gt lt body gt lt center gt lt h3 gt Un formul aire Web lt h3 gt a des valeurs des champs d un formulaire lt h4 gt lt nr gt lt form name frmPersonne method post gt lt tabl e gt lt tr gt lt td gt Nom lt td gt lt td gt lt input type text value lt php echo Snom gt name txtNom size 20 gt lt td gt lt td gt lt input type text value lt php echo Sage gt name txtAge size 3 gt lt td gt lt tr gt lt table gt lt input type submit name cmdEffacer value Envoyer gt lt form gt lt center gt lt hr gt lt php y at il eu des valeurs post es if Spost gt lt h4 gt Valeurs r cup r es lt h4 gt lt table border 1 gt lt EQr gt lt td gt Nom lt td gt lt td gt lt php echo Snom gt lt td gt lt td width 10 gt lt td gt lt td gt Age lt td gt lt td gt lt php echo Sage gt lt td gt lt tr gt lt table gt lt php gt 0 lt ht ml gt L application nomagep php pr sente le formulaire frmP ersonne Celui est d fini par la balise lt form name frmPersonne method post gt L attribut action de la balise n tant pas d finie le navigateur transmettra les donn es du formulaire l URL qu il a interrog e pour l avoir c a d l application nomagephp Distinguons les deux cas d appel de l application nomage php 1 C est la premi re fois que l utilisateur l appelle L application nomagephp appelle donc l
169. eb texte tap par l utilisateur dans le champ de saisie OD OA est la marque de fin de ligne Les espaces ont t remplac s par le signe cmbValeurs choix3 valeur choisie par l utilisateur dans la liste s lection unique lsti liste3 valeur choisie par l utilisateur dans la liste s lection unique Ist2 liste1 Ist2 liste3 valeurs choisies par l utilisateur dans la liste a s lection multiple cmdRenvoyer E nvoyer nom et attribut value du bouton qui a servi a envoyer les donn es du formulaire au serveur secret uneValeur attribut value du champ cach Refaisons la m me chose mais cette fois ci en gardant le serveur web pour laborer la r ponse et voyons quelle est cette derni re La page renvoy e par le serveur Web est la suivante Les bases de la programmation web 38 Etes vous mari e Oui Non Cases cocher 01M2 03 Champ de saisie lags mots Mot de passe pr lignel ligne2 x combo choix liste2 liste3 Bo te de saisie liste choix simple liste choix multiple liste2 bouton Effacer envoyer Envoyer r tablir R tablir aiti C est exactement la m me que celle re ue initialement avant le remplissage du formulaire Pour comprendre pourquoi il faut regarder de nouveau l URL demand e par le navigateur lorsque l utilisateur appuie sur le bouton E nvoyer lt GET html balises htm R1 Oui Cl un amp C2 deux txtSaisie programmationtwe
170. eb contact ce canal est utilis pour les changes de commandes et d informations 1 le protocole de dialogue est HTTP le client envoie les ent tes HTTP get URL HTTP 1 1 envoie connexion GET Schemin HTTP 1 1 n host hote port envoie Sconnexion Host Shote Sport n Connection close envoie Sconnexion Connection close n Cookie SPHPSESSID if SPHPSESSID envoie Sconnexion Cookie PHPSESSID SPHPSESSID n ligne vide envoie Sconnexion n le serveur va maintenant r pondre sur le canal Sconnexion Il va envoyer toutes ses donn es puis fermer le canal Le client commence par lire les ent tes HTTP termin s par une ligne vide SCHUNKED 0 while Sligne fgets Sconnexion 10000 amp amp Sligne rtrim Sligne cho ligne echo lt Sligne n recherche du jeton si on ne l a pas encore trouv if SPHPSESSID recherche de la ligne set cookie if preg_match Set Cookie PHPSESSID i Sligne Schamps on a trouv le jeton on le m morise SPHPSESSID Schamps 1 if if recherche du mode de transfert du document if SCHUNKED recherche de la ligne Transfer Encoding chunked if preg_match Transfer Encoding chunked i Sligne Schamps transfert par morceaux SCHUNKED 1 if if ligne suivante 11 cho ligne echo lt ligne n la lecture du document d pend de la fa on dont il a t en
171. ect gt Cette commande produit en sortie la valeur du noeud analys ici un noeud lt erreur gt tex te lt erreur gt La valeur de ce noeud est le texte compris entre les deux balises d ouverture et de fermeture ici tex te Le code erreurs xml est transform par la feuille de style erreurs xsl en document HTML suivant lt ht ml gt lt head gt lt title gt Simul ations de calculs d impots lt title gt lt head gt lt body gt lt center gt lt h3 gt Si mul ations de calculs d impots lt h3 gt lt center gt lt hr gt Les erreurs suivantes se sont produites lt ul gt lt li gt erreur 1 lt li gt lt li gt erreur 2 lt li gt lt ul gt lt body gt lt ht ml gt Le fichier erreurs xml accompagn de sa feuille de style est affich par un navigateur de la facon suivante XML et PHP 123 Q 6 R Q file E data serge Servletsjimpotsferreurs xml Simulations de calculs d imp ts Les erreurs suivantes se sont produites erreur 1 erreur 2 4 2 2 L application xmlsimulations Nous cr ons un fichier xmlsimulations html que nous mettons dans le r pertoire de l application impots La page visualis e est la suivante l S http localhost polyfimpots 7 xmlsimulations h ml Calcul d imp ts Etes vous mar e oui non Nombre d enfants Salaire annuel Calculer Effacer Ce document HTML est un document statique Son code est le
172. eilly JDBC et Java George Reese O reilly Base de donn es http www mysql com http www oracle com Le manuel de MySQL est disponible sur le site de MySQL Oracle 8i sous Linux Gilles Briard Eyrolles Oracle 8i sous NT Gilles Briard Eyrolles 1 4 Notations Dans la suite nous supposerons qu un certain nombre d outils ont t install s et adopterons les notations suivantes notation signification sapache gt racine de l arborescence du serveur apache lt apache DocumentRoot gt racine des pages Web d livr es par Apache C est sous cette racine que doivent se trouver les pages Web Ainsi l URL http localhost pagel htm correspond au fichier lt apache D oumentR oot gt pagel htm lt apache cgi bi n gt racine de l arborescence li l alias cgi bin et o l on peut placer des scripts CGI pour Apache Ainsi l URL http localhost cgi bin test1 pl correspond au fichier lt apache cgi bin gt test pl lt pws Document Root gt racine des pages Web d livr es par PWS C est sous cette racine que doivent se trouver les pages Web Ainsi l URL http localhost pagel htm correspond au fichier lt pws D ocumentR oot gt pagel htm lt perl gt racine de l arborescence du langage Perl L ex cutable perl exe se trouve en g n ral dans lt perl gt bin lt php gt racine de l arborescence du langage PHP L ex cutable php exe se trouve en g n ral dans lt php gt lt j ava gt raci
173. elles envoy es du client au serveur Les lignes N sont les lignes envoy es du serveur au client n N Le serveur ci dessus est encore actif alors que le client 1 est termin On lance un second client pour le m me serveur Dos gt java clientTCPgenerique localhost 100 Commandes commande 3 du client 2 lt r ponse 3 au client 2 fin L erreur suivante s est produite Impossible de lire les donn es de la connexion de transport fin du thread de lecture des r ponses du serveur fin du thread d envoi des commandes au serveur La fen tre du serveur est alors celle ci Dos gt java serveurTCPgenerique 100 Serveur g n rique lanc sur le port 100 Thread de lecture des r ponses du serveur au client 1 lanc 1 Thread de lecture des demandes du client 1 lanc lt commande 1 du client 1 r ponse 1 au client 1 1 lt commande 2 du client 1 r ponse 2 au client 1 1 fin du Thread de lecture des demandes du client 1 fin fin du Thread de lecture des r ponses du serveur au client 1 Thread de lecture des r ponses du serveur au client 2 lanc 2 Thread de lecture des demandes du client 2 lanc lt commande 3 du client 2 r ponse 3 au client 2 Annexes 161 2 fin du Thread de lecture des demandes du client 2 fin fin du Thread de lecture des r ponses du serveur au client 2 OG Simulons maintenant un serveur web en lancant notre serveur g n rique sur le port 88 Dos g
174. emander les autres documents n cessaires la construction de la page sans avoir recr er une connexion Les ent tes HTTP envoy s par le navigateur se terminent par une ligne vide comme attendu Elaborons une r ponse notre client L utilisateur au clavier est ici le v ritable serveur et il peut laborer une r ponse la main Rappelons nous la r ponse faite par un serveur Web dans un pr c dent exemple HTTP 1 1 200 OK Date Mon 08 Jul 2002 08 07 46 GMT Server Apache 1 3 24 Win32 PHP 4 2 0 Last Modified Mon 08 Jul 2002 08 00 30 GMT ETag O a1 3d29469e Accept Ranges bytes Content Length 161 Connection close Les bases de la programmation web 24 lt Content Type text html Zon lt lt html gt lt head gt lt title gt essai 1 une page statique lt title gt lt head gt lt body gt lt center gt lt h1 gt Une page statique lt h1 gt lt body gt lt lt html gt lt Host localhost 88 lt Connection Keep Alive HTTP 1 1 200 OK Server serveur tcp generique Connection close Content Type text html lt html gt lt head gt lt title gt Serveur generique lt title gt lt head gt lt body gt lt center gt lt h2 gt Reponse du serveur generique lt h2 gt lt center gt lt body gt lt html gt La commande fin est propre au fonctionnement du programme serveurT C Pgenerique Elle arr te l ex cution du programme et cl t la connexion d
175. ement qu on traitait les balises lt areur gt et lt simulation gt Du coup les autres balises sont ignor es 5 Suivre Nous avons donn dans ce document suffisamment d informations pour d marrer s rieusement la programmation web en PHP Certains th mes n ont t qu effleur s et m riteraient des approfondissements XML eXtensible Markup Language Feuilles de style CSS Cascading Style Sheets et XSL eXtensible Stylesheet Language Nous avons abord ces th me mais beaucoup reste a faire Ils m ritent eux trois un polycopi Javascript Nous avons utilis ici et la quelques scripts Javascript ex cut s par le navigateur sans jamais s y attarder Nous ne sommes par exemple jamais entr s dans les d tails du langage Javascript Par manque de place et de temps Ce langage peut n cessiter un livre a lui tout seul Nous avons rajout en annexe trois exemples significatifs en javascript la encore sans les expliquer N anmoins ils sont compr hensibles par la simple lecture des commentaires et peuvent servir d exemples XML et PHP 135 6 Annexes Les outils du d veloppement web Nous indiquons ici o trouver et comment installer les outils n cessaires au d veloppement web Certains outils ont vu leurs versions voluer et il se peut que les explications donn es ici ne conviennent plus pour les versions les plus r centes Le lecteur sera alors amen s adpater D ans le cours de programmation web nous ut
176. endre Ces changes sont normalis s c a d que le client dispose d un certain nombre de messages pour indiquer exactement ce qu il veut au serveur et ce dernier dispose galement d un certain nombre de messages pour donner au client sa r ponse Cet change de messages a la fome suivante Ent tes HTTP ligne vide Document Client gt Serveur Lorsque le client fait sa demande au serveur web il envoie 1 des lignes de texte au format HTTP pour indiquer ce qu il veut 2 uneligne vide 3 optionnellement un document Serveur gt Client Lorsque le serveur fait sa r ponse au client il envoie 1 des lignes de texte au format HTTP pour indiquer ce qu il envoie 2 uneligne vide 3 optionnellement un document Les bases de la programmation web 18 Les changes ont donc la m me forme dans les deux sens D ans les deux cas il peut y avoir envoi d un document m me s il est rare qu un client envoie un document au serveur Mais le protocole HTTP le pr voit C est ce qui permet par exemple aux abonn s d un fournisseur d acc s de t l charger des documents divers sur leur site personnel h berg chez ce fournisseur d acc s Les documents chang s peuvent tre quelconques Prenons un navigateur demandant une page web contenant des images 1 1 7 3 le navigateur se connecte au serveur web et demande la page qu il souhaite Les ressources demand es sont d sign es de fa on unique par des URL Uniform Resource Locator Le
177. ent d pend de la fa on dont il a t envoy if CHUNKED document getChunkedDoc connexion else document get Doc connexi on Dans le document document re u on cherche la ligne qui donne la valeur du compteur Cette recherche est faite l aussi avec une expression r guli re I recherche du compteur dans le document if preg match lt br gt compteur d i document champs on a trouv le compteur on l affiche an n Le compteur est gal Re cn ht Dans le cas o le serveur envoie le document en une fois la r ception de celui ci est simple function getDoc connexi on i lecture du document sur connexion GIE A ee while ligne fgets connexion 10000 in e in return doc get Doc Programmation PHP 83 Dans le cas o le serveur envoie le document en plusieurs morceaux la lecture de celui ci est plus complexe function getChunkedDoc connexi on lecture du document sur connexion ce document est envoy par morceaux sous a forme nombre de caract res du morceau en hexad ci mal suite du morceau on lit la taille du morceau dans la l re ligne taille hexdec rtrimfgets connexion 10000 on lit le document qui suit d oc while taille 0 F lecture morceau de taille caract res doc fread connexi on taille ff ligne vide Pet Stc a 10000 morceau suivant Il on lit la taille du morceau taille hexdec rtrim fgets co
178. envoyant dans les ent tes HTTP l URL URL jton valeur demand e Le serveur est alors capable de r cup rer le jeton 2 10 2 L API PHP pour le suivi de session Nous pr sentons maintenant les principales m thodes utiles au suivi de session session start d marre la session laquelle appartient la requ te en cours Si celle ci ne faisait pas encore partie d une session cette derni re est cr e session id identifiant de la session en cours _SESSION var dictionnaire m morisant les donn es d une session Accessible en lecture et criture session_destroy supprime les donn es contenues dans la session en cours Ces donn es restent disponibles pour l change client serveur en cours mais seront indisponibles lors du prochain change 2 10 3 Exemple 1 Nous pr sentons un exemple inspir du livre Programmation avec J2EE aux ditions Wrox et distribu par Eyrolles Cet exemple permet de voir comment fonctionne une session PHP La page principale est la suivante Programmation PHP 71 Q Q Q Q http localhost poly sessions 1 cycledevie php Cycle de vie d une session PHP ID session e4b12bd714993 18dbd6d7240c966d078 compteur 0 Invalider la session Recharger la page On y trouve les l ments suivants ID de la session obtenue par la fonction session id Cet ID g n r par le navigateur est envoy au client par un cookie que le navigateur renvoie lorsqu il demande une URL de la m me
179. equ te gt mari oui amp amp Srequ te gt mari non une erreur Srequ te gt erreurs J Statut marital Srequ te gt mari incorrect nbre d enfants valide if preg_match s dt s S Srequ te gt enfants une erreur Srequ te gt erreurs J Nombre d enfants requ te gt enfants incorrect salaire valide if preg_ match s d s Srequ te gt salaire une erreur Srequ te gt erreurs Salaire Srequ te gt salaire incorrect Exemples 100 tat des boutons radio if Srequ te gt mari oui Srequ te gt chkoui checked Srequ te gt chknon else Srequ te gt chknon checked Srequ te gt chkoui on rend la requ te return Srequ te v rifier function calculerImpots SbdImpots Srequ te calcule le montant de l imp t SbdImpots dictionnaire contenant les informations n cessaires pour lire la source de donn es ODBC Srequ te la requ te contenant les informations sur le contribuable on construit un objet ImpotsDSN SobjImpots new ImpotsDSN S bdImpots des erreurs if count SobjImpots gt erreurs 0 on met les erreurs dans la requ te Srequ te gt erreurs Sobjimpots gt erreurs fini return Srequ te if calcul de l imp t Spersonne array mari gt Srequ te gt mari enfants gt Srequ te enfants salaire gt Srequ te g
180. erInfos frmRegExp lstInfos length 0 effacerInfos function jouer teste le mod le contre la cha ne dans l exemple choisi with document frmRegExp txtModele value lstModeles options lstModeles selectedIndex text txtChaine value lstChaines options lstChaines selectedIndex text afficherInfos with jouer function ajouter ajoute le test courant aux exemples with document frmRegExp qq chose faire if verifier return ajout lstModeles options lstModeles length new Option txtModele value lstChaines options lstChaines length new Option txtChaine value raz saisies txtModele value txtChaine value with ajouter function verifier v rifie que les champs de saisie sont non vides with document frmRegExp champs s S exec txtModele value if champs nul1l1 alert Vous n avez pas indiqu de mod le txtModele focus return false if champs s exec txtChaine value if champs null1 alert Vous n avez pas indiqu de chaine de test txtChaine focus return false if c est bon return true with verifier lt script gt lt ead gt lt body bgcolor C0C0C0 gt lt center gt i Eee lt h2 gt Les expressions r guli res en Javascript lt h2 gt lt hr gt lt form name frmRegExp gt lt table gt lt tr gt lt td gt Expression r guli re lt td gt lt td gt Chaine de test lt td gt E
181. erreur ce eee Nombre d enfants personne enfants incorrect j if preg _match s d s personne salaire Il erreur ae s gt erreurs Salaire personne salaire incorrect faa I des erreurs if count this gt erreurs 0 return 1 Exemples 96 I nombre de parts if personne mari oui nbParts personne enfants 2 2 else nbParts personne enfants 2 1 i une 1 2 part de plus si au moins 3 enfants if personne enfants gt 3 nbParts 0 5 revenu imposable revenul mosable 0 72 personne salaire quotient familial quotient revenul mosable nbParts est mis la fin du tableau limites pour arr ter la boucle qui suit this gt limites this gt nbLi mites quoti ent calcul de l imp t i 0 while quotient gt this gt limites i i 11 du fait qu on a plac quotient a la fin du tableau limites la boucle pr c dente ne peut d border du tableau eae maintenant on peut calculer impo return floor revenul mposabl e t hi s calcull mots classe imp ts Un programme de test pourrait tre le suivant lt php bibiloth ques include ImpotsDSN php cr ation d un objet impots Sconf array dsn gt mysql dbimpots user gt admimpots pwd gt mdpimpots table gt impots limites gt limites coeffR gt coeffR coeffN gt coeffN SobjImpots new ImpotsDSN Sconf des erreurs if count obj mpots gt erreurs 0 m
182. es globales lt php configuration de php ini_set register_globals off inj set displ ay errors DIE ini _set expose php off ini_set session use_ Baca O 1 pas de cookies configuration base articles UN Line eat TZ W my ql a Moe en eh cot md padmin gt mdparticles SELS oealhosts database gt dbarticles url des pages dConfig urlBackGround images sistandard jpg dConfig ur Pagestyl ev r mystyle css dConfig urlAppArticles appartic cles php dConfig url PageMain main php eonig url PageLogin Iogin php dConfigl urlPageErreurs erreurs php SdConfigl ur Paged MNOS BIEI iS AR ee url PageAddArti cl Ral ee ddarticle php dConfig urlPageUpdateArticlel updatearticlel php dConfig urlPageUpdateArticle2 updatearticle2 php eine url PageDe ten ea alee an dConfig url PageDeleteArticle2 deletearticle2 php dConfig url PageSelectArticlel selectarticlel php pacont ig url PageSe ect Arti el ees selectarticle2 php dConfig url PageSQL1 sql1 php dConfig url PageSQL2 sql 2 php dConfig url PageSQL3 sql 3 php liens de la page principale AE UES Ae ee en RU Re on S nentnnie rannas er 0 main liens addArticle sUrlAppArticles action addArticle amp phase 0 main liens updateArtic e sUrl AppArticles action updateArticle amp phase LE one E AT DE D A ee CU AE del eteArticle amp phase
183. est elle diff rente Programmation PHP 53 Q 5 Q R gt http f localhost poly exemples 2 valeurs php Choisissez un nombre quatre z Envoyer Vous avez choisi le nombre quatre D ans la r ponse on renvoie le formulaire le nombre choisi par l utilisateur tant indiqu dessous Par ailleurs ce nombre est celui qui appara t comme s lectionn dans la liste affich e par la r ponse Le code de valeurs php est le suivant lt php configuration ini set register globals off 11 le tableau des valeurs Sal eursearren wn dete trois aaret cla six seme et mewn oll x I on r cup re l ventuel choix de l utilisateur choi x POST cmbVal eurs Ii on affiche la r ponse include valeurs pl php gt On remarquera qu ici on a pris soin de configurer PHP pour qu il n y t pas de variables globales C est en g n ral une saine pr caution car les variables globales posent des probl mes de s curit Une alternative est d initialiser toutes les variables qu on utilise Cela aura pour effet d craser une ventuelle variable globale de m me nom La page du formulaire est affich e par valeurs p1 php lt ht ml gt lt head gt lt title gt G n ration de formulaire lt title gt lt head gt DOE lt h2 gt Choisissez un nombre lt h2 gt lt hr gt lt form name frmvaleurs method post action valeurs php gt lt select name c
184. est produite r sultats gt erreur n function getURL URL N PHPSESSI D I se connecte a URL Ii fait un GET ou un HEAD selon la valeur de header la r ponse du serveur forme le r sultat de la fonction analyse de l URL gurl parse_url URL Il le protocole if strtolower url scheme http ee rore OUR URL n est pas au format http machinel port chemin return r sultats If Programmation PHP 80 11 la machine hote url host if isset hote r sultats de URL n est pas au format http machine port chemin return r sult IR HL le port port url port if isset port port 80 le chemin chemi n url path la requ te if isset url query gr sultats gt erreur URL URL n est pas au format http machine port chemin return r sultats if Il v rification de N ii preg match d N erreur ous gt erreur nombre N erron Hi 1 return r sultats Hlif 11 on fait les N appels URL for i 0 i lt N i ouverture d une connexion sur le port Sport de Shote Sconnexion fsockopen Shote Sport amp Serrno amp Serreur retour si erreur if connexi on gr sultats gt erreur Echec de la connexion au site hote port erreur Perur r sultats 11 connexion repr sente un flux de communication bidirectionnel entre le client ce programme et le serveur w
185. eturn if I mission d une requ te sur la base Srequ te odbc prepare connexion select impots limites i mpots coeffR i mpots coeffN from Ans Is if odbc execute requ te 1 erreur Ne Un Sone d expoiter la base DSN impots dsn odbc error in odbc close connexi on return PPIE 11 exploitation des r sultats de la requ te this gt limites array ue E ae this gt coeffN array while odbc_fetch_row requ te Il une ligne de plus this gt lim tesi leoine result requ te impots limites this gt coeffR odbc_result requ te i mpots coeff R pte cera EU result requ te i mpots coeffN while fermeture base odbc_close connexi on constructeur Spersonne mari FOU wou 11 personne enfants nombre d enfants 11 personne salaire salaire annuel Il l objet est il dans un Gtar correct T if is array this gt erreurs count this gt erreurs 0 return 1 11 v rification de l appel Qt isset personne mari isset personne enfants isset personne salaire erreur this gt erreurs Appel incorrect I fin return 1 PR 11 les param tres sont ils corrects personne mari ol personne mari if personne mari oui a personne mari non Ii erreur ae uM s gt erreurs Statut marital personne mari incorrect if preg _match s d 1 3 s personne enfants H
186. eurs gt array Similar one ee pi formulairel mots fi ne so if sion a bien tous les param tres ils sont v rifi s S il y a des erreurs elles sont signal es ametres Il v rification par r requ te requ te v rifie I des erreurs if count requ te erreurs 0 j 11 affichage formulaire Poe na formul airel mots fi i x re onl Ce hi Exemples 108 sj les param tres sont corrects l imp t est alcul calcul de l imp t payer requ tel imots sessionfobjl mpots gt cal cul er array mari gt requ tel mari enfants gt requ te enfants salaire gt requ te salaire Ja simulation en cours est ajout e au tableau des simulations et celui ci envoy au client avec le formulaire une simulation de plus F y 7 y CT ra eo ee a ee D eee ee LL Srequ tel si mulations session simulations Il affichage formulaire include formul airel mots Hi tin termi nerSessi on sessi on dans tous les cas le script se termine en enregistrant la variable session dans la session Ceci est fait dans la proc dure terminerSession function terminerSession session on m morise la session SESSI ON session session HE tn Script exit 0 terminerSessi on Terminons en pr sentant le programme d affichage des erreurs d acc s la base de donn es impots erreurs php lt php page d erreur gt ht ml gt lt head gt lt title gt Ap
187. exactement ce qu on a envoy depuis le serveur g n rique 1 8 Le langage HTML Un navigateur Web peut afficher divers documents le plus courant tant le document HTML HyperText Markup Language Celui ci est un texte format avec des balises de la forme lt balise tex te lt balise gt Ainsi le texte lt B gt important lt B gt affichera le texte important en gras Il existe des balises seules telles que la balise lt hr gt qui affiche une ligne horizontale Nous ne passerons pas en revue les balises que l on peut trouver dans un texte HTML Il existe de nombreux logiciels WYSIWYG permettant de construire une page web sans crire une ligne de code HTML Ces outils g n rent automatiquement le code HTML d une mise en page faite l aide de la souris et de contr les pr d finis On peut ainsi ins rer avec la souris dans la page un tableau puis consulter le code HTML g n r par le logiciel pour d couvrir les balises utiliser pour d finir un tableau dans une page Web Ce n est pas plus compliqu que cela Par ailleurs la connaissance du langage HTML est indispensable puisque les applications web dynamiques doivent g n rer elles m mes le code HTML envoyer aux clients web Ce code est g n r par programme et il faut bien s r savoir ce qu il faut g n rer pour que le client ait la page web qu il d sire Pour r sumer il n est nul besoin de conna tre la totalit du langage HTML pour d marrer la programmation Web Cependant
188. fois que le client se pr sente la personne au guichet lui donne un jeton avec un num ro Le client ne peut poser qu une question Lorsqu il a sa r ponse il doit quitter le guichet et passer la fin de la file d attente Le guichetier note les informations de ce client dans un dossier portant son num ro Lorsqu arrive nouveau son tour le client peut tre servi par un autre guichetier que la fois pr c dente Celui ci lui demande son jeton et r cup re le dossier ayant le num ro du jeton De nouveau le client fait une demande a une r ponse et des informations sont rajout es son dossier et ainsi de suite Au fil du temps le client aura la r ponse toutes ses requ tes Le suivi entre les diff rentes requ tes est r alis gr ce au jeton et au dossier associ celui ci Le m canisme de suivi de session dans une application client serveur web est analogue au fonctionnement pr c dent lors de sa premi re demande un client se voit donner un jeton par le serveur web ilva pr senter ce jeton chacune de ses demandes ult rieures pour s identifier Le jeton peut rev tir diff rentes formes celui d un champ cach dans un formulaire o leclient fait sa premi re demande le serveur le reconna t au fait que le client n a pas de jeton o le serveur fait sa r ponse un formulaire et met le jeton dans un champ cach de celui ci A ce moment la connexion est ferm e le client quitte le guichet avec son jeton
189. franchir du type exact de la base On trouvera en annexe les l ments de base de cette biblioth que 9 5 La structure de l application WEB Maintenant que nous avons la classe m tier de gestion de la base d articles nous pouvons utiliser celle ci dans diff rents environnements Il est propos ici de l utiliser dans une application web D couvrons celle ci au travers de ces diff rentes pages 9 5 1 La page type de l application Revenons sur la page d accueil d j pr sent e Annexes 180 O Gestion d articles 2 Gauthentification Utilisation o iter un art o Modit narticl login e Supprimer un art mot de passe e Lis Administration eo Ki Lar a Toutes les pages de l application auront la structure ci dessus celle d un tableau a deux lignes et trois colonnes comprenant quatre Zones la zone 1 forme la premi re ligne du tableau Elle est r serv e au titre accompagn ventuellement d une image Les trois colonnes de la ligne sont ici fusionn es la seconde ligne a trois zones une zone par colonne o la zone 2 contient les options du menu Elle contient son tour un tableau une colonne et plusieurs lignes Les options du menu sont plac es dans les lignes du tableau o la zone 3 est vide et ne sert qu s parer les zones 2 et 4 On aurait pu proc der diff remment pour r aliser cette s paration o la zone 4 est celle qui contient la partie dynamique de la page C est cette partie
190. gramme appelant dispose des valeurs dans le tableau valeurs On est donc ramen au probl me pr c dent Voici deux exemples d ex cution avec erreur Programmation PHP 58 Erreur Netscape a File Edit View Go Bookmarks Tools Wincow Help Q 6 Q R amp http localhost poly exemples 3 valeurs php L erreur suivante s est produite Base de donn es indisponible Can t connect to MySQL server on localhost 10061 Veuillez recommencer ult rieurement sans erreur Q Q R Q http flocalhost polyfexemples 3 valeurs php Choisissez un nombre 5 gt Envoyer Vous avez choisi le nombre 5 2 9 4 G n ration dynamique de formulaire 4 Dans l exemple pr c dent que se passerait il si on changeait de SGBD Si on passait de MySQL a Oracle ou SQL Server par exemple Il faudrait r crire la fonction getV aleurs qui fournit les valeurs L int r t d avoir rassembl le code n cessaire a la r cup ration des valeurs afficher dans la liste dans une fonction est que le code modifier est bien cibl et non pas parpill dans tout le programme La fonction getV aleurs peut tre r crite de fa on ce qu elle soit ind pendante du SGBD utilis Il suffit qu elle travaille avec le pilote O D BC du SG BD plut t que directement avec le SG BD Il existe de nombreuses bases de donn es sur le march Afin d uniformiser les acc s aux bases de donn es sous MS Win
191. gs Off on permet d utiliser la syntaxe lt variable gt utilis e par la technologie asp Active Server Pages expose_php On permet l envoi de l ent te HTTP X Powered By PH P 4 3 0 dev A off cet ent te est supprim cos CHAN ng EALL amp fixe l tendue du suivi d erreurs Ici toutes les erreurs ALL sauf les avertissements en xs cours d ex cution E NOTICE seront signal es display errors Off on place les erreurs dans le flux HTML envoy au client Celles ci sont donc visualis es dans le navigateur Il est conseill de mettre cette option off log_errors On les erreurs seront m moris es dans un fichier track_errors On m morise la derni re erreur survenue dans la variable php_errormsg error log E Program fixe le fichier de m morisation des erreurs si log_erors on Files EasyPHP php erreurs log register_globals Off on un certain nombre de variables deviennent globales Consid r comme un trou de s curit mers 4 ti n metype g n re par d faut l ent te HTTP Contenttype tex t html include path E Program Ja liste des r pertoires qui seront explor s la recherche des fichiers requis par des directives Files EasyPHP php pear indude ou require session save_ path temp le r pertoire o seront sauvegard s les fichiers m morisant les diff rentes sessions en cours Programmation PHP 42 Le disque concern est celui o a t install PHP Ici tan
192. gt lt td gt s lt td gt lt td gt s lt td gt lt td gt s lt td gt lt td gt s lt tr gt Supposons maintenant que le concepteur de l application change l apparence visuelle de la r ponse en mettant les simulations non pas dans un tableau mais dans une liste sous la forme R sultat des simulations lt ul gt lt li gt oul 2 200000 22504 lt li gt non 200000 33388 lt ul gt Dans ce cas notre client web devra tre r crit C est la la menace permanente pesant sur les clients web d applications qu on ne ma trise pas soi m me X ML peut apporter une solution ce probl me au lieu de g n rer du HTML le service de simulations va g n rer du X ML D ans notre exemple cela pourrait tre lt simulations gt a ae lt entetes marie mari enfants enfants salaire salaire impot i mpot gt lt si mulation marie oui enfants 2 salaire 200000 i mpot 22504 gt Exemples 116 lt si mu enfants 2 salaire 200000 i mpot 33388 gt lation marie non lt si mul at ions gt une feuille de style pourrait tre associ e cette r ponse indiquant aux navigateurs la forme visuelle donner cette r ponse XML les clients web programm s ignoreraient cette feuille de style et r cuperaient l information directement dans le flux XML de la r ponse Si le concepteur du service souhaite modifier la pr sentation visuelle des r sultats qu il f
193. gt requ te erreurs i lt erreur gt hi for echo lt erreurs gt n gt Ce code permet partir du dictionnaire requ te de g n rer du code XML analogue au suivant lt xml version 1 0 encoding S0 8859 1 gt lt xml stylesheet type text xsl href erreurs xsl gt lt erreurs gt lt erreur gt l mpossible d ouvrir la base DSN mysql dbimpots 1000 lt erreur gt lt erreurs gt La feuille de style erreurs xsl transformera ce code XML en code HTML Voyons un premier exemple http localhost poly impots 7 xmlsimulations html Calcul d imp ts Etes vous man e out non Nombre d enfants k Salaire annuel 200000 Calculer Effacer Le SGBD MySQL n est pas lanc O n re oit alors la r ponse suivante Q Q Q Q amp http flocalhost polysimpots xmlsimulations php ke a Simulations de calculs d imp ts Les erreurs suivantes se sont produites Impossible d ouvrir la base DSN mysql dbimpots 51000 Si on regarde le code source re u par le navigateur on a la chose suivante lt xml version 1 0 encodi ng 1S50 8859 1 gt lt xml stylesheet type text xsl href erreurs xsi gt lt erreurs gt lt erreur gt l mpossible d ouvrir la base DSN mysql dbimpots 1000 lt erreur gt lt erreurs gt Maintenant nous lancons le SGBD MySQL et faisons diff rentes simulations successives Nous obtenons la r ponse suivant
194. hanges client serveur C est pourquoi ceux ci sont dans une boucle for i 0 i lt N i chaque change le client ouvre une connexion TCP IP avec le serveur Une fois celle ci obtenue il envoie au serveur les ent tes HTTP de sa requ te Il le client envoie les ent tes HTTP fi get URL TTP a a E Oe See Nee ON GET chemin HTTP 1 1 n fl host hote OCINE LE Host hote port n 1 Connection close envoie connexion Connection close n 11 Cookie PHPSESSI D if PHPSESSID envoie connexion Cookie PHPSESSID PHPSESSI D n ligne vide Programmation PHP 82 envoie connexion n Si le jeton PHPSESSID est disponible il est envoy sous la forme d un cookie sinon il ne l est pas On notera que le client a indiqu qu il travaillait avec le protocole HTTP 1 1 Ce qui explique qu ult rieurement le serveur va lui envoyer l ent te HTTP Transfer Encoding chunked qui appartient au protocole HTTP 1 1 mais pas au protocole HTTP 1 0 Une fois sa requ te envoy e le client attend la r ponse du serveur Il commence par exploiter les ent tes HTTP de cette r ponse Il recherche dans celle ci deux lignes Cookie Transfer E ncoding chunked La ligne Cookie est l ent te HTTP qui contient le jeton de session PHPSESSID Le client doit le r cup rer pour le renvoyer au serveur lors de l change suivant La ligne Transfer E ncoding chunked si elle est pr sente indique que le serveur va env
195. heure lt title gt lt head gt lt body gt lt center gt TE lt hl gt Une page JSP g n r e dynamiquement lt h1 gt lt h2 gt 11 est lt heures gt lt mi nutes gt lt secondes gt lt h2 gt lt br gt lt h3 gt A chaque fois que vous rechargez la page l heure change lt h3 gt lt body gt lt html gt Une fois ex cut par le serveur web ce script produit la page suivante 3 Page JSP affichant l heure Microsoft Internet Explorer Fichier Edition Affichage Favoris Outils a G B 3 w 2 j Rechercher Favoris Historique Courrier Imprimer Edita S Suivante Arr ter Actraliser D marrage Pr Adresse ja http localhost examples isp perso heure isp Une page JSP g n r e dynamiquement Il est 11 52 38 A chaque fois que vous rechargez la page l heure change Les tests mettre le script heurejsp dans lt tomat gt jakarta tomcat webapps ex amples jsp Tomcat 3 x ou dans lt tomcat gt webapps ex amples jsp Tomcat 4 x lancer le serveur Tomcat demander l URL http localhost 8080 examples jsp heure jsp 1 5 6 Conclusion Les exemples pr c dents ont montr que e une page HTML pouvait tre g n r e dynamiquement par un programme C est tout le sens de la programmation Web e que les langages et les serveurs web utilis s pouvaient tre divers Actuellement on observe les grandes tendances suivantes o lestandems Apa
196. hile on enl ve le dernier caract re Exemples 112 post substr post 0 on pr pare la requ te HTTP au format HTTP 1 0 a Surl path HTTP 1 0 n HTTP Content type application x www form urlencoded n SHTTP Content length strlen post Ne FO E EOMERI 9i close n if jeton SHTTP Cookie PHPSESSI D j eton n SETTE in HTTP post on envoie la requ te HTTP fwrite connexion HTTP H POST function getinfos document document document HTML Il on cherche soit la liste d erreurs 11 soit le tableau des simulations pr paration du r sultat impots erreurs array impots simulations array Ii y a t il une erreur 11 mod le de la ligne d erreur Rs AMAR eh SPL S Pe f if p l echerche dans le document preg_match_all modErreur document champs PREG SET_ORDER r cup ration des erreurs for i 0 i lt count champs i gi mpots erreurs champs iJ 1 for ini return impots lif 11 mod le d une ma du tableau des simulations lt tr gt lt td gt oui lt td gt lt td gt 2 lt td gt lt t d gt 200000 lt td gt lt td gt 22504 lt td gt modSi mul ation lt tr gt s lt td gt lt td gt s lt td gt lt td gt s I recherche dans le document if preg match all modSi mul ation document champs PREG SET ORDER I r cup ration des simulations for i 0 i lt count champs i yfimpots simul
197. hreads de lecture criture new ServeurSend client nbClients start new ServeurReceive client nbClients start on retourne l coute des demandes fin while catch Exception ex on ae l erreur erreur L erreur suivante s est produite ex getMessage 3 ie ey fin main ffichage des erreurs ic static void erreur String msg int exitCode 11 affichage erreur System err print n msg arr t avec erreur System exit exitCode l erreur i classe fl pub S f a ys y class ServeurSend extends Thread 1 classe charg e de lire des r ponses tap es au clavier et de les envoyer un client via un client tcp pass au constructeur Socket cliemics ff le client wep int numClient n de client constructeur lic ServeurSend Socket client int numCli ent on note le client tcp DilsSeeaci lial esnite Cilmimeanitane i at som n 11 pub l t Annexes thi umCl i ent numClient con fie ructeur m thode Run du thread public void run 11 donn es locales a f PrintWriter OUT null flux d criture r seau String r ponse null r ponse lue au clavier BufferedReader IN null flux clavier 11 suivi System out println Thread de lecture des r ponses du serveur au client numClient lanc I gestion des erreurs try l cr ation du flux d criture r seau OUT new PrintWriter client get Out putStream true cr ation du flux clavier
198. iations are allowed phptype username password protocol hostspec 110 usr db_file db phptype username password hostspec database name phptype username password hostspec phptype username hostspec phptype hostspec database phptype hostspec phptype dbsyntax phptype The currently supported database backends are mysql gt MySQL pgsql gt PostgreSQL ibase gt InterBase msql gt Mini SQL mssql gt Microsoft SQL Server oci8 gt Oracle 7 8 8i odbc gt ODBC Open Database Connectivity sybase gt SyBase ifx gt Informix fbsql gt FrontBase With an up to date version of DB you can use asecond DSN format phptype syntax user pass protocol proto opts database Annexes 211 example Connect to database through a socket mysql user unix path to socket pear Connect to database on anon standard port pgsal user pass word tcp localhost 5555 pear 9 9 2 Connect To connect to a database you have to use the function DB connect which requires a valid DSN as parameter and optional a boolean value which determines wether to use a persistent connection or not In case of success you get a new instance of the database class It is strongly recommened to check this return value with DB isError To disconnect use the method disconnect from your database class instance lt php require once D B php user foo pass bar hos
199. icle supprimer code x100 nom calculatrice priz stock actuel stock minimum 2 Annexes 200 action utilisateur bouton OK param tres envoy s action deleteArticle phase 1 amp PHPSE SSID PHPSE SSID page r ponse deletearticle2 php L utilisateur confirme la suppression de l article avec le bouton Supprimer Demande R ponse nom calculatrice prix stock actuel stock minimum action utilisateur bouton Supprimer param tres envoy s action deleteArticle phase 2 amp PHPSE SSID PHPSE SSID page r ponse infos php 9 6 6 missions de requ tes administrateur Le lien du menu Requ te SQ L am ne la page suivante dans la zone 4 de la page type action utilisateur lien de menu Requ te SQL param tres envoy s action sql phase 0 amp PHPSESSID PHPSESSID page r ponse sql php On tape le texte de la requ te SQ L dans le champ de saisie et on utilise le bouton Ex cuter pour l ex cuter Seul un administrateur peut mettre ces requ tes comme le montre l exemple suivant Annexes 201 Demande R ponse action utilisateur bouton Ex cuter param tres envoy s action sql phase 1 amp PHPSESSID PHPSE SSID page r ponse erreurs php Le lien Retour la page d mission de requ tes SQ L permet de revenir la page de saisie select from users action utilisateur l ur lien Retour la page d mission de requ tes SQL para me res envoye
200. ier y ou n ajouter char supprimer droit de supprimer y ou n modifier char 1 consulter droit de consulter y ou n login varchar 10 table supprimer char i consulter charfl Le contenu de la table pourrait tre le suivant login table ajouter modifier supprimer consulter userl articles y y y users articles n n n y Remarques Un utilisateur U se trouvant dans la table USERS et absent de la table DROITS n a aucun droit Dans notre exemple les utilisateurs n auront acc s qu une seule table la table ARTICLES Mais notre commer ant pr voyant a n anmoins ajout le champ table la structure de la table DROITS afin de se donner la possibilit d ajouter ult rieurement de nouvelles tables son application Pourquoi g rer des droits dans nos propres tables alors qu on fait l hypoth se qu on utilisera une base MySQL capable elle m me et mieux que nous de g rer ces droits dans ses propres tables Simplement parce que notre commer ant n a pas les droits d administration sur la base MySQL qui lui permettraient de cr er des utilisateurs et de leur donner des droits N oublions pas en effet que la base MySQL est h berg e chez un fournisseur d acc s et que le commer ant n est qu un simple utilisateur de celle ci sans aucun droit d administration heureusement Il poss de cependant tous les droits sur une base appel e dbarticles laquelle il acc de pour le moment avec le login admarticles et l
201. iliserons essentiellement les outils suivants tous disponibles gratuitement gt un navigateur r cent capable d afficher du XML Les exemples du cours ont t test s avec Internet Explorer 6 gt un JDK Java Development Kit r cent Les exemples du cours ont t test s avec le JDK 1 4 Ce JDK am ne avec lui le Plug in Java 1 4 pour les navigateurs ce qui permet ces derniers d afficher des applets Java utilisant le JDK 1 4 gt un environnement de d veloppement Java pour crire des servlets Java Ici c est JBuilder 7 gt des serveurs web Apache PWS Personal Web Server Tomcat o Apache sera utilis pour le d veloppement d applications web en PERL Practical Extracting and Reporting Language ou PHP Personal Home Page o PWS sera utilis pour le d veloppement d applications web en ASP Active Server Pages ou PHP o Tomcat sera utilis pour le d veloppement d applications web l aide de servlets Java ou de pages JSP Java Server pages gt une application de gestion de base de donn es MySQL gt EasyPHP un outil qui am ne ensemble le serveur Web Apache le langage PHP et le SGBD MySQL 6 1 Serveurs Web Navigateurs Langages de scripts 1 Serveurs Web principaux Apache Linux Windows Interner Information Server IIS NT Personal Web Server PWS Windows 9x Navigateurs principaux Internet Explorer Windows Netscape Linux Windows Langages de scripts c t serveur VBScript IIS PWS
202. image lt img border 0 src images univ01 gif width 80 height 95 gt d finit une image sans bordure border 0 de hauteur 95 pixels height 95 de largeur 80 pixels width 80 et dont le fichier source est images univ01 gif sur le serveur web src images univ01 gif Ce lien se trouve sur un document web qui a t obtenu avec l URL http localhost 81 html balises htm Aussi le navigateur deman dere t il l URL http localhost 8 1 images univ01 gif pour avoir l image r f renc e ici lien lt a hred http istia univ angers fr gt id lt a gt fait que le texte id sert de lien vers l URL http istia univ angers fr fond de page lt body back ground images standard jpg gt indique que l image qui doit servir de fond de page se trouve l URL images standard jpg du serveur web D ans le contexte de notre exemple le navigateur demandera l URL http localhost 81 images standard jpg pour obtenir cette image de fond On voit dans ce simple exemple que pour construire l int ralit du document le navigateur doit faire trois requ tes au serveur 1 http localhost 81 html balises htm pour avoir le source HTML du document 2 http localhost 81 images univ01 gif pour avoir l image univ01 gif 3 http localhost 81 images standard jpg pour obtenir l image de fond standard jpg L exemple suivant pr sente un formulaire Web cr lui aussi avec FrontPage
203. ing r ponse null I r ponse serveur 11 gestion des erreurs try cr ation du flux lecture r seau N new BufferedReader new InputStreamReader client getIl nputStream boucle lecture lignes de texte du flux IN whil e true Il lecture flux r seau r ponse I N readLine Hi Line Terme if r ponse null break Il affichage ou out printin lt r ponse 1 Te ex I erreur Viera err printin R ception L erreur suivante s est produite ex getMessage ca Hi tin on ferme les flux try IN close client close catch Ex xception ex on signale la fin du thread System out printin R ception fin du thread de lecture des r ponses du serveur irun classe 7 2 Le serveur Tcp g n rique Maintenant nous nous int ressons un serveur e quiaffiche l cran les commandes envoy es par ses clients Annexes 160 e leur envoie comme r ponse les lignes de texte tap es au clavier par un utilisateur C est donc ce dernier qui fait office de serveur Le programme est lanc par java serveurT CPgenerique portE coute o portE coute est le port sur lequel les clients doivent se connecter Le service au client sera assur par deux threads e un thread se consacrant exclusivement la lecture des lignes de texte envoy es par le client e un thread se consacrant exclusivement la lecture des r ponses tap es au clavier par l utilisateur Celui ci signalera par la commande fin qu il c
204. invheure pl Il est 9 52 55 6 9 Le serveur PWS 6 9 1 Installation Le serveur PWS Personal Web Server est une version personnelle du serveur IIS Internet Information server de Microsoft Ce dernier est disponible sur les machines NT et 2000 Sur les machines win9x PWS est normalement disponible avec le paquetage d installation Internet Explorer Cependant il n est pas install par d faut I faut prendre une installation personnalis e d IE et demander l installation de PWS Il est par ailleurs disponibles dans le NT 4 0 Option pack for W indows 95 6 9 2 Premiers tests La racine des pages Web du serveur PWS est lecteur inetpub wwwroot o lecteur est le disque sur lequel vous avez install PWS Nous supposons dans la suite que ce lecteur est D Ainsi l url hittp machine repl pagel html correspondra au fichier d inetpub wwwroot rep1 pagel html Le serveur PWS interpr te tout fichier de suffixe asp Active Server pages comme tant un script qu il doit ex cuter pour produire une page HTML PWS travaille par d faut sur le port 80 Le serveur web Apache aussi I faut donc arr ter Apache pour travailler avec PWS si vous avez les deux serveurs L autre solution est de configurer Apache pour qu il travaille sur un autre port Ainsi dans le fichier httpd conf de configuration d Apache on remplace la ligne Port 80 par Port 81 Apache travaillera d sormais sur le port 81 et pourra tre utilis en m me temps que PWS
205. ionnent plus Essayons avec un premier change Q Q Q Q x http jlocalhost poly sessions 1 cycledevie php DES PS i e Cycle de vie d une session PHP ID session 587ce26f943a288d8f4 1212e30fed1 3c compteur 0 Invalider la session Recharger la page Onaun ID de session celui g n r par session_start Rechargeons la page avec le lien Q Q Q x http flocalhost poly sessions 1 cycledevie php PHPSESSID 587ce26F943a288d8F41212e30fed13c ___ Cycle de vie d une session PHP ID session 587 ce26f94 3a288d8f4 1212e30fed13c compteur 1 Tnvalider la session Recharger la page N De fa on surprenante les r sultats ci dessus montrent qu on a une session en cours et que le compteur est correctement g r Comment cela est il possible puisque les cookies ayant t d sactiv s il n y a plus d change de jeton entre le serveur et le navigateur L URL de la copie d cran ci dessus nous donne la r ponse http localhost poly sessions 1 cycledevie php PHPSESSID 587ce26f943a288d8f41212e30fed13c C est l URL du lien Recharger la page V rifions le code source de la page affich e par le navigateur Programmation PHP 74 lt a A Se Ne as una la session lt a gt lt a href cycledevie php PHPSESSI D 587ce26f943a288d8f 41212e30fedl3c gt Recharger la page lt a gt Rappelons que le code initial des deux liens dans la page cydedeviep1 php est celui ci cycledevi
206. ions php oui 2 200000 Jeton de session e8c29eal2f79e4771960068d161229fd Les erreurs suivantes se sont produites Impossible d ouvrir la base DSN mysql dbimpots S1000 XML et PHP 134 Puis avec le SG BD lanc dos gt e php43 php exe cltXmlSimulations php http localhost poly impots 8 xmlsimulations php oui 3 200000 Jeton de session 69a54d79db10b70ed0a2d55d5026ac8b Simulations oui 3 200000 16400 dos gt e php43 php exe cltXmlSimulations php http localhost poly impots 8 xmlsimulations php oui 2 200000 69a54d79db10b70ed0a2d55d5026ac8b Jeton de session 69a54d79db10b70ed0a2d55d5026ac8b Simulations oui 3 200000 16400 oui 2 200000 22504 dos gt e php43 php exe cltXmlSimulations php http localhost poly impots 8 xmlsimulations php non 2 200000 69a54d79db10b70ed0a2d55d5026ac8b Jeton de session 69a54d79db10b70ed0a2d55d5026ac8b Simulations oui 3 200000 16400 oui 2 200000 22504 non 2 200000 33388 4 5 Conclusion Gr ce sa r ponse X ML l application impots est devenue plus facile g rer la fois pour son concepteur que pour les concepteurs des application clientes la conception de l application serveur peut maintenant tre confi e a deux types de personnes le d veloppeur PHP de la servlet et l infographiste qui va g rer l apparence de la r ponse du navigateur dans les navigateurs I suffit ce dernier de conna tre la structure de la r ponse X
207. it dans l un des r pertoires de l option include path du fichier de configuration de PHP le constructeur a besoin de savoir quelle base on se connecte et sous quelle identit Ces informations lui sont donn es dans le dictionnaire dD SN Rappelons que l hypoth se de d part tait que la base s appelait dbar ticles et qu elle appartenait un utilisateur appel admarticles ayant le mot de passe mdparticles Rappelons aussi que cette application autorise plusieurs utilisateurs ayant diff rents droits Il y a l une ambigu t lever La connexion est bien ouverte sous l identit de admartides et au final c est sous cette identit que seront faites toutes les op rations sur la base dbartides puisque c est le seul nom que conna t le SGBD MySQL qui ait les droits suffisants pour g rer la base dbartides Pour simuler l existence de diff rents utilisateurs on fera travailler l utilisateur admartides avec les droits de l utilisateur dont le login sUser et le mot de passe sMdp sont pass s en param tres au constructeur Ainsi avant de faire une op ration sur la base des articles on v rifiera que l utilisateur sU ser sM dp a bien les droits de la faire Si oui c est l utilisateur admartides qui la fera pour lui le login et le mot de passe de l administrateur de la base des articles doivent tre pass s au constructeur C est une saine pr caution Si on inscrivait en dur dans le code de la classe ces deux informati
208. it le formulaire et le renvoie au serveur Pour ce faire le navigateur ouvre une nouvelle connexion avec le serveur 4 celui ci traite les donn es du formulaire 1 calcule des informations 11 partir de celles ci envoie un formulaire F2 au client C1 et ferme la connexion ouverte en 3 tape3 5 le cycle des tapes 3 et 4 se r p te dans des tapes 5 et 6 A l issue de l tape 6 le serveur aura re u deux formulaires F1 et F2 et partir de ceux ci aura calcul des informations I1 et 12 Le probl me pos est comment le serveur fait il pour conserver les informations I1 et 12 li es au client C1 On appelle ce probl me le suivi de la session du client C1 Pour comprendre sa racine examinons le sch ma d une application serveur TCP IP servant simultan ment plusieurs clients Programmation PHP 69 Client 1 Client 3 D ans une application client serveur TCP IP classique Je client cr e une connexion avec le serveur change travers celle ci des donn es avec le serveur laconnexion est ferm e par l un des deux partenaires Les deux points importants de ce m canisme sont 1 une connexion unique est cr e pour chacun des clients 2 cette connexion est utilis e pendant toute la dur e du dialogue du serveur avec son client Ce qui permet au serveur de savoir un moment donn avec quel client il travaille c est la connexion ou dit autrement le tuyau qui le relie son client Ce tuyau tant d di
209. ive Le tableau suivant donne les instructions PHP pour r aliser ces diff rentes op rations ave le SGBD MySQL connexion au SGBD connexion mysql_pconnect hote user pwd connexion mysql_connect hote user pwd hote nom internet de la machine sur laquelle s ex cute le SGBD MySQL En effet il est possible de travailler avec des SGBD MySQL distants user nom d un utilisateur connu du SG BD MySQL pwd son mot de passe connexion la connexion cr e mysql pconnect cr e une connexion persistante avec le SGBD MySQL Une telle connexion n est pas ferm e la fin du script Elle reste ouverte Ainsi lorsqu il faudra ouvrir une nouvelle connexion avec le SGBD PHP cherchera une connexion existante appartenant au m me utilisateur S il la trouve il l utilise Il y a l un gain de temps mysql connect cr e une connexion non persistante qu on ferme donc lorsque le travail avec le SGBD MySQL est termin requ tes SQL r sultats mysql_db_query base requ te connexion base la base de MySQL avec laquelle on va travailler requ te une requ te SQL insert delete update select Programmation PHP 56 connexion la connexion au SG BD MySQL r sultats les r sultats de la requ te diff rent selon que la requ te est un select ou une op ration de mise jour insert update delete Te r sultats mysql db_query base select connexion select Le r sultat d un select est une tabl
210. kie va le stocker dans un fichier sur le disque Apr s la r ponse du serveur la connexion est ferm e le client quitte le guichet avec son jeton o le client fait sa seconde demande au serveur A chaque fois qu une demande un serveur est faite le navigateur regarde parmi tous les cookies qu il a s il en a un provenant du serveur demand Si oui il l envoie au serveur toujours sous la forme d une commande HTTP la commande Cookie qui a une syntaxe analogue celle de la commande S amp C ookie utilis e par le serveur Cookie paraml valeurl param2 valeur2 Parmi les ent tes HTTP envoy s par le navigateur le serveur retrouvera le jeton lui permettant de reconna tre le client et de retrouver les informations qui lui sont li es C est la forme la plus utilis e de jeton Elle pr sente un inconv nient un utilisateur peut configurer son navigateur afin qu il n accepte pas les cookies Ce type d utilisateur n a alors pas acc s aux applications web avec cookie r criture d URL o le client fait sa premi re demande le serveur le reconna t au fait que le client n a pas de jeton o le serveur envoie sa r ponse Celle ci contient des liens que l utilisateur doit utiliser pour continuer l application Dans l URL de chacun de ces liens le serveur rajoute le jeton sous la forme URL j amp on valar o lorsque l utilisateur clique sur l un des liens pour continuer l application le navigateur fait sa demande au serveur web en lui
211. l t la connexion avec le client Le serveur cr e deux threads par client S il y a n clients il y aura 2n threads actifs en m me temps Le serveur lui ne s arr te jamais sauf par un Ctrl C tap au clavier par l utilisateur Voyons quelques exemples Le serveur est lanc sur le port 100 et on utilise le client g n rique pour lui parler La fen tre du client est la suivante E data serge MSNET c r seau client tcp g n rique gt java clientTCPgenerique localhost 100 Commandes commande 1 du client 1 lt r ponse 1 au client 1 commande 2 du client 1 lt r ponse 2 au client 1 fin L erreur suivante s est produite Impossible de lire les donn es de la connexion de transport fin du thread de lecture des r ponses du serveur fin du thread d envoi des commandes au serveur Les lignes commencant par lt sont celles envoy es du serveur au client les autres celles du client vers le serveur La fen tre du serveur est la suivante Dos gt java serveurTCPgenerique 100 Serveur g n rique lanc sur le port 100 Thread de lecture des r ponses du serveur au client 1 lanc 1 Thread de lecture des demandes du client 1 lanc lt commande 1 du client 1 r ponse 1 au client 1 1 lt commande 2 du client 1 r ponse 2 au client 1 1 fin du Thread de lecture des demandes du client 1 fin fin du Thread de lecture des r ponses du serveur au client 1 Les lignes commen ant par lt sont c
212. la forme URL parami vall amp param2 val2 amp On peut voir cela comme un avantage ou un inconv nient e un avantage si on veut permettre l utilisateur de placer cette URL param tr e dans ses liens favoris e un inconv nient si on ne souhaite pas que l utilisateur ait acc s certaines informations du formulaire tels par exemple les champs cach s Par la suite nous utiliserons quasi exclusivement la m thode PO ST dans nos formulaires 1 8 2 3 R cup ration des valeurs d un formulaire W eb Une page statique demand e par un client qui envoie de plus des param tres par POST ou GET ne peut en aucune fa on r cup rer ceux ci Seul un programme peut le faire et c est lui qui se chargera alors de g n rer une r ponse au client une r ponse qui sera dynamique et g n ralement fonction des param tres re us C est le domaine de la programmation web domaine que nous abordons Les bases de la programmation web 40 plus en d tail dans le chapitre suivant avec la pr sentation des technologies Java de programmation web les servlets et les pages JSP Les bases de la programmation web 41 2 Introduction la programmation web en PHP 2 1 Programmation PHP Rappelons ici que PHP est un langage part enti re et que s il est surtout utilis dans le cadre du d veloppelent d applications pour le web il peut tre utilis dans d autres contextes Le document PHP par l exemple disponible l URL http shiva istia uni
213. lain q 0 8 video x mI ACCEPT CHARSET I50 8859 1 utf 8 q 0 66 q 0 66 ACCEPT ENCODING gzip deflate compress q 0 9 ACCEPT LANGUAGE en us en q 0 50 CACHE CONTROL max age 0 CONNECTION keep alive HOST localhost KEEP_ ALIVE 300 USER_AGENT Mozilla S 0 Windows U Windows NT 5 0 en US rv 1 0 1 Gecko 20020823 Netscape 7 0 Si on veut un ent te HTTP pr cis on crira par exemple SERV ER HTTP ACCEPT 2 8 R cup rer des informations d environnement Le serveur web php s ex cute dans un environnement qu on peut conna tre via le tableau ENV qui m morise diverses caract ristiques de l environnement d ex cution Consid rons l application envi php suivante lt php I affiche les variables li es au serveur web 11 on envoie du texte simple header Content type text plain Il parcours du tableau associatif ENV resets ENVI while list cl val eur each _ENV echo cl valeur n at while gt Elle donne le r sultat suivant dans un navigateur vue partielle QO Q d G http localhost polyfenv eny1 php ALLUSERSPROFILE C Documents and Settings All Users APPDATA C Documents and Set zings serge Application Data BLASTER T A220 Eke DEAN EG CLASSPATH C Program Files JavaSoft JRE 1 3 1 O2 l1ibi ext OTJava zipi CommonProgramFiles C Program Files Fichiers communs COMPUTERNAME TAHE ComSpec C WINNT system32 cmd exe N HOMEDRIVE C
214. le gt lt head gt lt body gt Ee 3 3 lt h3 gt lt table gt lt tr gt lt t d gt Nom lt td gt lt td gt lt font color green gt lt echo requ te gt nom gt lt font gt lt td gt lt tr gt lt tr gt lt td gt Votre dge lt td gt lt td gt lt font color green gt lt echo requ te gt age gt lt font gt lt td gt lt tr gt lt table gt lt body gt lt ht ml gt Programmation PHP 91 3 Exemples 3 1 Application Imp ts Introduction Nous introduisons ici l application IMPOTS qui sera utilis e de nombreuses reprises par la suite Il s agit d une application permettant de calculer l imp t d un contribuable On se place dans le cas simplifi d un contribuable n ayant que son seul salaire d clarer e on calcule le nombre de parts du salari nbParts nbE nfants 2 1 s il n est pas mari nbEnfants 2 2 s il est mari o nbE nfants est son nombre d enfants e s il a au moins trois enfants il a une demi part de plus e on calcule son revenu imposable R 0 72 S o S est son salaire annuel e on calcule son coefficient familial QF R nbParts e on calcule son imp t I Consid rons le tableau suivant 12620 0 0 0 13190 0 05 631 15640 0 1 1290 5 24740 0 15 2072 5 31810 0 2 3309 5 39970 0 25 4900 48360 0 3 6898 5 55790 0 35 9316 5 92970 0 4 12106 127860 0 45 16754 5 151250 0 50 23147 5 172040 0 55 30710 195000 0 60 39312 0 0 65 49062 Chaque ligne a 3 champs Pour calcu
215. le script esail html dans lt apache D ocumentR oot gt visualiser l URL http localhost essail html avec un navigateur arr ter le serveur A pache lancer le serveur PWS mettre le script essail html dans lt pws D ocumentR oot gt visualiser l URL http localhost essail html avec un navigateur 1 5 2 Une page ASP Active Server Pages Le script essai2 asp lt ht ml gt lt head gt lt title gt essai 1 une page asp lt title gt lt head gt lt body gt lt center gt lt hl gt Une page asp g n r e dynamiquement par le serveur PWS lt h1 gt lt h2 gt 11 est lt time gt lt h2 gt lt br gt A chaque fois que vous rafra chissez la page l heure change lt body gt lt html gt produit la page web suivante Les bases de la programmation web 9 Une page asp g n r e dynamiquement par le serveur PWS Il est 11 41 40 R A chaque fois que vous rafraichissez la page l heure change Le test lancer le serveur PWS mettre le script essai2 asp dans lt pws D ocumentR oot gt demander l URL http localhost essai2 asp avec un navigateur 1 5 3 Un script PERL Practical Extracting and Reporting Language Le script essai3 pl d perl bin perl exe secondes mi nutes heure localti melti me print lt lt HTML pe Content ty text htm lt ht ml gt lt head gt lt title gt essai 1 un script Perl lt title gt lt head gt lt body gt lt cente
216. ler l imp t I on recherche la premi re ligne o QF lt champl Par exemple si QF 23000 on trouvera la ligne 24740 0 5 2072 5 L imp t I est alors gal 0 15 R 2072 5 nbParts Si QF est tel que la relation QF lt champ1 n est jamais v rifi e alors ce sont les coefficients de la demi re ligne qui sont utilis s Ici 0 0 65 49062 ce qui donne l imp t I 0 65 R 49062 nbParts Les donn es d finissant les diff rentes tranches d imp t sont dans une base de donn es OD BC MySQL MySQL est un SGBD du domaine public utilisable sur diff rentes plate formes dont Windows et Linux Avec ce SGBD une base de donn es dbimpots a t cr e avec dedans une unique table appel e impots L acc s la base est contr l par un login motdepasse ici admimpots mdpimpots La copie d cran suivante montre comment utiliser la base dbimpots avec MySQL C Program Files EasyPHP mysql bin gt mysql u admimpots p Enter password x x Welcome to the MySQL monitor Commands end with or g Your MySQL connection id is 18 to server version 3 23 49 max nt Type help or h for help Type c to clear the buffer mysql gt use dbimpots Database changed mysql gt show tables 1 row in set 0 00 sec mysql gt describe impots Field Type Null Key Default Extra Exemples 92 a limites coeffR coeffN piesa 3 rows in set 0 02 sec mysql gt select from impots
217. lise la m thode GET pour envoyer les valeurs du formulaire au serveur web Nous avons donc crit lt form method GET gt Nous arr tons le serveur web et lancons notre serveur TCP g n rique sur le port 81 Maintenant nous revenons dans notre navigateur pour envoyer les donn es du formulaire au serveur web a l aide du bouton E nvoyer bouton Effacer envoyer X r tablir R tablir Voici alors ce que re oit le serveur TCP g n rique lt GET html balises htm R1 0ui amp Cl un amp C2 deux txtSaisie programmation web amp txtMdp ceciestsecret amp area Saisie les bases de la 0D 0Aprogrammation web amp cmbValeurs choix3 amp lst1l liste3 amp lst2 listel amp lst2 liste3 amp cmdRenvoyer Envoyer amp secret uneValeur HTTP 1 1 lt Accept image gif image x xbitmap image jpeg image pjpeg application msword application vnd ms powerpoint application vnd ms excel Referer http localhost 81 html balises htm Accept Language fr Accept Encoding gzip deflate User Agent Mozilla 4 0 compatible MSIE 6 0 Windows NT 5 0 NET CLR 1 0 3705 Host localhost 81 Connection Keep Alive Tout est dans le premier ent te HTTP envoy par le navigateur lt GET html balises htm R1 Oui amp Cl un amp C2 deux txtSaisie programmat ion web amp txtMdp ceciestsecret area Saisie les tbases de lat0D 0Aprogrammationtweb cmbValeurs choix3 amp lsti liste3 amp lst2 listel amp lst2 liste3 amp cmdRenvoyer
218. lt td gt lt tr gt lt tr gt lt td gt lt td gt lt td align center gt lt input type button value Vider onclick vider 1st1A lt td gt lt td align center gt lt input type button value Vider onclick vider 1st2A lt td gt lt td gt lt td gt lt td gt lt td gt lt td align center gt lt input type button value Vider onclick vider 1st1B lt td gt lt td align center gt lt input type button value Vider onclick vider 1st2B lt td gt lt tr gt lt td gt lt td gt lt td colspan 2 gt lt strong gt S l ection simple lt strong gt lt td gt lt td gt lt td gt lt td gt lt td gt lt td gt lt td gt lt td colspan 2 gt lt strong gt S lection multi ple lt strong gt lt td gt lt td gt lt td gt lt tr gt lt table gt lt hr gt lt form gt lt body gt lt html gt Annexes 173 tude de cas 9 Gestion d une base d articles sur le web Objectifs crire une classe de gestion d une base de donn es d articles crire une application web s appuyant sur cette classe introduire les feuilles de style proposer un d but de m thodologie de d veloppement pour des applications web simples introduire javascript dans le navigateur client Cr dits L essence de cette tude de cas a t trouv e dans le livre Les cahiers du programmeur PHP MySQL de Jean Philippe Leboeuf aux ditions Eyrolles 9 1 Introduction Un comme
219. lt td gt eee eu type text value lt php echo main login gt name txtLogin class text gt lt td gt lt tr gt lt tr gt lt td gt mot de passe lt td gt Annexes 209 lt t lt d gt lt input type password value name txtMdp class text gt lt td gt td gt lt i nput Aee Pen value Connexion class submit gt lt td gt lt tr gt lt tabl lt form gt ES 9 8 Pour aller plus loin Pour terminer signalons quelques pistes pour approfondir cette tude de cas Annexes il serait int ressant de voir si la page type de cette application ne pourrait pas faire l objet d une classe Celle ci pourrait tre alors utilis e dans d autres applications notre application est bien adapt e des clients de type navigateur mais moins des clients de type Application autonome Celles ci doivent o cr er une connexion tcp avec le serveur o lui parler HTTP o analyser ses r ponses HTML pour y trouver l information d sir e puisque le client autonome ne sera probablement pas int ress par le code HTML de pr sentation destin aux navigateurs Il serait int ressant que notre application g n re du XML plut t que du HTML Ses clients pourraient alors tre indiff remment des navigateurs assez r cents quand m me ou des applications autonomes Ces derni res n auraient aucune difficult retrouver l information qu elles recherchent puisque la r ponse X ML du serveur ne contie
220. lt td gt Cl lt td gt lt td gt lt php echo C1 gt lt td gt lt tr gt lt tr gt lt td gt C2 lt td gt lt td gt lt php echo C2 gt lt td gt lt tr gt lt tr gt lt t d gt C3 lt td gt lt td gt lt php echo C3 gt lt td gt lt tr gt lt tr gt lt td gt txtSaisie lt td gt lt td gt lt php echo txtSaisie gt lt td gt lt tr gt lt tr gt lt td gt txt Mdp lt td gt lt td gt lt php echo txtMdp gt lt td gt lt tr gt lt tr gt lt td gt areaSaisie lt td gt lt td gt lt php echo areaSaisie gt lt td gt lt tr gt lt tr gt lt td gt cmbVal eurs lt td gt lt td gt lt php echo cmbValeurs gt lt td gt lt tr gt lt tr gt lt td gt lstl lt td gt lt td gt lt php echo lst1l gt lt td gt lt tr gt lt tr gt lt td gt Ilst2 lt td gt lt td gt lt php echo lst2 gt lt td gt lt tr gt lt tr gt lt td gt secret lt td gt lt td gt lt php echo secret gt lt td gt lt tr gt lt table gt lt body gt lt htm gt 2 10 Suivi de session 2 10 1 Le probl me Une application web peut consister en plusieurs changes de formulaires entre le serveur et le client On a alors le fonctionnement suivant tape 1 1 leclient C1 ouvre une connexion avec le serveur et fait sa requ te initiale 2 le serveur envoie le formulaire F1 au client C1 et ferme la connexion ouverte en 1 tape 2 3 le client C1 rempl
221. mandes GET ressource protocole HEAD ressource protocole host machine port Les bases de la programmation web pour demander une ressource donn e selon une version donn e du protocole HTTP Le serveur envoie une r ponse au format HTTP suivie d une ligne vide suivie de la ressource demand e idem si ce n est qu ici la r ponse se limite aux ent tes HTTP et de la ligne vide pour pr ciser protocole HTTP 1 1 la machine et le port du serveur web interrog 23 Il existe d autres commandes Pour les d couvrir nous allons maintenant utiliser un serveur TCP g n rique C est un programme crit en Java et que vous trouverez lui aussi en annexe Il est lanc par java serveurT CPgenerique portE coute o portE couteest le port sur lequel les clients doivent se connecter Le programme serveurT CPgenerique e affiche l cran les commandes envoy es par les clients e leur envoie comme r ponse les lignes de texte tap es au clavier par un utilisateur C est donc ce dernier qui fait office de serveur D ans notre exemple l utilisateur au clavier jouera le r le d un service web Simulons maintenant un serveur web en lan ant notre serveur g n rique sur le port 88 Dos gt java serveurTCPgenerique 88 Serveur g n rique lanc sur le port 88 Prenons maintenant un navigateur et demandons l URL http localhost 88 ex emple html Le navigateur va alors se connecter sur le port 88 de la machine localhost puis demander la page e
222. mbValeurs size 1 gt lt php for i 0 i lt count valeurs i si option courante est gale au choix on la s lectionne if isset Schoix amp amp Schoix Svaleurs Si echo lt option selected gt Svaleurs Si lt option gt n else echo lt option gt Svaleurs i lt option gt n gt lt select gt lt input type submit value Envoyer name cmdEnvoyer gt lt f or m gt suite page if isset Schoix echo lt hr gt n echo lt h3 gt Vous avez choisi le nombre Schoix lt h3 gt n y lt ht ml gt Programmation PHP 54 Le programme g n rateur de la page s appuie sur la variable choix pass e par le programme valaurs php Remarquons ici que la structure HTML de la page commence tre s rieusement pollu e par du code PHP Le frontal valeurs php pourrait faire davantage de travail comme le montre la nouvelle version suivante lt php configuration Pai seri register globals ori hs 11 le tableau des valeurs aleurscarrantnne dem irois qnaire cima il ee Mind Diet at 0 ventuel choix de l utilisateur Ii on r cup re l POST cmbVal eurs choi x on calcule la liste des valeurs afficher SHTMLvaleurs for Si 0 Si lt count Svaleurs Sitt si option courante est gale au choix on la s lectionne if isset Schoix amp amp Schoix Svaleurs Si SHTMLvaleurs lt option selected gt Svaleurs i lt op
223. mmandes au serveur Commentons ces changes client serveur e le service SMTP envoie un message de bienvenue lorsqu un client se connecte lui e certains services ont une commande help donnant des indications sur les commandes utilisables avec le service Ici ce n est pas le cas Les commandes SMTP utilis es dans l exemple sont les suivantes o mail from p diteur pour indiquer l adresse lectronique de l exp diteur du message o rept to destinataire pour indiquer l adresse lectronique du destinataire du message S il y a plusieurs destinataires on r met autant de fois que n cessaire la co mmande rept to pour chacun des destinataires o data qui signale au serveur SMTP qu on va envoyer le message Comme indiqu dans la r ponse du serveur celui ci est une suite de lignes termin e par une ligne contenant le seul caract re point Un message peut avoir des ent tes s par s du corps du message par une ligne vide D ans notre exemple nous avons mis un sujet avec le mot cl Subject e une fois le message envoy on peut indiquer au serveur qu on a termin avec la commande quit Le serveur ferme alors la connexion r seau Le thread de lecture peut d tecter cet v nement et s arr ter e l utilisateur tape alors fin au clavier pour arr ter galement le thread de lecture des commandes tap es au clavier Si on v rifie le courrier re u nous avons la chose suivante Outlook From machin univ angers fr
224. n la base ou tout autre erreur de fa on unique en remplissant l attribut aE rreurs avec le ou des messages d erreurs pr s chaque op ration l utilisateur de la classe doit donc v rifier cette liste Les m thodes addArticle updateArticle deleteArticle selectArticles execute d coulent directement de la maquette de l interface web pr sent e pr c demment Elles correspondent en effet aux options du menu propos Les m thodes addArticle et modifyArticle s appuient sur la m thode v rifierArticle pour v rifier que l article qui va tre ajout ou tre modifi a des donn es correctes Toujours dans le m me esprit la m thode existeArticle permet de v rifier qu on ne s appr te pas ajouter un article qui existe d j On pourrait se passer de cette m thode si on utilise une table d articles o le code est cl primaire C est alors le SG BD lui m me qui signalera l chec de l ajout pour cause de doublon Il le dira probablement avec un message d erreur peu lisible et en anglais Un article a modifier ou supprimer sera d sign par son code qui est unique La m thode getCodes permet d obtenir tous ces codes La m thode disconnect ferme la connexion la base connexion ouverte lors de la construction de l objet On ne voit pas l int r t ici de la m thode connect qui va recr er une connexion avec la base Cela va permettre d ouvrir et fermer cette connexion volont avec un m me objet L int r t n appara
225. n 3 200000 montant 22504 impots Array Array Array Les erreurs suivantes se sont produites Statut marital array incorrect Nombre d enfants Array incorrect salaire Array incorrect Nous utiliserons d sormais la classe ImpotsD SN sans en redonner la d finition 3 3 Application Impots version 1 Nous pr sentons maintenant la version 1 de l application IMPOTS On se place dans le contexte d une application web qui pr senterait une interface HT ML un utilisateur afin d obtenir les trois param tres n cessaires au calcul de l imp t l tat marital mari ou non le nombre d enfants le salaire annuel Calcul d imp ts Etes vous mari e oui non Nombre d enfants B Salaire annuel 200000 Imp t ly f 6400 Calculer Effacer L affichage du formulaire est r alis par la page PHP suivante lt php formulaire des imp ts gt lt ht ml gt lt head gt lt title gt i mpots lt title gt lt script language JavaScript type text javascript gt function effacer raz du formulaire with document frmImpots optMarie 0 checked false optMarie 1 checked true txtEnfants value txtSalaire value txtImpots value with effacer lt script gt lt head gt lt body background poly impots images standard jpg gt lt center gt Calcul d imp ts lt hr gt lt form name frmImpots method POST gt lt table gt lt tr gt lt td gt Etes vo
226. n elle est pass e selon d autres r gles la couche Session et ainsi de suite jusqu ce que l information arrive sur le support physique et soit transmise physiquement la machine destination L elle subira le traitement inverse de celui qu elle a subi sur la machine exp diteur A chaque couche le processus exp diteur charg d envoyer l information l envoie un processus r cepteur sur l autre machine apartenant la m me couche que lui Il le fait selon certaines r gles que l on appelle le protocole de la couche On a donc le sch ma de communication final suivant Les bases de la programmation web 16 Machine A Machine B 4 Application v i i Application f 4 f Pr sentation v f i ai Pr sentation 4 f l Session Vv n Session f 4 f Transport v i i ii Transport i f 4 f R seau v R seau 1 4 f Liaison v a Liaison f 4 f Physique v i i A Physique f 4 f A gt gt gt Le role des diff rentes couches est le suivant Physi que Liaison de do
227. n affiche une page d erreur sp cifique indiquant les erreurs qui se sont produites Si tout s est bien pass le formulaire est renvoy tel qu il a t saisi mais avec de plus le montant de l imp t payer La page d erreurs est la suivante lt php page d erreur gt lt ht ml gt lt head gt lt title gt Application imp ts indisponi ble lt title gt lt head gt lt body background poly impots images standard jpg gt lt h3 gt Calcul d imp ts lt h3 gt lt hr gt Application indisponible Recommencez ult rieurement lt br gt lt br gt lt font color red gt Les erreurs suivantes se sont produites lt br gt lt ul gt lt php Exemples 101 hage des erreurs 0 i lt count requ te gt erreurs i lt li gt requ te gt erreurs i lt li gt n http f localhost polyimpots 2 impots php 2 Application imp ts indisponible Calcul d imp ts Application indisponible Recommencez ult rieurement Les erreurs sutvantes se sont produites Impossible d ouvrir la base DSN mysql dbimpots 51000 On fournit des donn es incorrectes dans le formulaire http flocalhost poly impots 2fimpots php aS R Ce E f S impots Calcul c imp ts Etes vous mari fe oui non Nombre d enfants box Salaire annuel ag Imp t Calculer Effacer Les erreurs suivantes se sont produites Nombre d enfants xx incorrect Salaire q
228. name R1 gt 0 ui POST R1 valeur value du bouton radio radio lt input type radio name R1 value non checked gt Non coch oui ou non selon les cas cases lt input type checkbox name C 1 value un gt 1 POST C1 valeur value de la case si elle est cocher lt input type checkbox name C2 value deux checked gt 2 coch e sinon la variable n existe pas Ainsi si la case lt input type checkbox name C3 value trois gt 3 C1 a t coch e POST C1 vaut un sinon POST C1 n existe pas Combo lt select size 1 name cmbValeurs gt POST cmbValeurs option s lectionn e dans lt option gt choix1 lt option gt la liste par exemple choix3 lt option selected gt choix2 lt option gt lt option gt choix3 lt option gt lt select gt liste a lt select size 3 name lstl gt POST Ist1 option s lectionn e dans la liste par eta a lt option selected gt listel lt option gt exemple listes 4 lt option gt liste2 lt option gt lt option gt liste3 lt option gt lt option gt liste4 lt option gt lt option gt listes lt option gt lt select gt liste a lt select size 3 name Ist2 multiple gt POST Ist2 tableau des options s lectionn es be ae a lt option gt listel lt option gt dans la liste par exemple liste3 liste5 On notera P lt option gt liste2 lt option gt la syntaxe particuli re de la balise HTML pour ce cas lt option selected gt list
229. nctionnera alors que partiellement dans sa version 1 option Effacer ne fonctionnera pas et pas du tout dans ses versions 2 et 3 options Effacer et Calculer ne fonctionneront pas I pourrait tre int ressant de pr voir une version du service n utilisant pas de scripts javascript Lorsqu on crit un service Web il faut se demander quels types de clients on vise Si on veut viser le plus grand nombre de clients on crira une application qui n envoie aux navigateurs que du HTML pas de javascript ni d applet Si on travaille au sein d un intranet et qu on ma trise la configuration des postes de celui ci on peut alors se permettre d tre plus exigeant au niveau du client La version 4 est un client web qui retrouve l information dont i a besoin au sein du flux HTML envoy par le serveur Tr s souvent on ne ma trise pas ce flux C est le cas lorsqu on a crit un client pour un service web existant sur le r seau et g r par quelqu un d autre Prenon un exemple Supposons que notre service de simulations de calcul d imp ts ait t crit par une soci t X Actuellement le service envoie les simulations dans un tableau HTML et notre client exploite ce fait pour les r cup rer Il compare ainsi chaque ligne de la r ponse du serveur l expression r guli re mod le d une ligne du tableau des simula lt tr gt lt td gt oui lt td gt lt td gt 2 lt td gt lt td gt 2000 Hu weet Soc ee ees modSi mul ation lt tr gt s lt td
230. ndrait aucune information de pr sentation seulement du contenu il faudrait tr s certainement s int resser aux acc s simultan s la base d articles I y a au moins deux points claircir 1 est ce que le SGBD utilis par l application g re correctement l acc s simultan un m me article Par exemple que se passe t il si deux utilisateurs modifient le m me article au m me moment ils appuient sur le bouton Modifier en m me temps Cela d pend probablement du SG BD sous jacent 2 actuellement notre application ne g re pas les acc s simultan s Cependant la base devrait rester dans un tat coh rent m me si des surprises sont attendre Prenons la s quence d v nements suivante l utilisateur U1 entre en modification d un article l utilisateur U2 entre en suppression du m me article un peu apr s chacune des deux actions n cessite des changes client serveur Selon la fa on de travailler de chacun l utilisateur U2 peut terminer son travail avant U1 Lorsque celui ci va terminer ses modification et les valider par Modifier il aura la page d informations en r ponse le SGBD lui indiquant que 0 ligne s ont t modifi es ceci parce que la page qu il voulait modifier a t supprim e entretemps L utilisateur sera sans doute surpris D un point de vue ergonomie il serait sans doute pr f rable d afficher une page signalant mieux l erreur Par ailleurs on pourrait envisager d offrir a l utilisa
231. ne de l arborescence de java Les ex cutables li s java se trouvent dans lt java gt bin lt tomc at gt racine du serveur Tomcat On trouve des exemples de servlets dans lt tomcat gt webapps ex amples servlets et des exemples de pages JSP dans lt tomcat gt webbapps ex amples jsp On se reportera pour chacun de ces outils l annexe qui donne une aide pour leur installation Les bases de la programmation web 8 1 5 Pages Web statiques Pages Web dynamiques Une page statique est repr sent e par un fichier HTML Une page dynamique est elle g n r e la vol e par le serveur web Nous vous proposons dans ce paragraphe divers tests avec diff rents serveurs web et diff rents langages de programmation afin de montrer l universalit du concept web 1 5 1 Page statique HTML HyperText Markup Language Consid rons le code HTML suivant lt ht ml gt lt head gt lt title gt essai 1 une page statique lt title gt lt head gt lt body gt lt center gt lt hl gt Une page statique lt hl gt lt body gt lt html gt qui produit la page web suivante Fichier Edition Affichage Favoris Outils E e w IB r Pr c dente SENTE Arr ter Actualiser D marrage Rechercher Favoris Historique Courrier Imprimer Edition Adresse fe http localhost essais essail html al e OK Il Liens Une page statique Les tests lancer le serveur A pache mettre
232. ne erreur L1 iee de la ligne d erreur modErreur lt li gt lt li gt l recherche dans le document if preg_ match all modErreur document champs PREG SET ORDER I r cup ration des Hee for i 0 i lt count champs i i mpotsferreurs cham most i tll lifor EP Wim return impots li 3 7 Application Imp ts Conclusion Nous avons montr diff rentes versions de notre application client serveur de calcul d imp ts version 1 le service est assur par un ensemble de programmes PHP le client est un navigateur Il fait une seule simulation et n a pas de m moire des pr c dentes version 2 on ajoute quelques capacit s c t navigateur en mettant des scripts javascript dans le document HTML charg par celui ci I contr le la validit des param tres du formulaire version 3 on permet au service de se souvenir des diff rentes simulations op r es par un client en g rant une session L interface HTML est modifi e en cons quence pour afficher celles ci version 4 le client est d sormais une application console autonome Cela nous permet de revenir sur l criture de clients web programm s A ce point on peut faire quelques remarques les versions 1 3 autorisent des navigateurs sans capacit autre que celle de pouvoir ex cuter des scripts javascript On notera qu un utilisateur a toujours la possibilit d inhiber l ex cution de ces derniers L application ne fo
233. nement du couple Apache PHP une page d informations PHP doit appara tre Annexes 138 Environnement EasyPHP Ces pages vous informeront sur le bon fonctionnement de PHP sa configuration et sur les l ments install s infos php extensions param tres _ retour PHP Version 4 2 0 System Window NTS UNNI Configuration File php ini Path Le bouton extensions donne la liste des extensions install es pour php Ce sont en fait des biblioth ques de fonctions Gestion des extensions vous avez 12 extensions charg es t alendar com L cran ci dessus montre par exemple que les fonctions n cessaires l utilisation de la base MySQL sont bien pr sentes Le bouton param tres donne le login motdepasse de l administrateur de la base de donn es MySQL Parametres par d faut de la b L utilisation de la base MySQL d passe le cadre de cette pr sentation rapide mais il est clai ici qu il faudrait mettre un mot de passe l administrateur de la base 6 3 2 Administration Apache Toujours dans la page d administration d EasyPHP le lien vos alias permet de d finir des alias associ s un r pertoire Cela permet de mettre des pages Web ailleurs que dans le r pertoire www de l arborescence d easyPhp Annexes 139 Vos alias Les alias permettent de placer oppements dans un ou plusieu repertoires blocalisitesisite1 saisir le chemin du r pertoire cree ex C parametres par d faut du repertoi
234. nes Ainsi des donn es provenant d une machine A vont tre habill es par la couche Pr sentation de la machine A selon un format standard avant d tre envoy es sur le r seau Parvenues la couche Pr sentation de la machine destinatrice B qui les reconnaitra grace leur format standard elles seront habill es d une autre fa on afin que l application de la machine B les reconnaisse A ce niveau on trouve les applications g n ralement proches de l utilisateur telles que la messagerie lectronique ou le transfert de fichiers 1 7 2 Le modele TCP IP Le mod le O SI est un mod le id al La suite de protocoles TCP IP s en approche sous la forme suivante Les bases de la programmation web 17 Application i Application f 4 4 Pes SS po ae messages ou streams gt 4 4 Transport i i Transport i Udp Tcp i i Udp tcp i 4 4 Wee ee datagrammes UDP gt 4 ou 4 R seau IP segments TCP R seau IP 4 4 Sn a Re datagramnes IP gt 4 4 i Interface r seau Interface r seau fj 4 S trames r seau gt 4
235. ng xml_get_error_code Sxml_parser xml_get_current_line_number Sxml_parser fin exit 3 if while t on lib re les ressources occup es par l analyseur xml xml_parser_free Sxml_parser in exit 0 fonction appel e lors de la rencontre d une balise de d but function startElement parser name attributs global depth XML et PHP 130 une suite d espaces indentation for i 0 i lt depth i print non for attributs Spr cisions while list Sattrib Svaleur each Sattributs Spr cisions Sattrib Svaleur on affiche le nom de la balise et les ventuels attributs if Spr cisions print name Spr cisions n else print Sname n un niveau d arborescence en plus Sdeptht startElement fl 11 la fonction appel e lors de la rencontre d une balise de fin function endElement Sparser name fin de balise niveau d indentation global depth Sdepth une suite d espaces indentation for Si 0 Si lt Sdepth i echo me for le nom de la balise echo Sname n Il la fonction d affichage des donn es function afficheData Sparser data niveau d indentation global depth les donn es sont affich es data trim data if Sdata une suite d espaces indentation for Si 0 Si lt Sdepth i echo for echo Sdata n RSL LE afficheData gt Etudions le code s
236. nire mise jour le lt b gt 10 janvier 2002 lt b gt lt font gt lt p gt lt body gt lt html gt fin du thread de lecture des r ponses du serveur fin fin du thread d envoi des commandes au serveur Un client Web envoie ses commandes au serveur selon le sch ma suivant commandel commande commanden ligne vide Ce n est qu apr s avoir re u la ligne vide que le serveur Web r pond D ans l exemple nous n avons utilis qu une commande GET index html HTTP 1 0 qui demande au serveur l URL index html et indique qu il travaille avec le protocole HTTP version 1 0 La version la plus r cente de ce protocole est 1 1 L exemple montre que le serveur a r pondu en renvoyant le contenu du fichier index html puis qu il a ferm la connexion puisqu on voit le thread de lecture des r ponses se terminer Avant d envoyer le contenu du fichier index html le serveur web a envoy une s rie d ent tes termin e par une ligne vide HTTP 1 1 200 OK Date Mon 13 May 2002 07 30 58 GMT Server Apache 1 3 12 Unix Red Hat Linux PHP 3 0 15 mod perl 1 21 Last Modified Wed 06 Feb 2002 09 00 58 GMT ETag 23432 2bf3 3c60f0ca Accept Ranges bytes Content Length 11251 Connection close Content Type text html lt html gt La ligne lt html gt est la premi re ligne du fichier index html Ce qui pr c de s appelle des ent tes HTTP HyperText Transfer Protocol Nous n allons pas d tailler ici ces ent tes mais on
237. nn es R seau Transport Session Pr sentation Application Assure la transmission de bits sur un support physique On trouve dans ette couche des quipements terminaux de traitement des donn es E T T D tels que terminal ou ordinateur ainsi que des quipements de terminaison de circuits de donn es E T C D tels que modulateur d modulateur multiplexeur concentrateur Les points d int r t ce niveau sont le choix du codage de l information analogique ou num rique le choix du mode de transmission synchrone ou asynchrone Masque les particularit s physiques de la couche Physique D tecte et corrige les erreurs de transmission G re le chemin que doivent suivre les informations envoy es sur le r seau On appelle cela le routage d terminer la route suivre par une information pour qu elle arrive son destinataire Permet la communication entre deux applications alors que les couches pr c dentes ne permettaient que la communication entre machines Un service fourni par cette couche peut tre le multiplexage la couche transport pourra utiliser une m me connexion r seau de machine machine pour transmettre des informations appartenant plusieurs applications On va trouver dans cette couche des services permettant une application d ouvrir et de maintenir une session de travail sur une machine distante Elle vise uniformiser la repr sentation des donn es sur les diff rentes machi
238. nnexion 10000 while ii c est fini return doc getChunkedDoc Rappelons qu un morceau de document est envoy sous la forme taille partie de document ligne vide On commence donc par lire la taille du document Celle ci connue on demande la fonction fread de lire taille caract res dans le flux connexion puis la ligne vide qui suit On r p te cela jusqu ce que le serveur envoie l information qu il va envoyer un document de taille 0 2 10 5 Exemple 4 Dans l exemple pr c dent le dient web renvoie le jeton sous la forme d un cookie Nous avons vu qu il pouvait aussi le renvoyer au sein m me de l URL demand e sous la forme URL PH PSE SSID xxx V rifions le Le programme clientC ompteur php est transform en cientC ompteur2 php et modifi de la fa on suivante oie les ent tes HTTP il il 11 le client env 11 get URL HTTP if SPHPSESSID envoie Sconnexion GET Schemin PHPSESSID SPHPSESSID HTTP 1 1 n else envoie Sconnexion GET Schemin HTTP 1 1 n ost hote port oie connexion Host hote port n Connection close oi Li 0 V e connexion Connection close n gne vide en iif env Il en e connexion n V Le client demande donc l URL du compteur par GET URL PHPSESSID xx HTTP 11 et n envoie plus de cookie C est la seule modification V oici les r sultats d un premier appel dos gt e php43 php exe clientCompteur2 php http localhost poly sessions
239. nput type text name txtSaisie size 20 value qqs mots gt lt td gt Mot de passe lt td gt lt td gt lt tr gt lt td gt Bo te de saisie lt td gt lt td gt lt textarea rows 2 name areaSaisie cols 20 gt lignel ligne2 ligne3 lt textarea gt lt td gt lt tr gt lt tr gt lt td gt combo lt td gt lt td gt lt select size 1 name cmbValeurs gt lt option gt choix1 lt option gt lt option selected gt choix2 lt option gt lt opt ion gt choix3 lt option gt lt select gt lt td gt liste a choix simple lt td gt lt td gt lt select size 3 name Ist1 gt lt option selected gt listel lt option gt lt option gt liste2 lt option gt lt option gt liste3 lt option gt lt option gt liste4 lt option gt lt option gt liste5 lt option gt lt select gt lt td gt liste a choix multi ple lt td gt lt td gt lt select size 3 name 1st2 multiple gt lt option selected gt listel lt option gt lt option gt liste2 lt option gt lt option selected gt liste3 lt option gt lt option gt liste4 lt option gt lt option gt liste5 lt option gt lt select gt Programmation PHP 66 lt td gt lt tr gt lt tr gt lt t d gt bouton lt td gt lt td gt lt input type button value Effacer name cmdEffacer onclick effacer gt lt td gt lt tr gt lt tr gt lt td gt envoyer lt td gt lt td gt lt input type submit value En
240. ol gif Utilisons maintenant le client TCP g n rique E data serge JAVA SOCKETS client g n rique gt java clientTCPgenerique localhost 81 Commandes HEAD images univ01 gif HTTP 1 1 Rosie ToCalhosEs gI HTTP 1 1 200 OK Date Tue 09 Jul 2002 13 53 24 GMT Server Apache 1 3 24 Win32 PHP 4 2 0 Last Modified Fri 14 Apr 2000 11 37 42 GMT ETag O c5f 38f70306 Accept Ranges bytes Content Length 3167 Content Type image gif On notera les points suivants dans la r ponse du serveur HEAD Content Length 3167 Content Type image gif nous ne demandons que les ent tes HTTP de la ressource En effet une image est un fichier binaire et non un fichier texte et son affichage a l cran en tant que texte ne donne rien de lisible c est la taille du fichier univ01 gif le serveur indique son client qu il va lui envoyer un document de type image gif cad une image au format GIF Si l image avait t au format JPEG le type du document aurait t image jpeg Les types des documents sont standardis s et sont appel s des types MIME Multi purpose Mail Internet Extension 1 7 3 2 La demande d un dient HTTP Maintenant posons nous la question suivante si nous voulons crire un programme qui parle un serveur web quelles commandes doit il envoyer au serveur web pour obtenir une ressource donn e Nous avons dans les exemples pr c dents obtenu un d but de r ponse Nous avons rencontr trois com
241. on start SESSION session raz variable session pr paration pagel requ te gt nom grequ te gt erreurs array II affichage pagel i ude pagel php n 0 JE 3 l k f l n l x l i exi t gt Notons les points suivants l application a besoin d un suivi de session Aussi chaque tape de celle ci d marre t elle une session Jes informations de session conserver le seront dans un objet session Jes informations n cessaires l affichage des diff rentes trois pages de l application seront mises dans un objet requ te Le programme pagel php affiche les informations contenues dans requ te lt pagel php gt lt ht ml gt lt head gt lt title gt page 1 lt title gt lt head gt lt body gt are 113 lt h3 gt lt form name frmNom method POST action etape2 php gt lt table gt lt tr gt lt td gt Votre nom lt td gt lt tr gt lt table gt lt input type submit value Suite gt lt f or m gt lt erreurs if count Srequ te gt erreurs 0 gt lt hr gt lt font color red gt Les erreurs suivantes se sont produites lt ul gt lt for i 0 i lt count requ t e gt erreur lt li gt lt echo requ te gt erreurs i for gt Sio Sil spa ee jo gt lt lt body gt lt ht ml gt la page re oit un objet requ te contenant deux champs nom et areurs Elle affiche la
242. ons tout utilisateur de la classe pourrait se faire passer ais ment pour administrateur de la base des articles En effet une classe PHP n est pas prot g e Aussi l attribut bAdmin de la classe qui indique si l utilisateur sUser sMdp pour lequel on travaille est administrateur ou non pourrait tr s bien tre positionn directement de l ext rieur comme dans l exemple suivant SoArticles new articles dDSN sUser sMdp JA I ici sUser a t reconnu comme un utilisateur non administrateur de la base oArticl e gt bAdmi n TRUE maintenant sUser est devenu administrateur PHP n est pas JAVA ou C et une classe PHP n est qu une structure de donn es un peu plus volu e qu un dictionnaire mais qui n offre pas la s curit d une vraie classe o l attribut bA dmin aurait t d clar priv ou prot g rendant impossible sa modification de l ext rieur Parce que l utilisateur de la classe doit conna tre le login et le mot de passe de l administrateur de la base des articles seul ce dernier peut utiliser la classe L op ration pr c dente ne pr sente donc plus aucun int r t pour lui La classe est la uniquement pour lui offrir des facilit s de d veloppement Une cons quence importante est qu il Annexes 179 n y a pas lieu de prendre des pr cautions de s curit Encore une fois celui qui utilise la classe artides est n cessairement administrateur de la base des articles Ja classe g re les erreurs de connexio
243. or transparent 96 border 2px outset Green background image 97 font family Comic Sans MS background repeat 38 font size 16px background attachment 99 background transparent background position 106 Ore rate nepal El border 2px outset Green 101 text align right border width 2px 402 vertical align top ARLES border style outset 103 cursor pointer color EG 104 color FF7F50 ed 405 cursor pointer font family Comic Sans MS font size 16px font weight normal text align tight vertical align top hack arouind attachment x Sample Text D sormais toute balise lt INPUT class fantaisie gt trouv e dans une page HTML associ e la feuille de style pr c dente sera pr sent e comme l exemple de la zone 3 ci dessus L int r t des feuilles de style est grand Leur utilisation permet de changer le look d une application web en ne modifiant celle ci qu en un seul point sa feuille de style Les feuilles de style ne sont pas reconnues par les navigateurs anciens La directive lt link gt ci dessous sera ignor e par certains d entre eux lt head gt lt title gt Gestion d articles lt title gt lt link type text css href lt php echo SdConfig urlPageStyle gt rel stylesheet gt Dans notre application cela donnera la page d accueil suivante LA LA Gestion d articles Authentification Utilisation Connexion la base login o Supprimer un article m
244. ot de passz Connexion o Lister des articles e Ajouter un article o Modifier un article Administration o Requ te SOL Annexes 188 On a l une page minimale sans recherche graphique On peut avoir pire Certaines versions de navigateurs reconnaissent les feuilles de style mais les interpr tent mal O n peut alors avoir une page d figur e et inutilisable Se pose donc la question du type du navigateur client Il existe des techniques qui aident d terminer le type du navigateur client Elles ne sont pas totalement fiables On peut alors crire diff rentes feuilles de style pour diff rents navigateurs voire crire une version sans feuille de style pour les navigateurs qui les ignorent Cela alourdit bien s r la t che de d veloppement Ce probl me important a t ici ignor Avec les feuilles de style on peut imaginer offrir un environnement personnalis aux utilisateurs de notre application Nous pourrions leur pr senter une page leur offrant plusieurs styles de pr sentation possibles Ils pourraient choisir celui qui leur convient le mieux Ce choix pourrait tre enregistr dans une base de donn es Lorsque l utilisateur se connecte de nouveau on pourrait alors d marrer l application avec la feuille de style qui a re u sa pr f rence 9 5 5 Le module d entr e de l application Les clients ne conna tront de l application que son module d entr e apparticles php Les grandes lignes de son fonctionnement
245. ournit il modifiera la feuille de style et non le XML Gr ce la feuille de style les navigateurs afficheront la nouvelle forme visuelle et les clients web programm s n auront pas eux tre modifi s Exemples 117 4 XML et PHP Dans ce chapitre nous allons faire une introduction l utilisation de documents XML eXtensible M arkup Language avec PHP Nous le ferons dans le contexte de l application imp ts tudi e dans le chapitre pr c dent 4 1 Fichiers XML et feuilles de style X SL Consid rons le fichier X ML suivant qui pourrait repr senter le r sultat de simulations lt xml version 1 0 encoding windows 1252 gt lt simulations gt lt si mulation marie oui enfants 2 salaire 200000 i mpot 22504 gt lt si mulation marie non enfants 2 salaire 200000 i mot 33388 gt lt si mul ations gt Si on le visualise avec IE 6 on obtient le r sultat suivant Address A E datalserge xml impots 0 simulations xml lt xml version 1 0 encoding windows 1252 gt lt simulations gt lt simulation marie oui enfants 2 salaire 200000 impot 22504 gt lt simulation marie non enfants 2 salaire 200000 impot 33388 gt lt simulations gt IE6 reconnait qu il a affaire a un fichier X ML grace au suffixe xml du fichier et le met en page d une facon qui lui est propre Avec Netscape on obtient une page vide Cependant si on regarde le code source View Source on a bien l
246. ous dans le r pertoire du script pr c dent et ex cutez le 6 6 Vbscript Javascript Perlscript Ces langages sont des langages de script pour windows Ils peuvent fonctionner dans diff rents conteneurs tels gt Windows Scripting Host pour une utilisation directe sous Windows notamment pour crire des scripts d administration syst me gt Internet E xplorer Il est alors utilis au sein de pages HTML auxquelles il am ne une certaine interactivit impossible atteindre avec le seul langage HTML gt Internet Information Server IIS le serveur Web de Microsoft sur NT 2000 et son quivalent Personal W eb Server PWS sur Win9x Dans ce cas vbscript est utilis pour faire de la programmation c t serveur web technologie appel e ASP A ctive Server Pages par Microsoft On r cup re le fichier d installation l URL http msdn microsoft com scripting et on suit les liens W indows Script Sont install s gt le conteneur Windows Scripting Host conteneur permettant l utilisation de divers langages de scripts tels Vbscript et Javascript mais aussi d autres tel PerlScript qui est amen avec Active Perl gt un interpr teur VBscript gt un interpr teur Javascript Pr sentons quelques tests rapides Construisons le programme vbscript suivant une classe class personne Dim nom Dim age End class cr ation d un objet personne Set pl new personne With nom dupont age 18 End With affich
247. oyer un document par morceaux Chaque morceau est alors envoy au client sous la forme suivante nombre de caract res du document en hexad cimal document ligne vide Si la ligne T ransfer E nooding chunked n est pas pr sente le document est envoy en une seule fois derri re la ligne vide des ent tes HTTP Donc selon la pr sence ou non de cette ligne le mode de r ception du document va diff rer Le code d exploitation des ent tes HTTP est le suivant Le client commence par lire les ent tes HTTP termin s par une ligne vide CHUNKED 0 while ligne fgets connexion 10000 amp amp ligne rtrim ligne ff cho ligne GENO lt a Slionelhs recherche du jeton si on ne l a pas encore trouv if PHPSESSI Di recherche la ligne set Bu a Tne net ch set Cookie PSESSI D i ligne champs 11 uv le jeton on de m morise SPH IPSESS De champs 1 hi lif Ti i recherche du mode de transfert du document if CHUNKED ll recherche de la ligne Transfer Encodin unke if preg match Transfer Encoding chun Te l i A Hi alee par morceaux CHUNKE ilif iif ligne suivante lorsque le jeton aura t trouv une premiere fois il ne sera plus cherch lors des appels suivants au serveur Lorsque les ent tes HTTP de la r ponse ont t trait s on passe au document qui suit les ent tes HTTP Celui ci est lu diff remment selon son mode de transfert 11 la lecture du docum
248. p db DB connect dsn res db gt query select from mytable Get each row of data on each iteration until there isno more rows while row res gt fetchRow id row 0 Or an example using fetchInto while res gt fetchInto row id row 0 gt 9 9 4 1 Select the format of the fetched row The fetch modes supported are Annexes DB_FETCHMODE_ORDERED default returns an ordered array The order is taken from the select statment lt php res db gt query select id name email from users row res gt fetchRow DB FETCHMODE ORDERED row will contain array 0 gt lt column id data gt 1 gt lt column name data gt 2 gt lt column email data gt z Access the data with id row 0 name row 1 email row 2 gt DB_FETCHMODE_ASSOC returns an associative array with the column names as the array keys lt php res db gt query select id name email from users row res gt fetchRow DB FETCHMODE ASSOC row will contain array id gt lt column id data gt name gt lt column name data gt email gt lt column email data gt Access the data with id row id name rowl name 213 email rowl email gt DB_FETCHMODE_OBJECT retums aDB row object with column names as properties lt php res db gt query selec
249. p d signe e temp Ce fichier de configuration influe sur la portabilit du programme php crit En effet si une application web doit r cup rer la valeur d un champ C d un formulaire web elle pourra le faire de diverses fa ons selon que la variable de configuration register_globals a la valeur on ou off off la valeur sera r cup r e par HTTP GET VARS C ou GET C ou HTTP POST VARS C ou POST C selon la m thode GET PO ST utilis e par le client pour envoyer les valeurs du formulaire on idem ci dessus plus C car la valeur du champ C a t rendue globale dans une variable portant le m me nom que le champ Si un d veloppeur crit un programme en utilisant la notation C car le serveur web php qu il utilise la variable register_globals on ce programme ne fonctionnera plus s il est port sur un serveur web php o cette m me variable est off On cherchera donc crire des programmes en vitant d utiliser des fonctionnalit s d pendant de la configuration du serveur web php 2 3 Configurer PHP l ex cution Pour am liorer la portabilit d un programme PHP on peut fixer soi m me certaines des variables de configuration de PHP Celles ci sont modifi es le temps de l ex cution du programme et seulement pour lui D eux fonctions sont utiles dans ce processus ini_get confVari able rend la valeur de la variable de configuration oonfV ariable ini_set confVariable valeur fixe la vale
250. page php dynami que lt title gt lt head gt lt body gt lt center gt Programmation PHP 45 ee page PHP g n r e dynami quement lt h1 gt lt gt lt php echo maintenant gt lt h2 gt lt br gt A chaque fois que vous rafraichissez la page l heure change lt body gt lt html gt Lorsque le navigateur demandera le document heure3 php celui sera charg et analys par l interpr teur PHP A la rencontre de la ligne include heure3 pagel php l interpr teur va inclure le fichier heure3 pagel php dans le code source de heure3 php et l ex cuter Ainsi tout se passe comme si on avait le code PHP suivant lt code PHP gt lt php on r cup re l heure du moment eee Det Ni maintenant date m y h i s maintenant 2S lt code HTML gt lt ht ml gt lt head gt lt title gt Une page php dynamique lt title gt lt head gt lt body gt lt center gt ue page PHP g n r e dynamiquement lt h1 gt lt h2 gt lt php echo maintenant gt lt h2 gt lt br gt A chaque fois que vous rafraichissez la page l heure change lt body gt lt html gt Le r sultat obtenu est le m me qu auparavant Address a http flocalhost polysintro heure3 php Une page PHP g n r e dynamiquement 2 10 02 06 56 44 chaque fois que vous rafraichissez la page l heure change La solution de mettre les codes PHP et HTML dans des fichiers diff rents sera adopt e pa
251. par la valeur de l attribut champ du noeud analys ici un noeud lt simulation gt L analyse de la ligne X ML pr c dente va produire en sortie le r sultat suivant lt tr gt lt td gt lt tr gt lt td gt lt xsl value of select marie gt oui lt td gt lt td gt lt td gt lt td gt lt xsl value of select enfants gt 2 lt td gt lt td gt lt td gt lt td gt lt xsl value of select salaire gt 200000 lt td gt lt td gt lt td gt lt td gt lt xsl value of select impot gt 22504 lt td gt lt tr gt lt td gt lt tr gt Au total la ligne XML lt simulation marie oui enfants 2 salaire 200000 i mpot 22504 gt va tre transform e en ligne HTML lt tr gt lt td gt oui lt td gt lt td gt 2 lt td gt lt td gt 200000 lt td gt lt td gt 22504 lt td gt lt tr gt Toutes ces explications sont un peu rudimentaires mais il devrait appara tre maintenant au lecteur que le texte X ML suivant 1252 gt lt xml version 1 0 encoding s 125 I f si mulati ons xsl gt i lt xml stylesheet type text lt simul ations gt lt simulation marie oui enfants 2 salaire lt simulation marie non enfants 2 salaire lt si mul ations gt window sl hre 200000 22504 200000 i mpot 33388 accompagn de la feuille de style X SL simulations xsl suivante lt xml version 1 0 encodi ng wi ndows 1252 gt lt xslistylesheet version 1 0 xml ns xsl
252. parser data feof fp il s est produit une erreur fprintf STDERR erreur XML la ligne d n xml error string xml _ get error code xm parser xml_get current line number xm_parser fl oi exit 3 Hif ee tion function xml get_error_ code parser erreurs FR Re rend le code de la derni re erreur survenue function xml_ error _string code rend le message d erreur associ au code pass en param tre function xml_ get_current_line parser rend le n de la ligne du document X ML en cours d analyse par le parseur Lorsque le document a t analys on lib re les ressources attribu es au parseur i on lib re les ressources occup es par l analyseur xm ml _parser_free xml_parser lib ration des function xml free parser ressources attribu es au parseur parser Une fois ceci expliqu le programme pr c dent accompagn des exemples d ex cution se comprend de lui m me 4 4 Application imp ts version 6 XML et PHP 132 Nous avons maintenant tous les l ments pour crire un clients programm pour notre service d imp ts qui d livre du XML Nous reprenons la version 4 de notre application pour faire le client et nous gardons la version 5 pour ce qui est du serveur D ans cette application client serveur Je service de simulations du calcul d imp ts est fait par l application xmlsimulations php La r ponse du serveur est donc au format X ML comme nous l avons vu dans la version 5
253. particles php action addArti cle amp phase 0 amp PHPSESSI D PHPSESSID Pour v rifier que deux actions de notre application se suivent dans l ordre on peut proc der ainsi Lors de l action 1 on note l URI demand e URI1 et on la note dans la session Lors de l action 2 on r cup re le HTTP REFERER de l action 2 On en d duit l URI URI2 de l URL qui tait pr c demment visualis e dans le navigateur qui fait la demande on r cup re l URI URI1 qui tait m moris e dans la session et qui est l URI de l action demand e pr c demment au serveur Si l action 2 suit l action 1 alors on doit avoir URI2 URI1 Si ce n tait pas le cas on refuserait de faire l action demand e et on pr senterait la page d authentification on note dans la session l URI URI2 de l action en cours pour v rification de l action suivante Et ainsi de suite Voici un exemple pr s authentification on choisit le lien Ajouter un article Annexes 205 08PHPSESSID L2 E ttp flocalhost 81 st phpjarticles gestionfarticles8 apparticles php action add rticle amp phase 9 QG or Z S Gestion d articles Gestion d articles userl utilisateur Co Uaton code nom e Ajouter un article o Modifier un article prix Supprimer un article stock actuel N e Lister des articles stock minimum o Requ te SQL L URL de cette page est http localhost 81
254. path HTTP 1 0 n E ONE application Jx WWW form urlencoded n HTTP Content length NT Am HTTP Connection close n if jeton HTTP he PHPSESSI D jeton n SU in SHTTP post on envoie la requ te HTTP fwrite connexion HTTP POST Si par programme nous avions eu l occasion de demander une ressource web par un GET nous n avions pas encore eu l occasion de le faire avec un POST Le POST diff re du GET dans la fa on d envoyer des param tres au serveur Il doit envoyer les ent tes HTTP suivants POST chemin HTTP LX Content type application x www form urlencoded Content length N avec chemin chemin de la ressource web demand e ici url path HTTP 1 X le protocole HTTP d sir Ici on a choisi HTTP 1 0 pour avoir la r ponse en un seul bloc HTTP 1 1 autorise l envoi de la r ponse en plusieurs blocs chunked N d signe le nombre de caract res que le client s appr te envoyer au serveur Les N caract res constituant les param tres de la requ te sont envoy s imm diatement derri re la ligne vide qui termine les ent tes HTTP envoy s au serveur Ces param tres sont sous la forme parami vall amp param2 val2 amp o parami est le nom du param tre et vali sa valeur Les valeurs vali peuvent contenir des caract res g nants tels des espaces le caract re amp le caract re etc Ces caract res doivent tre remplac s par une cha ne XX o XX est leur code hexad cimal L
255. pe Perlscript IE Applets JAVA 1 2 Les changes de donn es dans une application web avec formulaire Machine Cliente Machine Serveur Scripts Navigateur 1 en y serveur web navigateur mi Base de 4 donn es Base de donn es gr er Machine X Le navigateur demande une URL pour la 1 re fois http machine url Auncun param tre n est pass 2 Le serveur Web lui envoie la page Web de cette URL Ele peut tre statique ou bien dynamiquement g n r e par un script serveur SA qui a pu utiliser le contenu de bases de donn es SB SC Ici le script d tectera que l URL a t demand e sans passage de param tres et g n rera la page WEB initiale Le navigateur re oit la page et l affiche CA Des scripts c t navigateur CB ont pu modifier la page initiale envoy e par le serveur Ensuite par des interactions entre l utilisateur CD et les scripts CB la page Web va tre modifi e Les formulaires vont notamment tre remplis 3 L utilisateur valide les donn es du formulaire qui doivent alors tre envoy es au serveur web Le navigateur redemande l URL initiale ou une autre selon les cas et transmet en m me temps au serveur les valeurs du formulaire Il peut utiliser pour ce faire deux m thodes appel es GET et POST A r ception de la demande du client le serveur d clenche le script SA asso ci l URL demand e script qui va d tecter les param tres et les traiter
256. plication imp ts indisponible lt title gt lt head gt lt body background poly impots images standard jpg gt lt h3 gt Calcul d imp ts lt h3 gt lt hr gt Application indisponible Recommencez ult rieurement lt br gt lt br gt lt font color red gt Les erreurs suivantes se sont produites lt br gt lt ul gt lt php Il affichage des erreurs for i 0 i lt count requ te erreurs i echo lt li gt requ te erreurs i lt li gt n VS lt ul gt lt font gt lt body gt lt ht ml gt Id galement l objet requ tea t remplac par un dictionnaire requ te 3 6 Application Imp ts version 4 Nous allons maintenant cr er une application autonome qui sera un client web de l application web impots pr c dente L application sera une application console lanc e partir d une fen tre DOS dos gt e php43 php exe cltImpots php Syntaxe cltImpots php urlImpots mari enfants salaire jeton Les param tres du client web cltImpots sont les suivants 11 syntaxe 0 urllmpots mari enfants salaire jeton 11 client d un service d imp ts fonctionnant sur url mpots envoie ce service les trois informations ne enfants salaire 11 ventuellement avec le jeton de session si celui a t pass Il affiche le tableau des simulations de la eect Voici quelques exemples d utilisation Tout d abord un premier exemple sans jeton de session Exemples 109 dos gt e php4
257. pouvoir utiliser l application l utilisateur devra s identifier l aide de la page suivante Gestion d articles GA uthentification Utilisation e Alt iter harticte e Modif a TIC login o upprime mot de passe e Lister des artici Administration o RHEQUETE SQL Annexes 191 action utilisateur 1 demande initiale de l URL apparticles php 2 utilisation de l option Authentification du menu 3 demande directe de l URL articles php avec des param tres erron s param tres envoy s 1 pas de param tres 2 action authentifier phase 0 3 une liste de param tres erron s page r ponse login php Sur la page d accueil le lien Ajouter un article est de la forme suivante action addarticle phase 0 Les autres liens sont de la m me forme avec action authentifier updatearticle deletearticle selectarticle sql L utilisateur remplit le formulaire et utilise le bouton Connexion login userl La r ponse est la suivante Gestion d articles userl utilisateur uthentif ication e Ajouter un article e_Modifier un article Supprimer un article Vous tes connect la base des articles e Lister des articles Ge dmini stration o Requ te SQI action utilisateur bouton Connexion param tres envoy s action authentifier phase 1 page r ponse infos php Le titre de la page a t modifi pour indiquer le login de l utilisateur et ses droits administrateu
258. pteur 2 Invalider la session Recharger la page Le compteur a bien t incr ment L ID de session n a pas chang Invalidons maintenant la session Cycle de vie d une session PHP ID session compteur 3 Invalider la session Recharger la page On voit qu on a perdu l ID de la session mais que le compteur a lui t incr ment une nouvelle fois Rechargeons la page Programmation PHP 73 Cycle de vie d une session PHP ID session e4b12bd71499318dbd6d72d0c966d078 compteur 0 Invalider la session Recharger la page On voit qu on recommence avec le m me ID de session que pr c demment Le compteur lui repart z ro La fonction sssion_destroy n a donc pas un effet imm diat Les donn es de la session courante sont supprim es simplement pour l change client serveur qui suit celui o est faite la suppression L ID session n a pas chang ce qui tendrait montrer que session destroy ne d marre pas une nouvelle session avec cr ation d un nouvel ID Le cookie du jeton de session a t renvoy par le navigateur client et PHP a r cup r la session de ce jeton session qui n avait plus de donn es Les tests pr c dents ont t r alis s avec le navigateur Netscape configur pour utiliser les cookies Configurons le maintenant pour ne pas utiliser ceux ci Cela signifie qu il ne stockera ni ne renverra les cookies envoy s par le serveur On s attend alors ce que les sessions ne fonct
259. q incorrect Enfin on fournit des valeurs correctes Exemples 102 http localhost polyfimpots 2 impots php Calcul d imp ts Etes vous mar e oui non Nombre d enfants f Salaire annuel 200000 Imp t 22504 Calculer Effacer 3 4 Application Imp ts version 2 Dans l exemple pr c dent la validit des param tres tx tE nfants txtSalaire du formulaire est v rifi e par le serveur On se propose ici de la v rifier par un script Javascript inclus dans la page du formulaire C est alors le navigateur qui fait la v rification des param tres Le serveur n est alors sollicit que si ceux ci sont valides On conomise ainsi de la bande passante La page impots form php d affichage devient la suivante lt php formulaire des imp ts gt lt ht ml gt lt head gt lt title gt imots lt title gt lt script language avaScript type text javascript gt function effacer function calculer v rification des param tres avant de les envoyer au serveur with document frmImpots nbre d enfants champs s d s exec txtEnfants value if champs null le mod le n est pas v rifi alert Le nombre d enfants n a pas t donn ou est incorrect nbEnfants focus return J if salaire champs s d s exec txtSalaire value if champs nul1 le mod le n est pas v rifi alert Le salaire n a pas t donn ou est incorrect salaire focus
260. qu on ex cute le template mod le de l l ment simulations simulation Elle sera ex cut e a chaque fois que l interpr teur XSL rencontrera dans le texte XML analys une balise lt simulation gt lt simulations gt ou lt simulation gt a l int rieur d une balise lt simulations gt lt simulations gt A la rencontre d une telle balise l interpr teur ex cutera les instructions du mod le suivant lt xsl template match simulation gt lt tr gt lt td gt lt xsl value of select marie gt lt td gt lt td gt lt xsl value of select enfants gt lt td gt lt td gt lt xsl value of select salaire gt lt td gt lt td gt lt xsl value of select i mpot gt lt td gt lt tr gt lt xsl template gt Prenons les lignes X ML suivantes lt simulations gt lt si mulation marie oui enfants 2 salaire 200000 i mpot 22504 gt La ligne lt simulation gt correspond au mod le de l instruction XSL lt xsl apply templates selec simulations simulation gt L interpr teur XSL va donc chercher lui appliquer les instructions qui correspondent ce mod le Il va trouver le mod le lt xsl template match simulation gt et va l ex cuter Rappelons que ce qui n est pas une commande XSL est repris tel quel par l interpr teur XSL et que les commandes XSL sont elles remplac es par le r sultat de leur ex cution L instruction X SL lt xsl value of select champ gt est ainsi remplac
261. quement lt h1 gt lt gt CRIE y h i s maintenant que fois que vous rafra chissez la page l heure change Le script pr c dent produit la page web suivante Une page PHP g n r e dynamiquement 12 09 00 11 54 19 chaque fois que vous rafraichissez la page l heure change Les tests consulter le fichier de configuration srm conf ou httpd conf d A pache dans lt A pache gt confs pour information v rifier les lignes de configuration de php lancer le serveur Apache mettre essai4 php dans lt apache D ocumantR oot gt demander l URL http localhost essai4 php lancer le serveur PWS pour information v rifier la configuration de PWS propos de php mettre essai4 php dans lt pws D ocumentR oot gt php demander l URL http localhost essai4 php 1 5 5 Un script JSP Java Server Pages Le script heure jsp lt programme Java affichant l heure gt lt page import java util gt lt 11 code JAVA pour calculer l heure Calendar calendrier Calendar getlnstance int heures calendrier get Calendar HOUR OF DAY int minutes calendrier get Calendar MINUTE int secondes calendrier get Calendar SECOND heures minutes secondes sont des serlebles globales r 11 qui pourront tre utilis es dans le code HTML h gt lt 1 code HTML gt lt ht ml gt lt head gt Les bases de la programmation web 11 lt title gt Page JSP affichant
262. r L utilisateur signalera la fin des commandes avec le mot cl fin e une boucle de r ception et d affichage des r ponses du serveur Celle ci sera une boucle infinie qui ne sera interrompue que par la fermeture du flux r seau par le serveur ou par l utilisateur au clavier qui tapera la commande fin Pour avoir ces deux boucles dissoci es il nous faut deux threads ind pendants Montrons un exemple d exc cution o notre client tcp g n rique se connecte un service SMTP SendMail Transfer Protocol Ce service est responsable de l acheminement du courrier lectronique leurs destinataires I fonctionne sur le port 25 et a un protocole de dialogue de type changes de lignes de texte Dos gt java clientTCPgenerique istia univ angers fr 25 Commandes lt 220 istia univ angers fr ESMTP Sendmail 8 11 6 8 9 3 Mon 13 May 2002 08 37 26 0200 help lt 502 5 3 0 Sendmail 8 11 6 HELP not implemented mail from machin univ angers fr lt 250 2 1 0 machin univ angers fr Sender ok nepe COS SEVIS akede ee iy Severe SNe 9 tae lt 250 2 1 5 serge tahe istia univ angers fr Recipient ok data lt 354 Enter mail end with on a line by itself Subject test lignel lignez ligne3 lt 250 2 0 0 g4D6bks25951 Message accepted for delivery gare lt 221 2 0 0 istia univ angers fr closing connection fin du thread de lecture des r ponses du serveur fin fin du thread d envoi des co
263. r ant d sire g rer les articles qu il vend en magasin I a d j chez lui une application ACCESS qui fait ce travail mais il est tent par l aventure du web I a un compte chez un fournisseur d acc s internet fournisseur autorisant ses clients installer des scripts PHP dans leurs dossiers personnels Ceci leur permet de cr er des sites web dynamiques Par ailleurs ces m mes clients disposent d un compte MySQL leur permettant de cr er des tables pouvant servir des donn es a leurs scripts PHP Ainsi le commer ant a un compte MySQL ayant pour login admarticles et mot de passe mdparticles I poss de une base dbarticles sur laquelle il a tous les droits Notre commercant a donc les l ments suffisants pour mettre sa gestion d articles sur le web Aid par vous qui avez des comp ten ces dans le d veloppement Web il se lance dans l aventure 9 2 La base des donn es Notre commer ant fait la maquette suivante de l interface web d accueil qu il souhaiterait Gestion d articles w utnent ification Utilisation e oditier un artic login mot de passe Il y aurait deux sortes d utilisateurs des administrateurs qui pourraient tout faire sur la table des articles ajouter modifier supprimer consulter Ceux l pourront utiliser tous les l ments du menu ci dessus En particulier ils pourront mettre toute requ te SQL via l option Requ te SQ L les utilisateurs normaux pas administrateurs qui au
264. r utilisateur Par ailleurs tous les liens de la zone 2 ont t modifi s pour refl ter le fait qu une session a d marr Le param tre PHPSE SSID PHPSE SSID leur a t ajout Si le serveur n a pas pu identifier le client celui ci aura une r ponse diff rente Annexes 192 Gestion d articles ec Utilisation e Ajouter un article 3 2 cs Les erreurs suivantes se sont produites e Modifier un article Supprimer un article L utilisateur x n a pas t reconnu Lister des articles _ Administration o Requ te SQL Retour la page de login action utilisateur bouton Connexion param tres envoy s action authentifier phase 1 page r ponse erreurs php Le lien Retour a la page de login est un lien sur l URL apparticles php action authentifier amp phase 2 amp txtL ogin x Ce lien ram ne le client la page de login o le champ de login est rempli par la valeur du param tre txtLogin login x mot de passe fl action utilisateur lien Retour la page de login param tres envoy s action authentifier phase 2 amp txtLogin x page r ponse login php 9 6 2 Ajout d un article Le lien du menu Ajouter un article am ne la page suivante dans la zone 4 de la page type Annexes 193 action utilisateur lien Ajouter un article param tres envoy s action addArticle phase 0 amp PH PSE SSID PHPSE SSID page r ponse addarticle php L utilisateur remplit les
265. r des exemples Que s changent un navigateur et un serveur web 1 7 3 1 La r ponse d un serveur HTTP Nous allons d couvrir ici comment un serveur web r pond aux demandes de ses clients Le service Web ou service HTTP est un service TCP IP qui travaille habituellement sur le port 80 Il pourrait travailler sur un autre port Dans ce cas le navigateur client serait oblig de pr ciser ce port dans l URL qu il demande Une URL a la forme g n rale suivante protocole machinel port chemin infos avec protocole http pour le service web Un navigateur peut galement servir de client des services ftp news telnet machine nom de la machine o officie le service web port chemin infos port du service web Si c est 80 on peut omettre le n du port C est le cas le plus fr quent chemin d signant la ressource demand e informations compl mentaires donn es au serveur pour pr ciser la demande du client Que fait un navigateur lorsqu un utilisateur demande le chargement d une URL 1 Po il ouvre une communication TCP IP avec la machine et le port indiqu s dans la partie machine port de l URL Ouvrir une communication TCP IP c est cr er un tuyau de communication entre deux machines Une fois ce tuyau cr toutes les informations chang es entre les deux machines vont passer dedans La cr ation de ce tuyau TCP IP n implique pas encore le protocole HTTP du Web le tuyau TCP IP cr le client va faire s
266. r dic wsf wsf est le suffixe des fichiers Windows Script Positionnons nous dans le dossier de ce programme et ex cutons le E data serge windowsScripting perlscript essais gt cscript dico wsf Microsoft R Windows Script Host Version 5 6 Copyright C Microsoft Corporation 1996 2001 Tous droits r serv s cl philippe valeur marianne cl maurice valeur juliette juliette marianne Periscript peut utiliser les objets du conteneur dans lequel il s ex cute Ici c tait des objets du conteneur Windows Script D ans le contexte de la programmation Web les scripts VBscript Javascript Perlscript peuvent tre ex cut s soit au sein du navigateur IE soit au sein d un serveur PWS ou IIS Si le script est un peu complexe il peut tre judicieux de le tester hors du contexte Web au sein du conteneur Windows Script comme il a t vu pr c demment On ne pourra tester ainsi que les fonctions du script qui n utilisent pas des objets propres au navigateur ou au serveur M me avec cette restriction cette possibilit reste int ressante car il est en g n ral assez peu pratique de d boguer des scripts s ex cutant au sein des serveurs web ou des navigateurs 6 7 JAVA Java est disponible l URL http www sun com cf d but de ce document et s installe dans une arborescence qu on appellera lt java gt qui contient les l ments suivants 22 05 2002 22 05 2002 a 22 05 2002 bin 22 05 2002 3 jre 07 02 2002 README
267. r gt lt hl gt Une page g n r e dynamiquement par un script Perl lt hl gt shea est A Rad tie lt pr gt A chaque fois que vous rafraichissez la page l heure change lt body gt lt html gt HTML La premi re ligne est le chemin de l ex cutable perl exe Il faut l adapter si besoin est Une fois ex cut par un serveur Web le script produit la page suivante Une page g n r e dynamiquement par un script Perl I est 11 48 11 R A chaque fois que vous rafraichissez la page l heure change Le test serveur Web Apache pour information visualisez le fichier de configuration srm conf ou httpd conf selon la version d Apache dans lt apache gt confs et rechercher la ligne parlant de cgi bin afin de conna tre le r pertoire lt apache cgi bin gt dans lequel placer essai3 pl mettre le script esai3 pl dans lt apache cgi bin gt demander l url http localhost og bin essai3 pl A noter qu il faut davantage de temps pour avoir la page pal que la page asp Ceci parce que le script Perl est ex cut par un interpr teur Perl qu il faut charger avant qu il puisse ex cuter le script I ne reste pas en permanence en m moire Les bases de la programmation web 10 1 5 4 Un script PHP Personal Home Page HyperText Processor Le script essai4 php lt ht ml gt lt head gt lt title gt essai 4 une page php lt title gt lt head gt lt body gt lt center gt sate page PHP g n r e dynami
268. r la suite Elle pr sente divers avantages la structure des pages envoy es au client n est pas noy e dans du code PHP Ainsi elles peuvent tre maintenues par un web designer ayant des comp tences graphiques mais peu de comp tences en PHP lecode PHP sert de frontal aux requ tes des clients Il a pour but de calculer les donn es n cessaires la page qui sera renvoy e en r ponse au client La solution pr sente cependant un inconv nient au lieu de n cessiter le chargement d un seul document elle n cessite le chargement de plusieurs documents d o une possible perte de performances 2 6 R cup rer les param tres envoy s par un client web 2 6 1 par un POST Consid rons le formulaire suivant o l utilisateur doit donner deux informations un nom et un age Programmation PHP 46 Un formulaire Web R cup ration des valeurs des champs d un formulaire Nom Age i Envoyer Lorsque l utilisateur a rempli les champs N om et A ge il appuie ensuite sur le bouton E nvoyer qui est de type submit Les valeurs du formulaire sont alors envoy es au serveur Celui ci renvoie le formulaire avec de plus un tableau listant les valeurs qu il a re ues Un formulaire Web R cup ration des valeurs des champs d un formulaire Nom laa Age fax Envoyer N Valeurs r cup r es Nom aal Agel aa Le navigateur demande le formulaire l application nomage php suivante lt php I a t on le
269. raient des droits restreints droits d ajouter de modifier de supprimer de consulter Ils peuvent n avoir que certains de ces droits le seul droit de consultation par exemple Annexes 174 Du fait qu il y a divers types d utilisateurs de la base n ayant pas les m mes droits il y a n cessit d une authentification C est pourquoi la page d accueil commence avec celle ci Pour savoir qui est qui et qui a le droit de faire quoi deux tables USERS et DROITS seront utilis es La table USERS aurait la structure suivante Field Type login Jogin de l utilisateur l identifiant de fa on unique Ce champ est cl primaire de la table mip le mot de passe en clair de l utilisateur Cam SERENE aamin le caract re y yes si l utilisateur est administrateur sinon le caract re n no mdp varchar 10 admin char l Le contenu de la table pourrait tre le suivant login mdp admin st st y userl useri n users user n La table DROITS pr cise les droits qu ont les utilisateurs non administrateurs pr sents dans la table USERS Sa structure est la suivante Field Type login login de l utilisateur l identifiant de fa on unique Ce champ est cl trang re de la table DROITS et r f rence la colonne login de la table USERS le nom de la table sur laquelle l utilisateur a des droits table varchar 20 jouter Je caract re y yes si l utilisateur a un droit d ajout sur la table sinon le caract re n no modifier droit de modif
270. re Options Indexes FollowSymLinks Includes AllowOverride All Order allow deny Allow from all Si dans la page ci dessus on met les informations suivantes saisir un nom pour l allas ex sitet saisir le chemin du repertoire cree ex C weblocalisit EAdata serg Se bl et qu on utilise le bouton valider les lignes suivantes sont ajout es au fichier lt easyphp gt apache conf httpd conf Alias st e data serge web lt Directory e data serge web gt Options FollowSymLinks Indexes AllowOverride None Order deny allow allow from 127 0 0 1 deny from al lt Directory gt lt easyphp gt d signe le r pertoire d installation d EasyPHP httpd conf est le fichier de configuration du serveur Apache On peut donc faire la m me chose en ditant directement ce fichier Une modification du fichier httpd conf est normalement prise en compte imm diatement par Apache Si ce n tait pas le cas il faudrait l arr ter puis le relancer toujours avec l ic ne d easyphp ide gt FichiersLog gt Configuration Administration Web local Red marrer Arr ter Quitter Pour terminer notre exemple on peut maintenant placer des pages web dans l arborescence e data serg wo et demander cette page en utilisant l alias st Annexes 140 Address a http flocalhost 81 st html balises htm gt Les balises HTML cellule 1 1 cellule 1 2 icellule 1 3 cellule 2 1 icellule 2 2 cellule 2 3
271. re de renseignements 1 lenom DSN donner la source de donn es O DBC peut tre quelconque 2 la machine sur laquelle s ex cute le SGBD MySQL ici localhost Il est int ressant de noter que la base de donn es pourrait tre une base de donn es distante Les applications locales utilisant la source de donn es ODBC ne s en apercevraient pas Ce serait le cas notamment de notre application PHP 3 la base de donn es MySQL utiliser MySQL est un SGBD qui g re des bases de donn es relationnelles qui sont des ensembles de tables reli es entre elles par des relations Ici on donne le nom de la base g r e 4 lenom d un utilisateur ayant un droit d acc s cette base 5 son mot de passe 3 2 Application Imp ts la classe ImpotsD SN Notre application s appuiera sur la classe PHP ImpotsD SN qui aura les attributs constructeur et m thode suivante attributs var i ttr limites tableau des limites Exemples 94 var sere 11 tableau des coeffR var coeffN tableau des coeffN var erreurs tableau des erreurs I constructeur function mpotsDSN i mpots m thode function calculer personne nous avons vu dans l expos du probl me que nous avions besoin de trois s ries de donn es 12620 0 0 0 13190 0 05 631 15640 0 1 1290 5 24740 0 15 2072 5 31810 0 2 3309 5 39970 0 25 4900 48360 0 3 6898 5 55790 0 35 9316 5 92970 0 4 12106 127860 0 45 16754 5 151250 0 50 23147 5 17204
272. requ te simulations i 3 lt td gt lt tr gt n me for echo lt table gt n J if gt lt body gt lt html gt Le programme d affichage pr sente des diff rences mineures avec sa version pr c dente Je dictionnaire re oit un dictionnaire requ te au lieu d un objet requ e On crit donc requ telenfants et non requ e gt enfants ce dictionnaire a un champ simulations qui est un tableau a deux dimensions requ te simulations i est la simulation n i Celle ci est elle m me un tableau de quatre cha nes de caract res statut marital nombre d enfants salaire annuel imp t a payer Le programme principal a lui volu plus profond ment php Pi traite le formulaire des imp ts 1 ieee h ques include I mpotsDSN php d marrage session session_start configurat ion de l a ape acenion imi set register globals off ini_set display_errors off LUMI ME Reet ad form php A AS erreurs php bdi mpots array dsn gt mysql dbi mots user gt adm mpots pwd gt mdpi mpots tabl e gt i mots limtes gt limtes coef fR gt coeffR coeff N gt coef f N Exemples 106 on r cup re les param tres de la session session SESSION session 1 session valide if isset session isset session obj mpots isset session si mulations on d marre une nouvelle session ession array obilmots gt new mot sDSN
273. rge tahe istia univ angers fr Serge Tah Novembre 2002 1 Les bases Dans ce chapitre nous pr sentons les bases de la programmation Web Il a pour but essentiel de faire d couvrir les grands principes de la programmation Web avant de mettre ceux ci en pratique avec un langage et un environnement particuliers Il pr sente de nombreux exemples qu il est conseill de tester afin de s impr gner peu peu de la philosophie du d veloppement web 1 1 Les composantes d une application Web Machine Serveur Machine Cliente favigateur Scripts rs Navigateur Page WEB Ninoa N um ro R le Exemples courants OS Serveur Linux Windows 2 Serveur Web Apache Linux Windows IIS NT PWS Win9x Scripts ex cut s c t serveur Ils peuvent l tre par des modules du serveur ou par des PERL Apache IIS PWS programmes externes au serveur CGI VBSCRIPT IISPWS JAVASCRIPT IIS PWS PHP Apache IIS PWS JAVA Apache IIS PWS C VB NET IIS 4 Base de donn es Celle ci peut tre sur la m me machine que le programme qui Oracle Linux Windows l exploite ou sur une autre via Internet MySQL Linux Windows Access Windows SQL Server Windows 5 OS Client Linux Windows 6 Navigateur Web Netscape Internet Explorer 7 Scripts ex cut s c t client au sein du navigateur Ces scripts n ont aucun acc s aux VBscript IE Les bases de la programmation web 6 disques du poste client Javascript IE Netsca
274. rs que l utilisateur a laiss le champ login vide dans le formulaire d authentification Il est pr f rable de pr venir l utilisateur que sa demande est erron e login mot de passe JavaScript Application z x A Vous n avez pas indiqu de login On remarquera que cela n emp chera pas le serveur de v rifier que le champ login est non vide car son client n est pas forc ment un navigateur et alors la v rification pr c dente a pu ne pas tre faite Faire l hypoth se que le client est un navigateur est un risque majeur pour la s curit de l application Reprenez les diff rents moments o le navigateur envoie des informations au serveur et lorsque celles ci peuvent tre v rifi es crivez une ou des fonctions javascript qui permettront au navigateur de v rifier la validit des informations avant leur envoi au Serveur Pour reprendre l exemple pr c dent le script login php qui g n re la page d authentification devient le suivant lt script language j avascript gt function TEE 11 on v rifie qu il y a bien un login with document frmLogin champs s exec txtLogin value if champs null Il pas de login eS lert Vous n avez pas indiqu de login Login focus urn s donn es sont l on les envoie au serveur t t if G i m ith k lt form name frmLogin method post action lt php echo main post gt gt lt table gt lt tr gt lt td gt login
275. rt pas d erreurs Spage gt erreurs array le nom ne doit pas tre vide if preg_match s S Srequ te gt nom Spage gt erreurs Vous n avez pas indiqu de nom retour page return page calculerPage TS dape2 commence par v rifier qu il a bien le param tre nom attendu Si ce n est pas le cas il fait r afficher une pagel vide Ce cas est possible si dape2 est appel e directement par un client qui ne lui passe pas de param tres si le param tre nom est pr sent on v rifie sa validit Cela se fait par l interm diaire d une proc dure appel e calculerP age dont le r le est de produire un objet pageavec un champ areurs qui est un tableau d erreurs Une seule erreur est possible mais on a voulu montrer qu on pouvait g rer une liste d erreurs s il y a des erreurs la page pagel est r affich e accompagn e de la liste des erreurs s il n y a pas d erreurs le nom est m moris dans l objet session qui m morise les donn es li es la session courante Puis la page page2 est affich e Le programme page2 php affiche page lt I page2 php gt lt html gt lt head gt lt title gt page 2 lt title gt lt head gt apie lt h3 gt Page 2 3 lt h3 gt lt table gt lt tr gt lt td gt Nom lt td gt lt td gt lt font color green gt lt echo Srequ te gt nom gt lt font gt lt td gt lt tr gt lt tr gt lt td gt Votre dge lt td gt Programmation PH
276. rveur Apache avec l application EasyPhp Pour l avoir directement on ira sur le site d Apache http www apache org L installation cr e une arborescence o on trouve tous les fichiers n cessaires au serveur Appelons lt apache gt ce r pertoire I contient une arborescence analogue la suivante UNINST HTDOCS APACHE 1 ANNOUN 1 ABOUT_ 1 APACHE KEYS LICENSE MAKEFI 1 README README WARNIN 1 BIN MODULES ICONS LOGS CONF CGI BIN PROXY INSTALL ISU DLL 23 06 00 23 06 00 25 02 00 23 02 00 31 03 99 25 02 00 20 08 99 01 01 99 11 01 00 01 04 98 19 03 99 21 09 98 23 06 00 23 06 00 23 06 00 23 06 00 23 06 00 23 06 00 23 06 00 23 06 00 Uninst isu htdocs ApacheCore d1l1 Announcement ABOUT_APACHE Apache exe KEYS LICENSE Makefile tmpl README README NT WARNING NT TXT bin modules icons logs conf cgi bin Proxy install log conf dossier des fichiers de configuration d A pache logs dossier des fichiers de logs suivi d A pache bin les ex cutables d A pache 6 8 1 Configuration Dans le dossier lt Apache gt conf on trouve les fichiers suivants httpd conf srm conf acess conf D ans les derni res versions d A pache les trois fichiers ont t r unis dans httpd conf Nous avons d ja pr sent les points importants de ce fichier de configuration Dans les exemples qui suivent c est la version Apache d EasyPhp qui a servi aux tests et donc son fichier de configuration D ans celui ci D
277. rveur web IIS de Microsoft dans son entreprise il pourra remplacer la base MySQL par SQL Server sans avoir ou tr s peu changer la classe m tier 9 4 La classe articles La classe articles pourrait tre d finie de la fa on suivante lt php classe articles travaillant sur une base d articles compos e des tables suivantes articles code nom prix stockActuel stockMinimum users login mdp admin droits login table ajouter modifier supprimer consulter c est l utilisateur de la classe qui doit fournir le login mdp qui permet de faire toute op ration sur la base il a donc d j tous les droits sur la base Ceci implique qu il n y a pas prendre de pr cautions de s curit particuli res ici biblioth ques require once DB php class articles attributs Annexes 177 var sDSN la cha ne de connexion var sDatabase le nom de la base var oDB connexion a la base var SaErreurs liste d erreurs var SoR sultats r sultat d une requ te select var Sconnect bool en qui indique si on est connect ou non la base var S sQuery la derni re requ te ex cut e var sUser identit de l utilisateur de la connexion var SbAdmin vrai si l utilisateur est administrateur var dDroits le dictionnaire de ses droits table gt gt array consulter ajouter supprimer modifier constructeur function articles dDSN sUser
278. s 1 lt head gt lt head gt c est la partie non affichable du document Elle donne des renseignements au navigateur qui va afficher le document On y trouve souvent la balise lt title gt lt title gt qui fixe le texte qui sera affich dans la barre de titre du navigateur On peut y trouver d autres balises notamment des balises d finissant les mots cl s du document mot cl s utilis s ensuite par les moteurs de recherche On peut trouver galement dans cette partie des scripts crits le plus souvent en javascript ou vbscript et qui seront ex cut s par le navigateur 2 lt body attributs gt lt body gt c est la partie qui sera affich e par le navigateur Les balises HT ML contenues dans cette partie indiquent au navigateur la forme visuelle souhait e pour le document Chaque navigateur va interpr ter ces balises sa fa on Deux navigateurs peuvent alors visualiser diff remment un m me document web C est g n ralement l un des casse t tes des concepteurs web Le code HTML de notre document exemple est le suivant lt ht ml gt lt head gt lt title gt balises lt title gt lt head gt lt body background images standard jpg gt lt center gt lt hl gt Les balises HTM lt h1 gt lt hr gt lt center gt Les bases de la programmation web 27 lt table border 1 gt lt tr gt lt td gt cellule 1 1 lt td gt lt td valign middle align center width 150 gt cellule 1 2 lt
279. s echo Les erreurs suivantes se sont produites n gerreurs obj mpots gt erreurs or i 0 i lt count erreurs i echo Serreurs il n des essais calculerImpots SobjImpots oui 2 200000 calculerImpots SobjImpots non 2 200000 calculerImpots SobjImpots oui 3 200000 calculerImpots SobjImpots non 3 200000 calculerImpots SobjImpots array array array ies calculer mpots obj mpots mari enfants sal aire echo echo impots mari enfants salaire n 11 calcul de l imp t personne array mari gt mari enfants gt enfants salaire gt sal aire mont ant obj mpots gt cal cul er personne 11 des erreurs O a a a cho Les erreurs suivantes se sont produites n erreurs obj mpots gt erreurs or i 0 i lt count erreurs i echo Serreurs i n l for jelse echo montant montant n cal culerl mp le programme de test prend soin d inclure le fichier contenant la classe ImpotsD SN puis cr e un objet objImpots de la classe ImpotsD SN en passant au constructeur de l objet les informations dont il a besoin une fois cet objet cr la m thode calculer de celui ci va tre appel e cinq fois Les r sultats obtenus sont les suivants Exemples 97 dos gt e php43 php exe test php impots oui 2 200000 montant 22504 impots non 2 200000 montant 33388 impots oui 3 200000 montant 16400 impots no
280. s ll session array Ne nt t lif HA 11 on r cup re les param tres de l change en cours requ te mari POST optMarie requ telenfants POST txtEnfants grequ te salaire POST txtSalaire XML et PHP 125 I a t on tous les param tres if isset requ te mari isset requ te enfants isset requ te salaire affichage formulaire vide Srequ te array chkoui gt chknon gt checked enfants gt salaire gt impots gt erreurs gt array simulations gt array include SformulaireImpots in termi nerSession sessi on lif 11 v rification param tres grequ te v rifier requ te des erreurs if count requ te erreurs 0 affichage formulaire include SformulaireImpots I re due a eg A session calcul de l imp t payer requ te impots session obj mpots gt calculer array mari gt requ te mari enfants gt requ te enfants salaire gt requ te salaire une simulation de plus session simul ations array requ te mari requ te enfants requ te salaire requ te impots requ te si mul ations session si mul ations affichage formulaire include SformulaireImpots Hi im termi nerSessi on sessi on Les pages HTML taient affich es par les lignes indude On veut ici g n rer du XML et non du HTML Il suffit d crire deux nouvelles applications impots
281. s action sql phase 2 amp PHPSE SSID PHPSE SSID page r ponse sqll php Si on est administrateur et que la requ te est syntaxiquement correcte 9 6 6 1 1 Demande f 7 7 s Z 5 select from users droits where asers login droits logirl on obtient le r sultat de la requ te Annexes S SS Les erreurs suivantes se sont produites select from users L utilisateur user1 n a pas les droits d administration Retour la page d mission de requ tes lt 202 9 6 6 1 2 R ponse Retour la page d mission de requ tes SQL action utilisateur bouton Ex cuter param tres envoy s action sql phase 1 amp PHPSE SSID PHPSE SSID page r ponse sql2 php On peut mettre des requ tes de mise ajour des tables 9 6 6 1 3 Demande insert into users login mdp admir values user4 user4 n 9 6 6 1 4 R ponse 1 ligne s ont t trait es par la commande Retour la page d mission de requ tes SQL action utilisateur bouton Ex cuter param tres envoy s action sql phase 1 amp PHPSE SSID PHPSESSID page r ponse infos php 9 6 7 Travail a faire E crire les scripts et fonctions n cessaires l applicatio identifiant ype role eine L Ge e script le point d entr e du traitement des demandes des clients authentifier 0 fonction traite la demande param tr e action authen tifier amp phase 0 authentifier 1 fonction traite la demande param tr e
282. s de la session v rification nbre d arguments if count argv 5 amp amp count argv 6 I erreur PEE Ton ent ane argv 0 urllmpots mari enfants salaire jeton n in exit 1 MET on note l URL url mpots analyseURL argv 1 if isset urll mpots erreur I erreur eee DE url l mpots erreur n in gah ic yy lif I analyse de la demande de l utilisateur demande anal yseDemande argv 2 argv 3 argv 4 erreurs if eee ll ech D 11 c est fini exit 1 lif on peut faire la demande on utilise le jeton de session Simpots get Impots SurlImpots Sdemande Sargv 5 I on affiche le jeton de session echo Jeton de session i mpots jeton n des erreurs if count i mots erreurs 0 f imsg d erreurs echo Les erreurs suivantes se sont for i 0 i lt count impots erreurs echo imots erreurs il Min 2 iit or else ii pas d erreurs affichage des simulations imulations n 0 i lt count impots simulations T i mplode i mpots si mul ati a i t ONS II Ws Si ne ction anal yseURL URL analyse la validit de l URL URL rl URL ole AG e http RL n est pas au format http machine port chemin url 1 sos 0 W u u ne t url host Ge moat URL n est pas au format http machine port chemin ur gurl port url port 80 e query URL UR
283. s diff rentes simulations recues Lorsque la base de donn es est indisponible on recoit le document suivant Application indisponible Recommencez ult rieurement lt br gt lt br gt lt font color red gt Le erreurs suivantes se sont produites lt br gt lt ul gt Se tee d ouvrir la base DSN mysql dbimpots 1000 lt li gt lt ul gt lt font gt Pour r cup rer l erreur le client web devra chercher dans la r ponse du serveur web les lignes correspondant au mod le lt li gt lt li gt Nous avons maintenant les lignes directrices de ce qu il faut faire lorsque l utilisateur demande le calcul de l imp t partir du client console pr c dent v rifier que tous les param tres sont valides et ventuellement signaler les erreurs s connecter l URL donn e comme premier param tre Pour cela on suivra le mod le du client web g n rique d j pr sent et tudi Exemples 110 dans le flux de la r ponse du serveur utiliser des expressions r guli res pour soit o trouver les messages d erreurs o trouver les r sultats des simulations Le code du client ctImpots php est le suivant lt ph Il syntaxe 0 urllmpots mari enfants salaire jeton 11 client d un service d imp ts fonctionnant sur urllmpots I envoie ce service les trois informations mari enfants salaire 11 ventuellement avec le jeton de session si celui ci a t pass Il affiche le tableau des simulation
284. s param tres attendus post i eras POST txtNom amp amp isset POST txtAge i pos on r cup re les param tres txtNom et txtAge post s par le client one 3a txtNom age _POST txtAge else n 0 m i a g e UN HU affichage de la pag include nomage pl php gt Quelques explications un champ de formulaire HTML appel champ peut tre envoy au serveur par la m thode GET ou la m thode POST S il est envoy par la m thode G ET le serveur peut le r cup rer dans la variable GET champ et dans la variable _POST champ s il est envoy par la m thode POST l existence d une donn e peut tre test e avec la fonction isset donn e qui rend true si la donn e existe false sinon l application nomagephp construit trois variables nom pour le nom du formuaire age pour l ge et post pour indiquer s il y a eu des valeurs post es ou non Ces trois variables sont transmises la page nomagep1 php On notera que si celle ci participe l laboration de la r ponse au client celui ci n en a pas connaissance Pour lui c est l aplication nomage php qui lui r pond Programmation PHP 47 la premi re fois qu un client demande l aplication nomagephp on a post faux En effet lors de ce premier appel aucune valeur de formulaire n est transmise au serveur La page nomagep1 php est la suivante lt ht ml gt lt head gt lt title gt Formul aire web lt title gt lt h
285. sMdp SADSN dictionnaire d finissant la liaison tablir SADSN sgbd le type du SGBD auquel il faut se connecter SADSN host le nom de la machine h te qui l h berge SADSN database le nom de la base laquelle il faut se connecter SADSN admin le login du propi taire de la base laquelle il faut se connecter SADSN mdpadmin son mot de passe sUser le login de l utilisateur qui veut exploiter la base des articles SsMdp son mot de passe cr e dans oDB une connexion la base d finie par dDSN sous l identit de dDSN admin si la connexion r ussit et que l utilisateur sUser est authentifi charge les droits dans bAdmin et dDroits les droits de l utilisateur sUser met dans sDSN la cha ne de connexion la base met dans sDataBase le nom de la base laquelle on se connecte met connect vrai si la connexion choue ou si l utilisateur sUser n est pas identifi correctement met les msg d erreurs ad quats dans la liste SaErreurs ferme la connexion si besoin est met connect faux constructeur EEE aS SSS SS SSS Se Se SS Ss function connect re connexion la base connect _ nnn nnn nnn nnn function disconnect on ferme la connexion la base sDSN disconnect _ nnn nnn nce function exec
286. si l action demand e est action addArticle amp phase 1 saisie alors l action pr c dente doit tre forc ment action deleteArticle amp phase 0 demande initiale de la page de saisie ou action addArticle amp phase 2 retour en saisie apr s ajout erron De m me si l action demand e est action addArticle amp phase 2 ajout alors l action pr c dente doit tre action addArticle amp phase 1 saisie On peut forcer l utilisateur respecter ces enchainements Alors que le premier m canisme est g n ral et peut s appliquer a toute application le second n cessite un codage sp cifique chaque application et est plus lourd il faut passer en revue toutes les actions possibles de l utilisateur et leurs enchainements On peut m moriser ces derniers dans un dictionnaire comme le montre le code qui suit 1 authentification dPrec authentifier 0 ca dPrec authentifier J ij array action gt authenti fi che we array action gt RAA ER phase gt au iE dPrec authentifier 11 21 eae ayl array action gt eN phase gt 1 oe marry 1e ajout d article dPrec addarticle dPrec addarti cle l a m array action gt addarticle phase gt 0 array action gt ie ce an i dPrec addarticle 2 array array action gt addarticle phase gt 1 0 il ari Ii modification d artic n dPrec updatearticle 0 array dPrec updatearticle
287. sion action entreprendre sAction POST action f POSTI action il GEU acrion i S GET acrilon il aukhent liter sAction strtolower sAction phase ventuelle de l action sPhase POST phase POST phase GET phase GET phase 0 y a t il une session en cours if isset dSession Hii a en de l utilisateur LF SSACE on authentifier amp amp sPhase 0 authentifier 0 dConfig if sAction authentifier amp amp sPhase 1 authentifier 1 dConfig if sAction authentifier amp amp sPhase 2 authentifier 2 dConfig action anormale authentifier 0 dConfig lif pas de session on r cup re la session dSession unserialize dSessi on l encha nement des actions est il normal if enchainementOK SdConfig dSession SsAction SsPhase enchainement anormal authentifier_0 SdConfig traitement des actions if sAction authentifier if sPhase 0 authentifier 0 dConfig Hee phe ee rei authentifier tegen gl if sPhase 2 authentifier 2 dConfig Ilif if sAction addarticle 9 7 3 Faire voluer le look Rappelons nous qu une des conditions pos es lors de l tude de cette application tait qu elle devait tre volutive Supposons qu au bout de quelques semaines on s aper oive que l ergonomie de l application doit tre am lior e Modifiez l application de telle fa on que la structure et l
288. sql dbimpots user gt admimpots pwd gt mdpimpots Exemples 99 table gt impots limites gt limites coeff coeffR coeffN gt coefFfN on r cup re les param tres Srequ te gt mari S_POST optMarie Srequ te gt enfants S_POST txtEnfants Srequ te gt salaire S_POST txtSalaire a t on tous les param tres if isset requ te gt mari isset Srequ te gt enfants isset Srequ te gt salaire pr paration formulaire vide Srequ te gt chkoui Srequ te gt chknon checked Srequ te gt enfants Srequ te gt salaire Srequ te gt impots Srequ te gt erreurs array affichage formulaire include SformulaireImpots fin exit 0 B ift v rification param tres Srequ te v rifier Srequ te des erreurs if count Srequ te gt erreurs 0 affichage formulaire include SformulaireImpots fin exit 0 if calcul de la o Srequ t alculerImpots SbdImpots Srequ te des erreurs if count Srequ te gt erreurs 0 affichage formulaire erreurs include SerreursImpots Z fin exit 0 B ift affichage formulaire include SformulaireImpots exit 0 function v rifier Srequ te v rifie la validit des param tres de la requ te au d part pas d erreurs Srequ te gt erreurs array statut valide Srequ te gt mari strtolower Srequ te gt mari if Sr
289. sses n cessaires la logique de l application Elles sont ind pendantes du client le bloc des g n rateurs des pages r ponse IS1 IS2 IS Interface de Sortie Chaque g n rateur est charg de mettre en forme les r sultats fournis par la logique applicative pour un type de client donn code HTML pour un navigateur ou un t l phone WAP code XML pour une application autonome Ce mod le assure une bonne ind pendance vis vis des clients Q ue le client change ou qu on veuille faire voluer sa fa on de pr senter les r sultats ce sont les g n rateurs de sortie IS qu il faudra cr er ou adapter Dans une application web l ind pendance entre la couche pr sentation et la couche traitement peut tre am lior e par l utilisation de feuilles de style Celles ci gouvernent la pr sentation d une page Web au sein d un navigateur Pour changer cette pr sentation il suffit de changer la feuille de style associ e Il n y a pas toucher la logique de traitement On utilisera donc ici une feuille de style Dans le diagramme ci dessus c est la classe m tier qui fera l interface avec la source de donn es Par hypoth se cette source est ici une base MySQL Afin de permettre une volution vers une autre base de donn es on utilisera la biblioth que PEAR qui offre des classes d acc s aux bases de donn es ind pendantes du type r el de celles ci Ainsi si notre commer ant s enrichit au point de pouvoir installer un se
290. t localhost db name clients db Data Source Name This is the universal connection string dsn mysql user pass host db name DB connect will return a PEAR DB object on success oran PEAR DB Error object on error db DB connect dsn true Alternatively db DB connect dsn With DB isError you can differentiate between an error or avalid connection if D B isError db die db gt getMessage You can disconnect from the database with db gt disconned gt 9 9 3 Query To perform a query against a database you have to use the function query that takes the query string as an argument On failure you get a DB Error object check it with DB isError On succes you get DB_OK predefined PEAR DB constant or when you set a SELECT statment a DB Result object lt php Once you have a valid DB object sql select from clients result db gt query sql Always check that result is not an error if D B isError result die result gt getMessage gt Annexes 212 9 94 Fetch The DB_Result object provides two functions to fetch rows fetchRow and fetchInto fetchRow returns the row null on no more data or a DB_E mor when an error occurs fetchInto requires a variable which be will directly assigned by reference to the result row It will return null when result set is empty or aD B_Enrrortoo lt ph
291. t lt tr gt lt td gt lt input type butto E ae onclick calculer gt lt td gt lt td gt lt input type button value Effacer onclick effacer gt lt td gt lt tr gt lt table gt lt f or m gt lt center gt lt body gt lt html gt On notera que les donn es du formulaire sont post es l URL poly impots 7 xmlsimulations php Le code de l application xmlsimulations php est tr s analogue celui de l application impots php Le lecteur est invit revoir celui ci Rappelons le code d entr e ph Pi traite le formulaire des imp ts I bibiloth ques include I mpot sDSN php 11 d marrage session session start configuration de l a se a on ini _set register globals eye ini set display errors ne ee OES at Cte form DAD SerreursImpots ee erreurs php Shdl mpots array dsn gt dbi mpot user gt adm tabl e gt i mpots i Teese ST nites OET RS gt coeffR ee ade erie wd gt mdpi mpots on r cup re les param tres de la session session _SESSION session 1 session valide iilt isset session isset session obj mpots isset session si mul ati ons on d marre une nouvelle session session array obj mpots gt new mpotsDSN bdl mpots si mul ations gt array i des erreurs i count session obj mpots gt erreurs 0 grequ te array erreurs gt session obj mpots gt erreurs affichage page d erreurs include SerreursImpot
292. t java serveurTCPgenerique 88 Serveur g n rique lanc sur le port 88 Prenons maintenant un navigateur et demandons l URL http localhost 88 ex enplehtml Le navigateur va alors se connecter sur le port 88 de la machine localhost puis demander la page ex enple html about blank Microsoft Internet Explorer File Edit View Favorites Tools Help Bak amp 2 Gsearch Gq Address a http flocalhost 88 exemple html ee Regardons maintenant la fen tre de notre serveur Dos gt java serveurTCPgenerique 88 Serveur g n rique lanc sur le port 88 Thread de lecture des r ponses du serveur au client 2 lanc Thread de lecture des demandes du client 2 lanc GET exemple html HTTP 1 1 Accept image gif image x xbitmap image jpeg image pjpeg application msword Accept Language fr Accept Encoding gzip deflate lt User Agent Mozilla 4 0 compatible MSIE 6 0 Windows NT 5 0 NET CLR 1 0 3705 NET CLR 1 0 2 914 lt Host localhost 88 lt Connection Keep Alive lt On d couvre ainsi les ent tes HTTP envoy s par le navigateur Cela nous permet de d couvrir peu peu le protocole HTTP Los d un pr c dent exemple nous avions cr un client Web qui n envoyait que la seule commande GET Cela avait t suffisant On voit ici que le navigateur envoie d autres informations au serveur Elles ont pour but d indiquer au serveur quel type de client il a en face de lui
293. t lt td gt 22504 lt td gt lt tr gt lt tr gt lt td gt non lt td gt lt td gt 2 lt td gt lt td gt 200000 lt td gt lt td gt 33388 lt td gt lt tr gt lt table gt lt center gt lt body gt lt ht ml gt Le fichier X ML simulations xml suivant lt xml version 1 0 encoding windows 1252 gt lt xml stylesheet type text xsl href simulations xsl gt lt simulations gt lt si mulation marie oui enfants 2 salaire 200000 i mpot 22504 lt simulation marie non enfants 2 salaire 200000 i mpot 33388 lt si mul ations gt lu par un navigateur r cent ici Netscape 7 est alors affich comme suit S File HE datafserge xmlsimpots O simulations xml Simulations de calculs d imp ts mari enfants salaire imp t oui 2 200000 22504 non 2 200000 33388 XML et PHP 122 4 2 Application imp ts version 5 42 1 Les fichiers X ML et feuilles de style X SL de l application imp ts Revenons notre point de d part qui tait l application web imp ts et rappelons que nous voulons la modifier afin que la r ponse faite aux clients soit une r ponse au format XML plut t qu une r ponse HTML Cette r ponse HTML sera accompagn e d une feuille de style X SL afin que les navigateurs puissent l afficher D ans le paragraphe pr c dent nous avons pr sent le fichier simulations xml qui est le prototype d une r ponse XML comportant des simulations de cal
294. t php echo dConfigl urlPageStyle gt rel stylesheet gt La page utilise ici les classes de style suivantes menutitle pour une option principale du menu menublock pour une option secondaire du menu Annexes 182 Changer l un des param tres change l aspect de la page Ainsi changer main title changera le titre de la zone 1 9 5 2 Le traitement type d une demande d un client Le client interagit avec l application gr ce aux liens de la zone 2 de la page type Ces liens seront du type suivant apparticles php action xx amp phase y amp PHPSESSI D zzz2222222222 action d signe l action en cours parmi les suivantes authentifier authentification du client selectArticles S lection d articles consultation updateArticle modification d un article deleteArticle suppression d un article sql mission d une requ te SQ L quelconque administrateur phase une action peut se faire en plusieurs tapes d signe l tape en cours PHPSESSID jeton de session lorsque celle ci a d marr permet au serveur de r cup rer des informations stock es dans la session lors des pr c dents changes D e m me l attribut action dans les formulaires aura la m me forme Par exemple dans la page d accueil il y a un formulaire de login dans la zone 4 La balise HTML de ce formulaire est d finie comme suit lt form name frmLogin method post action apparticles php action authentifier amp phase 1 gt Le traitement de la demande
295. t res accept s dans les documents types d encodages accept s pour les documents types de langues accept es pour les documents type de connexion avec le serveur Ke A live le serveur doit maintenir la liaison ouverte lorsqu il aura donn sa r ponse HTTP_KEEP_ALIVE dur e maximale d ouverture de la liaison HOST HTTP_USER_AGENT REMOTE_ADDR REMOTE_PORT SERVER_PROTOCOL REQUEST_METHOD QUERY_STRING machine h te interrog e par le client identit du client adresse IP du client port de communication utilis par le client protocole HTTP utilis par le serveur m thode d interrogation utilis e par le client GET ou POST requ te parami vall amp param2 val2 amp plac e derri re l URL demand e m thode GET En modifiant l g rement le code du programme pr c dent nous pouvons ne r cup rer que les ent tes HTTP lt php l affiche les variables li es au serveur web n envoie du texte simle ll header Content type fil i text plain arcours du tableau associatif SERVER Programmation PHP 50 reset SERVER while list cl valeur each SERVER 11 enere HTTP if strtolower substr cl 0 4 http echo substr cl 5 valeur n while gt Le r sultat obtenu dans le navigateur est le suivant Q 6 Q Q Q amp http flocalhost poly headers headers2 php al gt ACCEPT text xml application xml application xhtml xml text html q 0 9 text p
296. t a envoy un param tre action ayant la valeur invalider les donn es de la session sont marqu es comme tant supprimer pour le prochain change Elles ne seront pas sauvegard es sur le serveur la fin de l change contrairement a un change normal on r cup re un compteur li la session dans le dictionnaire SESSION ainsi que l ID de session session_id la page envoyer au client est g n r e par le programme cydedeviep php Programmation PHP 72 La page cydedeie p1 php affiche la page envoy e au client lt ht ml gt lt head gt lt title gt Gestion de sessions lt title gt lt head gt lt body gt Siecle de vie d une session PHP lt h3 gt lt nr gt lt br gt Il D session lt php echo idSession gt lt br gt compteur lt php echo compteur gt lt br gt lt a href cycledevie php action invalider gt Ilnvalider la session lt a gt lt br gt lt a href cycledevie php gt Recharger la page lt a gt lt body gt lt ht ml gt On remarquera l URL attach e a chacun des deux liens 1 cydedevie php pour recharger la page 2 cydedeviephp adion invalide pour invalider la session Dans ce cas un param tre adion invalid est joint l URL Il sera r cup r par le programme serveur cydedevie php par l instruction action GET adion Rechargeons la page deux fois de suite Cycle de vie d une session PHP ID session e4b12bd714993 18dbd6d72d0c966d078 com
297. t id name email from users row res gt fetchRow DB FETCHMODE OBJECT row will contain db row Object lid gt lt column id data gt name gt lt column name data gt email gt lt column email data gt i Access the data with id row gt id name row gt name email row gt email gt 9 9 4 2 Set the format of the fetched row You can set the fetch mode for every call or for your whole DB instance lt php 1 Set the mode per call while row result gt fetchRow DB FETCHMODE ASSOC id rowl id 2 Set the mode for all calls db DB connect dsn this will set a default fetchmode for this Pear D B instance for all queries db gt setFetchMode DB FETCHMODE ASSOC result db gt query while row result gt fetchRow id rowl id gt 9 9 4 3 Fetch rows by number The PEAR DB fetch system also supports an extra parameter to the fetch statement So you can fetch rows from a result by number This is especially helpful if you only want to show sets of an entire result for example in building paginated HTML lists fetch rows in an special order etc lt php 1 the row to start fetching from 50 how many results per page res per page 10 the last row to fetch for this page to from res per page Annexes 214 foreach range from to as rownum if I row res gt fetchro
298. t ordre pagelestun formulaire demandant une information un nom page2 est un formulaire obtenu en r ponse l envoi du formulaire de page1 Il demande une seconde information un age page3 est un document HT ML qui affiche le nom obtenu par pagel et l ge obtenu par page2 Il y a trois changes client serveur au premier change le formulaire pagel est demand par le client et envoy par le serveur au second change le client envoie le formulaire pagel nom au serveur Il re oit en retour le formulaire page2 ou de nouveau le formulaire page s il tait erron au troisi me change le client envoie le formulaire page2 age au serveur Il re oit en retour le formulaire page3 ou de nouveau le formulaire page2 sil tait erron Le document page3 affiche le nom et l ge Le nom a t obtenu par le serveur au second change et oubli depuis On utilise une session pour enregistrer le nom l change 2 afin qu il soit disponible lors de l change 3 La page pagel obtenue au premier change est la suivante Q S Q Q G http flocalhost poly sessions 3 etapei php page 1 Page 1 3 Votre nom Suite On remplit le champ du nom Programmation PHP 85 Page 1 3 Votre nom martin gt gt http flocalhost poly sessions 3 etape2 php_ Page 2 3 Nom martin Votre age err ee Page 3 3 Nom martin Votre age 27 86 Programmation PHP Lorsqu on soumet la pag
299. t qui illustrait les acteurs d une application web Les bases de la programmation web 15 Machine Serveur Machine Cliente Ca Scripts Me Le Navigateur Page WEB ile ee Base de donn es De 2 Machine X Nous nous int ressons ici aux changes entre la machine cliente et la machine serveur Ceux ci se font au travers d un r seau et il est bon de rappeler la structure g n rale des changes entre deux machines distantes 1 7 1 Le modele OSI Le mod le de r seau ouvert appel OSI Open Systems Interconnection Reference Model d fini par l ISO International Standards Organisation d crit un r seau id al o la communication entre machines peut tre repr sent e par un mod le sept couches 7 Application CE DE Pr sentation e bo gasaan O Ta T Transport ts S E ae R seau o EE RE D Physique ts s Chaque couche re oit des services de la couche inf rieure et offre les siens la couche sup rieure Supposons que deux applications situ es sur des machines A et B diff rentes veulent communiquer elles le font au niveau de la couche A pplication Elles n ont pas besoin de conna tre tous les d tails du fonctionnement du r seau chaque application remet l information qu elle souhaite transmettre la couche du dessous la couche Pr sentation L application n a donc conna tre que les r gles d interfa age avec la couche Pr sentation Une fois l information dans la couche Pr sentatio
300. t revalidate post check 0 pre check 0 Pragma no cache Connection close Content Type text html lt html gt lt head gt lt title gt Gestion de sessions lt title gt lt head gt lt body gt lt h3 gt Cycle de vie d une session PHP lt h3 gt lt hr gt lt br gt ID session ea0d2673811ed069e7289d86933a4c0a lt br gt compteur 0 lt br gt lt a href cycledevie php action invalider amp PHPSESS ID ea0d2673811ed069e7289d86933a4c0a gt Invalid er la session lt a gt lt br gt lt a href cycledevie php PHPSESSID ea0d2673811ed069e7 28 9d86933a4c0a gt Recharger la page lt a gt lt body gt lt html gt Le lecteur attentif aura not que la r ponse du serveur n est pas la m me selon le programme client utilis D ans le premier cas le serveur avait envoy un ent te HTTP Transfer Encoding chunked ent te qui n a pas t envoy dans le second cas Cela vient du fait que le second client a envoy l ent te HTTP get URL HTTP 1 0 qui demande une URL et indique qu il travaille avec le protocole HTTP version 1 0 ce qui oblige le serveur lui r pondre avec ce m me protocole Or l ent te HTTP Transfer Encoding chunked appartient au protocole HTTP version 1 1 Aussi le serveur ne l at il pas utilis dans sa r ponse Ceci nous montre que le premier client a lui fait sa requ te en indiquant qu il travaillait avec le ptotocole HTTP version 1 1 Nous cr ons maintenant le programme clientCompteur appel de la fa on s
301. t salaire Srequ te gt impots SobjImpots gt calculer Spersonne on rend le r sultat return Srequ te calculerImpots Commentaires tout d abord la classe ImpotsD SN est incluse C est elle qui est la base du calcul d imp ts et qui va nous cacher l acc s la base de donn es un certain nombre d initialisations sont faites visant faciliter la maintenance de l application Si des param tres changent on changera leurs valeurs dans cette section En g n ral ces valeurs de configuration sont plut t stock es dans un fichier ou une base de donn es on r cup re les trois param tres du formulaire correspondant aux champs HTML optMarie txtE nfants txtSalaire ces param tres peuvent tre totalement ou partiellement absents Ce sera notamment le cas lors de la demande initiale du formulaire Dans ce cas l on se contente d envoyer un formulaire vide ensuite la validit des trois param tres r cup r s est v rifi e S ils s av rent incorrects le formulaire est renvoy tel qu il a t saisi mais avec de plus une liste d erreurs une fois v rifi e la validit des trois param tres on peut faire le calcul de l imp t Celu ci est calcul par la fonction calaulerI mpots Cette fonction construit un objet de type ImpotsD SN et utilise la m thode calculer de cet objet La construction de l objet ImpotsD SN peut chouer si la base de donn es est indisponible D ans ce cas l applicatio
302. te page Le code est le suivant lt script language vbscript gt function reagir alert Vous avez cliqu sur le bouton OK end function lt script gt Les balises lt script gt lt script gt servent d limiter les scripts dans la page HTML Ces scripts peuvent tre crits dans diff rents langages et c est l option language de la balise lt script gt qui indique le langage utilis Ici c est VBScript Nous ne chercherons pas d tailler ce langage Le script ci dessus d finit une fonction appel e r agir qui affiche un message Quand cette fonction est elle appel e C est la ligne de code HTML suivante qui nous l indique lt input type button value OK name cmdOK onclick reagir gt L attribut ondick indique le nom de la fonction appeler lorsque l utilisateur cliquera sur le bouton OK Lorsque le navigateur aura charg cette page et que l utilisateur cliquera sur le bouton OK on aura la page suivante Les bases de la programmation web 13 Une page Web avec un script VB Cliquez sur le bouton z Microsoft Internet Explorer IN Vous avez cliqu sur le bouton OK Les tests Seul le navigateur IE est capable d ex cuter des scripts VBScript Netscape n cessite des compl ments logiciels pour le faire On pourra faire les tests suivants serveur A pache script vbs1 html dans lt apache D ocumentR oot gt demander l url http localhost vbs1 html avec le navigateur IE serveur
303. teur un acc s exclusif un article d s qu il entrerait en mise jour de celui ci Un autre utilisateur voulant entrer en mise jour du m me article se verrait r pondre qu une autre mise jour est en cours Cela posera probl me si le premier utilisateur tarde valider sa mise jour les autres seront bloqu s I y a l des solutions trouver qui d pendront assez largement des capacit s du SGBD utilis Oracle a par exemple davantage de capacit s dans ce domaine que MySQL 210 ANNEXE 9 9 PEAR DB a unified APT for accessing SQ L databases This chapter describes how to use the PEAR database abstraction layer DSN The data source name Connect Connecting and disconnecting Query Performing a query against a database Fetch Fetching rows from the query 9 9 1 DSN To connect to a database through PEAR DB you have to create a valid DSN data source name This DSN consists in the following parts phpt ype D atabase backend used in PHP i e mysql odbc etc dbsynt ax Database used with regards to SQ L syntax etc protocol Communication protocol to use i e tcp unix etc host spec Host specification hostname port dat abase Database to use on the DBMS server username User name for login password Password for login proto_opts Maybe used with protocol The format of the supplied D SN is in its fullest form phptype dbsyntax username password protocol hostspec database Most var
304. ticles permet de revenir la page selectLphp 9 6 3 1 4 Demande Les erreurs suivantes se sont produites Echec de la requ te select x from arti Annexes 197 9 6 3 1 5 R ponse D finissez les caract ristiques de la requ te colonnes coll col x where order by pri desc action utilisateur lien Retour la page de s lection d articles param tres envoy s action selectArticle phase 2 amp PHPSE SSID PHPSESSID page reponse select1 php 9 6 4 Modification d articles Le lien du menu Modifier un article am ne la page suivante dans la zone 4 de la page type Choisissez le code de l article modifier FT action utilisateur lien de menu Modifier un article param tres envoy s adion updateArticle phase 0 amp PHPSESSID PHPSE SSID page r ponse updatearticle1 php On choisit le code de l article modifier dans la liste d roulante et on fait O K pour modifier l article ayant ce code Demande R ponse Choisissez le code de l article modifier code nom calculatrice prix 100 stock actuel 11 stock minimum 2 Annexes 198 action utilisateur bouton OK para met res envoy s action updateA rticle phase 1 amp PH PSE SSID PH PSESSID page r ponse updatearticle2 php Une fois obtenue la fiche de l article a modifier l utilisateur peut faire ses modifications Demande R ponse code Mo
305. tion gt lt option gt liste5 lt option gt lt select gt E te M f au lt input type submit value Envoyer name cmdRenvoyer gt i 0 4 a lt input type reset value R tablir name cmdR tablir gt bouton de lt input type button value E ffacer name cmdE ffacer onclick effacer gt type button Passons en revue ces diff rents contr les 1 8 1 1 Leformulaire formulaire lt form m amp hod POST gt balise HTML lt form name method action gt lt form gt attributs name frmexemple nom du formulaire method _ m thode utilis e par le navigateur pour envoyer au serveur web les valeurs r colt es dans le formulaire action URL laquelle seront envoy es les valeurs r colt es dans le formulaire Un formulaire web est entour des balises lt form gt lt form gt Le formulaire peut avoir un nom name xx C est le cas pour tous les contr les qu on peut trouver dans un formulaire Ce nom est utile si le document web contient des scripts qui doivent r f rencer des l ments du formulaire Le but d un formulaire est de rassembler des Les bases de la programmation web 31 informations donn es par l utilisateur au clavier souris et d envoyer celles ci une URL de serveur web Laquelle Celle r f renc e dans l attribut adion URL Si cet attribut est absent les informations seront envoy es l URL du document dans lequel se trouve le formulaire C
306. tion gt n else SHTMLvaleurs lt option gt Svaleurs Si lt option gt n for on calcule la seconde partie de la page SHTMLpart2 if isset Schoix SHTMLpart2 lt hr gt n SHTMLpart2 lt h3 gt Vous avez choisi le nombre Schoix lt h3 gt n if Ii on affiche la r ponse include valeurs p2 php gt La page est maintenant g n r e par le programme valeurs p2 php suivant lt ht ml gt lt head gt lt title gt G n ration de formul aire lt title gt lt head gt lt body gt lt h2 gt Choisissez un nombre lt h2 gt lt hr gt lt form name frmvaleurs method post action valeurs php gt lt select name cmbValeurs size 1 gt lt ph I affichage liste de valeurs echo SHTMLvaleurs lt select gt lt input type submit value Envoyer name cmdEnvoyer gt lt 1 f or m gt lt Pphp 11 affichage partie 2 lt body gt lt ht ml gt Le code HTML est maintenant d barrass d une bonne partie du code PHP Rappelons cependant le but du d coupage en un programme frontal qui analyse et traite la demande d un client et des programmes simplement charg s d afficher des pages param tr es par des donn es transmises par le frontal c est de s parer le travail du d veloppeur PHP de celui de l infographiste Le d veloppeur PHP travaille sur le frontal l infographiste sur les pages web D ans notre nouvelle version l infographiste ne peut plus par exemple tr
307. tion gt un lt opti on gt lt option gt deux lt option gt lt option gt trois lt option gt lt option gt quatre lt option gt lt option gt cing lt opt on gt lt option gt six lt option gt lt option gt sept lt option gt lt option gt hul t lt option gt lt option gt neuf lt option gt lt option gt dix lt option gt lt select gt lt input type submit value Envoyer name cmdEnvoyer gt lt form gt lt body gt lt ht ml gt L application PHP est compos e d une page principale valeurs php qui est appel e aussi bien pour obtenir le formulaire initial la liste des valeurs que pour traiter les valeurs de celui ci et fournir la r ponse la valeur choisie L application g n re deux pages diff rentes celle du formulaire initial qui sera g n r e par le programme valeurs p1 php celle de la r ponse fournie l utilisateur qui sera g n r e par le programme valeurs p2 php L application valeurs php est la suivante lt php 11 le tableau des valeurs Swaleurscarray un Men recois qwavre tell Six seme Mini mew Men Programmation PHP 52 Il a t on les param tres atten grequ teVide isset _ Dose emival eurs l n r cup re le choix de l utilisateur requ teVide 11 requ te initiale include valeurs pl php fell Seq r ponse a ch oi X POST include vale gt 0 f PO ee QURSA p2 php Elle d finit le tableau des valeurs et
308. tionnaire signifie qu elle n est pas autoris e Consid rons l action authentifier ci dessus I authentification dPrec authentifier 0 sarray dPrec authentifier Hi a A ayl array action gt authentifier phase gt 0 Annexes 207 array action gt authentifier phase gt 2 E dPrec authentifier 2 array array action gt authentifier phase gt 1 Le code ci dessus signifie que l action action authentifier amp phase 0 peut tre pr c d e de toute action que action authentifier amp phase 1 peut tre pr c d e de action authentifier amp phase 0 ou de action authentifier amp phase 2 et que action authentifier amp phase 2 peut tre pr c d e de l action action authentifier amp phase 1 E crirela fonction suivante mssepssenseceoscoss secossconsr sech dssceosarenosesscasanenonese function enchainementOK amp dConfig amp dSession sAction sPhase Il v rifie si l action en cours Le sPhase peut suivre l action pr c dente m moris e dans dSession pr cedent 11 le dictionnaire des encha nements autoris s est dans dConfig pr c dents Hu rend TRUE si l encha nement est L FALSE sinon Cette fonction permet l application principale de v rifier que l encha nement des actions est correct lt php LI rit d une table d articles include config php include articles php II session session start dSession SESSI ON ses
309. ts 2 salaire 200000 ji mpot 22504 gt lt si mulation marie non enfants 2 salaire 200000 i mpot 33388 gt lt simulations gt D s le d but du document X ML analys match l interpr teur X SL va produire en sortie le texte lt ht ml gt lt head gt lt title gt Simulations de calculs d imp ts lt title gt lt head gt lt body gt lt center gt UP AREA RENE de calculs d imp ts lt h3 gt lt nr gt lt table border 1 gt lt th gt mari lt th gt lt th gt enfants lt th gt lt th gt sal aire lt th gt lt th gt i mp t lt th gt On remarquera que dans le texte initial on avait lt hr gt et non pas lt hr gt D ans le texte initial on ne pouvait pas crire lt hr gt qui si elle est une balise HTML valide est une balise XML invalide Or nous avons affaire ici un texte XML qui doit tre bien form c ad que toute balise doit tre ferm e On crit donc lt hr gt et parce qu on a crit lt xsl output text html gt l interpr teur transformera le texte lt hr gt en lt hr gt Derri re ce texte viendra ensuite le texte produit par la commande XSL lt xsl apply templates select si mulations si mul ation gt Nous verrons ult rieurement quel est ce texte Enfin l interpr teur ajoutera le texte XML et PHP 120 lt table gt lt center gt lt body gt lt ht ml gt La commande lt xsl apply templates select simulations simulation gt demande
310. ts de pr sentation peuvent tre d finis la main condition de conna tre les r gles d criture des feuilles de style qui suivent une norme appel e CSS Cascading Style Sheets 2 la zone 2 pr sente les propri t s ditables de l attribut en cours de construction C est la m thode la plus simple Elle vite d avoir conna tre le nom exact des attributs de pr sentation qui sont tr s nombreux 3 lazone 3 donne l aspect visuel de l attribut en cours de construction Annexes 186 INPUT background EEESAA border 1px solid EE82EE font family Garamond font size 18px INPUT submit font family Times New Roman font size 1 6px background FA8072 border 2px double Green font weight bold text align center vertical align middle cursor pointer TD menutitle background image url fimagesimenugelgd git height 23px text align center vertical align middle background url Jimages menugelgd gif no re zl Style Inspector _ amp Intemet Explorer 6 4 Pl backgond Xe background color background image background repeat background attachment background position El border border width border style color cursor font family font size font weight text align vertical align hack arnund attachment BS FA8072 2px double Green 2px double GB Green pointer Times New Roman 16px bold center middle
311. txt 07 02 2002 o LICENSE 07 02 2002 COPYRIGHT 07 02 2002 j readme html 22 05 2002 4 lt DIR gt lib 22 05 2002 lt DIR gt include 22 05 2002 7 lt DIR gt demo 07 02 2002 3 10 377 848 src zip 11 02 2002 s lt DIR gt docs Dans bin on trouvera javac exe le compilateur Java et java exe la machine virtuelle Java O n pourra faire les tests suivants 1 crire le script suivant llprogramme Java affichant l heure import java io import java util public class heure public static void main String argl 11 on r cup re date amp heure Date maintenant new Date Ii on affiche System out printin ll est mai ntenant getHours a i 4maintenant get Mi nutes maintenant get Seconds main Annexes 147 i class 2 Sauvegarder ce programme sous le nom heurejava Ouvrir une fen tre D OS Se mettre dans le r pertoire du fichier heurejava et le compiler D data java essais gt c jdk1 3 bin javac heure java Note heure java uses or overrides a deprecated API Note Recompile with deprecation for details Dans la commande ci dessus c jdk1 3 bin javac doit tre remplac par le chemin exact du compilateur javacexe Vous devez obtenir dans le m me r pertoire que heurejava un fichier heure dass qui est le programme qui va maintenant tre ex cut par la machine virtuelle java exe 3 Ex cuter le programme 6 8 Serveur Apache Nous avons vu que l on pouvait obtenir le se
312. u serveur au client Nous nous sommes limit s dans notre r ponse aux ent tes HTTP suivants HTTP 1 1 200 OK Server serveur tcp generique Connection close Content Type text html Nous ne donnons pas la taille du fichier que nous allons envoyer C ontent L ength mais nous contentons de dire que nous allons fermer la connexion Connection dose apr s envoi de celui ci Cela est suffisant pour le navigateur En voyant la connexion ferm e il saura que la r ponse du serveur est termin e et affichera la page HTML qui lui a t envoy e Cette derni re est la suivante lt html gt lt head gt lt title gt Serveur generique lt title gt lt head gt lt body gt lt center gt lt h2 gt Reponse du serveur generique lt h2 gt lt center gt lt body gt lt html gt Le navigateur affiche alors la page suivante Serveur generique Microsoft Internet Explorer File Edit View Favorites Tools Help ebak G Search Favorites LS Es amp l Address a http localhost 88 exemple html Reponse du serveur generique Si ci dessus on fait V iew Source pour voir ce qu a re u le navigateur on obtient Les bases de la programmation web 25 ke exemple 1 Bloc notes Fichier Edition Format lt html gt lt head gt lt title gt serveur generique lt tit le gt lt head gt lt h2 gt Reponse du serveur generique lt h2 gt pci lt body gt rents ji c est dire
313. uivante clientCompteur URL N JSESSIONID Programmation PHP 78 URL url de l application cydedevie N nombre d appels faire cette application PHPSESSID param tre facultatif jeton d une session Le but du programme est d appeler N fois l application cydedevie php en g rant le cookie de session et en affichant a chaque fois la valeur du compteur renvoy e par le serveur A la fin des N appels la valeur de celui ci doit tre N 1 Voici un premier exemple d ex cution dos gt e php43 php exe clientCompteur2 php http localhost poly sessions 2 cycledevie php 3 gt GET poly sessions 2 cycledevie php HTTP 1 1 Host localhost 80 Connection close HTTP 1 1 200 OK Date Thu 10 Oct 2002 06 27 48 GMT Server Apache 1 3 24 Win32 Set Cookie PHPSESSID 2425e00d1d65c2bdchafcice6244f7ea path poly sessions 2 Expires Thu 19 Nov 1981 08 52 00 GMT Cache Control no store no cache must revalidate post check 0 pre check 0 Pragma no cache Connection close Transfer Encoding chunked Content Type text html compteur est gal 0 GET poly sessions 2 cycledevie php HTTP 1 1 Host localhost 80 Connection close Cookie PHPSESSID 2425e00d1d65c2bdcbafclce6244f7ea HTTP 1 1 200 OK Date Thu 10 Oct 2002 06 27 48 GMT Server Apache 1 3 24 Win32 Expires Thu 19 Nov 1981 08 52 00 GMT Cache Control no store no cache must revalidate post check 0 pre check 0 Pragma no cache Connection
314. ule mod_php4 c AddType application x httpd php phtm pwml php3 php4 php php2 inc Par ailleurs nous avons d fini pour A pache un alias poly Programmation PHP 43 Alias poly e data serge web php poly lt Directory e data serge web php poly gt Options Indexes FollowSymLinks Includes AllowOverride All 0rder allow deny Allow from all lt Directory gt Appelons lt poly gt le chemin e data serge web php poly Si nous voulons demander avec un navigateur le document doc php au serveur Apache nous utiliserons l URL http localhost poly doc php Le serveur Apache reconnaitra dans l URL l alias poly et associera alors I URL poly doc php au document lt poly gt doc php 2 5 Un premier exemple Ecrivons une premi re application web php Le texte suivant est enregistr dans le fichier heure php lt ht ml gt lt head gt lt title gt Une page php dynami que lt title gt lt head gt lt body gt lt center gt lt hl gt Une page PHP g n r e dynami quement lt h1 gt lt h2 gt lt php Smaintenant time echo date j m y h i s Smaintenant gt lt h2 gt lt br gt A chaque fois que vous rafraichissez la page l heure change lt body gt lt ht ml gt Si nous demandons cette page avec un navigateur nous obtenons le r sultat suivant E Une page php dynamique Microsoft Internet Explorer File Edit View Favorites Tools Help Bak gt
315. upprim par le navigateur qui l a re u lorsque celui ci est ferm Le second param tre est le chemin des URL auxquelles le navigateur doit renvoyer le cookie Dans l exemple ci dessus si le navigateur a re u le cookie de la machine localhost il renverra le cookie a toute URL se trouvant dans l arborescence http localhost poly sessions 2 dos gt e php43 php exe clientweb php http localhost poly sessions 2 cycledevie php GET HTTP 1 1 200 OK Date Wed 09 Oct 2002 13 58 16 GMT Server Apache 1 3 24 Win32 Set Cookie PHPSESSID 48d5aaa0e99850b17c33a6e22d38e5c4 path poly sessions 2 Expires Thu 19 Nov 1981 08 52 00 GMT Cache Control no store no cache must revalidate post check 0 pre check 0 Pragma no cache Transfer Encoding chunked Content Type text html lt html gt lt head gt lt title gt Gestion de sessions lt title gt lt head gt lt body gt lt h3 gt Cycle de vie d une session PHP lt h3 gt lt hr gt lt br gt ID session 48d5aaa0e99850b17c33a6e22d38e5c4 lt br gt compteur 0 lt br gt lt a href cycledevie php action invalider amp PHPSESSID 48d5aaa0e99850b17c33ab6e22d38e5c4 gt Invalid er la session lt a gt lt br gt lt a href cycledevie php PHPSESSID 48d5aaa0e99850b17c33a6e22d38e5c4 gt Recharger la page lt a gt lt body gt lt html gt Le programme dientweb affiche tout ce qu il re oit du serveur On voit ci dessus la commande HTTP Set cookie avec laquelle le serve
316. ur arr ter Tomcat on utilisera le lien Stop T omat dans le menu des programmes 6 11 Jbuilder Jbuilder est un environnement de d veloppement d applications Java Pour construire des servlets Java o il n y a pas d interfaces graphiques il n est pas indispensable d avoir un tel environnement Un diteur de textes et un JDK font l affaire Seulement JBuilder apporte avec lui quelques plus par rapport a la technique pr c dente gt gt facilit de d bogage le compilateur signale les lignes erron es d un programme et il est facile de s y positionner suggestion de code lorsqu on utilise un objet Java JBuilder donne en ligne la liste des propri t s et m thodes de celui ci Cela est tr s pratique lorsqu on sait que la plupart des objets Java ont de tr s nombreuses propri t s et m thodes qu il est difficile de se rappeler On trouvera JBuilder sur le site http www borland com jbuilder I faut remplir un formulaire pour obtenir le logiciel Une cl d activation est envoy e par m l Pour installer JBuilder 7 il a par exemple t proc d ainsi gt gt gt Annexes trois fichiers zip ont t obtenus pour l application pour la documentation pour les exemples Chacun de ces zip fait l objet d un lien s par sur le site de JBuilder on a install d abord l application puis la documentation et enfin les exemples lorsqu on lance l application la premi re fois une cl d activation est demand
317. ur de la variable de configuration onfV ariable Voici un exemple o on fixe la valeur de la variable de configuration track_errors as 7 valeur de la variable de configuration track_errors echo KRACK orrors n hil get rrack errors mes changement de cette valeur Pa SON IES eh orrore ioe Th Il V rification 5 acho iraAck errors Til Gen eroek errors mt gt A l ex cution on a les r sultats suivants E data serge web php poly intro gt E Program Files EasyPHP php php exe confl php Content type text html track_errors 1 track_errors off La valeur de la variable de configuration track_errors tait initialement 1 on On la fait passer a off On retiendra que si notre application doit s appuyer sur certaines valeurs des variables de configuration il est prudent d initialiser celles ci dans le programme lui m me 2 4 Contexte d ex cution des exemples Les exemples de ce polycopi seront ex cut s avec la configuration suivante PC sous Windows 2000 serveur Apache 1 3 PHP 43 La configuration du serveur Apache est faite dans le fichier httpd conf Les lignes suivantes indiquent Apache de charger PHP comme module int gr Apache et de passer a l interpr teur PHP tout requ te visant un document ayant certains suffixes dont php C est le suffixe par d faut que nous utiliserons pour nos programmes php LoadModule php4 module E Program Files EasyPHP php php4apache dll AddMod
318. ur envoie un cookie a son client Ici le cookie contient deux informations PHPSESSID qui est le jeton de la session Programmation PHP 75 path qui d finit l URL laquelle appartient le cookie path poly sessions 2 indique au navigateur qu il devra renvoyer le cookie au serveur chaque fois qu il demandera une URL commen ant par poly sessions 2 de la machine qui lui a envoy le cookie un cookie peut d finir galement une dur e de validit Ici cette information est absente Le cookie sera donc d truit la fermeture du navigateur Un cookie peut avoir une dur e de validit de N jours par exemple Tant qu il est valide le navigateur le renverra chaque fois que l une des URL de son domaine Path sera consult e Prenons un site de vente en ligne de CD Celui ci peut suivre le cheminement de son client dans son catalogue et d terminer peu peu ses pr f rences la musique classique par exemple Ces pr f rences peuvent tre rang es dans un cookie ayant une dur e de vie de 3 mois Si ce m me client revient au bout d un mois sur le site le navigateur renverra le cookie l application serveur Celle ci d apr s les informations renferm es dans le cookie pourra alors adapter les pages g n r es aux pr f rences de son client Le code du client web suit lt php I configuratio Soho Curl dll biblioth que CURL II syntaxe 0 URL GET il faut trois arguments If argc SEX I msg d aie fputs ST
319. ur le port 81 Les bases de la programmation web 39 Maintenant nous revenons dans notre navigateur pour envoyer les donn es du formulaire au serveur web l aide du bouton Envoyer bouton Effacer envoyer Envoyer r tablir R tablir Voici alors ce que re oit le serveur TCP g n rique lt POST html balises htm HTTP 1 1 lt Accept image gif image x xbitmap image jpeg image pjpeg application msword application vnd ms powerpoint application vnd ms excel lt Referer http localhost 81 html balises htm lt Accept Language fr lt Content Type application x www form urlencoded lt Accept Encoding gzip deflate lt User Agent Mozilla 4 0 compatible MSIE 6 0 Windows NT 5 0 NET CLR 1 0 3705 lt Host localhost 81 lt Content Length 210 lt Connection Keep Alive lt Cache Control no cache PES lt R1 Oui amp Cl un amp C2 deux amp txtSaisie programmationtweb amp txtMdp ceciestsecret amp areaSaisie lestbases de 1a 0D 0Aprog rammationtweb amp cmbValeurs choix3 amp lsti liste3 amp lst2 listel amp lst2 l1iste3 amp cmdRenvoyer Envoyer amp secret uneValeur Par rapport ce que nous connaissons d j nous notons les changements suivants dans la requ te du navigateur 1 L ent te HTTP initial n est plus GET mais POST La syntaxe est POST URL HTTP 1 1 o URL est l URL demand e par le navigateur En m me temps POST signifie que le navigateur a des
320. us mari e lt td gt Exemples 98 lt input type radio name optMarie value oui lt php echo Srequ te gt chkoui gt gt oui lt input type radio name optMarie value non lt php echo Srequ te gt chknon gt gt non lt tr gt lt td gt Nombre d enfants lt td gt lt td gt lt input type text size 5 name txtEnfants value lt php echo Srequ te gt enfants 2 gt gt lt td gt lt tr gt lt td gt Salaire annuel lt td gt lt td gt lt input type text size 10 name txtSalaire value lt php echo Srequ te gt salaire gt gt lt td gt lt tr gt lt tr gt lt td gt lt font color green gt l mp t lt font gt lt td gt lt td gt lt input type text size 10 name txtImpots value lt php echo Srequ te gt impots gt readonly gt lt td gt lt tr gt lt tr gt lt tr gt lt td gt lt input type submit value Calculer gt lt td gt lt td gt lt input type button value Effacer onclick effacer gt lt td gt lt tr gt lt table gt lt form gt lt center gt lt php y a t il des erreurs if count Srequ te gt erreurs 0 affichage des erreurs echo lt hr gt n lt font color red gt n echo Les erreurs suivantes se sont produites lt br gt echo lt ul gt for Si 0 Si lt count Srequ te gt erreurs Sitt echo lt li gt Srequ te gt erreurs Si lt li gt n echo lt ul gt n lt font gt
321. ute sQuery bAdmin SsQuery requ te ex cuter SbAdmin vrai si demande d ex cution en tant qu administrateur execute PT esse SS SS SES SSSR SE SSS SSE SS SE SE SSS RS ESE SS SS SSS RS SSS function addArticle dArticle ajoute un article dArticle code nom prix stockActuel stockMinimum la table des articles add D na nn nnn nnn nnn nnn nnn nnn nn nnn nnn nsec function modifyArticle dArticle modifie un article dArticle code nom prix stockActuel stockMinimum de la table des articles update PRESSE SARS SSSR IS Re RS RS Rae Rains BAS Sass Ss RRS Seas function deleteArticle sCode supprime un article de la table des articles dont on a le code sCode delete ff FOS SR SS RSS SS SE ES SSS SSS SSS SS SSS SS SS SS SE SESS function v rifierArticle amp dArticle v rifie la validit d un article dArticle code nom prix stockActuel stockMinimum v rifier fp SRR RRR SS SE SS SS SS function selectArticles dQuery ex cute une requ te select la table des articles celle ci a trois composantes liste des colonnes dans dQuery colonnes filtrage dans dQuery where ordre de pr sentation dans dQuery orderby Annexes 178 selectArticles hil oR SSS SSRs TE TEE TE EEE function existeArticle sCode rend TRUE si l article de code sCode existe dans la table des articles existeArticle ff SS SSS SS S
322. uve et ex cutons le hiceosart TAP W ndous Ser ok TIAN ES CREED Seen eR EEEN tabl eaux js Microsoft Windows Script Host Version 6 Copyright C Microsoft Corporation 1996 2001 Tous droits r serv s tabl eau 0 0 tabl eau 1 10 tabl eau tate tabl eaul 0 0 tabl eau 1 10 tableau 31230 tabl eau 3 30 tabl eau 4 40 tabl eau 5 50 tabl eau 0 0 0 tableau Tales tableaul 0 2 2 tabl eau 0 3 3 tableau tof et tableau 1 1 11 tabl eau 1 2 12 tableau Fa tableaul 2 0 20 tabl eau 2 1 21 tableau LE tableaul 2 3 23 Un dernier exemple en Perlscript pour terminer Il faut avoir install Active Perl pour avoir acc s Periscript lt job id PERL1 gt lt script language PerlScript gt Annexes 146 du Perl classique x dico maurice gt juliette philippe gt marianne ee Bae BE z or i 0 i lt cles i E selecreny valeur dico cle EE aac cl cle valeur val eur du perlscript utilisant les objets Windows Script ie WScri pt Senor ert runs Dictionary di co gt add maurice juliette dico gt add philippe Le eee Seo oe gt echo on gt i tem maurice WScript gt echo dico gt item philippe lt script gt lt j ob gt Ce programme montre la cr ation et l utilisation de deux dictionnaires l un a la mode Perl classique l autre avec l objet Scripting Didionary de Windows Script Sauvegardons ce code dans le fichie
323. v angers fr tahe pub php php pdf donne les bases du langage On suppose ici que celles ci sont acquises Montrons avec un exemple simple la proc dure d ex cution d un programme PHP sous windows Le code suivant a t sauvegard sous le nom coucou php lt php echo coucou gt L ex cution de ce programme se fait dans une fen tre D os de Windows dos gt e program files easyphp php php exe coucou php X Powered By PHP 4 3 0 dev Content type text html coucou On remarquera que l interpr teur PHP envoie par d faut l interpr teur PHP est php exe et se trouve normalement dans le r pertoire lt php gt d installation du logiciel des ent tes HTTP X Powered By et C ontent type la ligne vide s parant les ent tes HTTP du reste du document le document form ici du texte crit par la fonction echo 2 2 Le fichier de configuration de l interpr teur PHP Le comportement de l interpr teur PHP est param tr par un fichier de configuration appel php ini et rang sous windows dans le r pertoire de windows lui m me C est un fichier de taille cons quente puisque sous windows et pour la version 4 2 de PHP il fait pr s de 1000 lignes dont heureusement les trois quarts sont des commentaires Examinons quelques uns des attributs de configuration de PHP short_open_tag On permet d inclure des instructions entre des balises lt gt A off il faudrait les inclure entre lt php gt asp_ta
324. valeur de ces deux champs elle pr sente de plus un formulaire Les valeurs de celui ci nom sont envoy es par la m thode POST au programme etape2 php lt form name frmNom method POST action etape2 php gt L application dape2 php est charg e de traiter les valeurs du formulaire de pagel et de r afficher pagel s il y a des erreurs nom erron sinon d afficher page2 pour avoir l ge lt ph etape2 php configuration ini_set register_globals off ini set display errors Orr 11 d marrage session session start normalement on doit avoir un param tre nom enregistr dans la requ te Srequ te gt nom S_POST nom Programmation PHP 88 si pas de param tres on envoie pagel sans erreurs Isset requ te gt nom u te gt nom u te gt erreurs array ee pagel php y a t il eu des erreurs if count page gt erreurs 0 page 1 avec erreurs Srequ te gt erreurs Spage gt erreurs include pagel php exit 0 if pas d erreur on m morise le nom dans la session unset Ssession session gt nom requ te gt nom S_SESSION session Ssession affichage page 2 Srequ te gt age Srequ te gt erreurs array include page2 php Hi il exi t os JE calculerPage function calculerPage Srequ te v rifie la validit de la requ te Srequ te rend un tableau d erreurs dans Spage gt erreurs au d pa
325. vient pour la saisie des mots de passe size 20 nombre de caract res visibles dans le champ n emp che pas la saisie de davantage de caract res name txtSaisie nom du contr le value qqs mots texte qui sera affich dans le champ de saisie 1 8 1 3 Champ de saisie multilignes lignel oe Bo te de saisie Bos ligne2 x enamp ate lt textarea rows 2 name areaSaisie cols 20 gt mul tilignes lignel ligne2 ligne3 lt textarea gt balise HTML lt textarea gt texte lt textarea gt affiche une zone de saisie multilignes avec au d part texte dedans attributs rows 2 nombre de lignes cols 20 nombre de colonnes name areaSaisie nom du contr le 1 8 1 4 Boutons radio Etes vous mari e C Ou Non boutons radio lt input type radio value Oui name R1 gt Oui lt input type radio name R1 value non check ed gt N on Les bases de la programmation web 32 balise HTML lt input type radio attribut2 valeur gt texte affiche un bouton radio avec texte c t attributs name radio nom du contr le Les boutons radio portant le m me nom forment un groupe de boutons exclusifs les uns des autres on ne peut cocher que l un d eux value valeur valeur affect e au bouton radio Il ne faut pas confondre cette valeur avec le texte affich c t du bouton radio Celui ci n est destin qu l affichage checked si ce mot cl est pr sent le bouton radio est co
326. voy Programmation PHP 81 if CHUNKED Sdocument getChunkedDoc Sconnexion else Sdocument getDoc Sconnexion recherche du compteur dans le document if preg_match lt br gt compteur d i Sdocument Schamps on a trouv le compteur on l affiche echo n Le compteur est gal Schamps 1 n n lient ferme la connexion connexi on oa function getDoc Sconnexion lecture du document sur connexion Sdoc while Sligne fread Sconnexion 10000 Sdoc Sligne fin return doc getDoc function getChunkedDoc Sconnexion lecture du document sur connexion ce document est envoy par morceaux sous la forme nombre de caract res du morceau en hexad cimal suite du morceau ligne vide on lit la taille du morceau dans la 1 re ligne Staille hexdec rtrim fgets Sconnexion 10000 on lit le document qui suit Sdoc while Staille 0 lecture morceau de Staille caract res Sdoc fread Sconnexion Staille ligne vide fgets Sconnexion 10000 morceau suivant on lit la taille du morceau Staille hexdec rtrim fgets Sconnexion 10000 while c est fini return doc getChunkedDoc ffesassssesssessesossseescss function envoie flux msg envoie msg sur flux fwrite flux msg 11 echo cran echo gt msg envoie gt D cortiquons les points importants de ce programme on doit faire N c
327. voyer name cmdRenvoyer gt lt td gt lt tr gt lt tr gt lt td gt r tablir lt td gt lt td gt lt input type reset value R tablir name cmdR tablir gt lt td gt lt tr gt lt table gt lt input type hidden name secret value uneValeur gt lt For m gt lt body gt lt ht ml gt Le tableau ci dessous rappelle le r le des diff rentes balises de ce document et la valeur r cup r e par PHP pour les diff rents types de composants d un formulaire La valeur d un champ de nom HTML C peut tre envoy e par un POST ou un GET Dans le premier cas elle sera r cup r e dans la variable GET C et dans le second cas dans la variable PO ST C Le tableau suivant suppose l utilisation d un POST Controle ormulaire champ de lt input type text name txtSaisie size 20 value qqs mots gt PO ST txtSaisie valeur contenue dans le Sell SNe champ txtSaisie du formulaire Champ de lt input type password name txtMdp size 20 POST txtmdp valeur contenue dans le champ RETT value unMotD ePasse gt txtMdp du formulaire champ de lt textarea rows 2 name areaSaisie cols 20 gt _POST areaSaisie lignes contenues dans le aTi nes lignel champ areaSaisie sous la forme d une unique cha ne de 9 ligne2 caract res lignel r nline2 r nlime Les lignes ligne3 sont s par es entre elles par la s quence A n lt textarea gt boutons lt input type radio value O ui
328. w fetchmode rownum break id row 0 gt 9 9 4 4 Freeing the result set It is recommended to finish the result set after processing in order to to save memory Use free to do this lt php result db gt query SELECT FROM clients while row result gt fetchRow result gt free gt 9 9 4 5 Quick data retrieving PEAR DB provides some special ways to retrieve information from a query without the need of using fetch and loop throw results getO ne retrieves the first result of the first column from a query numrows db gt getO ne select count id from clients getRow returns the first row and return it as an array sql select name address phone from clients where id 1 if is array row db gt getRow sql list name address phone row getCol returns an array with the data of the selected column It accepts the column number to retrieve as the second param all client names db gt getCol select name from clients The above sentence could return for example all_client_names array Stig Jon Colin getAssoc fetches the entire result set of a query and return it as an associative array using the first column as the key data getAssoc SELECT name surname phone FROM mytable Peter gt array Smith 944679408 Tomas gt array Cox 944679408 Richard gt array Merz 94
329. x enple html about blank Microsoft Internet Explorer File Edit View Favorites Tools Help Back v mp A A Search Ga Address a http flocalhost 88 exemple html MMM Regardons maintenant la fen tre de notre serveur qui affiche ce que le client lui a envoy certaines lignes sp cifiques au fonctionnement du programme serveurT C P generique ont t omises par souci de simplification Dos gt java serveurTCPgenerique 88 Serveur g n rique lanc sur le port 88 GET exemple html HTTP 1 1 Accept image gif image x xbitmap image jpeg image pjpeg application msword Accept Language fr Accept Encoding gzip deflate User Agent Mozilla 4 0 compatible MSIE 6 0 Windows NT 5 0 NET CLR 1 0 3705 NET CLR 1 0 2 914 Host localhost 88 Connection Keep Alive Les lignes pr c d es du signe lt sont celles envoy es par le client On d couvre ainsi des ent tes HTTP que nous n avions pas encore rencontr s Accept e liste de types MIME de documents que le navigateur sait traiter Accept language e la langue accept e de pr f rence pour les documents Accept Encoding e le type d encodage des documents que le navigateur sait traiter User Ag Eni e identit du client Connection e Close le serveur fermera la connexion apr s avoir donn sa r ponse e Kep A live la connexion restera ouverte apr s r ception de la r ponse du serveur Cela permettra au navigateur de d
Download Pdf Manuals
Related Search
Related Contents
Internal Timer Control Manual - Grease Pump OWNERS MANUAL FOR PRO Dell Wyse C50LE Copyright © All rights reserved.
Failed to retrieve file