Valid XHTML     Valid CSS2    

Listing du fichier l2a_tp2.php

 

00001     <?php
00002     #    (gH)   -_-  l2a_tp2.php  ;  TimeStamp (unix) : 27 Février 2013 vers 12:35
00003     
00004     error_reporting
(E_ALL E_NOTICE E_STRICT) ;
00005     include("std.php"
) ;
00006     include("l2a_inc.php"
) ;
00007     
00008     $numTp 
;
00009     debutPageTp
($numTp) ;
00010     
00011     ## -------------------------------------------------------------------------------------------
00012     
00013     sdl
(3) ; echo cmt(' pour afficher toutes les solutions : l2a_tp'.$numTp.'.php?solutions=1') ; sdl(3) ;
00014     
00015     ## -------------------------------------------------------------------------------------------
00016     
00017     debutSection
() ;
00018     
00019     p
("texte") ;
00020     echo s_span
("Remarque&nbsp;","grouge").": vous pouvez désormais utiliser Windows ou Linux pour écrire vos fichiers. " ;
00021     echo " De plus, il est possible d'utiliser le serveur "
.b("devel.info-ua")." au lieu de ".b("forge.info.univ-angers.fr") ;
00022     echo " pour exécuter vos pages PHP. Cet autre serveur affiche les erreurs PHP alors que "
.b("forge")." renvoie une page blanche." ;
00023     echo "  Si vous &ecirc;tes dans une des salles locales de TP, vous pouvez utiliser la forme courte du serveur, à savoir " 
;
00024     echo " "
.b("forge.info-ua")." au lieu de ".b("forge.info.univ-angers.fr").". " ;
00025     finp
() ;
00026     pvide
() ;
00027     
00028     $tableauDesRubriques 
= array() ;
00029     $idr 
;
00030     $idr
++; $tableauDesRubriques[$idr] = "Ecriture de fonctions et procédures" ;
00031     $idr
++; $tableauDesRubriques[$idr] = "PHP conceptuel et utilisation de bibliothèques de fonctions" ;
00032     $idr
++; $tableauDesRubriques[$idr] = "Expressions régulières et chaines de caractères" ;
00033     $idr
++; $tableauDesRubriques[$idr] = "Fichiers, expressions régulières et fichiers-URL" ;
00034     $idr
++; $tableauDesRubriques[$idr] = "La structure de données ".b("\"pile\"")." version 2" ;
00035     $idr
++; $tableauDesRubriques[$idr] = "PHP et tables MySQL (1)" ;
00036     $idr
++; $tableauDesRubriques[$idr] = "Analyse d'une application (1)" ;
00037     $idr
++; $tableauDesRubriques[$idr] = "Parcours de fichier et documentation" ;
00038     $idr
++; $tableauDesRubriques[$idr] = "Parcours de fichier et comptages d'attributs" ;
00039     $idr
++; $tableauDesRubriques[$idr] = "PHP et tables MySQL (2)" ;
00040     $idr
++; $tableauDesRubriques[$idr] = "PHP, tables, éléments et Javascript" ;
00041     $idr
++; $tableauDesRubriques[$idr] = "Analyse d'une application (2)" ;
00042     $tdmCRLM 
= new tdm($tableauDesRubriques) ;
00043     $tdmCRLM
->titre() ;
00044     $tdmCRLM
->menu("oui","oui","nou") ;
00045     
00046     pvide
() ;
00047     
00048     p
() ;
00049      echo "Il est possible d'afficher toutes les solutions via "
.href("l2a_tp$numTp.php?solutions=1","?solutions=1","bouton_fin jaune_pastel nou").". " ;
00050     finp
() ;
00051     
00052     finSection
() ;
00053     
00054     debutSection
() ;
00055     $numExo 
;
00056     
00057     ## -------------------------------------------------------------------------------------------
00058     
00059     $tdmCRLM
->afficheRubrique("oui") ; $numExo++ ; # Ecriture de fonctions et procédures
00060     
00061     ## -------------------------------------------------------------------------------------------
00062     
00063     blockquote
() ;
00064     
00065     blockquote
() ;
00066     
00067     p
("texte") ;
00068     echo "En programmation, on distingue classiquement fonction et procédure. Comment fait-on la différence en PHP&nbsp;?" 
;
00069     finp
() ;
00070     
00071     p
("texte") ;
00072     echo "Est-ce qu'une fonction PHP peut renvoyer plusieurs valeurs ou plusieurs variables&nbsp;?" 
;
00073     finp
() ;
00074     
00075     p
("texte") ;
00076     echo b
("Application :")." écrire une fonction ".b("min_max")." qui renvoie la plus petite valeur et la plus grande valeur d'un ";
00077     echo href
("http://php.net/manual/fr/language.types.array.php","\"array\"","gvertf nou").", " ;
00078     echo " qu'on testera en ligne de commandes." 
;
00079     echo " Peut-on utiliser "
.href("http://php.net/manual/fr/language.exceptions.php","try","grouge nou") ;
00080     echo " pour s'assurer que la variable passée est bien un tableau&nbsp;?" 
;
00081     finp
() ;
00082     
00083     p
("texte") ;
00084     echo "Au passage, quelles sont toutes les fonctions liées aux tableaux en PHP&nbsp;?" 
;
00085     echo " Et comment vérifier la syntaxe d'un programme PHP, puisqu'une erreur de syntaxe comme oublier un point-virgule ou " 
;
00086     echo " un guillemet fait que tout la page HTML est blanche (vide) comme sur tout serveur de production&nbsp;?" 
;
00087     finp
() ;
00088     
00089     finblockquote
() ;
00090     
00091     solution
($numExo,$numTp) ;
00092     
00093     p
("texte") ;
00094     echo "En PHP, tout est fonction. Mais l'instruction "
.b("return()")." est facultative. Donc une fonction PHP sans " ;
00095     echo href
("http://php.net/manual/fr/function.return.php","return()","gbleu nou")." peut " ;
00096     echo " &ecirc;tre considérée comme une procédure." 
;
00097     finp
() ;
00098     
00099     p
("texte") ;
00100     echo "Une fonction PHP ne peut pas renvoyer plus d'une variable ni plus d'une valeur directement. Par contre, la variable peut &ecirc;tre un " 
;
00101     echo " tableau, ce qui permet de renvoyer plusieurs valeurs. En voici un exemple avec le renvoi du min et du max d'un tableau&nbsp;:" 
;
00102     finp
() ;
00103     
00104     pre_fichier
("minmax.php","cadre") ;
00105     
00106     p
("texte") ;
00107     echo "Il y a un peu moins d'une centaine de fonctions directement liées aux tableaux en PHP, comme le montre la page " 
;
00108     echo href
("http://www.php.net/manual/fr/ref.array.php","ref.array","gbleuf nou")." du manuel de référence. " ;
00109     echo " C'est sans doute trop, certaines fonctions auraient pu &ecirc;tre regroupées à l'aide d'options, comme en " 
;
00110     echo href
("../tuteurs/tutperl.htm","PERL","grouge nou").". " ;
00111     finp
() ;
00112     
00113     p
("texte") ;
00114     echo " On ne peut pas utiliser "
.href("http://php.net/manual/fr/language.exceptions.php","try","grouge nou") ;
00115     echo " pour s'assurer que la variable passée est bien un tableau parce que les fonctions que nous avons utilisées ne renvoient pas " 
;
00116     echo " des erreurs, mais seulement des "
.em("warnings").". Donc le programme suivant ne \"capte\" rien&nbsp;:" ;
00117     finp
() ;
00118     
00119     pre_fichier
("minmaxv2.php","cadre") ;
00120     
00121     p
("texte") ;
00122     echo "Il faut lire le "
.href("http://www.php.net/manual/fr/index.php","manuel php","gvertf nou") ;
00123     echo " pour trouver qu'il existe une fonction "
.href("http://php.net/manual/fr/function.is-array.php","is_array","gbleuf nou") ;
00124     echo " qui permet de résoudre notre problème&nbsp;:" 
;
00125     finp
() ;
00126     
00127     pre_fichier
("minmaxv3.php","cadre") ;
00128     
00129     p
("texte") ;
00130     echo "On remarquera au passage l'incohérence de nommage des fonctions en PHP avec "
.b("isset")." et ".b("is-array")." et " ;
00131     echo " l'incohérence de nommage de la page Web&nbsp;: "
.b("is-array.php")." pour ".b("is_array").". ";
00132     finp
() ;
00133     
00134     p
("texte") ;
00135     echo "Pour vérifier la syntaxe d'un programme PHP, le mieux est d'utiliser "
.b("php&nbsp;-l&nbsp;fichier")." en ligne de commande, " ;
00136     echo" lorsqu'on a accès à une session en mode terminal sur le serveur. Sinon, on peut utiliser " 
;
00137     echo href
("http://www.icosaedro.it/phplint/phplint-on-line.html","php lint","gbleuf nou").", " ;
00138     echo href
("http://phpcodechecker.com","phpcodechecker","gbleuf nou")." ou " ;
00139     echo href
("http://www.meandeviation.com/tutorials/learnphp/php-syntax-check/v5-2/syntax-check.php","php syntax check","gbleuf nou").". " ;
00140     echo " Mais ceci ne vous dispense pas de XHTML validator parce que le code PHP suivant est valide, mais pas le code XHTML produit " 
;
00141     echo " à cause du deuxième &gt; en fin d'instruction et de l'absence d'apostrophe fermante pour l'attribut "
.b("class")."." ;
00142     finp
() ;
00143     
00144     pre_fichier
("errnoerr.php","cadrebleu") ;
00145     
00146     finsolution
() ;
00147     
00148     finblockquote
() ;
00149     
00150     ## -------------------------------------------------------------------------------------------
00151     
00152     $tdmCRLM
->afficheRubrique("oui") ; $numExo++ ; # PHP conceptuel et utilisation de bibliothèques de fonctions
00153     
00154     ## -------------------------------------------------------------------------------------------
00155     
00156     blockquote
() ;
00157     
00158     blockquote
() ;
00159     
00160     p
("texte") ;
00161     echo "Réécrire le code PHP suivant en mode \"conceptuel\", c'est-à-dire sans aucune balise apparente, à l'aide de " 
;
00162     echo href
("stdphp.php","std.php","grouge nou")." (archive " ;
00163     echo href
("std.zip","","gvertf nou").") dans une page Web valide au sens ".b("XHTML strict").". " ;
00164     finp
() ;
00165     
00166     pre_fichier
("nonconcept.php","cadre") ;
00167     
00168     p
("texte") ;
00169     echo "Il est possible de rapatrier l'archive et de la décompresser en ligne de commandes (dans le bon répertoire&nbsp;!) via&nbsp;:" 
;
00170     finp
() ;
00171     
00172     pre_fichier
("wgetarch2.txt","cadrejaune") ;
00173     
00174     
00175     p
("texte") ;
00176     echo "Dans une autre page, écrire une fonction "
.b("para(nbl)")." qui produit ".b("nbl")." lignes de texte répétitif. Utiliser ensuite la classe d'objets ".b("tdm") ;
00177     echo " du fichier "
.b("std.php")." pour afficher une page qui implémente une table des matières cliquable avec deux ou trois \"chapitres\" " ;
00178     echo " qui contiennent chacun deux ou trois paragraphes générés par la fonction "
.b("para()")."." ;
00179     finp
() ;
00180     
00181     p
("texte") ;
00182     echo "Comment est définie la fonction "
.b("h1()")." dans ".b("std.php")."&nbsp;? " ;
00183     echo " Comment sait-on si une fonction de "
.b("std.php")." fait un ".b("echo")." ou un ".b("return")."&nbsp;? " ;
00184     echo " Comment sont nommées les fonctions de "
.b("std.php")."&nbsp;? " ;
00185     finp
() ;
00186     
00187     p
("texte") ;
00188     echo "Expliquer ensuite comment est généré et où (client&nbsp;? serveur&nbsp;?) le code XHTML produit en PHP et Javascript  " 
;
00189     echo " dans la section identifiée par "
.b("sectdyn")." si on utilise le texte suivant " ;
00190     echo " qui correspond à la page "
.href("jsdyn.php").". " ;
00191     finp
() ;
00192     
00193     pre_fichier
("jsdyn.php","cadre") ;
00194     
00195     p
("texte") ;
00196     echo "Voici le fichier Javascript utilisé&nbsp;:" 
;
00197     finp
() ;
00198     
00199     pre_fichier
("jsdyn.js","cadrejaune") ;
00200     
00201     p
("texte") ;
00202     echo "Que se passe-t-il si Javascript n'est pas actif&nbsp;? Y a-t-il un message d'erreur&nbsp;?" 
;
00203     finp
() ;
00204     
00205     p
("texte") ;
00206     echo "Après avoir lu le fichier "
.href("montre.js")." écrire en PHP conceptuel une page qui utilise un bouton ".b("Afficher/Masquer") ;
00207     echo " qui sert à montrer ou cacher le texte préformaté mis dans un élement dont l'"
.b("id")." est ".b("surprise")." " ;
00208     echo " comme dans "
.href("surprise.php").". " ;
00209     finp
() ;
00210     
00211     pre_fichier
("montre.js","cadre") ;
00212     
00213     finblockquote
() ;
00214     
00215     solution
($numExo,$numTp) ;
00216     
00217     p
("texte") ;
00218     echo "Il s'agit en fait de l'"
.href("tds.php#rewrite","exercice 11","gvertf nou")." de notre cours sur la " ;
00219     echo href
("pdc.php","technologie internet","gbleuf nou")." dont la solution est ".href("solutions.php#rewrite","ici","grouge nou").". " ;
00220     echo " On en profitera bien s&ucirc;r pour regarder les autres exercices..." 
;
00221     finp
() ;
00222     
00223     p
("texte") ;
00224     echo "Le code conceptuel est donc&nbsp;:" 
;
00225     finp
() ;
00226     
00227     pre_fichier
("ouiconcept.php","cadre") ;
00228     
00229     p
("texte") ;
00230     echo "Pour une démonstration de table des matières avec la fonction "
.b("para()").", " ;
00231     echo " voir "
.href("tdm_demo.php")." dont le code-source est ".href("montresource.php?nomfic=tdm_demo.php","ici")." et ci-dessous." ;
00232     finp
() ;
00233     
00234     pre_fichier
("tdm_demo.php","cadre") ;
00235     
00236     p
("texte") ;
00237     echo "La fonction "
.b("h1()")." est définie comme la fonction ".b("h2()")." et la fonction ".b("h3()")." par un appel à la fonction ".b("h()")." " ;
00238     echo " avec le niveau ("
.b("1, 2, 3")."...) passé en paramètre." ;
00239     echo " On peut consulter son code source "
.href("stdphp.php?lafns=h1","ici").". " ;
00240     echo " La plupart des éléments XHTML &laquo;courts&raquo; sont implémentés comme des fonctions avec des "
.b("echo").". " ;
00241     echo " Par contre les fonctions comme "
.b("s_span()").", ".b("b()")." et ".b("href()")." utilisent ".b("return").". " ;
00242     echo " Les fonctions sont nommées comme les éléments. Ainsi il y a "
.b("p()")." pour &lt;p&gt;," ;
00243     echo " "
.b("br()")." pour &lt;br&nbsp;/&gt;. Pour raccourcir la frappe, les divers &lt;input&gt; d'un formulaire " ;
00244     echo " ont leur propre fonction." 
;
00245     finp
() ;
00246     
00247     p
("texte") ;
00248     echo "Pour la page "
.href("jsdyn.php")." le code PHP génère (coté serveur) et transmet un élément ".b("&lt;h1&gt;")."  dans une division identifiée par \"jsdyn\". " ;
00249     echo " Lorsque la page est entièrement chargée (évènement "
.b("onLoad")."), le navigateur crée en mémoire via Javascript (coté client) un deuxième  ".b("&lt;h1&gt;")."  puis le " ;
00250     echo " texte "
.b("Bonsoir&nbsp;!")." qui est inséré dans le ".b("&lt;h1&gt;")." et Javascript ajoute ensuite cet élément ".b("&lt;h1&gt;")." à la division." ;
00251     finp
() ;
00252     
00253     p
("texte") ;
00254     echo "Si Javascript n'est pas actif, il n'y a aucun message d'erreur, mais "
.b("Bonsoir&nbsp;!")." ne sera pas affiché." ;
00255     finp
() ;
00256     
00257     finsolution
() ;
00258     
00259     finblockquote
() ;
00260     
00261     ## -------------------------------------------------------------------------------------------
00262     
00263     $tdmCRLM
->afficheRubrique("oui") ; $numExo++ ; # Expressions régulières et chaines de caractères
00264     
00265     ## -------------------------------------------------------------------------------------------
00266     
00267     blockquote
() ;
00268     
00269     blockquote
() ;
00270     
00271     p
("texte") ;
00272     echo "Il faudrait aider la "
.em("jej")." (jeune et jolie) Abby --&nbsp;".href("http://fr.wikipedia.org/wiki/Abigail_Sciuto","Abigail Scituo")."&nbsp;--" ;
00273     echo " à identifier des suspects à l'aide de numéros de plaques minéralogiques. " 
;
00274     echo " Voici ce qu'on sait des plaques des suspects, gr&acirc;ce au "
.href("http://en.wikipedia.org/wiki/Naval_Criminal_Investigative_Service","NCIS")."&nbsp;:" ;
00275     finp
() ;
00276     
00277     ul
() ;
00278     
00279     debutli
() ; p("texte") ;
00280      echo "le numéro de plaque d'une voiture se compose de 1 à 4 chiffres, un espace, deux lettres, un espace et enfin deux chiffres, et rien d'autre." 
;
00281     finp
() ; finli() ;
00282     
00283     debutli
() ; p("texte") ;
00284      echo " si toutes les lettres sont des consonnes, il s'agit du suspect nommé " 
;
00285      echo href
("http://fr.wikipedia.org/wiki/Liste_des_personnages_de_NCIS_:_Enqu%C3%AAtes_sp%C3%A9ciales","Ari Haswari","gbleuf nou")."." ;
00286     finp
() ; finli() ;
00287     
00288     
00289     debutli
() ; p("texte") ;
00290      echo " si le numéro de plaque comporte un chiffre répété, il s'agit du " 
;
00291      echo href
("http://fr.wikipedia.org/wiki/Liste_des_personnages_de_NCIS_:_Enqu%C3%AAtes_sp%C3%A9ciales","tueur de port en port","gbleuf nou")."." ;
00292     finp
() ; finli() ;
00293     
00294     debutli
() ; p("texte") ;
00295      echo " si le numéro de plaque comporte avant les lettres exactement 4 chiffres avec une alternance pair/impair, il s'agit de " 
;
00296      echo href
("http://fr.wikipedia.org/wiki/Liste_des_%C3%A9pisodes_de_NCIS_:_Enqu%C3%AAtes_sp%C3%A9ciales","\"la grenouille\"","gbleuf nou")."." ;   ;
00297     finp
() ; finli() ;
00298     
00299     finul
() ;
00300     
00301     p
("texte") ;
00302     echo "Ecrire un document PHP qui reproduit le premier formulaire de la page "
.href("ncis.php")." via du code valide pour XHTML strict. " ;
00303     echo " On affichera l'image "
.href("http://static1.ozap.com/articles/0/15/02/10/@/1415258-pauley-perrette-est-abby-sciuto-dans-diapo-1.jpg","abby.jpg") ;
00304     echo " et on mettra un lien vers "
.href("http://fr.wikipedia.org/wiki/Abigail_Sciuto","la page Wiki associée").". " ;
00305     finp
() ;
00306     
00307     p
("texte") ;
00308     echo "A partir du formulaire "
.href("ncis.php")." écrire le programme défini par l'attribut ".b("action")." de façon à afficher les suspects possibles " ;
00309     echo " quand on saisit un numéro de plaque. On utilisera, quand c'est possible les " 
;
00310     echo href
("http://www.php.net/manual/fr/ref.pcre.php","expressions régulières PCRE","grouge nou")." pour avoir un code PHP concis et notamment " ;
00311     echo href
("http://www.php.net/manual/fr/function.preg-match.php","preg_match","gvert nou")." et " ;
00312     echo href
("http://www.php.net/manual/fr/function.preg-match-all.php","preg_match_all","gvert nou")."." ;
00313     finp
() ;
00314     
00315     p
("texte") ;
00316     echo "Reprendre l'exercice si on admet que certaines lettres ou certains chiffres ne sont pas exploitables. On notera par un tiret toute lettre ou chiffre non su " 
;
00317     echo " à condition qu'il n'y ait pas plus de 3 tirets en tout " 
;
00318     echo " (indication fournie par "
.href("http://fr.wikipedia.org/wiki/Timothy_McGee","Mac Gee","gbleuf nou").")." ;
00319     finp
() ;
00320     
00321     
00322     finblockquote
() ;
00323     
00324     solution
($numExo,$numTp) ;
00325     
00326     p
("texte") ;
00327     echo "Pour le formulaire, consulter le " 
;
00328     echo href
("montresource.php?nomfic=ncis.php","code-source")." de la page." ;
00329     finp
() ;
00330     
00331     p
("texte") ;
00332     echo "Le mieux est sans doute d'écrire des fonctions spécialisées pour chaque suspect, d'où la solution " 
;
00333     echo " nommée "
.href("montresource.php?nomfic=ncis_res_sol.php","ncis_res_sol","gvert nou")." testable via " ;
00334     echo href
("ncis_sol.php").". " ;
00335     echo " On remarquera les exemples de plaques ajoutés dans la page, utiles pour des tests unitaires et d'intégration." 
;
00336     finp
() ;
00337     
00338     finsolution
() ;
00339     
00340     finblockquote
() ;
00341     
00342     ## -------------------------------------------------------------------------------------------
00343     
00344     $tdmCRLM
->afficheRubrique("oui") ; $numExo++ ; # Fichiers, expressions régulières et fichiers-URL"
00345     
00346     ## -------------------------------------------------------------------------------------------
00347     
00348     blockquote
() ;
00349     
00350     blockquote
() ;
00351     
00352     p
("texte") ;
00353     echo "Rapatriez le fichier "
.href("l2grps_2013.txt","","gbleuf nou")." et reproduisez le tableau fourni dans la " ;
00354     echo href
("l2a_cc.php","page du controle continu","gvertf nou").". " ;
00355     finp
() ;
00356     
00357     p
("texte") ;
00358     echo "On voudrait connaitre la popularité de certains chanteurs ou artistes en consultant le nombre de \"hits\" renvoyés " 
;
00359     echo " par Google quand on entre le nom du chanteur ou de l'artiste dans le moteur de recherches. " 
;
00360     echo " Ecrire une page Web qui affiche la popularité de " 
;
00361     echo " plusieurs chanteurs artistes et qui renvoie les résultats comme dans la page "
.href("motsinternet.php")."." ;
00362     echo " On utilisera "
.href("http://forge.info.univ-angers.fr/~gh/jphistopct.php","jphistopct")." pour générer les graphiques." ;
00363     echo " Si vous avez le temps, écrire un formulaire qui permet de saisir le nom des chanteurs ou des artistes." 
;
00364     finp
() ;
00365     
00366     p
("texte") ;
00367     echo b
("Remarque&nbsp;:") ;
00368     echo " il est possible de rapatrier le fichier "
.href("l2grps_2013.txt","","gbleuf nou") ;
00369     echo " en ligne de commandes via&nbsp;" 
;
00370     finp
() ;
00371     
00372     pre
("cadre") ;
00373      echo "\n" 
;
00374      echo "  \$forge_html> wget http://forge.info.univ-angers.fr/~gh/internet/l2grps_2013.txt\n" 
;
00375      echo "\n" 
;
00376     finpre
() ;
00377     
00378     finblockquote
() ;
00379     
00380     solution
($numExo,$numTp) ;
00381     
00382     p
("texte") ;
00383     echo "Pour "
.href("l2grps_2013.txt","","gbleuf nou")." il suffit de consulter " ;
00384     echo href
("montresource.php?nomfic=l2a_cc.php","montresource.php?nomfic=l2a_cc.php","gvertf nou").". " ;
00385     finp
() ;
00386     
00387     p
("texte") ;
00388     echo "Dans la mesure où PHP peut ouvrir le fichier correspondant à une URL comme si c'était un fichier local, il suffit de " 
;
00389     echo " repérer le texte comme "
.b("Environ 6&#160;840&#160;000 résultats")." dans la page renvoyée par Google, d'où la solution ".href("chanteurs.php")."." ;
00390     finp
() ;
00391     /*
00392     p() ;
00393     echo "Pour l'autre partie de l'exercice, ceux et celles qui sont venu(e)s en cours savent où est la solution." ;
00394     echo " Pour les personnes qui ne sont pas inscrites dans mes cours, vous pouvez me contacter par mail." ;
00395     finp() ;*/
00396     
00397     finsolution
() ;
00398     
00399     finblockquote
() ;
00400     
00401     ## -------------------------------------------------------------------------------------------
00402     
00403     $tdmCRLM
->afficheRubrique("oui") ; $numExo++ ; # La structure de données ".b("\"pile\"")." version 2
00404     
00405     ## -------------------------------------------------------------------------------------------
00406     
00407     blockquote
() ;
00408     
00409     blockquote
() ;
00410     
00411     p
("texte") ;
00412     echo "Reprendre l'exercice 10 de la série 1 (la structure de données \"pile\") en mode démonstration dans une " 
;
00413     echo " page Web. Indication : on utilisera une "
.href("http://www.php.net/manual/fr/book.session.php","session").". " ;
00414     echo " Pour un exemple de ce qu'on veut réaliser, cliquer "
.href("pilev2.php","ici").". " ;
00415     finp
() ;
00416     
00417     finblockquote
() ;
00418     
00419     solution
($numExo,$numTp) ;
00420     
00421     p
("texte") ;
00422     echo "Voir "
.href("pilev2.php")." dont le code-source est ci-dessous et " ;
00423     echo " "
.href("montresource.php?nomfic=pilev2.php","ici","gvertf nou").". " ;
00424     finp
() ;
00425     
00426     pre_fichier
("pilev2.php","cadre") ;
00427     
00428     finsolution
() ;
00429     
00430     finblockquote
() ;
00431     
00432     ## -------------------------------------------------------------------------------------------
00433     
00434     $tdmCRLM
->afficheRubrique("oui") ; $numExo++ ; # PHP et tables MySQL (1)
00435     
00436     ## -------------------------------------------------------------------------------------------
00437     
00438     blockquote
() ;
00439     
00440     p
("texte") ;
00441     echo "On dispose dans "
.href("fa.txt")." des instructions MySql qui ont permis de construire les tables " ;
00442     echo b
("films")." et ".b("artistes")." dans la base ".s_span("statdata","grouge").". On pourra consulter " ;
00443     echo " la page "
.href("filmsartistes.html","filmsartistes","gvert nou")." pour voir de façon plus agréable le contenu des tables." ;
00444     finp
() ;
00445     
00446     p
("texte") ;
00447     echo "Ecrire un programme qui affiche dans une page Web les 15 premiers films (où est le piège&nbsp;?). On fournira le nom et l'année du film. " 
;
00448     echo " On pourra essayer de trouver le code SQL en ligne de commande sur forge en mode terminal via " 
;
00449     finp
() ;
00450     
00451     pre_fichier
("anonymous.txt","cadrejaune") ;
00452     
00453     p
("texte") ;
00454     echo "Afficher ensuite le nom du film, l'année et le metteur en scène pour ces quinze films. " 
;
00455     finp
() ;
00456     
00457     p
("texte") ;
00458     echo "Ecrite ensuite un \"jeu\" qui tire au hasard  un film et demande l'année de sortie. On utilisera astucieusement un formulaire en mode " 
;
00459     echo " POST pour avoir la solution (cachée) dans le formulaire afin de pouvoir vérifier facilement la solution et gérer la réponse en Javascript.  " 
;
00460     echo " On indiquera que le jeu est impossible si Javascript n'est pas actif. " 
;
00461     echo " On écrira " 
;
00462     echo " une version 1 qui utilise un champ texte " 
;
00463     echo " pour saisir l'année (c'est donc difficile pour l'utilisateur et simple pour le programmeur) " 
;
00464     echo " puis " 
;
00465     echo " une version 2 qui fournit les années de sortie possibles dans une liste de sélection " 
;
00466     echo " (c'est donc plus facile pour l'utilisateur et moins simple pour le programmeur). " 
;
00467     echo " Voici en deux liens ce qu'on veut obtenir : "
.href("quizz1.php")." et " .href("quizz2.php")."."  ;
00468     finp
() ;
00469     
00470     p
("texte") ;
00471     echo " Ecrire ensuite un formulaire qui demande de choisir entre  "
.b("films")." et ".b("artistes").", " ;
00472     echo " puis qui demande combien on veut de lignes résultats et à partir de quelle ligne. " 
;
00473     echo " Pour la table films, on utilisera les champs "
.b("idFilm annee genre pays mes titre")." et on triera par ".b("annee")." alors que ";
00474     echo " pour la table artistes, on utilisera les champs "
.b("idArtiste artnom artprenom anneenaiss")." et on triera par ".b("artnom").". " ;
00475     echo " Voir "
.href("fa.php")." version 2 comme implémentation de ce qu'on veut." ;
00476     finp
() ;
00477     
00478     p
("texte") ;
00479     echo " Pour tous ces programmes, on utilisera "
.b("std.php")." pour produire du ".href("php_conceptuel.php","PHP conceptuel","gbleu nou").". " ;
00480     echo " On en profitera pour trouver quelles fonctions de "
.b("std.php")." utilisent MySql et celles qui affichent des tableaux." ;
00481     finp
() ;
00482     
00483     p
("texte") ;
00484     echo "Le lien " 
;
00485     echo href
("phpmysql.htm","phpmysql") ;
00486     echo " fournit un rappel de la syntaxe des fonctions et objets PHP pour effectuer des requ&ecirc;tes MySQL." 
;
00487     finp
() ;
00488     
00489     solution
($numExo,$numTp) ;
00490     
00491     p
("texte") ;
00492     echo "Le code MySQL pour trouver les quinze premiers films par ordre de date est simple&nbsp;: "
;
00493     finp
() ;
00494     
00495     pre_fichier
("quinzefilms.mysql","cadre") ;
00496     
00497     p
("texte") ;
00498     echo "Le piège est le fait que &laquo;les quinze premiers&raquo; n'a aucun sens si on ne précise pas le critère de tri. " 
;
00499     echo " On prend ici la date comme critère de tri." 
;
00500     finp
() ;
00501     
00502     p
("texte") ;
00503     echo "Il ne reste plus qu'à inclure les résultats de la requ&ecirc;te MySQL dans un tableau XHTML. " 
;
00504     echo "Consulter "
.href("quinzefilms.php","quinzefilms","gvertf nou")." comme page-solution, dont le code est ci-dessous." ;
00505     echo " Au passage, on a trouvé le metteur en scène gr&acirc;ce au numéro d'artiste." 
;
00506     finp
() ;
00507     
00508     pre_fichier
("quinzefilms.php","cadrebleu") ;
00509     
00510     p
("texte") ;
00511     echo "Le premier quizz utilise simplement un champ texte et un champ caché issu de MySql pour que Javascript " 
;
00512     echo" puisse comparer la réponse utilisateur et la solution&nbsp;:" 
;
00513     finp
() ;
00514     
00515     pre_fichier
("quizz1.php","cadrejaune") ;
00516     
00517     p
("texte") ;
00518     echo "Le code Javascript se réduit donc à un test et à un affichage&nbsp;" 
;
00519     finp
() ;
00520     
00521     pre_fichier
("quizz1.js","cadre rose_pastel") ;
00522     
00523     p
("texte") ;
00524     echo "Le second quizz complète le premier quizz en l'incluant dans une division (élément &lt;div&gt;) avec un style "
.b("invisible") ;
00525     echo " que Javascript rend visible si Javascript est actif. La réponse est affichée de la m&ecirc;me façon, dans une autre division. " 
;
00526     echo " L'élément &lt;select&gt; qui affiche les années possibles est construit à l'aide de notre fonction " 
;
00527     echo href
("stdphp.php?lafns=listeSelectFromChampMySql","listeSelectFromChampMySql()")." de ".b("std.php").". " ;
00528     finp
() ;
00529     
00530     pre_fichier
("quizz2.php","cadrejaune") ;
00531     
00532     p
("texte") ;
00533     echo "Le code Javascript est donc un tout petit plus compliqué puisqu'il doit mettre la réponse dans un paragraphe&nbsp;:" 
;
00534     finp
() ;
00535     
00536     pre_fichier
("quizz2.js","cadre rose_pastel") ;
00537     
00538     p
("texte") ;
00539     echo "Enfin, pour le questionnaire films ou artistes, " 
;
00540     echo " voir "
.href("fa.php")." dont le code-source est ".href("montresource.php?nomfic=fa.php","ici"). " comme exemple de formulaire " ;
00541     echo " et "
.href("fa_res.php")." dont le code-source est ".href("montresource.php?nomfic=fa_res.php","ici"). " comme fichier implémentant " ;
00542     echo " l'attribut action. " 
;
00543     finp
() ;
00544     
00545     pre_fichier
("fa.php","cadrebleu") ;
00546     pre_fichier
("fa_res.php","cadrejaune") ;
00547     pre_fichier
("fa.js","cadre") ;
00548     
00549     finsolution
() ;
00550     
00551     finblockquote
() ;
00552     
00553     ## -------------------------------------------------------------------------------------------
00554     
00555     $tdmCRLM
->afficheRubrique("oui") ; $numExo++ ; # Analyse d'une application (1)
00556     
00557     ## -------------------------------------------------------------------------------------------
00558     
00559     blockquote
() ;
00560     
00561     blockquote
() ;
00562     
00563     p
("texte") ;
00564     echo "Essayer de trouver tous les choix de programmation qui ont été faits dans l'implémentation d'un système d'exercices disponible sur " 
;
00565     echo " la page "
.href("sen_quests2.php","senQuest").". On rechargera plusieurs fois la page." ;
00566     finp
() ;
00567     
00568     p
("texte") ;
00569     echo "Essayer aussi de définir la ou les bases de données impliquées. " 
;
00570     finp
() ;
00571     
00572     finblockquote
() ;
00573     
00574     solution
($numExo,$numTp) ;
00575     
00576     
00577     p
("texte") ;
00578     echo "Une lecture attentive du code source du fichier "
.href("sen_quests2.php")." devrait &ecirc;tre suffisante. " ;
00579     echo " Vous devez maintenant savoir comment y accéder..." 
;
00580     finp
() ;
00581     
00582     finsolution
() ;
00583     
00584     finblockquote
() ;
00585     
00586     ## -------------------------------------------------------------------------------------------
00587     
00588     $tdmCRLM
->afficheRubrique("oui") ; $numExo++ ; # Parcours de fichier et documentation
00589     
00590     ## -------------------------------------------------------------------------------------------
00591     
00592     blockquote
() ;
00593     blockquote
() ;
00594     
00595     p
("texte") ;
00596     echo "Il est facile de repérer une fonction PHP dans le code source puisqu'elle commence par le mot "
.b("function").". "  ;
00597     echo " En admettant que le début d'une fonction est toujours écrit en début de ligne (précédé éventuellement d'espaces), " 
;
00598     echo " écrire un programme qui liste les fonctions d'un code-source php avec leur numéro de ligne, comme par exemple&nbsp;:" 
;
00599     finp
() ;
00600     
00601     pre_fichier
("listing_design.txt","cadrebleu") ;
00602     
00603     p
("texte") ;
00604     echo "Est-ce beaucoup plus compliqué si on essaie de lister toutes les fonctions d'un projet à partir d'un fichier \"maitre\" " 
;
00605     echo " qui contient des "
.href("http://php.net/manual/fr/function.include.php","include")." et des  " ;
00606     echo href
("http://php.net/manual/fr/function.require.php","require")." comme dans " ;
00607     echo href
("ldphp_xmp.txt")."&nbsp;? " ;
00608     finp
() ;
00609     
00610     p
("texte") ;
00611     echo "Expliquer comment les pages " 
;
00612     echo href
("stdphp.php","std","grouge nou")." et " ;
00613     echo href
("../wstat/statghfns.php","statgh.r","grouge nou")." fonctionnent. " ;
00614     echo " Quelles précautions faut-il prendre lorsqu'on écrit des fonctions pour profiter d'une telle interface&nbsp;?" 
;
00615     finp
() ;
00616     
00617     finblockquote
() ;
00618     
00619     solution
($numExo,$numTp) ;
00620     
00621     pvide
() ;
00622     
00623     vnc
() ;
00624     p
() ;
00625     echo "Ceux et celles qui sont venu(e)s en cours savent où est la solution." 
;
00626     echo " Pour les personnes qui ne sont pas inscrites dans mes cours, vous pouvez me contacter par mail." 
;
00627     finp
() ;
00628     
00629     finsolution
() ;
00630     
00631     finblockquote
() ;
00632     
00633     ## -------------------------------------------------------------------------------------------
00634     
00635     $tdmCRLM
->afficheRubrique("oui") ; $numExo++ ; # Parcours de fichier et comptages d'attributs
00636     
00637     ## -------------------------------------------------------------------------------------------
00638     
00639     blockquote
() ;
00640     blockquote
() ;
00641     
00642     p
("texte") ;
00643     echo "On voudrait analyser une page Web en termes d'attributs et d'éléments. " 
;
00644     echo " Ecrire un formulaire qui permet de tester une URL quelconque, y compris un fichier XML. " 
;
00645     echo " On pourra tester la validité W3C du texte analysé&nbsp;; on fournira des URL pr&ecirc;tes à " 
;
00646     echo " l'emploi pour faciliter le test du programme PHP utilisé comme attribut "
.b("action")." du formulaire." ;
00647     finp
() ;
00648     
00649     finblockquote
() ;
00650     
00651     solution
($numExo,$numTp) ;
00652     
00653     p
("texte") ;
00654     echo "Voir la page "
.href("eltatt.php","","gvertf nou")." qui fournit des liens pour les codes-sources PHP utilisés. " ;
00655     finp
() ;
00656     
00657     finsolution
() ;
00658     
00659     finblockquote
() ;
00660     
00661     ## -------------------------------------------------------------------------------------------
00662     
00663     $tdmCRLM
->afficheRubrique("oui") ; $numExo++ ; # PHP et tables MySQL (2)
00664     
00665     ## -------------------------------------------------------------------------------------------
00666     
00667     blockquote
() ;
00668     blockquote
() ;
00669     
00670     p
("texte") ;
00671     echo "Compléter le formulaire de la question 6 en ajoutant un critère de tri pour choisir l'affichage. On viendra construire automatiquement " 
;
00672     echo " la liste de tous les champs possibles, et on utilisera des fonctions pour toute action répétée au moins deux fois. Afin d'éviter les " 
;
00673     echo " tests, on utilisera des tableaux associatifs. Il est conseillé d'écrire une fonction "
.b("listeDesChamps(table)")." dans un fichier " ;
00674     echo " nommé "
.b("resfa_inc.php")." qu'on viendra inclure, aussi bien pour le formulaire que pour les résultats." ;
00675     finp
() ;
00676     
00677     p
("texte") ;
00678     echo "Il faudra certainement utiliser du "
.b("Javascript")." dans le formulaire pour choisir quelle liste de champs afficher." ;
00679     finp
() ;
00680     
00681     finblockquote
() ;
00682     
00683     solution
($numExo,$numTp) ;
00684     
00685     p
("texte") ;
00686     echo "Voir "
.href("fa.php")." comme formulaire d'entrée (version 2), dont le code-source est ".href("montresource.php?nomfic=fa.php","ici") ;
00687     echo " et "
.href("fa_res2.php")." et son ".href("montresource.php?nomfic=fa_res2.php","code source","gbleuf nou")." pour la gestion des résultats. " ;
00688     echo " Le code-source Javascript utilisé est "
.href("montresource.php?nomfic=fa.js","fa.js","gbleuf nou").". " ;
00689     finp
() ;
00690     
00691     pre_fichier
("fa.js","cadrebleu") ;
00692     
00693     finsolution
() ;
00694     
00695     finblockquote
() ;
00696     
00697     ## -------------------------------------------------------------------------------------------
00698     
00699     $tdmCRLM
->afficheRubrique("oui") ; $numExo++ ; # "PHP, tables, éléments et Javascript
00700     
00701     ## -------------------------------------------------------------------------------------------
00702     
00703     blockquote
() ;
00704     blockquote
() ;
00705     
00706     p
("texte") ;
00707     echo "Après réflexion, on aimerait que les tableaux affichés lors d'une requ&ecirc;te MySQL soient " 
;
00708     echo " triables quand on clique sur l'en-tete de la colonne. Est-ce facile à implémenter&nbsp;?" 
;
00709     finp
() ;
00710     
00711     p
("texte") ;
00712     echo "De m&ecirc;me, si on pagine l'affichage avec un choix personnalisé (10 par page, 20 par page...)," 
;
00713     echo " est-ce facile de disposer d'un bouton ou d'un lien "
.b("voir les xx suivants")."&nbsp;?" ;
00714     finp
() ;
00715     
00716     p
("texte") ;
00717     echo "Essayez de réaliser une page en PHP et Javascript qui utilise les éléments de formulaire suivants pour " 
;
00718     echo " afficher les films&nbsp;:" 
;
00719     finp
() ;
00720     
00721     blockquote
() ;
00722     div
("cadre") ;
00723      p
() ;
00724         nbsp
(5) ;
00725         bouton
("debl","class='bouton_fin vert_pastel'","","&nbsp;Début de liste&nbsp;") ;
00726         nbsp
(5) ;
00727         bouton
("suiv","class='bouton_fin jaune_pastel'","","&nbsp;Suivants&nbsp;") ;
00728         nbsp
(5) ;
00729         bouton
("mili","class='bouton_fin bleu_pastel'","","&nbsp;Milieu&nbsp;") ;
00730         nbsp
(5) ;
00731         bouton
("prec","class='bouton_fin jaune_pastel'","","&nbsp;Précédents&nbsp;") ;
00732         nbsp
(5) ;
00733         bouton
("fin","class='bouton_fin vert_pastel'","","&nbsp;Fin de liste&nbsp;") ;
00734      finp
() ;
00735      p
() ;
00736         nbsp
(5) ;
00737         echo b
("Paramétrisation&nbsp;:&nbsp;") ;
00738         listeSelectFromTxt
("nbParPag","5 10 20 25 50"); echo "films par page " ;
00739      finp
() ;
00740     findiv
() ;
00741     finblockquote
() ;
00742     
00743     p
("texte") ;
00744     echo "Essayez ensuite de réaliser une page en PHP et Javascript pour afficher les films sans rechargement explicite de la page." 
;
00745     finp
() ;
00746     
00747     finblockquote
() ;
00748     
00749     solution
($numExo,$numTp) ;
00750     
00751     p
("texte") ;
00752     echo "Avoir un tableau XHTML triable n'est pas du ressort de PHP mais de Javascript. " 
;
00753     echo " Nous conseillons d'utiliser "
.href("../js/sorttable.js","sorttable.js","gbleuf nou")." qui demande seulement à &ecirc;tre inclus " ;
00754     echo " dans la page et à ajouter "
.b("class='sortable'")." dans l'élément table." ;
00755     echo " Une démonstration est fournie dans le "
.href("l2a_cc.php","texte du CC","grouge nou")." et ci-dessous&nbsp;: cliquez sur les noms de colonnes... " ;
00756     finp
() ;
00757     
00758     jsf
("../js/sorttable.js") ;
00759     blockquote
() ;
00760     table
(1,15,"collapse sortable jaune_pastel") ;
00761       tr
() ;
00762          th
() ; echo "Nom usuel"    finth() ;
00763          th
() ; echo "Prénom principal" finth() ;
00764       fintr
() ;
00765       tr
() ;
00766          td
() ; echo "BOND"    fintd() ;
00767          td
() ; echo "James"   fintd() ;
00768       fintr
() ;
00769       tr
() ;
00770          td
() ; echo "ARMA"    fintd() ;
00771          td
() ; echo "Line"    fintd() ;
00772       fintr
() ;
00773       tr
() ;
00774          td
() ; echo "ZOLA"    fintd() ;
00775          td
() ; echo "Emile"   fintd() ;
00776       fintr
() ;
00777     fintable
() ;
00778     finblockquote
() ;
00779     
00780     p
("texte") ;
00781     echo "Pour la pagination, ce n'est pas très compliqué non plus, tout dépend d'où viennent les pages. " 
;
00782     echo " Par exemple, pour un diaporama avec une liste de fichiers ou une liste d'URL, regardez "
.href("../frames/framesindex.php","diaporamas").". " ;
00783     echo " Si les données viennent d'une base de données, il faut certainement jouer avec le SELECT ... LIMIT " 
;
00784     echo " pour envoyer les \"bonnes\" informations. Voir "
.href("pagination.php")." comme exemple d'implémentation. " ;
00785     echo " Pour comprendre la page "
.href("pagination.php")." on pourra remplacer POST par GET et décommenter les lignes indiquées dans le code-source. " ;
00786     echo " L'heure est affichée à chaque fois afin de montrer que chaque action utilisateur recharge la page. " 
;
00787     finp
() ;
00788     
00789     p
("texte") ;
00790     echo "Pour une solution PHP et AJAX, sans recharger la page, le code est un peu plus compliqué puisqu'il faut effacer la zone du tableau et " 
;
00791     echo" en reconstruire un autre, solution sans doute plus rapide que de réécrire dans les cases du tableau. Pour cela, on pourrait utiliser un " 
;
00792     echo" programme PHP qui renvoie juste le tableau en XHTML et laisser à Javascript le soin de remplacer le tableau précédent avec ce tableau." 
;
00793     finp
() ;
00794     
00795     finsolution
() ;
00796     
00797     finblockquote
() ;
00798     
00799     ## -------------------------------------------------------------------------------------------
00800     
00801     $tdmCRLM
->afficheRubrique("oui") ; $numExo++ ; # Analyse d'une application (2)
00802     
00803     ## -------------------------------------------------------------------------------------------
00804     
00805     blockquote
() ;
00806     
00807     blockquote
() ;
00808     
00809     p
("texte") ;
00810     echo "Essayer de trouver tous les choix qui ont été faits ainsi que leur motivation dans l'implémentation d'un système de rendez-vous d'exposé de stage disponible sur " 
;
00811     echo " la page "
.href("../stages/propsout.php","stages","grouge nou").". " ;
00812     finp
() ;
00813     
00814     p
("texte") ;
00815     echo "Essayer aussi de définir la ou les bases de données impliquées. " 
;
00816     finp
() ;
00817     
00818     
00819     p
("texte") ;
00820     echo "Essayer d'imaginer tout ce que peut représenter l'analyse et l'implémentation d'un site comme " 
;
00821     echo href
("../Leadb/","LEAdb","gvertf nou")." qui est XHTML valide. On viendra parcourir les différents menus pour voir tout ce qu'il est possible de " ;
00822     echo " faire sur le site." 
;
00823     finp
() ;
00824     
00825     finblockquote
() ;
00826     
00827     solution
($numExo,$numTp) ;
00828     
00829     vnc
() ;
00830     
00831     finsolution
() ;
00832     
00833     finblockquote
() ;
00834     
00835     
00836     ## -------------------------------------------------------------------------------------------
00837     
00838     finPageTp
($numTp) ; # contient finSection() et finPage() ; la fonction est dans l2a_inc.php
00839     
00840     ?>

La coloration syntaxique est réalisée par un enrobage de la function php nommée highlight_file

mais si vous préférez, vous pouvez utiliser celle de SyntaxHighlighter ou même celle de geshi.

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)