Valid XHTML     Valid CSS2    

Listing du fichier l2a_tp2.php avec syntaxhighlighter


        <?php
        #    (gH)   -_-  l2a_tp2.php  ;  TimeStamp (unix) : 27 Février 2013 vers 12:35
        
        error_reporting(E_ALL | E_NOTICE | E_STRICT) ;
        include("std.php") ;
        include("l2a_inc.php") ;
        
        $numTp = 2 ;
        debutPageTp($numTp) ;
        
        ## -------------------------------------------------------------------------------------------
        
        sdl(3) ; echo cmt(' pour afficher toutes les solutions : l2a_tp'.$numTp.'.php?solutions=1') ; sdl(3) ;
        
        ## -------------------------------------------------------------------------------------------
        
        debutSection() ;
        
        p("texte") ;
        echo s_span("Remarque&nbsp;","grouge").": vous pouvez désormais utiliser Windows ou Linux pour écrire vos fichiers. " ;
        echo " De plus, il est possible d'utiliser le serveur ".b("devel.info-ua")." au lieu de ".b("forge.info.univ-angers.fr") ;
        echo " pour exécuter vos pages PHP. Cet autre serveur affiche les erreurs PHP alors que ".b("forge")." renvoie une page blanche." ;
        echo "  Si vous &ecirc;tes dans une des salles locales de TP, vous pouvez utiliser la forme courte du serveur, à savoir " ;
        echo " ".b("forge.info-ua")." au lieu de ".b("forge.info.univ-angers.fr").". " ;
        finp() ;
        pvide() ;
        
        $tableauDesRubriques = array() ;
        $idr = 0 ;
        $idr++; $tableauDesRubriques[$idr] = "Ecriture de fonctions et procédures" ;
        $idr++; $tableauDesRubriques[$idr] = "PHP conceptuel et utilisation de bibliothèques de fonctions" ;
        $idr++; $tableauDesRubriques[$idr] = "Expressions régulières et chaines de caractères" ;
        $idr++; $tableauDesRubriques[$idr] = "Fichiers, expressions régulières et fichiers-URL" ;
        $idr++; $tableauDesRubriques[$idr] = "La structure de données ".b("\"pile\"")." version 2" ;
        $idr++; $tableauDesRubriques[$idr] = "PHP et tables MySQL (1)" ;
        $idr++; $tableauDesRubriques[$idr] = "Analyse d'une application (1)" ;
        $idr++; $tableauDesRubriques[$idr] = "Parcours de fichier et documentation" ;
        $idr++; $tableauDesRubriques[$idr] = "Parcours de fichier et comptages d'attributs" ;
        $idr++; $tableauDesRubriques[$idr] = "PHP et tables MySQL (2)" ;
        $idr++; $tableauDesRubriques[$idr] = "PHP, tables, éléments et Javascript" ;
        $idr++; $tableauDesRubriques[$idr] = "Analyse d'une application (2)" ;
        $tdmCRLM = new tdm($tableauDesRubriques) ;
        $tdmCRLM->titre() ;
        $tdmCRLM->menu("oui","oui","nou") ;
        
        pvide() ;
        
        p() ;
         echo "Il est possible d'afficher toutes les solutions via ".href("l2a_tp$numTp.php?solutions=1","?solutions=1","bouton_fin jaune_pastel nou").". " ;
        finp() ;
        
        finSection() ;
        
        debutSection() ;
        $numExo = 0 ;
        
        ## -------------------------------------------------------------------------------------------
        
        $tdmCRLM->afficheRubrique("oui") ; $numExo++ ; # Ecriture de fonctions et procédures
        
        ## -------------------------------------------------------------------------------------------
        
        blockquote() ;
        
        blockquote() ;
        
        p("texte") ;
        echo "En programmation, on distingue classiquement fonction et procédure. Comment fait-on la différence en PHP&nbsp;?" ;
        finp() ;
        
        p("texte") ;
        echo "Est-ce qu'une fonction PHP peut renvoyer plusieurs valeurs ou plusieurs variables&nbsp;?" ;
        finp() ;
        
        p("texte") ;
        echo b("Application :")." écrire une fonction ".b("min_max")." qui renvoie la plus petite valeur et la plus grande valeur d'un ";
        echo href("http://php.net/manual/fr/language.types.array.php","\"array\"","gvertf nou").", " ;
        echo " qu'on testera en ligne de commandes." ;
        echo " Peut-on utiliser ".href("http://php.net/manual/fr/language.exceptions.php","try","grouge nou") ;
        echo " pour s'assurer que la variable passée est bien un tableau&nbsp;?" ;
        finp() ;
        
        p("texte") ;
        echo "Au passage, quelles sont toutes les fonctions liées aux tableaux en PHP&nbsp;?" ;
        echo " Et comment vérifier la syntaxe d'un programme PHP, puisqu'une erreur de syntaxe comme oublier un point-virgule ou " ;
        echo " un guillemet fait que tout la page HTML est blanche (vide) comme sur tout serveur de production&nbsp;?" ;
        finp() ;
        
        finblockquote() ;
        
        solution($numExo,$numTp) ;
        
        p("texte") ;
        echo "En PHP, tout est fonction. Mais l'instruction ".b("return()")." est facultative. Donc une fonction PHP sans " ;
        echo href("http://php.net/manual/fr/function.return.php","return()","gbleu nou")." peut " ;
        echo " &ecirc;tre considérée comme une procédure." ;
        finp() ;
        
        p("texte") ;
        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 " ;
        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;:" ;
        finp() ;
        
        pre_fichier("minmax.php","cadre") ;
        
        p("texte") ;
        echo "Il y a un peu moins d'une centaine de fonctions directement liées aux tableaux en PHP, comme le montre la page " ;
        echo href("http://www.php.net/manual/fr/ref.array.php","ref.array","gbleuf nou")." du manuel de référence. " ;
        echo " C'est sans doute trop, certaines fonctions auraient pu &ecirc;tre regroupées à l'aide d'options, comme en " ;
        echo href("../tuteurs/tutperl.htm","PERL","grouge nou").". " ;
        finp() ;
        
        p("texte") ;
        echo " On ne peut pas utiliser ".href("http://php.net/manual/fr/language.exceptions.php","try","grouge nou") ;
        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 " ;
        echo " des erreurs, mais seulement des ".em("warnings").". Donc le programme suivant ne \"capte\" rien&nbsp;:" ;
        finp() ;
        
        pre_fichier("minmaxv2.php","cadre") ;
        
        p("texte") ;
        echo "Il faut lire le ".href("http://www.php.net/manual/fr/index.php","manuel php","gvertf nou") ;
        echo " pour trouver qu'il existe une fonction ".href("http://php.net/manual/fr/function.is-array.php","is_array","gbleuf nou") ;
        echo " qui permet de résoudre notre problème&nbsp;:" ;
        finp() ;
        
        pre_fichier("minmaxv3.php","cadre") ;
        
        p("texte") ;
        echo "On remarquera au passage l'incohérence de nommage des fonctions en PHP avec ".b("isset")." et ".b("is-array")." et " ;
        echo " l'incohérence de nommage de la page Web&nbsp;: ".b("is-array.php")." pour ".b("is_array").". ";
        finp() ;
        
        p("texte") ;
        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, " ;
        echo" lorsqu'on a accès à une session en mode terminal sur le serveur. Sinon, on peut utiliser " ;
        echo href("http://www.icosaedro.it/phplint/phplint-on-line.html","php lint","gbleuf nou").", " ;
        echo href("http://phpcodechecker.com","phpcodechecker","gbleuf nou")." ou " ;
        echo href("http://www.meandeviation.com/tutorials/learnphp/php-syntax-check/v5-2/syntax-check.php","php syntax check","gbleuf nou").". " ;
        echo " Mais ceci ne vous dispense pas de XHTML validator parce que le code PHP suivant est valide, mais pas le code XHTML produit " ;
        echo " à cause du deuxième &gt; en fin d'instruction et de l'absence d'apostrophe fermante pour l'attribut ".b("class")."." ;
        finp() ;
        
        pre_fichier("errnoerr.php","cadrebleu") ;
        
        finsolution() ;
        
        finblockquote() ;
        
        ## -------------------------------------------------------------------------------------------
        
        $tdmCRLM->afficheRubrique("oui") ; $numExo++ ; # PHP conceptuel et utilisation de bibliothèques de fonctions
        
        ## -------------------------------------------------------------------------------------------
        
        blockquote() ;
        
        blockquote() ;
        
        p("texte") ;
        echo "Réécrire le code PHP suivant en mode \"conceptuel\", c'est-à-dire sans aucune balise apparente, à l'aide de " ;
        echo href("stdphp.php","std.php","grouge nou")." (archive " ;
        echo href("std.zip","","gvertf nou").") dans une page Web valide au sens ".b("XHTML strict").". " ;
        finp() ;
        
        pre_fichier("nonconcept.php","cadre") ;
        
        p("texte") ;
        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;:" ;
        finp() ;
        
        pre_fichier("wgetarch2.txt","cadrejaune") ;
        
        
        p("texte") ;
        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") ;
        echo " du fichier ".b("std.php")." pour afficher une page qui implémente une table des matières cliquable avec deux ou trois \"chapitres\" " ;
        echo " qui contiennent chacun deux ou trois paragraphes générés par la fonction ".b("para()")."." ;
        finp() ;
        
        p("texte") ;
        echo "Comment est définie la fonction ".b("h1()")." dans ".b("std.php")."&nbsp;? " ;
        echo " Comment sait-on si une fonction de ".b("std.php")." fait un ".b("echo")." ou un ".b("return")."&nbsp;? " ;
        echo " Comment sont nommées les fonctions de ".b("std.php")."&nbsp;? " ;
        finp() ;
        
        p("texte") ;
        echo "Expliquer ensuite comment est généré et où (client&nbsp;? serveur&nbsp;?) le code XHTML produit en PHP et Javascript  " ;
        echo " dans la section identifiée par ".b("sectdyn")." si on utilise le texte suivant " ;
        echo " qui correspond à la page ".href("jsdyn.php").". " ;
        finp() ;
        
        pre_fichier("jsdyn.php","cadre") ;
        
        p("texte") ;
        echo "Voici le fichier Javascript utilisé&nbsp;:" ;
        finp() ;
        
        pre_fichier("jsdyn.js","cadrejaune") ;
        
        p("texte") ;
        echo "Que se passe-t-il si Javascript n'est pas actif&nbsp;? Y a-t-il un message d'erreur&nbsp;?" ;
        finp() ;
        
        p("texte") ;
        echo "Après avoir lu le fichier ".href("montre.js")." écrire en PHP conceptuel une page qui utilise un bouton ".b("Afficher/Masquer") ;
        echo " qui sert à montrer ou cacher le texte préformaté mis dans un élement dont l'".b("id")." est ".b("surprise")." " ;
        echo " comme dans ".href("surprise.php").". " ;
        finp() ;
        
        pre_fichier("montre.js","cadre") ;
        
        finblockquote() ;
        
        solution($numExo,$numTp) ;
        
        p("texte") ;
        echo "Il s'agit en fait de l'".href("tds.php#rewrite","exercice 11","gvertf nou")." de notre cours sur la " ;
        echo href("pdc.php","technologie internet","gbleuf nou")." dont la solution est ".href("solutions.php#rewrite","ici","grouge nou").". " ;
        echo " On en profitera bien s&ucirc;r pour regarder les autres exercices..." ;
        finp() ;
        
        p("texte") ;
        echo "Le code conceptuel est donc&nbsp;:" ;
        finp() ;
        
        pre_fichier("ouiconcept.php","cadre") ;
        
        p("texte") ;
        echo "Pour une démonstration de table des matières avec la fonction ".b("para()").", " ;
        echo " voir ".href("tdm_demo.php")." dont le code-source est ".href("montresource.php?nomfic=tdm_demo.php","ici")." et ci-dessous." ;
        finp() ;
        
        pre_fichier("tdm_demo.php","cadre") ;
        
        p("texte") ;
        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()")." " ;
        echo " avec le niveau (".b("1, 2, 3")."...) passé en paramètre." ;
        echo " On peut consulter son code source ".href("stdphp.php?lafns=h1","ici").". " ;
        echo " La plupart des éléments XHTML &laquo;courts&raquo; sont implémentés comme des fonctions avec des ".b("echo").". " ;
        echo " Par contre les fonctions comme ".b("s_span()").", ".b("b()")." et ".b("href()")." utilisent ".b("return").". " ;
        echo " Les fonctions sont nommées comme les éléments. Ainsi il y a ".b("p()")." pour &lt;p&gt;," ;
        echo " ".b("br()")." pour &lt;br&nbsp;/&gt;. Pour raccourcir la frappe, les divers &lt;input&gt; d'un formulaire " ;
        echo " ont leur propre fonction." ;
        finp() ;
        
        p("texte") ;
        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\". " ;
        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 " ;
        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." ;
        finp() ;
        
        p("texte") ;
        echo "Si Javascript n'est pas actif, il n'y a aucun message d'erreur, mais ".b("Bonsoir&nbsp;!")." ne sera pas affiché." ;
        finp() ;
        
        finsolution() ;
        
        finblockquote() ;
        
        ## -------------------------------------------------------------------------------------------
        
        $tdmCRLM->afficheRubrique("oui") ; $numExo++ ; # Expressions régulières et chaines de caractères
        
        ## -------------------------------------------------------------------------------------------
        
        blockquote() ;
        
        blockquote() ;
        
        p("texte") ;
        echo "Il faudrait aider la ".em("jej")." (jeune et jolie) Abby --&nbsp;".href("http://fr.wikipedia.org/wiki/Abigail_Sciuto","Abigail Scituo")."&nbsp;--" ;
        echo " à identifier des suspects à l'aide de numéros de plaques minéralogiques. " ;
        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;:" ;
        finp() ;
        
        ul() ;
        
        debutli() ; p("texte") ;
         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." ;
        finp() ; finli() ;
        
        debutli() ; p("texte") ;
         echo " si toutes les lettres sont des consonnes, il s'agit du suspect nommé " ;
         echo href("http://fr.wikipedia.org/wiki/Liste_des_personnages_de_NCIS_:_Enqu%C3%AAtes_sp%C3%A9ciales","Ari Haswari","gbleuf nou")."." ;
        finp() ; finli() ;
        
        
        debutli() ; p("texte") ;
         echo " si le numéro de plaque comporte un chiffre répété, il s'agit du " ;
         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")."." ;
        finp() ; finli() ;
        
        debutli() ; p("texte") ;
         echo " si le numéro de plaque comporte avant les lettres exactement 4 chiffres avec une alternance pair/impair, il s'agit de " ;
         echo href("http://fr.wikipedia.org/wiki/Liste_des_%C3%A9pisodes_de_NCIS_:_Enqu%C3%AAtes_sp%C3%A9ciales","\"la grenouille\"","gbleuf nou")."." ;   ;
        finp() ; finli() ;
        
        finul() ;
        
        p("texte") ;
        echo "Ecrire un document PHP qui reproduit le premier formulaire de la page ".href("ncis.php")." via du code valide pour XHTML strict. " ;
        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") ;
        echo " et on mettra un lien vers ".href("http://fr.wikipedia.org/wiki/Abigail_Sciuto","la page Wiki associée").". " ;
        finp() ;
        
        p("texte") ;
        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 " ;
        echo " quand on saisit un numéro de plaque. On utilisera, quand c'est possible les " ;
        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 " ;
        echo href("http://www.php.net/manual/fr/function.preg-match.php","preg_match","gvert nou")." et " ;
        echo href("http://www.php.net/manual/fr/function.preg-match-all.php","preg_match_all","gvert nou")."." ;
        finp() ;
        
        p("texte") ;
        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 " ;
        echo " à condition qu'il n'y ait pas plus de 3 tirets en tout " ;
        echo " (indication fournie par ".href("http://fr.wikipedia.org/wiki/Timothy_McGee","Mac Gee","gbleuf nou").")." ;
        finp() ;
        
        
        finblockquote() ;
        
        solution($numExo,$numTp) ;
        
        p("texte") ;
        echo "Pour le formulaire, consulter le " ;
        echo href("montresource.php?nomfic=ncis.php","code-source")." de la page." ;
        finp() ;
        
        p("texte") ;
        echo "Le mieux est sans doute d'écrire des fonctions spécialisées pour chaque suspect, d'où la solution " ;
        echo " nommée ".href("montresource.php?nomfic=ncis_res_sol.php","ncis_res_sol","gvert nou")." testable via " ;
        echo href("ncis_sol.php").". " ;
        echo " On remarquera les exemples de plaques ajoutés dans la page, utiles pour des tests unitaires et d'intégration." ;
        finp() ;
        
        finsolution() ;
        
        finblockquote() ;
        
        ## -------------------------------------------------------------------------------------------
        
        $tdmCRLM->afficheRubrique("oui") ; $numExo++ ; # Fichiers, expressions régulières et fichiers-URL"
        
        ## -------------------------------------------------------------------------------------------
        
        blockquote() ;
        
        blockquote() ;
        
        p("texte") ;
        echo "Rapatriez le fichier ".href("l2grps_2013.txt","","gbleuf nou")." et reproduisez le tableau fourni dans la " ;
        echo href("l2a_cc.php","page du controle continu","gvertf nou").". " ;
        finp() ;
        
        p("texte") ;
        echo "On voudrait connaitre la popularité de certains chanteurs ou artistes en consultant le nombre de \"hits\" renvoyés " ;
        echo " par Google quand on entre le nom du chanteur ou de l'artiste dans le moteur de recherches. " ;
        echo " Ecrire une page Web qui affiche la popularité de " ;
        echo " plusieurs chanteurs artistes et qui renvoie les résultats comme dans la page ".href("motsinternet.php")."." ;
        echo " On utilisera ".href("http://forge.info.univ-angers.fr/~gh/jphistopct.php","jphistopct")." pour générer les graphiques." ;
        echo " Si vous avez le temps, écrire un formulaire qui permet de saisir le nom des chanteurs ou des artistes." ;
        finp() ;
        
        p("texte") ;
        echo b("Remarque&nbsp;:") ;
        echo " il est possible de rapatrier le fichier ".href("l2grps_2013.txt","","gbleuf nou") ;
        echo " en ligne de commandes via&nbsp;" ;
        finp() ;
        
        pre("cadre") ;
         echo "\n" ;
         echo "  \$forge_html> wget http://forge.info.univ-angers.fr/~gh/internet/l2grps_2013.txt\n" ;
         echo "\n" ;
        finpre() ;
        
        finblockquote() ;
        
        solution($numExo,$numTp) ;
        
        p("texte") ;
        echo "Pour ".href("l2grps_2013.txt","","gbleuf nou")." il suffit de consulter " ;
        echo href("montresource.php?nomfic=l2a_cc.php","montresource.php?nomfic=l2a_cc.php","gvertf nou").". " ;
        finp() ;
        
        p("texte") ;
        echo "Dans la mesure où PHP peut ouvrir le fichier correspondant à une URL comme si c'était un fichier local, il suffit de " ;
        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")."." ;
        finp() ;
        /*
        p() ;
        echo "Pour l'autre partie de l'exercice, ceux et celles qui sont venu(e)s en cours savent où est la solution." ;
        echo " Pour les personnes qui ne sont pas inscrites dans mes cours, vous pouvez me contacter par mail." ;
        finp() ;*/
        
        finsolution() ;
        
        finblockquote() ;
        
        ## -------------------------------------------------------------------------------------------
        
        $tdmCRLM->afficheRubrique("oui") ; $numExo++ ; # La structure de données ".b("\"pile\"")." version 2
        
        ## -------------------------------------------------------------------------------------------
        
        blockquote() ;
        
        blockquote() ;
        
        p("texte") ;
        echo "Reprendre l'exercice 10 de la série 1 (la structure de données \"pile\") en mode démonstration dans une " ;
        echo " page Web. Indication : on utilisera une ".href("http://www.php.net/manual/fr/book.session.php","session").". " ;
        echo " Pour un exemple de ce qu'on veut réaliser, cliquer ".href("pilev2.php","ici").". " ;
        finp() ;
        
        finblockquote() ;
        
        solution($numExo,$numTp) ;
        
        p("texte") ;
        echo "Voir ".href("pilev2.php")." dont le code-source est ci-dessous et " ;
        echo " ".href("montresource.php?nomfic=pilev2.php","ici","gvertf nou").". " ;
        finp() ;
        
        pre_fichier("pilev2.php","cadre") ;
        
        finsolution() ;
        
        finblockquote() ;
        
        ## -------------------------------------------------------------------------------------------
        
        $tdmCRLM->afficheRubrique("oui") ; $numExo++ ; # PHP et tables MySQL (1)
        
        ## -------------------------------------------------------------------------------------------
        
        blockquote() ;
        
        p("texte") ;
        echo "On dispose dans ".href("fa.txt")." des instructions MySql qui ont permis de construire les tables " ;
        echo b("films")." et ".b("artistes")." dans la base ".s_span("statdata","grouge").". On pourra consulter " ;
        echo " la page ".href("filmsartistes.html","filmsartistes","gvert nou")." pour voir de façon plus agréable le contenu des tables." ;
        finp() ;
        
        p("texte") ;
        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. " ;
        echo " On pourra essayer de trouver le code SQL en ligne de commande sur forge en mode terminal via " ;
        finp() ;
        
        pre_fichier("anonymous.txt","cadrejaune") ;
        
        p("texte") ;
        echo "Afficher ensuite le nom du film, l'année et le metteur en scène pour ces quinze films. " ;
        finp() ;
        
        p("texte") ;
        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 " ;
        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.  " ;
        echo " On indiquera que le jeu est impossible si Javascript n'est pas actif. " ;
        echo " On écrira " ;
        echo " une version 1 qui utilise un champ texte " ;
        echo " pour saisir l'année (c'est donc difficile pour l'utilisateur et simple pour le programmeur) " ;
        echo " puis " ;
        echo " une version 2 qui fournit les années de sortie possibles dans une liste de sélection " ;
        echo " (c'est donc plus facile pour l'utilisateur et moins simple pour le programmeur). " ;
        echo " Voici en deux liens ce qu'on veut obtenir : ".href("quizz1.php")." et " .href("quizz2.php")."."  ;
        finp() ;
        
        p("texte") ;
        echo " Ecrire ensuite un formulaire qui demande de choisir entre  ".b("films")." et ".b("artistes").", " ;
        echo " puis qui demande combien on veut de lignes résultats et à partir de quelle ligne. " ;
        echo " Pour la table films, on utilisera les champs ".b("idFilm annee genre pays mes titre")." et on triera par ".b("annee")." alors que ";
        echo " pour la table artistes, on utilisera les champs ".b("idArtiste artnom artprenom anneenaiss")." et on triera par ".b("artnom").". " ;
        echo " Voir ".href("fa.php")." version 2 comme implémentation de ce qu'on veut." ;
        finp() ;
        
        p("texte") ;
        echo " Pour tous ces programmes, on utilisera ".b("std.php")." pour produire du ".href("php_conceptuel.php","PHP conceptuel","gbleu nou").". " ;
        echo " On en profitera pour trouver quelles fonctions de ".b("std.php")." utilisent MySql et celles qui affichent des tableaux." ;
        finp() ;
        
        p("texte") ;
        echo "Le lien " ;
        echo href("phpmysql.htm","phpmysql") ;
        echo " fournit un rappel de la syntaxe des fonctions et objets PHP pour effectuer des requ&ecirc;tes MySQL." ;
        finp() ;
        
        solution($numExo,$numTp) ;
        
        p("texte") ;
        echo "Le code MySQL pour trouver les quinze premiers films par ordre de date est simple&nbsp;: ";
        finp() ;
        
        pre_fichier("quinzefilms.mysql","cadre") ;
        
        p("texte") ;
        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. " ;
        echo " On prend ici la date comme critère de tri." ;
        finp() ;
        
        p("texte") ;
        echo "Il ne reste plus qu'à inclure les résultats de la requ&ecirc;te MySQL dans un tableau XHTML. " ;
        echo "Consulter ".href("quinzefilms.php","quinzefilms","gvertf nou")." comme page-solution, dont le code est ci-dessous." ;
        echo " Au passage, on a trouvé le metteur en scène gr&acirc;ce au numéro d'artiste." ;
        finp() ;
        
        pre_fichier("quinzefilms.php","cadrebleu") ;
        
        p("texte") ;
        echo "Le premier quizz utilise simplement un champ texte et un champ caché issu de MySql pour que Javascript " ;
        echo" puisse comparer la réponse utilisateur et la solution&nbsp;:" ;
        finp() ;
        
        pre_fichier("quizz1.php","cadrejaune") ;
        
        p("texte") ;
        echo "Le code Javascript se réduit donc à un test et à un affichage&nbsp;" ;
        finp() ;
        
        pre_fichier("quizz1.js","cadre rose_pastel") ;
        
        p("texte") ;
        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") ;
        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. " ;
        echo " L'élément &lt;select&gt; qui affiche les années possibles est construit à l'aide de notre fonction " ;
        echo href("stdphp.php?lafns=listeSelectFromChampMySql","listeSelectFromChampMySql()")." de ".b("std.php").". " ;
        finp() ;
        
        pre_fichier("quizz2.php","cadrejaune") ;
        
        p("texte") ;
        echo "Le code Javascript est donc un tout petit plus compliqué puisqu'il doit mettre la réponse dans un paragraphe&nbsp;:" ;
        finp() ;
        
        pre_fichier("quizz2.js","cadre rose_pastel") ;
        
        p("texte") ;
        echo "Enfin, pour le questionnaire films ou artistes, " ;
        echo " voir ".href("fa.php")." dont le code-source est ".href("montresource.php?nomfic=fa.php","ici"). " comme exemple de formulaire " ;
        echo " et ".href("fa_res.php")." dont le code-source est ".href("montresource.php?nomfic=fa_res.php","ici"). " comme fichier implémentant " ;
        echo " l'attribut action. " ;
        finp() ;
        
        pre_fichier("fa.php","cadrebleu") ;
        pre_fichier("fa_res.php","cadrejaune") ;
        pre_fichier("fa.js","cadre") ;
        
        finsolution() ;
        
        finblockquote() ;
        
        ## -------------------------------------------------------------------------------------------
        
        $tdmCRLM->afficheRubrique("oui") ; $numExo++ ; # Analyse d'une application (1)
        
        ## -------------------------------------------------------------------------------------------
        
        blockquote() ;
        
        blockquote() ;
        
        p("texte") ;
        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 " ;
        echo " la page ".href("sen_quests2.php","senQuest").". On rechargera plusieurs fois la page." ;
        finp() ;
        
        p("texte") ;
        echo "Essayer aussi de définir la ou les bases de données impliquées. " ;
        finp() ;
        
        finblockquote() ;
        
        solution($numExo,$numTp) ;
        
        
        p("texte") ;
        echo "Une lecture attentive du code source du fichier ".href("sen_quests2.php")." devrait &ecirc;tre suffisante. " ;
        echo " Vous devez maintenant savoir comment y accéder..." ;
        finp() ;
        
        finsolution() ;
        
        finblockquote() ;
        
        ## -------------------------------------------------------------------------------------------
        
        $tdmCRLM->afficheRubrique("oui") ; $numExo++ ; # Parcours de fichier et documentation
        
        ## -------------------------------------------------------------------------------------------
        
        blockquote() ;
        blockquote() ;
        
        p("texte") ;
        echo "Il est facile de repérer une fonction PHP dans le code source puisqu'elle commence par le mot ".b("function").". "  ;
        echo " En admettant que le début d'une fonction est toujours écrit en début de ligne (précédé éventuellement d'espaces), " ;
        echo " écrire un programme qui liste les fonctions d'un code-source php avec leur numéro de ligne, comme par exemple&nbsp;:" ;
        finp() ;
        
        pre_fichier("listing_design.txt","cadrebleu") ;
        
        p("texte") ;
        echo "Est-ce beaucoup plus compliqué si on essaie de lister toutes les fonctions d'un projet à partir d'un fichier \"maitre\" " ;
        echo " qui contient des ".href("http://php.net/manual/fr/function.include.php","include")." et des  " ;
        echo href("http://php.net/manual/fr/function.require.php","require")." comme dans " ;
        echo href("ldphp_xmp.txt")."&nbsp;? " ;
        finp() ;
        
        p("texte") ;
        echo "Expliquer comment les pages " ;
        echo href("stdphp.php","std","grouge nou")." et " ;
        echo href("../wstat/statghfns.php","statgh.r","grouge nou")." fonctionnent. " ;
        echo " Quelles précautions faut-il prendre lorsqu'on écrit des fonctions pour profiter d'une telle interface&nbsp;?" ;
        finp() ;
        
        finblockquote() ;
        
        solution($numExo,$numTp) ;
        
        pvide() ;
        
        vnc() ;
        p() ;
        echo "Ceux et celles qui sont venu(e)s en cours savent où est la solution." ;
        echo " Pour les personnes qui ne sont pas inscrites dans mes cours, vous pouvez me contacter par mail." ;
        finp() ;
        
        finsolution() ;
        
        finblockquote() ;
        
        ## -------------------------------------------------------------------------------------------
        
        $tdmCRLM->afficheRubrique("oui") ; $numExo++ ; # Parcours de fichier et comptages d'attributs
        
        ## -------------------------------------------------------------------------------------------
        
        blockquote() ;
        blockquote() ;
        
        p("texte") ;
        echo "On voudrait analyser une page Web en termes d'attributs et d'éléments. " ;
        echo " Ecrire un formulaire qui permet de tester une URL quelconque, y compris un fichier XML. " ;
        echo " On pourra tester la validité W3C du texte analysé&nbsp;; on fournira des URL pr&ecirc;tes à " ;
        echo " l'emploi pour faciliter le test du programme PHP utilisé comme attribut ".b("action")." du formulaire." ;
        finp() ;
        
        finblockquote() ;
        
        solution($numExo,$numTp) ;
        
        p("texte") ;
        echo "Voir la page ".href("eltatt.php","","gvertf nou")." qui fournit des liens pour les codes-sources PHP utilisés. " ;
        finp() ;
        
        finsolution() ;
        
        finblockquote() ;
        
        ## -------------------------------------------------------------------------------------------
        
        $tdmCRLM->afficheRubrique("oui") ; $numExo++ ; # PHP et tables MySQL (2)
        
        ## -------------------------------------------------------------------------------------------
        
        blockquote() ;
        blockquote() ;
        
        p("texte") ;
        echo "Compléter le formulaire de la question 6 en ajoutant un critère de tri pour choisir l'affichage. On viendra construire automatiquement " ;
        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 " ;
        echo " tests, on utilisera des tableaux associatifs. Il est conseillé d'écrire une fonction ".b("listeDesChamps(table)")." dans un fichier " ;
        echo " nommé ".b("resfa_inc.php")." qu'on viendra inclure, aussi bien pour le formulaire que pour les résultats." ;
        finp() ;
        
        p("texte") ;
        echo "Il faudra certainement utiliser du ".b("Javascript")." dans le formulaire pour choisir quelle liste de champs afficher." ;
        finp() ;
        
        finblockquote() ;
        
        solution($numExo,$numTp) ;
        
        p("texte") ;
        echo "Voir ".href("fa.php")." comme formulaire d'entrée (version 2), dont le code-source est ".href("montresource.php?nomfic=fa.php","ici") ;
        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. " ;
        echo " Le code-source Javascript utilisé est ".href("montresource.php?nomfic=fa.js","fa.js","gbleuf nou").". " ;
        finp() ;
        
        pre_fichier("fa.js","cadrebleu") ;
        
        finsolution() ;
        
        finblockquote() ;
        
        ## -------------------------------------------------------------------------------------------
        
        $tdmCRLM->afficheRubrique("oui") ; $numExo++ ; # "PHP, tables, éléments et Javascript
        
        ## -------------------------------------------------------------------------------------------
        
        blockquote() ;
        blockquote() ;
        
        p("texte") ;
        echo "Après réflexion, on aimerait que les tableaux affichés lors d'une requ&ecirc;te MySQL soient " ;
        echo " triables quand on clique sur l'en-tete de la colonne. Est-ce facile à implémenter&nbsp;?" ;
        finp() ;
        
        p("texte") ;
        echo "De m&ecirc;me, si on pagine l'affichage avec un choix personnalisé (10 par page, 20 par page...)," ;
        echo " est-ce facile de disposer d'un bouton ou d'un lien ".b("voir les xx suivants")."&nbsp;?" ;
        finp() ;
        
        p("texte") ;
        echo "Essayez de réaliser une page en PHP et Javascript qui utilise les éléments de formulaire suivants pour " ;
        echo " afficher les films&nbsp;:" ;
        finp() ;
        
        blockquote() ;
        div("cadre") ;
         p() ;
            nbsp(5) ;
            bouton("debl","class='bouton_fin vert_pastel'","","&nbsp;Début de liste&nbsp;") ;
            nbsp(5) ;
            bouton("suiv","class='bouton_fin jaune_pastel'","","&nbsp;Suivants&nbsp;") ;
            nbsp(5) ;
            bouton("mili","class='bouton_fin bleu_pastel'","","&nbsp;Milieu&nbsp;") ;
            nbsp(5) ;
            bouton("prec","class='bouton_fin jaune_pastel'","","&nbsp;Précédents&nbsp;") ;
            nbsp(5) ;
            bouton("fin","class='bouton_fin vert_pastel'","","&nbsp;Fin de liste&nbsp;") ;
         finp() ;
         p() ;
            nbsp(5) ;
            echo b("Paramétrisation&nbsp;:&nbsp;") ;
            listeSelectFromTxt("nbParPag","5 10 20 25 50"); echo "films par page " ;
         finp() ;
        findiv() ;
        finblockquote() ;
        
        p("texte") ;
        echo "Essayez ensuite de réaliser une page en PHP et Javascript pour afficher les films sans rechargement explicite de la page." ;
        finp() ;
        
        finblockquote() ;
        
        solution($numExo,$numTp) ;
        
        p("texte") ;
        echo "Avoir un tableau XHTML triable n'est pas du ressort de PHP mais de Javascript. " ;
        echo " Nous conseillons d'utiliser ".href("../js/sorttable.js","sorttable.js","gbleuf nou")." qui demande seulement à &ecirc;tre inclus " ;
        echo " dans la page et à ajouter ".b("class='sortable'")." dans l'élément table." ;
        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... " ;
        finp() ;
        
        jsf("../js/sorttable.js") ;
        blockquote() ;
        table(1,15,"collapse sortable jaune_pastel") ;
          tr() ;
             th() ; echo "Nom usuel"    ; finth() ;
             th() ; echo "Prénom principal" ; finth() ;
          fintr() ;
          tr() ;
             td() ; echo "BOND"    ; fintd() ;
             td() ; echo "James"   ; fintd() ;
          fintr() ;
          tr() ;
             td() ; echo "ARMA"    ; fintd() ;
             td() ; echo "Line"    ; fintd() ;
          fintr() ;
          tr() ;
             td() ; echo "ZOLA"    ; fintd() ;
             td() ; echo "Emile"   ; fintd() ;
          fintr() ;
        fintable() ;
        finblockquote() ;
        
        p("texte") ;
        echo "Pour la pagination, ce n'est pas très compliqué non plus, tout dépend d'où viennent les pages. " ;
        echo " Par exemple, pour un diaporama avec une liste de fichiers ou une liste d'URL, regardez ".href("../frames/framesindex.php","diaporamas").". " ;
        echo " Si les données viennent d'une base de données, il faut certainement jouer avec le SELECT ... LIMIT " ;
        echo " pour envoyer les \"bonnes\" informations. Voir ".href("pagination.php")." comme exemple d'implémentation. " ;
        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. " ;
        echo " L'heure est affichée à chaque fois afin de montrer que chaque action utilisateur recharge la page. " ;
        finp() ;
        
        p("texte") ;
        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 " ;
        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 " ;
        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." ;
        finp() ;
        
        finsolution() ;
        
        finblockquote() ;
        
        ## -------------------------------------------------------------------------------------------
        
        $tdmCRLM->afficheRubrique("oui") ; $numExo++ ; # Analyse d'une application (2)
        
        ## -------------------------------------------------------------------------------------------
        
        blockquote() ;
        
        blockquote() ;
        
        p("texte") ;
        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 " ;
        echo " la page ".href("../stages/propsout.php","stages","grouge nou").". " ;
        finp() ;
        
        p("texte") ;
        echo "Essayer aussi de définir la ou les bases de données impliquées. " ;
        finp() ;
        
        
        p("texte") ;
        echo "Essayer d'imaginer tout ce que peut représenter l'analyse et l'implémentation d'un site comme " ;
        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 " ;
        echo " faire sur le site." ;
        finp() ;
        
        finblockquote() ;
        
        solution($numExo,$numTp) ;
        
        vnc() ;
        
        finsolution() ;
        
        finblockquote() ;
        
        
        ## -------------------------------------------------------------------------------------------
        
        finPageTp($numTp) ; # contient finSection() et finPage() ; la fonction est dans l2a_inc.php
        
        ?>
        

La coloration syntaxique est réalisée par : SyntaxHighlighter.

Si vous préférez, vous pouvez utiliser celle de geshi ou même celle construite autour de la fonction highlight_file.

 

 

retour gH    Retour à la page principale de   (gH)