Développement Web avancé L2 (PHP et MySQL)
TP numéro 3
gilles.hunault "at" univ-angers.fr
Table des matières cliquable
2. La structure de données "pile" version 3
3. PHP et histogrammes avec JPGRAPH
6. Lire des fichiers Excel avec PHP
8. Afficher/masquer des solutions avec Javascript
10. PHP, XML et Ajax
Il est possible d'afficher toutes les solutions via ?solutions=1.
1. Objets en PHP
Implémenter une classe d'objets Personnes avec nom et prénom puis deux sous-classes Producteurs et Artistes de Personnes, avec Acteurs et MetteursEnScène comme sous-classes d'Artistes qui incluent respectivement une année de naissance et une liste de films. On se servira des tables vues à l'exercice 6 du TP2 pour saisir quelques personnes. Est-ce une bonne idée de séparer les classes Acteurs et MetteursEnScène ?
Remarque : on viendra ajouter des propriétés getAnNaissanceFromTable, getListeFilmsFromTable etc.
Solution : masquer la solution
Consulter artistes.php et son code-source via le lien en bas de la page affichée pour la définition et l'utilisation de la classe d'objets Personnes.
2. La structure de données "pile" version 3
Reprendre l'implémentation ligne de commande d'une pile en programmation objets. Voici comment on voudrait l'utiliser :
<?php $p = new Pile() ; # objet instance de la classe Pile $p->montrerPile() ; # doit afficher "la pile est vide" $p->empiler(5) ; # la pile contient désormais 5 $p->empiler(2) ; # la pile contient 5 et, au-dessus, 2 $p->montrerPile() ; # voir plus bas $x = $p->depiler() ; # renvoie 2 echo "on a enlevé $x (du haut) de la pile\n" ; $x = $p->depiler() ; # met 5 dans x $x = $p->depiler() ; # afficher "impossible, la pile est vide" ou renvoyer "erreur" ? echo "fin de programme.\n" /*************************************** Affichage : la pile est vide. Contenu de la pile : valeur numéro 1 : 2 (haut de la pile) valeur numéro 0 : 5 (bas de la pile) on a enlevé 2 (du haut) de la pile fin de programme. plus de pile ! ## <- affichage de la fonction destructeur ***************************************/ ?>Solution : masquer la solution
<?php Class Pile { private $laPile ; # un simple tableau # ---------------------------------- public function __construct() { # remplace function creerPile() $this->laPile = array() ; } # fin de fonction __construct # ---------------------------------- public function __destruct() { # juste pour voir ce qui se passe echo "plus de pile !\n" ; } # fin de fonction __construct # ---------------------------------- public function pileVide() { return( count($this->laPile)==0 ) ; } # fin de fonction pileVide # ---------------------------------- public function empiler($valeur) { $this->laPile[ count($this->laPile) ] = $valeur ; } # fin de fonction empiler # ---------------------------------- public function depiler() { $idd = count($this->laPile) - 1 ; # idd : indice du dernier if ($idd>=0) { $dep = $this->laPile[ $idd ] ; unset( $this->laPile[ $idd ] ) ; } else { $dep = "" ; } # finsi return( $dep) ; } # fin de fonction depiler # ---------------------------------- public function montrerPile() { $nbe = count($this->laPile) ; if ($this->pileVide()) { echo "la pile est vide.\n" ; } else { echo "Contenu de la pile :\n" ; for ($ide=$nbe-1;$ide>=0;$ide--) { echo " valeur numéro ".sprintf("%2d",$ide)." : ".sprintf("%4d",$this->laPile[$ide]) ; if ($ide==$nbe-1) { echo " (haut de la pile)" ; } ; if ($ide==0) { echo " (bas de la pile)" ; } ; echo "\n" ; } ; # fin pour ide } ; # finsi } # fin de fonction montrerPile } # fin de classe Pile # ---------------------------------- $p = new Pile() ; # objet instance de la classe Pile $p->montrerPile() ; # doit afficher "la pile est vide" $p->empiler(5) ; # la pile contient désormais 5 $p->empiler(2) ; # la pile contient 5 et, au-dessus, 2 $p->montrerPile() ; # voir plus bas $x = $p->depiler() ; # renvoie 2 echo "on a enlevé $x (du haut) de la pile\n" ; $x = $p->depiler() ; # met 5 dans x $x = $p->depiler() ; # afficher "impossible, la pile est vide" ou renvoyer "erreur" ? echo "fin de programme.\n" /*************************************** Affichage : la pile est vide. Contenu de la pile : valeur numéro 1 : 2 (haut de la pile) valeur numéro 0 : 5 (bas de la pile) on a enlevé 2 (du haut) de la pile fin de programme. plus de pile ! ## <- affichage de la fonction destructeur ***************************************/ ?>
3. PHP et histogrammes avec JPGRAPH
Produire avec PHP un histogramme des fréquences relatives associées aux valeurs 3 6 11 5 pour les jours lundi, mardi, jeudi et vendredi. Il s'agit de km parcourus par un google car. On essaiera de trouver plusieurs solutions pour construire la bonne URL. Voici ce qu'on doit obtenir :
Au passage, quel est code PHP conceptuel pour afficher cette image cliquable ?
Solution : masquer la solution
Une première solution consiste à construire l'URL «à la main» à partir de l'adresse jphistopct.php. Une seconde solution est d'utiliser deux tableaux contenant respectivement les kilomètres et les jours avant de construire l'URL à partir d'une boucle sur les tableaux. Une troisième solution est d'utiliser des chaines de caractères des valeurs par copier/coller de l'énoncé et la fonction mot de strfun.php utilisé par std.php ; enfin une quatrième est d'utiliser un tableau associatif. C'est à vous de choisir. Dans tous les cas, on doit aboutir à la même URL. Voici le lien de la solution : gcar.php et son code-source. L'URL est donc
jphistopct.php?vdata=3_6_11_5&xmrks=Lundi_Mardi_Jeudi_Vendredi&titr=Google carDans la solution, le code PHP est conceptuel, l'affichage de l'image cliquable se réduit donc à
p() ; nbsp(7) ; echo href($url,img($url,"Google car")) ; finp() ;
4. PHP, MySQL et histogrammes
On voudrait connaitre l'histogramme des fréquences relatives des personnes des divers niveaux d'étude de la table ELF qui est dans la base statdata.
Généraliser ensuite à un champ quelconque de modalités dans une table, avec un tableau des labels des modalités. Par exemple on utilisera histo("SEXE","ELF",array(0=>"Homme",1=>"Femme") pour avoir les effectifs relatifs du code-sexe des personnes de la table. On vérifiera que le code suivant fournit aussi un histogramme :
<?php [...] $tdm = array(0=>"décédé",1=>"survivant") ; histo("surv","titanic",$tdm) ; [...] ?>La table citée fait référence aux données TITANIC qui est aussi dans la base statdata.
Solution : masquer la solution
Il s'agit en fait de l'exercice 16 de notre cours sur la technologie internet dont la solution est ici. On en profitera bien sûr pour regarder les autres exercices...
5. Ecrire du PDF avec PHP
Produire un document PDF qui correspond à la page filmsartistes.html (vue à l'exercice 6 du TP2) puis un autre un document PDF qui correspond à la page chanteurs.php (vue comme solution à l'exercice 4 du même TP2).
Solution : masquer la solution
Solution volontairement non communiquée.
6. Lire des fichiers Excel avec PHP
Lire le fichier elf.xls qui correspond aux données ELF de l'exercice 4 et produire un tableau des effectifs du code-sexe et l'histogramme associé. On utilisera une fonction suffisamment générale pour pouvoir l'appliquer à titanic.xls.
Solution : masquer la solution
Consulter litelfxls.php.
7. Afficher du code PHP
Comment peut-on afficher du code PHP dont les lignes sont éventuellement numérotées ?
Solution : masquer la solution
Notre programme montresource.php s'en occupe très bien...
8. Afficher/masquer des solutions avec Javascript
Expliquer comment les solutions sont affichées ou masquées dans cette page.
Solution : masquer la solution
Chaque page d'exercices charge l2a_tp.js qui, lorsqu'on clique sur le bouton solution, permute les styles invisible et style visible pour l'élément <div> qui contient le texte de la solution. Au passage, chaque division solution de l'exercice est numérotée, donc on ne montre que la solution considérée. Par contre, si utilise le bouton général du haut de la page, c'est PHP qui met le style visible par défaut pour toutes les solutions.
9. PHP, XML et DOM
Reproduire le formulaire suivant en PHP conceptuel et son action
Au fait, que génère ce formulaire ?
Solution : masquer la solution
Voir la fin de la section 1 de la page bioinfxml.php.
Le formulaire génère un fichier XML qui contient la séquence Fasta d'une protéine, c'est-à-dire la liste de ses acides aminés. Suivant ce qui est cliqué, on produit des éléments ou des attributs pour stocker les informations.
10. PHP, XML et Ajax
Réaliser la solution AJAX proposée en fin d'exercice 11.
Solution : masquer la solution
Solution volontairement non communiquée.
Code-source php de cette page ; code javascript utilisé. Retour à la page principale du cours.
Retour à la page principale de (gH)