Valid XHTML     Valid CSS2    

Développement Web avancé L2 (PHP et MySQL)

TP numéro 3

                     gilles.hunault "at" univ-angers.fr

 

Table des matières cliquable

  1. Objets en PHP

  2. La structure de données "pile" version 3

  3. PHP et histogrammes avec JPGRAPH

  4. PHP, MySQL et histogrammes

  5. Ecrire du PDF avec PHP

  6. Lire des fichiers Excel avec PHP

  7. Afficher du code PHP

  8. Afficher/masquer des solutions avec Javascript

  9. PHP, XML et DOM

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 :  

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 :  


     <?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 :

       google car

Au passage, quel est code PHP conceptuel pour afficher cette image cliquable ?

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 car
     

Dans 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 :  

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 :  

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 :  

Consulter litelfxls.php.

 

7. Afficher du code PHP

Comment peut-on afficher du code PHP dont les lignes sont éventuellement numérotées ?

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 :  

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

Identifiant Séquence Classe Longueur
Elément
Attribut

Au fait, que génère ce formulaire ?

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 :  

Solution volontairement non communiquée.

 

Code-source php de cette page ; code javascript utilisé. Retour à la page principale du cours.

 

 

retour gH    Retour à la page principale de   (gH)