Valid XHTML    Valid CSS2    

Listing du fichier sen_tps_cor.php

 

00001     <?php
00002     
# # (gH) -_- sen_tps_cor.php ; TimeStamp (unix) : 19 Septembre 2016 vers 11:36
00003     
include("../std.php") ;
00004     
debutPage
("L3SEN TP CORRIGES","strict") ;
00005     
debutSection() ;
00006     
h1
("CORRIGES DES TPS INFORMATIQUE WEB ") ;
00007     
h1
("pour la licence DSCS") ;
00008     
h1
("(Diffusion du savoir et Culture scientifique)") ;
00009     
00010     
00011     
p
("grouge droite") ;
00012     echo
"gilles.hunault@univ-angers.fr" ;
00013     
finp() ;
00014     
00015     
#########################################################
00016     
00017     
function
tpDscs($num,$nom="") {
00018     
h2
("Corrigé du ".aname("TP DSCS","tp$num")." numéro $num ".ancre("sen_tps.php#tp$num","(énoncé)").$nom) ;
00019     }
# fin de fonction tpDscs
00020     
00021     #########################################################
00022     #########################################################
00023     
00024     
$nomTp = array() ;
00025     
$nomTp
[1] = " Pages Web ".em(ghvert("locales")) ;
00026     
$nomTp
[2] = " Pages Web sur ".em(ghRouge("forge/janus"))." et tableaux " ;
00027     
$nomTp
[3] = " Tableaux, listes et CSS " ;
00028     
$nomTp
[4] = " CCS, formulaires et Javascript" ;
00029     
$nomTp
[5] = " Javascript" ;
00030     
$nomTp
[6] = " Php " ;
00031     
$nomTp
[7] = " Php et Mysql " ;
00032     
00033     
h2
("Table des matières") ;
00034     
$nb_tp
= 7 ;
00035     
blockquote() ;
00036      for (
$itp
=1;$itp<=$nb_tp;$itp++) {
00037      echo
h3
(ancre("#tp$itp","Corrigé du TP numéro $itp").$nomTp[$itp]) ;
00038      } ;
# fin pour
00039     
finblockquote() ;
00040     
00041     
$jtp
= 0 ;
00042     
00043     
#########################################################
00044     
00045     
$jtp
++ ; tpDscs($jtp,$nomTp[$jtp]) ; # TP1
00046     
00047     #########################################################
00048     
00049     
ol() ;
00050     
00051     
debutli
() ; # 1
00052     
p
("texte") ;
00053     echo
" Sous Windows, les navigateurs Web disponibles sont Internet Explorer, Firefox, Opera, Safari, Chrome...";
00054     echo
" Sous Linux, il y a les m&ecirc;mes sauf Internet Explorer et Safari. La notion de \"meilleur\" n'existe que par ";
00055     echo
" rapport à des critères. Au début des années 2010, on pouvait dire que Internet Explorer dominait le marché à plus de 80 %, que Firefox était plus configurable, qu'Opera " ;
00056     echo
" était plus conforme aux spécifications du W3C... Aujourd'hui (2016), avec l'arrivée des tablettes, des smartphones, les choses sont plus compliquées " ;
00057     echo
" ou, en tous cas, moins nettes en ce qui concerne les navigateurs." ;
00058     
# echo " Dans nos salles sous Linux, Firefox 2 et Firefox 3 sont tous les deux disponibles." ;
00059     
finp() ;
00060     
p
("texte") ;
00061     echo
"On utilisera désormais Firefox mais il sera bon de vérifier dans une autre salle ou chez soi que les pages s'affichent " ;
00062     echo
" correctement avec Internet Explorer." ;
00063     
finp() ;
00064     
finli() ;
00065     
00066     
debutli
() ; # 2
00067     
p
("texte") ;
00068     echo
"Oui, le texte s'affiche avec tous les navigateurs et à peu près de la m&ecirc;me façon : BONJOUR est écrit sur une ligne en dessous en plus gros et en plus gras que ESSAI." ;
00069     echo
" Cela tient au fait qu'on demande un titre de niveau 1 via l'élément "
.ghVert("h1").". " ;
00070     echo
" Le fichier n'est pas \"bien formé\" : il faut toujour fermer une balise ouvrante et il manque donc au moins "
.ghVert("&lt;/h1&gt;").".";
00071     echo
" Pour qu'il soit valide, il faudrait indiquer par rapport à quelle grammaire (DOCTYPE) et rajouter les éléments "
.b("html, head, title, body")." " ;
00072     
finp() ;
00073     
00074     
p
("texte") ;
00075     echo
"La validation du W3C se fait à l'adresse "
.ancre("http://validator.w3.org/")." (utiliser ".em("File Upload")."." ;
00076     
finp() ;
00077     
00078     
p
("texte") ;
00079     echo
" Voici un tel fichier valide XHTML strict avec le lien qui le prouve : "
.ancre("sen_bonjour.htm")." ; on notera l'adresse du validateur et son paramètre." ;
00080     echo
" Le squelette "
.b("sq.htm")." est ".ancre("sq.htm","ici")."." ;
00081     
finp() ;
00082     
finli() ;
00083     
00084     
debutli
() ; # 3
00085     
p
("texte") ;
00086     echo
" On peut utiliser des paragraphes différents, des titres consécutifs, un retour à la ligne, un tableau. " ;
00087     echo
" Et aussi un texte préformaté (avec des retours charriot) via l'élément "
.b("pre").", des divisions." ;
00088     echo
" Le fichier "
.ancre("sen_lignes.htm")." présente toutes ces solutions. Le tableau est sans doute ici un peu \"lourd\" juste pour avoir " ;
00089     echo
" une séparation dans le sens des lignes. Par contre, au niveau du \"code-source\" cela n'a aucune importance que les balises soient " ;
00090     echo
" ou pas sur des lignes différentes. N'oubliez pas de lire le code-source de la solution !" ;
00091     
finp() ;
00092     
finli() ;
00093     
00094     
debutli
() ; # 4
00095     
p
("texte") ;
00096     echo
"Si en 2020, la grammaire conseillée pour le développement Web général (écran, tablette, téléphone) est "
.b("HTML&nbsp;5") ;
00097     echo
" le mieux pour nous, c'est-à-dire pour classe, est d'utiliser la grammaire "
.b("XHTML 1.0 Strict")." car ".em("plus &laquo;rigoureuse&raquo;").". " ;
00098     
finp() ;
00099     
p
("texte") ;
00100     echo
"A propos des styles, le mieux est de procéder ainsi : " ;
00101     
finp() ;
00102     
00103     
ul() ;
00104     
debutli() ;
00105     echo
"s'il s'agit juste de tester \"un bout de code\", ne pas s'embarasser de grammaire et écrire le style local en ligne à la volée," ;
00106     
finli() ;
00107     
debutli() ;
00108     echo
"après avoir testé le style en ligne, le mettre en style interne en début de fichier avec une grammaire transitionnelle," ;
00109     
finli() ;
00110     
debutli() ;
00111     echo
"pour un site \"propre\", tout externaliser et mettre une grammaire stricte." ;
00112     
finli() ;
00113     
finul() ;
00114     
00115     
finli() ;
00116     
00117     
debutli() ;
00118     
p
("texte") ;
00119     echo
em
("No, but it helps !").". En d'autres termes et en français, ce serait mieux de savoir parler (et surtout lire) " ;
00120     echo
" l'anglais (ou plus exactement l'américain) parce que toutes les spécifications et documentations sont "
.b("au départ")." en anglais. " ;
00121     echo
" Bien ou mal (on ne discutera pas ici de la "
.em("quasi-".href('http://fr.wikipedia.org/wiki/H%C3%A9g%C3%A9monie',"hégémonie")) ;
00122     echo
" américano-capitaliste), c'est un fait et il faut s'y adapter pour au moins quelques années." ;
00123     
finp() ;
00124     
finli() ;
00125     
00126     
debutli() ;
00127     
p
("texte") ;
00128     echo
" Suivant la grammaire (transitionnelle ou stricte), c'est plus ou moins facile. L'énoncé parle d'une enveloppe A4." ;
00129     echo
" Il faut donc certainement écrire gros et avec un grand interligne, sans alinéa. " ;
00130     
finp() ;
00131     
p
("texte") ;
00132     echo
" En transitionnel, on peut utiliser " ;
00133     echo
" l'attribut "
.ghBleu('align')." de l'élément ".ghBleu("p").", " ;
00134     echo
" l'attribut "
.ghBleu("size")." de l'élément ".ghBleu("font")." pour la taille. " ;
00135     echo
" On peut définir la couleur avec l'attribut "
.ghBleu("color")." de l'élément ".ghBleu("font")." " ;
00136     echo
" et gérer l'interligne par un style \"à la volée\" via l'attribut "
.ghBleu("style")." de l'élément ".ghBleu("p")." " ;
00137     echo
" (propriété "
.em("line-height").", valeur ".em("100pt")." par exemple)." ;
00138     echo
" Pour le gras, aucune difficulté, il existe un élément "
.ghBleu("b").". " ;
00139     echo
" Voir "
.ancre("sen_adr1.htm")."." ;
00140     
finp() ;
00141     
p
("texte") ;
00142     echo
" En strict, il faut impérativement tout mettre dans un style externe. On peut regrouper ou pas les propriétés " ;
00143     echo
" "
.ghBleu("line-height font-size text-align color")." " ;
00144     echo
" selon que l'on doive faire souvent ou pas des enveloppes." ;
00145     echo
" Voir "
.ancre("sen_adr2.htm")." qui contient (où&nbsp;?) une validation XHTML et " ;
00146     echo
ancre
("sen_adr3.htm")." qui contient (où&nbsp;?) une validation CSS. " ;
00147     
finp() ;
00148     
finli() ;
00149     
00150     
debutli() ;
00151     
p
("texte") ;
00152     echo
" Une liste ordonnée se fait avec l'élément "
.b("ol"). " et les items de liste sont définis par les éléments ".b("li").". Pour une liste " ;
00153     echo
" non ordonnée, on utilise l'élément "
.b("ul")." au lieu de ".b("ol").", avec les m&ecirc;mes ".b("li").". Pour une liste à définitions, " ;
00154     echo
" l'élément "
.b("dl")." comporte pour chaque terme un élément ".b("dt")." (terme) et un élément ".b("dd")." (définition). Vérification ";
00155     echo
" avec le fichier "
.ancre("sen_courses.php","sen_courses")."." ;
00156     
finp() ;
00157     
p
("texte") ;
00158     echo
" L'URL de la recherche du mot oeuf avec Google est "
.b("http://www.google.fr/search?q=oeuf")."&nbsp;; on la met comme lien hypertexte via " ;
00159     echo
" l'élément "
.b("a").", attribut ".b("href").". Pour pain, l'URL est ".b("http://www.google.fr/search?q=pain").", etc. " ;
00160     echo
" Pour mettre une image, on utilise l'élément "
.b("img").", attributs ".b("src")." et ".b("alt").". Voir le m&ecirc;me " ;
00161     echo
" fichier "
.ancre("sen_courses.php#enbas","sen_courses")." (en bas de page)." ;
00162     
finp() ;
00163     
p
("texte") ;
00164     echo
" Pour un tableau, l'élément conteneur est "
.b("table")." ; les lignes sont définies par les éléments ".b("tr")." et chaque cellule " ;
00165     echo
" est obtenue via l'élément "
.b("td").". La bordure se met avec l'attribut ".b("border")." au niveau de l'élément ".b("table").". " ;
00166     echo
" On peut jouer sur l'épaisseur, la couleur et la forme de la bordure. Pour un lien en bas de page, il faut ajouter le symbole "
.b("#")." " ;
00167     echo
" avec le nom de la section. On définition la section avec l'attribut "
.b("name")." dans une ancre (élément ".b("a")."). " ;
00168     echo
" Vérification "
.ancre("sen_courses.php#enbas","ici")."." ;
00169     
finp() ;
00170     
finli() ;
00171     
00172     
finol() ;
00173     
00174     
#########################################################
00175     
00176     
$jtp
++ ; tpDscs($jtp,$nomTp[$jtp]) ; # TP2
00177     
00178     #########################################################
00179     
00180     
ol() ;
00181     
00182     
debutli() ;
00183     
p
("texte") ;
00184     echo
"Une fois le PC allumé sous Linux (local), on peut écrire des pages Web, mais elles ne seront pas sur le site. On se sert " ;
00185     echo
" de la machine Linux pour aller sur une autre machine (forge/janus) qui contient nos fichiers. " ;
00186     
finp() ;
00187     
00188     
p
("texte") ;
00189     echo
"Pour savoir quelles URLs sont associées à vos pages Web, consulter la page "
.ancre("serveurs.php","serveurs")."." ;
00190     echo
"La "
.ancre("http://forge.info.univ-angers.fr/wiki/faq:web","documentation")." du Département Info de l'UFR donne aussi des informations sur les accents, les droits... " ;
00191     
finp() ;
00192     
finli() ;
00193     
00194     
debutli() ;
00195     
p
("texte") ;
00196     echo
" Bien sur que oui, qu'on peut ! Il faut utiliser un logiciel de transfert de fichier sécurisée (SFTP en anglais) " ;
00197     echo
" comme "
.ancre("http://winscp.net/eng/docs/lang:fr","WinScp")." ou " ;
00198     echo
href
("https://filezilla-project.org/index.php","FileZilla").". " ;
00199     echo
" On peut m&ecirc;me se connecter sur la machine Unix forge/janus via "
.ancre("http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html","putty")."." ;
00200     
finp() ;
00201     
00202     
p
("texte") ;
00203     echo
" Pour tout ce qui suit, on utilisera donc la méthode suivante : on écrit en local les pages Web " ;
00204     echo
" avec des liens "
.b("relatifs")." et ensuite on les transfère sur le compte Unix " ;
00205     echo
" m&ecirc;me si on chez soi, à la maison." ;
00206     
finp() ;
00207     
00208     
p
("texte") ;
00209     echo
" Pour Windows, les éditeurs que nous conseillons sont " ;
00210     echo
href
('http://notepad-plus.sourceforge.net/fr/site.htm',"notepad++") ;
00211     echo
" et " ;
00212     echo
href
("https://www.geany.org/","Geany").". " ;
00213     echo
" Les navigateur "
.b("Firefox, Chrome ")." et ".b("Opera")." sont sans doute des bons choix." ;
00214     
finp() ;
00215     
00216     
finli() ;
00217     
00218     
debutli() ;
00219     
p
("texte") ;
00220     echo
"Une division est plus souple mais plus difficile à gérer qu'une cellule de tableau." ;
00221     
# echo "Voir le code-source de ".ancre("sen_courses2.php")."." ;
00222     
finp() ;
00223     
finli() ;
00224     
00225     
finol() ;
00226     
00227     
#########################################################
00228     
00229     
$jtp
++ ; tpDscs($jtp,$nomTp[$jtp]) ; # TP3
00230     
00231     #########################################################
00232     
00233     
ol() ;
00234     
/*
00235     debutli() ;
00236     p("texte") ;
00237     echo " ".em(ghVert("Rappel"))."&nbsp;: pour transférer les fichiers, on utilise ".ancre("http://winscp.net/eng/docs/lang:fr","WinScp")."." ;
00238     finp() ;
00239     finli() ;
00240     */
00241     
00242     
debutli() ;
00243     
p
("texte") ;
00244     echo
"Voir le code-source de "
.ancre("sen_botablo.htm")." et ".ancre("sen_botablo2.htm")." ; les ".b("bgcolor")." " ;
00245     echo
" indiqués pour "
.b("table").", ".b("td")." et ".b("p")." mettent respectivement une couleur de fond pour : " ;
00246     echo
" tout le tableau, toute la case (cellule), la zone du paragraphe à l'intérieur de la case." ;
00247     
finp() ;
00248     
finli() ;
00249     
00250     
debutli() ;
00251     
p
("cadrej") ;
00252     echo
"La réponse est dans la propriété CSS nommée "
.b("text-decoration").". Dans le paragraphe que vous &ecirc;tes en train de lire, " ;
00253     echo
" le texte est justifié à droite et à gauche, comme le demande l'énoncé, le fond du paragraphe est gris, et un lien comme " ;
00254     echo
" le mot "
.href('http://www.google.fr',"Google","nou grouge")." est en rouge, sans souligné alors que c'est un lien." ;
00255     echo
" On consultera le code-source de ce paragraphe et le fichier de style "
.ancre("std.css")." pour essayer de comprendre ce " ;
00256     echo
" que signifie"
.b("&lt;p class='cadrej'&gt;...")." et".b("&lt;a class='nou grouge' href=...")." " ;
00257     
finp() ;
00258     
finli() ;
00259     
00260     
debutli() ;
00261     
p
("texte") ;
00262     echo
"Voir le code-source de "
.ancre("sen_jules.php").". Pour le retrait on peut utiliser l'élément ".b("blockquote")." " ;
00263     echo
" ou simplement ajouter autour du paragraphe un élément "
.b("div")." avec la bonne marge gauche. Cela ne vaut pas le " ;
00264     echo
" coup de faire un feuille de style pour un fichier. En général, on fait une feuille pour un ensemble de pages, quitte " ;
00265     echo
" à \"bloquer\" tous les styles qu'on utilise dans un seul fichier "
.b("CSS")." selon l'adage de \"mon premier sac à main de " ;
00266     echo
" quand que j'avais 14 ans \" ("
.em("ça peut toujours servir...").")." ;
00267     echo
" Le style "
.b("jc")." défini dans la feuille ne peut pas convenir pour autre chose que le titre car il comprend en plus de la couleur " ;
00268     echo
" la modification de la taille des caractères. Il aurait plus judicieux de définir "
.b("jc")." pour la couleur et ".b("gros"). " " ;
00269     echo
" pour la taille, de façon à utiliser "
.b("class ='jc'")." dans le paragraphe et ".b("class ='gros jc'")." dans le titre." ;
00270     
finp() ;
00271     
p
("texte") ;
00272     echo
"Pour la version grammaire "
.em("stricte").", voir ".ancre("sen_jules2.php")." ; le code-source contient des commentaires..." ;
00273     
finp() ;
00274     
finli() ;
00275     
00276     
debutli() ;
00277     
p
("texte") ;
00278     echo
"Voir le code-source de "
.ancre("sen_stdcss.php")."." ;
00279     
finp() ;
00280     
finli() ;
00281     
00282     
finol() ;
00283     
00284     
#########################################################
00285     
00286     
$jtp
++ ; tpDscs($jtp,$nomTp[$jtp]) ; # TP4
00287     
00288     #########################################################
00289     
00290     
ol() ;
00291     
00292     
debutli() ;
00293     
p
("texte") ;
00294     echo
"Voir "
.ancre("sen_ts1.htm")." et ".ancre("sen_ts2.htm")." comme résultats ; la seule différence dans le " ;
00295     echo
" code-source est au niveau de l'élément "
.b("link")."." ;
00296     
finp() ;
00297     
finli() ;
00298     
00299     
debutli() ;
00300     
p
("texte") ;
00301     echo
"Voir le code-source de "
.ancre("sen_comme_google.php")." ; dans le formulaire original, il y a plein de choses, dont " ;
00302     echo
" le choix de la langue, les boutons utilisés..." ;
00303     
finp() ;
00304     
finli() ;
00305     
00306     
debutli() ;
00307     
p
("texte") ;
00308     echo
"Avec l'URI "
.b(href('http://forge.info.univ-angers.fr/~gh/internet/ndjpm.php',"http://forge.info.univ-angers.fr/~gh/internet/ndjpm.php"))."," ;
00309     echo
" on peut obtenir le nombre de jours par mois, dont les initiales sont justement NJPM." ;
00310     echo
" On pourra vérifier que toute valeur autre que les nombres entiers 1, 2, 3... 12 provoque l'affichage d'un " ;
00311     echo
" texte d'aide. Idem si on ne passe aucun paramètre (les paramètres sont après le symbole point d'interrogation)." ;
00312     echo
" On peut 'coincer' le programme en écrivant m=01 car ce n'est pas prévu (0 est prévu, 1 est prévu, mais pas 01)." ;
00313     
finp() ;
00314     
finli() ;
00315     
00316     
debutli() ;
00317     
p
("texte") ;
00318     echo
"Fastoche. Voir "
.ancre("sen_cal1.php") ;
00319     
finp() ;
00320     
00321     
p
("texte") ;
00322     echo
" L'attribut "
.b("type")." de l'élément ".b("ol")." permet de choisir la numérotation. " ;
00323     echo
" La valeur "
.b("i")." demande l'écriture en chiffres romains, soit ".b("MCMLVII")." pour 1957. " ;
00324     echo
" La valeur "
.b("A")." demande l'écriture en mode &laquo;colonne Excel&raquo;." ;
00325     echo
" L'attribut "
.b("start")." de l'élément ".b("ol")." indique à partir de quelle valeur démarrer." ;
00326     echo
" Malheureusement, ces attributs sont interdits en XHTML 1.0 strict et nous verrons dans les TP suivants " ;
00327     echo
" comment utiliser Javascript pour résoudre ce problème." ;
00328     
finp() ;
00329     
00330     
p
("texte") ;
00331     echo
" Il faut décomposer "
.b("1957")." en base 26 pour savoir comment cela s'écrit en notation A (comme Excel). " ;
00332     echo
" Puisque 1957 = 75&times;26 + 7, et comme 75=2&times;26 + 23, on peut écrire 1957 = ( (2&times;26+23) &times; 26 + 7, soit au final " ;
00333     echo
" 1957 = 2&times;26"
.sup("2")." + 23&times;26 + 7. A l'aide la table suivante " ;
00334     
finp() ;
00335     
pre_fichier
("../lettres.txt","cadre") ;
00336     
p
("texte") ;
00337     echo
" on en déduit que 1957 s'écrit "
.b("BWG")." en notation A. " ;
00338     
finp() ;
00339     
00340     
p
("texte") ;
00341     echo
" De m&ecirc;me, 2020 correspond (sans explication) à 2&times;26"
.sup("2")." + 25&times;26 + 18 donc c'est ".b("BYR").". " ;
00342     
finp() ;
00343     
00344     
finli() ;
00345     
00346     
debutli() ;
00347     
p
("texte") ;
00348     echo
"Re-fastoche. Voir "
.ancre("sen_cal2.php") ;
00349     
finp() ;
00350     
finli() ;
00351     
00352     
debutli() ;
00353     
p
("texte") ;
00354     echo
"Pour bien utiliser par formulaire " ;
00355     echo
" l'URL "
.href("http://forge.info.univ-angers.fr/~gh/internet/longlarg.php") ;
00356     echo
" il faut que les champs soient nommés "
.b("long")." et ".b("larg")." ; " ;
00357     echo
" on pourra consulter le code-source de "
.ancre("long_large1.php")." pour voir le texte du formulaire correspondant. " ;
00358     
finp() ;
00359     
finli() ;
00360     
00361     
debutli() ;
00362     
p
("texte") ;
00363     echo
"Il suffit de demander à Javascript de rajouter l'attribut "
.b("start")." à l'élement ".b("ol")." à la fin du " ;
00364     echo
" chargement de la page, comme on peut le voir avec la page " ;
00365     echo
href
("http://forge.info.univ-angers.fr/~gh/internet/olstart2.php","olstart2")." et, en plus général, avec " ;
00366     echo
href
("http://forge.info.univ-angers.fr/~gh/internet/olstart3.php","olstart3")."." ;
00367     
finp() ;
00368     
finli() ;
00369     
00370     
debutli() ;
00371     
p
("texte") ;
00372     echo
"Consulter le code-source de "
.ancre("sen_nombres.php")." et de ".ancre("sen_nombres2.php")." (version stricte). " ;
00373     
#echo " L'url ".b("javascript:")." -- avec Firefox uniquement -- permet de voir une partie des erreurs que Javascript détecte." ;
00374     
echo
" Pour les décimales, il faut convertir le texte en nombre réel avec ".b("parseFloat()")." puis utiliser " ;
00375     echo
" la fonction "
.b("toFixed()")." pour choisir le nombre de décimales." ;
00376     echo
" Pour que l'action (qui est "
.b("obligatoire").") ne s'exécute pas, il faut terminer le code javascript par ".b("return false&nbsp;;").". " ;
00377     
finp() ;
00378     
00379     
p
("texte") ;
00380     echo
" On n'est pas obligé(e) d'utiliser un formulaire. On peut utiliser une division et l'attribut onclick du bouton submit, comme le montre " ;
00381     echo
" le fichier "
.ancre("sen_nombres3.php").". " ;
00382     echo
" Si on veut faire quelque chose de \"propre\", il faut externaliser le code Javascript, comme dans " ;
00383     echo
" le fichier "
.ancre("sen_nombres4.php").". " ;
00384     
finp() ;
00385     
00386     
finli() ;
00387     
00388     
finol() ;
00389     
00390     
#########################################################
00391     
00392     
$jtp
++ ; tpDscs($jtp,$nomTp[$jtp]) ; # TP5
00393     
00394     #########################################################
00395     
00396     
ol() ;
00397     
00398     
debutli() ;
00399     
p
("texte") ;
00400     echo
"Pour bien utiliser par formulaire " ;
00401     echo
" l'URL "
.href("http://forge.info.univ-angers.fr/~gh/internet/longlarg.php") ;
00402     echo
" il faut que les champs soient nommés "
.b("long")." et ".b("larg")." ; " ;
00403     echo
" on pourra consulter le code-source de "
.ancre("long_large1.php")." pour voir le texte du formulaire correspondant. " ;
00404     
finp() ;
00405     
p
("texte") ;
00406     echo
" Pour la deuxième partie de l'exercice, il faut commencer par mettre "
.b("onsubmit='return false'") ;
00407     echo
" comme attribut de l'élément form pour ne plus utiliser l'URL." ;
00408     echo
" Ensuite, il suffit de mettre avant ce "
.b("return false").", le texte Javascript pour la mise à jour des champs ".em("perim")." et ".em("aire")."." ;
00409     echo
" Consulter "
.ancre("long_large2.php")." pour voir le code-source associé." ;
00410     
finp() ;
00411     
p
("texte") ;
00412     echo
b
("Attention : ")." il est ".s_span("obligatoire","grouge")." de mettre ".b("parseInt(...)")." autour de chaque valeur " ;
00413     echo
" pour calculer la somme des dimensions dans le calcul du périmètre car sinon Javascript va se contenter de la concaténation " ;
00414     echo
" des valeurs textes. En d'autres termes, sans parseInt, avec 10 comme longueur et 2 comme largeur, Javascript va interpréter " ;
00415     echo
'"10" + "2" comme "102" au lieu de 10 + 2, soit 12...' ;
00416     
finp() ;
00417     
p
("texte") ;
00418     echo
" Troisième partie de l'exercice : il faut commencer par ajouter un élément div pour la partie résultats, avec un style qui cache les résultats " ;
00419     echo
" et un id pour pouvoir y accéder ensuite. " ;
00420     echo
" Au niveau du code Javascript, il suffit juste d'ajouter l'instruction qui change le style de la division pour voir le résultat. " ;
00421     echo
" Consulter "
.ancre("long_large3.php")." pour voir le code-source associé." ;
00422     
finp() ;
00423     
p
("texte") ;
00424     echo
"Une solution plus &laquo;propre&raquo; consiste à mettre toutes les instructions Javascript dans un autre fichier (on parle alors " ;
00425     echo
" d'"
.b("externalisation du code Javascript").") à l'intérieur d'une fonction. Dans la page Web, il faut donc alors charger la fonction " ;
00426     echo
" dans l'élément head et l'appeler dans la partie onsubmit." ;
00427     echo
" Consulter "
.ancre("long_large4.php")." pour voir le code-source correspondant et" ;
00428     echo
" son fichier Javascript nommé "
.ancre("montresource.php?nomfic=long_large4.js","long_large4.js")."." ;
00429     echo
" Une version sans \""
.b("alert")."\" est ".ancre("long_large5.php","ici")." et le code Javascript associé est " ;
00430     echo
ancre
("montresource.php?nomfic=long_large5.js","là")."." ;
00431     
finp() ;
00432     
finli() ;
00433     
00434     
debutli() ;
00435     
p
("texte") ;
00436     echo
"L'erreur est d'avoir mis l'apostrophe telle quelle ce qui ferme trop tot " ;
00437     echo
"l'instruction write. Pour afficher une \"quote\", il faut mettre \ devant l'apostrophe." ;
00438     echo
"Le texte correct est donc : " ;
00439     
finp() ;
00440     
00441     
pre() ;
00442     echo
" window.document.write(' Qui le dit ? C\'est moi ! ') ;\n " ;
00443     echo
" **** \n " ;
00444     
finpre() ;
00445     
00446     
p
("texte") ;
00447     echo
"A l'affichage, l'instruction write incorrecte est simplement ignorée : il est difficile " ;
00448     echo
" de se rendre compte qu'il manque quelquechose. Il est donc conseillé d'utiliser "
.kbd("la console d'erreurs de javascript") ;
00449     echo
" avec Firefox pour tester les scripts écrits en Javascript (lorsque cela fonctionne). \n" ;
00450     echo
" Une solution \"propre\" consiste à utiliser "
.b("Firebug")." avec Firefox dont une version ".em("\"lite\"")." existe " ;
00451     echo
" m&ecirc;me pour Internet Explorer. Pour Opera, on utilisera "
.b("Dragonfly")."." ;
00452     
finp() ;
00453     
00454     
p
("texte") ;
00455     echo
"Voici ce qu'affichent les consoles d'erreur d'Opera et de Firefox quand on charge la page (images cliquables) : " ;
00456     
finp() ;
00457     
00458     
div
("centre") ;
00459     
table
(0,50) ;
00460     
tr() ;
00461     
td() ;
00462     echo
href
("console_opera.png",img("console_opera.png","console_opera",500)) ;
00463     
fintd() ;
00464     
fintr() ;
00465     
tr() ;
00466     
td() ;
00467     echo
href
("console_firefox.png",img("console_firefox.png","console_firefox",500)) ;
00468     
fintd() ;
00469     
fintr() ;
00470     
fintable() ;
00471     
findiv() ;
00472     
00473     
p
("texte") ;
00474     echo
"Cela ne joue pas sur la validation qui se fait sur le code HTML au chargement (donc avant exécution du Javascript)." ;
00475     echo
" Si on corrige l'erreur, la page correcte est "
.href("chance.htm","ici").". " ;
00476     
finp() ;
00477     
00478     
p
("texte") ;
00479     echo
"Avec une version récente de Firefox, pour avoir la console d'erreurs, il faut activer " ;
00480     echo
b
("la barre de menus") ;
00481     echo
" puis utiliser le menu " ;
00482     echo
b
("Outils").", " ;
00483     echo
" sous-menu " ;
00484     echo
b
("Développement Web").", " ;
00485     echo
" sous-sous-menu " ;
00486     echo
b
("Console web").". " ;
00487     
finp() ;
00488     
00489     
finli() ;
00490     
00491     
00492     
debutli() ;
00493     
p
("texte") ;
00494     echo
"Consulter le code-source de "
.ancre("sen_kilos.php").". " ;
00495     echo
" Ce qui change, c'est qu'avec une grammaire stricte, on est obligé d'utiliser un fichier externe pour écrire le " ;
00496     echo
" texte javascript. Pour l'exercice, c'est le fichier "
.ancre("sen_kilos.js")." ; il est chargé via l'attribut ".b("src")." " ;
00497     echo
" dans l'élément "
.b("script")." qui est lui-m&ecirc;me dans l'élément ".b("head")."." ;
00498     
finp() ;
00499     
finli() ;
00500     
00501     
debutli() ;
00502     
p
("texte") ;
00503     echo
"Consulter le code-source de "
.ancre("sen_deuxnombres.php")." ; l'url ".b("javascript:")." sous Firefox " ;
00504     echo
" fournit une fen&ecirc;tre qui affiche des messages d'erreur de Javascript, au chargement et à l'exécution." ;
00505     echo
" Cela a déjà été dit, mais comme tout le monde ne l'utilise pas, je le répète ! " ;
00506     echo
" Le fichier javascript utilisé est "
.ancre("sen_deuxnombres.js")."." ;
00507     
finp() ;
00508     
finli() ;
00509     
00510     
debutli() ;
00511     
p
("texte") ;
00512     echo
" Avec 3 variables distinctes deux à deux, il y a 6 cas à envisager. A partir de trois variables, il vaut mieux " ;
00513     echo
" mettre les variables dans un tableau et trier le tableau avant de l'afficher." ;
00514     echo
" Consulter le code-source de "
.ancre("sen_ordrecroissant.php") ;
00515     echo
" et le texte de son script "
.ancre("sen_ordrecroissant.js")."." ;
00516     
finp() ;
00517     
finli() ;
00518     
00519     
debutli() ;
00520     
p
("texte") ;
00521     echo
"Consulter le code-source de "
.ancre("sen_eux_et_nous.php")." et son fichier de script ".ancre("sen_eux_et_nous.js")."." ;
00522     echo
" Le corrigé fournit une solution avec un tableau, puis avec des divisions sans CSS et enfin avec des divisions " ;
00523     echo
" en CSS ; le script fonctionne avec IE et FF comme indiqué en commentaires." ;
00524     
finp() ;
00525     
finli() ;
00526     
00527     
debutli() ;
00528     
p
("texte") ;
00529     echo
" L'horloge numérique c'est pratiquement la m&ecirc;me chose que les panneaux de score de l'exercice précédent. " ;
00530     echo
" Le seul changement c'est qu'il faut fonctionner en \"modulo\" 24 et 60 comme disent les mathématicien(ne)s." ;
00531     echo
"Consulter le code-source de "
.ancre("sen_horloge.php")." et son fichier de script ".ancre("sen_horloge.js")."." ;
00532     
finp() ;
00533     
finli() ;
00534     
00535     
debutli() ;
00536     
p
("texte") ;
00537     echo
"Exercice volontairement non corrigé (sert parfois de base d'examen)." ;
00538     
finp() ;
00539     
finli() ;
00540     
00541     
debutli() ;
00542     
p
("texte") ;
00543     echo
"Exercice volontairement non corrigé : il y a plein de solutions sur Internet. Un exercice " ;
00544     echo
" intéressant est de lire une solution et de la commenter, voire de la critiquer." ;
00545     
finp() ;
00546     
finli() ;
00547     
00548     
debutli() ;
00549     
p
("texte") ;
00550     echo
"Voir par exemple " ;
00551     echo
href
("http://yoast.com/articles/sortable-table/","sortable")." (avec un seul t) " ;
00552     echo
" ou "
.href("ttp://www.kryogenix.org/code/browser/sorttable/","sorttable")." (avec deux t). " ;
00553     
finp() ;
00554     
finli() ;
00555     
00556     
debutli() ;
00557     
p
("texte") ;
00558     echo
"Consulter la page " ;
00559     echo
href
("chaperon.php").". Le code Javascript associé est " ;
00560     echo
" ci-dessous." ;
00561     
finp() ;
00562     
pre_fichier
("chaperon.js","cadrejaune") ;
00563     
finli() ;
00564     
00565     
finol() ;
00566     
00567     
#########################################################
00568     
00569     
$jtp
++ ; tpDscs($jtp,$nomTp[$jtp]) ; # TP6
00570     
00571     #########################################################
00572     
00573     
ol() ;
00574     
00575     
debutli() ;
00576     
00577     
p
("texte") ;
00578     echo
b
("Rappel&nbsp;:") ;
00579     echo
" à la faculté, il faut transférer vos fichiers depuis la machine locale sur l'hote " ;
00580     echo
ghRouge
("forge.info-ua") ;
00581     echo
" alors que partout depuis l'extérieur (donc hors de la faculté), l'hote se nomme " ;
00582     echo
ghRouge
("forge.info.univ-angers.fr").". " ;
00583     echo
" Pour réaliser depuis Linux une connexion en mode terminal (ligne des commandes), il faut écrire " ;
00584     echo
b
("ssh -X -Y ".ghVert("login")."@forge.info-ua").". " ;
00585     
finp() ;
00586     
00587     
p
("texte") ;
00588     echo
"Comme on peut s'en rendre compte avec le fichier "
.ancre("sen_etvoila.php")." (non valide car il s'agit d'un extrait de page) " ;
00589     echo
" dont le code-source " ;
00590     echo
" est "
.ancre("montresource.php?nomfic=sen_etvoila.php","ici").", il y a 3 lignes de code HTML " ;
00591     echo
" qui produisent le texte "
.b("&lt;h1&gt;ET VOILA LE TRAVAIL&lt;/h1&gt;")."." ;
00592     
finp() ;
00593     
00594     
p
("texte") ;
00595     echo
"Pour le nombre de secondes écoulées depuis l'an 0, " ;
00596     echo
" consulter "
.ancre("montresource.php?nomfic=nbsec.php","nbsec").". " ;
00597     echo
" Utiliser des années bissextiles est important car un jour compte 86400 secondes. Avec 500 jours de plus, on rajoute " ;
00598     echo
" en gros 43 millions de secondes." ;
00599     
finp() ;
00600     
00601     
p
("texte") ;
00602     echo
" Pour comparer "
.b("n")." valeurs distinctes, il faut envisager ".b("n!")." cas p. Donc avec 2 variables, 3 cas, avec 3 variables 6 cas. " ;
00603     echo
" Au lieu d'écrire un code avec des si en cascade comme dans la page " ;
00604     
$url
= "http://forge.info.univ-angers.fr/~gh/wstat/Programmation_R/Programmation_introduction/progie3.php?solutions=1" ;
00605     echo
href
($url,"conditions logiques et tests").", " ;
00606     echo
" il vaut mieux passer par un tableau : " ;
00607     
finp() ;
00608     
00609     
pre_fichier
("compare-sor.txt","cadre") ;
00610     
00611     
finli() ;
00612     
00613     
debutli() ;
00614     
p
("texte") ;
00615     echo
" Voici le "
.ancre("bonjour.php","texte")." d'une page minimale et valide qui affiche " ;
00616     echo
ancre
("montresource.php?nomfic=bonjour.php","bonjour")." à l'aide de fonctions personnelles ; le code-source " ;
00617     echo
" des fonctions utilisées est : "
.ancre("montresource.php?nomfic=mesfonctions.php","mesfonctions.php")."." ;
00618     
finp() ;
00619     
00620     
p
("texte") ;
00621     echo
em
("Pour les expert(e)s")." : consulter ".ancre("montresource.php?nomfic=std.php","std.php") ;
00622     
finp() ;
00623     
finli() ;
00624     
00625     
debutli() ;
00626     
p
("texte") ;
00627     echo
" Consulter le "
.ancre("montresource.php?nomfic=bonjour2.php","code-source")." de " ;
00628     echo
" la solution "
.ancre("bonjour2.php")." et le code-source " ;
00629     echo
" des fonctions utilisées : "
.ancre("montresource.php?nomfic=mesfonctions2.php","mesfonctions2.php")." ;" ;
00630     echo
" on pourra vérifier que le code-source des "
.b("h1")." est identique." ;
00631     
finp() ;
00632     
00633     
p
("texte") ;
00634     echo
"L'intér&ecirc;t de "
.b("tnh")." est multiple : c'est PHP qui ouvre et ferme les balises, c'est plus \"conceptuel\" et on " ;
00635     echo
" ne voit plus directement les balises, c'est plus court à écrire et c'est valide. De plus toutes les fonctions "
.b("h".em("i"))." " ;
00636     echo
" ont le m&ecirc;me comportement puisqu'elles sont toutes écrites par la m&ecirc;me fonction." ;
00637     
finp() ;
00638     
00639     
finli() ;
00640     
00641     
debutli() ;
00642     
p
("texte") ;
00643     echo
" Consulter le "
.ancre("montresource.php?nomfic=sen_age_rep.php","code-source")." de " ;
00644     echo
" la solution "
.ancre("sen_age_rep.php")." ; on n'est pas obligé(e) de recopier le formulaire pour tester le code " ;
00645     echo
" car avec "
.b("method='GET'")." on peut tester le fichier réponse via son URL en ajoutant " ;
00646     echo
b
("?age=")." avec la valeur à tester." ;
00647     
finp() ;
00648     
finli() ;
00649     
00650     
debutli() ;
00651     
00652     
p
("texte") ;
00653     echo
" Solution volontairement non corrigée sur cette page pour l'examen de décembre 2014. " ;
00654     echo
" Celles et ceux qui viennent en TP auront la correction en \"live\"." ;
00655     
finp() ;
00656     
00657     
pre_fichier
("decembre2014.php","cadrebleu invisible") ;
00658     
00659     
p
("texte") ;
00660     echo
"Par contre, voici la réponse au début de la question 2, pour tester si l'utilisateur " ;
00661     echo
" a bien entrée une date préférée&nbsp;:" ;
00662     
finp() ;
00663     
00664     
pre_fichier
("histoire.php","cadre") ;
00665     
00666     
p
("texte") ;
00667     echo
" Pour l'examen de juin 2017, voici le code XHTML&nbsp;:" ;
00668     
finp() ;
00669     
00670     
pre_fichier
("juin2017.html","cadrebleu") ;
00671     
00672     
p
("texte") ;
00673     echo
" Le code en PHP conceptuel est listé ci-dessous&nbsp;:" ;
00674     
finp() ;
00675     
00676     
pre_fichier
("juin2017.php","cadrejaune") ;
00677     
00678     
finli() ;
00679     
00680     
debutli() ;
00681     
p
("texte") ;
00682     echo
" Consulter le "
.ancre("montresource.php?nomfic=ldc.php","code-source")." de " ;
00683     echo
" la solution "
.ancre("ldc.php")." et le code-source " ;
00684     echo
" des fonctions utilisées : "
.ancre("montresource.php?nomfic=mesfonctions3.php","mesfonctions3.php")."." ;
00685     echo
" Pour légumes, on utilise "
.b("urlencode")." dans le lien Google et on fait un test pour utiliser le mot " ;
00686     echo
b
("legumes")." (donc sans accent) pour les images... " ;
00687     
finp() ;
00688     
finli() ;
00689     
00690     
debutli() ;
00691     
00692     
p
("texte") ;
00693     echo
" Consulter le "
.ancre("montresource.php?nomfic=sen_hist_form.php","code-source")." du " ;
00694     echo
" formulaire "
.ancre("sen_hist_form.php")." et le " ;
00695     echo
ancre
("montresource.php?nomfic=sen_hist_rep.php","code-source")." de " ;
00696     echo
" la correction des réponses "
.ancre("sen_hist_rep.php")."." ;
00697     
finp() ;
00698     
00699     
p
("texte") ;
00700     echo
"Pour celles et ceux qui préfèreraient une solution \"conceptuelle\", c'est-à-dire en PHP " ;
00701     echo
" sans aucune balise, donc avec un code \"plus beau\" et \"plus propre\", on pourra " ;
00702     echo
" consulter le "
.ancre("montresource.php?nomfic=sen_hist_form_c.php","code-source")." du " ;
00703     echo
" formulaire "
.ancre("sen_hist_form_c.php")." et le " ;
00704     echo
ancre
("montresource.php?nomfic=sen_hist_rep_c.php","code-source")." de " ;
00705     echo
" la correction des réponses "
.ancre("sen_hist_rep_c.php")."." ;
00706     
finp() ;
00707     
00708     
finli() ;
00709     
00710     
debutli() ;
00711     
p
("texte") ;
00712     echo
"Les titres sont produits à l'aide la fonction "
.b("h1()")." en PHP conceptuel." ;
00713     
finp() ;
00714     
finli() ;
00715     
00716     
debutli() ;
00717     
p
("texte") ;
00718     echo
" La page "
.ancre("sen_quests1.php")." contient juste le tirage aléatoire ; " ;
00719     echo
" consulter son "
.ancre("montresource.php?nomfic=sen_quests1.php","code-source")." pour voir " ;
00720     echo
" comment cela fonctionne. " ;
00721     
finp() ;
00722     
finli() ;
00723     
00724     
finol() ;
00725     
00726     
#########################################################
00727     
00728     
$jtp
++ ; tpDscs($jtp,$nomTp[$jtp]) ; # TP7
00729     
00730     #########################################################
00731     
00732     
ol() ;
00733     
00734     
debutli() ;
00735     
p
("texte") ;
00736     echo
"La requ&ecirc;te SQL qui compte le nombre d'hommes ("
.em("sexe=0").") est " ;
00737     
finp() ;
00738     
00739     
p
("texte") ;
00740     echo
b
("SELECT COUNT(*) FROM ronfle WHERE sexe=0 ;") ;
00741     
finp() ;
00742     
00743     
p
("texte") ;
00744     echo
"Celle qui compte le nombre d'hommes ("
.em("sexe=0").") qui fument (".em("taba=1").") et ronflent (".em("ronfle=1").") est " ;
00745     
finp() ;
00746     
00747     
p
("texte") ;
00748     echo
b
("SELECT COUNT(*) FROM ronfle WHERE sexe=0 AND taba=1 AND ronfle=1 ;") ;
00749     
finp() ;
00750     
00751     
p
("texte") ;
00752     echo
"Si on sait qu'il y a 75 hommes, la requ&ecirc;te SQL qui calcule le pourcentage d'hommes qui fument et ronflent " ;
00753     echo
"par rapport au nombre d'hommes en tout est " ;
00754     
finp() ;
00755     
00756     
p
("texte") ;
00757     echo
b
("SELECT 100*( COUNT(*)/75 ) FROM ronfle WHERE sexe=0 AND taba=1 AND ronfle=1 ;") ;
00758     
finp() ;
00759     
00760     
p
("texte") ;
00761     echo
"Si on a stocké dans la variable PHP nommée "
.b("nhom")." le nombre d'hommes, la requ&ecirc;te SQL qui calcule " ;
00762     echo
" le pourcentage d'hommes qui fument par rapport au nombre d'hommes en tout devient pour PHP " ;
00763     
finp() ;
00764     
00765     
p
("texte") ;
00766     echo
b
("SELECT 100*( COUNT(*)/\$nbhom ) FROM ronfle WHERE sexe=0 AND taba=1 AND ronfle=1 ;") ;
00767     
finp() ;
00768     
00769     
p
("texte") ;
00770     echo
"L'arrondi du pourcentage via SQL s'écrit alors " ;
00771     
finp() ;
00772     
00773     
p
("texte") ;
00774     echo
b
("SELECT ROUND( 100*( COUNT(*) /\$nbhom) ) FROM ronfle WHERE sexe=0 AND taba=1 AND ronfle=1 ;") ;
00775     
finp() ;
00776     
00777     
p
("texte") ;
00778     echo
"Mais si on préfere arrondir en PHP le pourcentage mis dans la variable nommée "
.b("pct")." il faut écrire " ;
00779     
finp() ;
00780     
00781     
p
("texte") ;
00782     echo
b
("\$pct_ar = round( \$pct , 0 ) ; ") ;
00783     
finp() ;
00784     
00785     
p
("texte") ;
00786     echo
"Il est certainement préférable de laisser SQL faire tout le travail." ;
00787     
finp() ;
00788     
00789     
p
("texte") ;
00790     echo
"Pour lister les 10 plus jeunes femmes qui ronflent par age croissant en SQL, il faudrait écrire " ;
00791     
finp() ;
00792     
00793     
p
("texte") ;
00794     echo
b
("SELECT * FROM ronfle WHERE sexe=1 AND ronfle=1 ORDER BY age LIMIT 10 ;") ;
00795     
finp() ;
00796     
00797     
p
("texte") ;
00798     echo
"Le seul problème est qu'il y a 25 femmes en tout et seulement 5 qui ronflent. La partie "
.b("LIMIT 10 ") ;
00799     echo
" est donc inutile ici." ;
00800     
finp() ;
00801     
00802     
p
("texte") ;
00803     echo
" La page "
.ancre("sen_ronfle.php")." montre les différents résultats ; " ;
00804     echo
" consulter le "
.ancre("montresource.php?nomfic=sen_ronfle.php","code-source")." pour le " ;
00805     echo
" détail de la connexion, du listage des femmes... " ;
00806     echo
" On remarquera que tout le code-source est conceptuel, c'est-à-dire sans balise." ;
00807     
finp() ;
00808     
00809     
p
("texte") ;
00810     echo
"Pour la production d'histogrammes, voir "
.href("histo.php").". " ;
00811     
finp() ;
00812     
00813     
00814     
finli() ;
00815     
00816     
debutli() ;
00817     
p
("texte") ;
00818     echo
" La page "
.ancre("sen_quests1.php")." contient juste le tirage aléatoire ; " ;
00819     echo
" consulter son "
.ancre("montresource.php?nomfic=sen_quests1.php","code-source")." pour voir " ;
00820     echo
" comment cela fonctionne. " ;
00821     
finp() ;
00822     
00823     
p
("texte") ;
00824     echo
" La page "
.ancre("sen_quests2.php")." contient la solution complète ; " ;
00825     echo
" son "
.ancre("montresource.php?nomfic=sen_quests2.php","code-source").", bien que court à lire, se " ;
00826     echo
" révèle très intéressant. Les sous-programmes utilisés sont dans " ;
00827     echo
ancre
("montresource.php?nomfic=sen_quests3.php","sen_quests3.php")." (plus long à lire)." ;
00828     
finp() ;
00829     
00830     
p
("texte") ;
00831     echo
" On remarquera que, là encore, tout le code-source est conceptuel, c'est-à-dire sans balise." ;
00832     
finp() ;
00833     
finli() ;
00834     
00835     
finol() ;
00836     
00837     
pvide() ;
00838     
00839     
p() ;
00840     echo
href
("montresource.php?nomfic=sen_tps_cor.php","Code-source de cette page","orange_stim nou")."." ;
00841     
finp() ;
00842     
00843     
finSection() ;
00844     
finPage() ;
00845     
?>

Pour ne pas voir les numéros de ligne, ajoutez &nl=non à la suite du nom du fichier.

 

 

retour gH    Retour à la page principale de   (gH)