LI345 - EXAMEN DU 30 MAI 2012



Documents pareils
Bases de données et sites WEB Licence d informatique LI345

Module Com231A - Web et Bases de Données Notion 5 : Formulaires et utilisation des Bases de Données avec PHP

Attaques applicatives

XML par la pratique Bases indispensables, concepts et cas pratiques (3ième édition)

COMMANDES SQL... 2 COMMANDES DE DEFINITION DE DONNEES... 2

1 Position du problème

Stockage du fichier dans une table mysql:

CREATION WEB DYNAMIQUE

Modélisation PHP Orientée Objet pour les Projets Modèle MVC (Modèle Vue Contrôleur) Mini Framework

La base de données XML exist. A. Belaïd

Thierry BOULANGER. par la pratique. Bases indispensables Concepts et cas pratiques XML. 3 ième édition. Nouvelle édition

PHP. Bertrand Estellon. 26 avril Aix-Marseille Université. Bertrand Estellon (AMU) PHP 26 avril / 214

BD et XML : Exercices

A QUOI SERVENT LES BASES DE DONNÉES?

Langage HTML (2 partie) <HyperText Markup Language> <tv>lt La Salle Avignon BTS IRIS</tv>

Sécurité des sites Web Pas un cours un recueil du net. INF340 Jean-François Berdjugin

Bases de données relationnelles

PHP 5. La base de données MySql. A. Belaïd 1

Chapitre IX. L intégration de données. Les entrepôts de données (Data Warehouses) Motivation. Le problème

A QUOI SERVENT LES BASES DE DONNÉES?

TD : Requêtes SQL (BDR.TD2-1) INSA 3IF

PHP et mysql. Code: php_mysql. Olivier Clavel - Daniel K. Schneider - Patrick Jermann - Vivian Synteta Version: 0.9 (modifié le 13/3/01 par VS)

Cours Bases de données 2ème année IUT

I4 : Bases de Données

Master d Informatique Corrigé du partiel novembre 2010

NFA 008. Introduction à NoSQL et MongoDB 25/05/2013

La programmation orientée objet Gestion de Connexions HTTP Manipulation de fichiers Transmission des données PHP/MySQL. Le langage PHP (2)

Module BDWEB. Maîtrise d informatique Cours 9 - Xquery. Anne Doucet. anne.doucet@lip6.fr

Cours Bases de données 2ème année IUT

PDO : PHP Data Object 1/13

Failles XSS : Principes, Catégories Démonstrations, Contre mesures

TP JAVASCRIPT OMI4 TP5 SRC

Configurer la supervision pour une base MS SQL Server Viadéis Services

PHP et les Bases de données - Généralités

Procédures Stockées WAVESOFT ws_sp_getidtable Exemple : ws_sp_getnextsouche Exemple :... 12

Langage propre à Oracle basé sur ADA. Offre une extension procédurale à SQL

Sécurité des applications web. Daniel Boteanu

laposte.net) Ministère de l'éducation nationale Atelier sécurité Rabat RALL 2007

Mysql avec EasyPhp. 1 er mars 2006

Implémentation des SGBD

Langage SQL (1) 4 septembre IUT Orléans. Introduction Le langage SQL : données Le langage SQL : requêtes

1. Base de données SQLite

XML et Bases de données. Les bases de données XML natives.

STID 2ème année : TP Web/PHP

Principales failles de sécurité des applications Web Principes, parades et bonnes pratiques de développement

Les bases de données Page 1 / 8

Vulnérabilités et sécurisation des applications Web

TP JEE Développement Web en Java. Dans ce TP nous commencerons la programmation JEE par le premier niveau d une application JEE : l application web.

Développement d applications Internet et réseaux avec LabVIEW. Alexandre STANURSKI National Instruments France

PHP 4 PARTIE : BASE DE DONNEES

DOM - Document Object Model

Gestion des utilisateurs et de leurs droits

Plan Général Prévisionnel (1/2) (non contractuel) Internet et Outils L1/IO S2-IO2 Bases de données: Jointures, Transactions

SYSTÈMES D INFORMATIONS

<?xml version="1.0" encoding="iso " standalone="yes"?>

Mysql. Les requêtes préparées Prepared statements

Partie I : Créer la base de données. Année universitaire 2008/2009 Master 1 SIIO Projet Introduction au Décisionnel, Oracle

I. MySQL : Serveur et SGBD

Module BD et sites WEB

Compétences Business Objects

Le langage SQL (première partie) c Olivier Caron

Les Triggers SQL. Didier DONSEZ. Université de Valenciennes Institut des Sciences et Techniques de Valenciennes

Programmation Objet - Cours II

Pratique et administration des systèmes

Programmation Web. Madalina Croitoru IUT Montpellier

Phone Manager Soutien de l'application OCTOBER 2014 DOCUMENT RELEASE 4.1 SOUTIEN DE L'APPLICATION

TP Contraintes - Triggers

ORACLE 10G DISTRIBUTION ET REPLICATION. Distribution de données avec Oracle. G. Mopolo-Moké prof. Associé UNSA 2009/ 2010

Bases de données avancées Introduction

Le langage SQL pour Oracle - partie 1 : SQL comme LDD

Les bases de données

Burckel Thomas. Formation. Compétences

ISC Système d Information Architecture et Administration d un SGBD Compléments SQL

Gestion des transactions et accès concurrents dans les bases de données relationnelles

Bases de données et sites WEB

Olivier Mondet

Mise en place d un serveur Proxy sous Ubuntu / Debian

Licence de MIDO - 3ème année Spécialités Informatique et Mathématiques Appliquées

Gestion Électronique de Documents et XML. Master 2 TSM

Création et Gestion des tables

Bases de Données relationnelles et leurs systèmes de Gestion

Création de formulaires interactifs

1. Qu'est-ce que SQL? La maintenance des bases de données Les manipulations des bases de données... 5

Module Administration BD Chapitre 1 : Surcouche procédurale dans les SGBDS

Application web de gestion de comptes en banques

IFT3030 Base de données. Chapitre 1 Introduction

WordPress Référencement naturel (SEO) Optimiser. son référencement. Daniel Roch. Préface d Olivier Andrieu

Démonstration de la mise en cache via HTML 5 sur iphone

NFA016 : Introduction. Pour naviguer sur le Web, il faut : Naviguer: dialoguer avec un serveur web

ECR_DESCRIPTION CHAR(80), ECR_MONTANT NUMBER(10,2) NOT NULL, ECR_SENS CHAR(1) NOT NULL) ;

S8 - Sécurité IBM i : nouveautés 6.1 et 7.1

Les BASES de DONNEES dans WampServer

AGRÉGATION «ÉCONOMIE ET GESTION»

MS SQL Express 2005 Sauvegarde des données

Qu'est-ce que XML? XML : Extensible Markup Language. Exemple de document SGML SGML

INSTALLATION DE L APPLICATION DU CONTEXTE ITASTE

Maarch Framework 3 - Maarch. Tests de charge. Professional Services. 11, bd du Sud Est Nanterre

Transcription:

N d anonymat : page 1 LI345 - EXAMEN DU 30 MAI 2012 Durée : 2h ---documents autorisés Transactions Soit la relation R(x, y) contenant 10 nuplets pour lesquels l attribut x vaut respectivement de 1 à 10. Soient 4 instructions SQL a à d, pouvant être traitées par les deux transactions T 1 et T 2 : a : update R set y=1 where x = 3 b : update R set y=1 where x>5 c : update R set y=1 where x between 2 and 7 d : update R set y=1 where x = 3 or x = 4 2 pts Une instruction traitée par une transaction Ti, est désignée en deux caractères : la lettre de l instruction suivie du numéro i de la transaction. Par exemple, a1 représente l instruction a traitée par T 1. La granularité du verrouillage est le n-uplet. Le protocole de verrouillage utilisé est le protocole en 2 phases (les verrous sont libérés à la fin de la transaction). Question 1. La séquence exemple a1,d1,b1,c2 produit-elle un interblocage? Non car T1 n attend pas T2 Question 2. Donner toutes les séquences possibles d instructions conduisant à un interblocage et pour lesquelles T1 traite sa première instruction avant que T2 commence. Expliquer brièvement le raisonnement en 2 phrases, puis écrire chaque séquence sous la forme d une liste. Remarque : dans une séquence, chaque opération est faite une seule fois.

page 2 Il faut d abord que T1 et T2 traitent chacune une opération sans blocage donc accès à des données distinctes. Les deux seules paires d opérations disctinctes sont (a,b) et (d, b) Avec la 1ère paire d opérations disctinctes (a,b) a1,b2,c1, d2 attention : a1,b2,d1,c2 ne provoque pas d interblocage (T1 n est pas bloquée) b1,a2,c1,d2 b1,a2,d1,c2 Avec la 2eme paire d opérations disctinctes (d,b) d1,b2,c1,a2 attention : d1,b2,a1,c2 ne provoque pas d interblocage (T1 n est pas bloquée) b1,d2,a1,c2 b1,d2,c1,a2 Total : 6 séquences Question 3. On veut modifier l instruction a pour que plus aucun interblocage ne puisse se produire, tout en conservant la forme de l instruction : update R set y=1 where x = n Donner toutes les valeurs possibles de n (dans [1,10]) où n est une valeur entière 1,2,5 SQL3 5 Pts On considère le schéma SQL3 suivant : Create type Personne ; Create type liste as table of varchar2(20); Create type Msg as object ( Expediteur ref Personne, Objet varchar2(50), Contenu varchar2(100) ); Create type Lesmsg as table of Msg; Create type EnsPers as table of ref Personne; Create type Personne as object ( Nom varchar2(30), Message Lesmsg, Amis EnsPers, Interets liste ) ; Question 1. Donnez l instruction permettant de créer la table LesPersonnes permettant de stocker des objets de type Personne.

page 3 1pt Create table LesPersonnes of Personne nested table message store as tabmsg, nested table amis store as tabamis, nested table interest store as tabliste; On suppose que la table LesPersonnes contient les données suivantes : La personne Paul a cinéma, cuisine comme intérêts. La personne Marie a Paul comme ami et musique, cinéma comme intérêts. La personne Max a Marie et Paul comme amis et randonnée, cinéma comme intérêts. Question 2. Ecrivez l instruction SQL3 permettant d insérer dans la base les données suivantes : La personne Luc a Marie comme ami et ski, piscine, comme intérêts. Rép. 1pt Insert into LesPersonnes p values ( Luc, Lesmsg (), enspers((select ref(p) from LesPersonnes p where p.nom= Marie )), liste( ski, piscine )) ; Question 3. Ecrire en SQL3 les requêtes suivantes : a) Nom et intérêts des amis de Max. 1pt Select value(a).nom, value(a).interets from LesPersonnes p, table(p.amis) a where p.nom= Max ; a) Nom des personnes ayant envoyé (expéditeurs) un message ayant pour objet élections, et nom de la personne qui l a reçu.

page 4 1 pt Select m.expediteur.nom, p.nom from LesPersonnes p, table(p.message) m where m.objet= elections ; Question 4. On veut compléter le schéma en ajoutant un type photo, constitué d une légende (texte de 50 caractères), d un ensemble de tags, et d une image. Chaque tag a un auteur, qui est une personne, et un contenu qui est un texte de 100 caractères. Une image est du type img, qu on suppose déjà défini. Ecrivez en SQL3 la ou les instruction(s) permettant de créer le type photo. 1pt Create type tag as object ( Contenu varchar2(100), auteur ref Personne); Create type enstag as table of tag ; Create type photo as object (legende varchar2(50), tags enstag, image img); XML et DTD 4 pts Soit le document contacts.xml suivant : <?xml version = "1.0"?> <!DOCTYPE CONTACTS SYSTEM "contacts.dtd"> < CONTACTS> <CONTACT CONTACT_NUM = "2"> <NAME>Teri Mancuso</NAME> <EMAIL>teri@teri.com</EMAIL> </CONTACT> <CONTACT CONTACT_NUM = "1" MOTHER = "2"> <NAME>Kristin Mancuso</NAME> <EMAIL>kristin@kristin.com</EMAIL> <EMAIL>kristin@yahoo.com</EMAIL> </CONTACT> </CONTACTS> Question 1. Compléter la DTD contacts.dtd ci-dessous de façon à ce qu elle valide le document contacts.xml: <?xml version = "1.0" encoding="utf-8"?> <!ELEMENT CONTACTS.> <!ELEMENT....> <!ELEMENT.......> <!ELEMENT....> <!ATTLIST..> <!ATTLIST.....>

page 5 <?xml version = "1.0" encoding="utf-8"?> <!ELEMENT CONTACTS ANY> <!ELEMENT CONTACT (NAME, EMAIL+)> <!ELEMENT NAME (#PCDATA)> <!ELEMENT EMAIL (#PCDATA)> <!ATTLIST CONTACT CONTACT_NUM ID #REQUIRED> <!ATTLIST CONTACT MOTHER IDREF #IMPLIED> Question 2. Ajouter dans contacts.dtd, un attribut facultatif GENDER de valeur soit male soit female pour l élément CONTACT. <!ATTLIST..> <!ATTLIST CONTACT GENDER (male female) #IMPLIED> Question 3. On souhaite ajouter pour chaque contact un numéro de téléphone obligatoire, un deuxième numéro facultatif et une adresse facultative contenant le nom de la ville et le nom du pays comme ceci : <CONTACT CONTACT_NUM = "1"> <NAME>Teri Mancuso</NAME> <EMAIL>teri@teri.com</EMAIL> <PHONE> 01 58 65 25 96 </PHONE> <PHONE> 06 45 65 30 25 </PHONE> <ADDRESS> <CITY> Paris </CITY> <COUNTRY> France </COUNTRY> </ADDRESS> </CONTACT> Donner uniquement les déclarations à modifier ou à ajouter dans contacts.dtd. <!ELEMENT CONTACT (NAME, EMAIL+, PHONE, PHONE?, ADDRESS?)> <!ELEMENT PHONE (#PCDATA)> <!ELEMENT ADDRESS (CITY,COUNTRY) <!ELEMENT CITY (#PCDATA)> <!ELEMENT COUNTRY (#PCDATA)> Question 4. Dans contacts.dtd, la ligne déclarant l élément CONTACT est remplacée par <!ELEMENT CONTACT (EMAIL, NAME)>.

page 6 Le document XML ci-dessous est-il valide par rapport à cette nouvelle DTD? Si non, modifier la déclaration de l élément CONTACT pour valider ce document XML. <?xml version = "1.0"?> <!DOCTYPE CONTACTS SYSTEM "contacts.dtd"> < CONTACTS> <CONTACT CONTACT_NUM = "2"> <EMAIL>teri@teri.com</EMAIL> <NAME>Teri Mancuso</NAME> </CONTACT> <CONTACT CONTACT_NUM = "1" MOTHER = "2"> <NAME>Kristin Mancuso</NAME> <EMAIL>kristin@kristin.com</EMAIL> </CONTACT> </CONTACTS> Réponse (Oui/Non?) : <!ELEMENT CONTACT....> Non valide <!ELEMENT CONTACT (EMAIL NAME)* >. XPath et XSLT 5 pts On considère des fichiers XML qui contiennent des informations sur la quantité (ou proportion) d'aliments de chaque catégorie alimentaire qu'il est recommandé de consommer chaque jour pour avoir une alimentation équilibrée. Pour chaque catégorie d'aliments, des exemples d'aliments sont éventuellement mentionnés. Ces fichiers XML suivent la DTD pyramide.dtd suivante : <!ELEMENT pyramide (aliments)* > <!ELEMENT aliments (categorie,quantite,aliment*) > <!ELEMENT categorie (#PCDATA) > <!ELEMENT quantite (#PCDATA) > <!ELEMENT aliment (#PCDATA) > <!ATTLIST aliment id ID #REQUIRED type CDATA #IMPLIED> Le fichier pyramide.xml ci-dessous contient quelques exemples d'aliments : <?xml version="1.0"?> <!DOCTYPE pyramide SYSTEM "pyramide.dtd"> <pyramide> <aliments> <categorie>eau et boisson sans sucre</categorie> <quantite>à volonté</quantite> <aliment id='e1'>eau</aliment> <aliment id='e2'>thé</aliment> </aliments> <aliments> <categorie>fruits et légumes</categorie> <quantite>5 portions</quantite> <aliment id='fl1' type='fruit'>banane</aliment> <aliment id='fl2' type='fruit'>pomme</aliment> <aliment id='fl3' type='legume'>laitue</aliment> </aliments> <aliments> <categorie>céréales</categorie> <quantite>4 portions</quantite> <aliment id='c1'>blé</aliment> <aliment id='c2'>riz</aliment>

page 7 </aliments> <aliments> <categorie>laitage</categorie> <quantite>3 portions</quantite> </aliments> <aliments> <categorie>viandes et poissons</categorie> <quantite>1 à 2 portions</quantite> </aliments> <aliments> <categorie>gras, sucré, salé</categorie> <quantite>0 à 1 portion</quantite> <aliment id='gs1' type='viennoiserie'>pain au chocolat</aliment> </aliments> </pyramide> Question 1 (2 points) Exprimez en Xpath les requêtes suivantes : questions a,b,c,d : 0.25 point par question questions e,f : 0.5 point par question a. La quantité de "fruits et légumes" qu'il est recommandé de manger chaque jour? //aliments[categorie="fruits et légumes"]/quantite b. Les identifiants des aliments dont l'attribut "type" est indiqué? //aliment[@type]/@id c. Les catégories des aliments dont au moins 2 aliments sont mentionnés? //aliments[count(aliment)>=2]/categorie d. L'identifiant du deuxième aliment dans la catégorie "céréales"? //aliments[categorie='céréales']/aliment[2]/@id e. La quantité des aliments de type "viennoiserie"? //aliments/aliment[@type='viennoiserie']/../quantite //aliments[aliment/@type='viennoiserie']/quantite

page 8 f. Les nœuds <aliment> qui appartiennent aux catégories "fruits et légumes" ou "céréales"? //aliment[../categorie="fruits et légumes" or../categorie="céréales"] //aliments[categorie="fruits et légumes" or categorie="céréales"]/aliment Question 2 (1 point) Compléter la feuille XSL suivante pour qu elle transforme le document XML pyramide.xml en un document HTML contenant un tableau HTML contenant la liste des aliments appartenant à la catégorie "fruits et légumes". Par exemple, le résultat obtenu par l'application de cette feuille de style sur le fichier pyramide.xml doit permettre d'obtenir : <HTML> <H1>Liste des fruits et légumes</h1> <TABLE border="1"> <TR><TH>Type</TH><TH>Nom</TH></TR> <TR><TD>fruit</TD><TD>banane</TD></TR> <TR><TD>fruit</TD><TD>pomme</TD></TR> <TR><TD>legume</TD><TD>laitue</TD></TR> </TABLE> </HTML> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/xsl/transform" version="1.0"> <xsl:template match= "..."> <xsl:template match= "/"> <HTML> <H1>Liste des fruits et légumes</h1> <TABLE border='1'> <TR><TH>Type</TH><TH>Nom</TH></TR> <xsl:apply-templates select='//aliments[categorie="fruits et légumes"]/aliment'/> </TABLE> </HTML> </xsl:template> <xsl:template match= "..."> <xsl:template match= "aliment"> <TR> <TD><xsl:value-of select='@type'/></td> <TD><xsl:value-of select='text()'/></td>

page 9 </TR> </xsl:template> </xsl:stylesheet> Question 3 (0.5 points) Compléter la feuille XSL suivante pour qu elle transforme un document XML (qui suit la DTD pyramide.dtd) en un autre document XML qui suit la même DTD mais qui contient seulement les nœuds <aliments> qui ne contiennent pas de nœud <aliment>. Le résultat obtenu doit être : <?xml version="1.0" encoding="utf-8"?> <pyramide> <aliments> <categorie>laitage</categorie> <quantite>3 portions</quantite> </aliments> <aliments> <categorie>viandes et poissons</categorie> <quantite>1 à 2 portions</quantite> </aliments> </pyramide> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/xsl/transform" version="1.0"> <xsl:template match= "/"> <pyramide> <xsl:copy-of select='//aliments[count(aliment)=0]'/> </pyramide> </xsl:template> </xsl:stylesheet>

page 10 Question 4 (1.5 points) Compléter la feuille XSL suivante pour qu elle transforme un document XML (qui suit la DTD pyramide.dtd) en un autre document XML contenant tout d'abord les catégories d'aliments (avec notamment un attribut IDAS contenant une liste de références vers des identifiants d'aliments appartenant à cette catégorie), puis les nœuds <aliment>. Le document résultat doit suivre la DTD donnée ci-après : <!ELEMENT nourriture (categorie*,aliment*) > <!ELEMENT categorie (#PCDATA) > <!ATTLIST categorie IDAS IDREFS #IMPLIED nom CDATA #REQUIRED> <!ELEMENT aliment (#PCDATA) > <!ATTLIST aliment id ID #REQUIRED type CDATA #IMPLIED> Par exemple, le résultat obtenu par l'application de cette feuille de style sur le fichier pyramide.xml est : <?xml version="1.0" encoding="utf-8"?> <nourriture> <categorie IDAS="E1 E2 " nom="eau et boisson sans sucre">à volonté</categorie> <categorie IDAS="FL1 FL2 FL3 " nom="fruits et légumes">5 portions</categorie> <categorie IDAS="C1 C2 " nom="céréales">4 portions</categorie> <categorie nom="laitage">3 portions</categorie> <categorie nom="viandes et poissons">1 à 2 portions</categorie> <categorie IDAS="GS1 " nom="gras, sucré, salé">0 à 1 portion</categorie> <aliment id="e1">eau</aliment> <aliment id="e2">thé</aliment> <aliment id="fl1" type="fruit">banane</aliment> <aliment id="fl2" type="fruit">pomme</aliment> <aliment id="fl3" type="legume">laitue</aliment> <aliment id="c1">blé</aliment> <aliment id="c2">riz</aliment> <aliment id="gs1" type="viennoiserie">pain au chocolat</aliment> </nourriture> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/xsl/transform" version="1.0"> <xsl:template match= "/"> <nourriture> <xsl:apply-templates select='//aliments'/> <xsl:copy-of select='//aliment'/> </nourriture> </xsl:template> <xsl:template match= "aliments"> <categorie nom="{categorie"> <xsl:if test='count(aliment)>0'> <xsl:attribute name='idas'> <xsl:for-each select='aliment'> <xsl:value-of select='@id'/> <xsl:text> </xsl:text> </xsl:for-each> </xsl:attribute> </xsl:if> <xsl:value-of select='quantite'/> </categorie> </xsl:template>

page 11 </xsl:stylesheet> PHP 4 Pts On considère une liste de personnes avec leurs dates de naissance, stockée sous la forme d'un tableau associatif, dont chaque clé est un nom de personne et chaque valeur associée est à son tour un tableau associatif. Pour ce deuxième tableau, les clés sont : le jour, le mois et l'année de naissance de la personne à laquelle il est associé. Question 1(0.5 pt) Donnez le code php permettant de créer le tableau $personnes contenant les informations concernant les personnes suivantes : Martin, né le 23/12/2000 et Thomas, né le 27/05/1980. $personnes=array('martin'=>array('j'=>'23', 'm'=>12,'a'=>'2000'), 'Thomas'=>array ('j'=>'27','m'=>'5','a'=>'1980')) ; Question 2(1 pt) Donnez le code qui crée le formulaire permettant d'introduire les informations suivantes :

page 12 Informations sur une personne Personne : Martin Voir âge Voir date naissance O On doit sélectionner dans une liste déroulante le nom d'une personne, ensuite on doit faire un choix entre visualiser sa date de naissance et son âge. La liste déroulante doit être construite à partir du tableau défini à la question 1. Les informations introduites seront envoyées au script Chercher.php <form method='post' action='chercher.php'> Personne :<SELECT name='personne'> <?php foreach($tab as $nom=>$daten){ echo '<OPTION value=''$nom''>'.$nom.'</option>'?> </SELECT> &nbsp ; Voir âge : <input type='radio' name='choix' value='âge'/>&nbsp ; Voir date naissance : <input type='radio' name='choix' value='naissance'/><br/>

page 13 <input type='submit' value='valider'/> </form> Question 3 (1pt) Écrivez la fonction php affichedatenaissance($personnes) contenue dans le fichier Chercher.php qui affiche la date de naissance de la personne qui a été choisie par l'utilisateur à travers le formulaire, si l'option 'Voir date naissance' a été choisie. Si cette option n'a pas été choisie, la fonction n'affiche rien. Le mois de naissance sera affiché sous forme de chaîne de caractères. Par exemple, le résultat qui sera affiché pour Martin est le suivant : Martin, le 23 Décembre 2000. function affichedatenaissance(($personnes){ if(isset($_post['choix']) && $_POST['choix']=='naissance'){ $mois=array('janvier', 'Février', 'Mars', 'Avril', 'May', 'Juin','Juillet','Août', 'Septembre', 'Octobre', 'Novembre', 'Décembre') ; echo $_POST['personne'].'le '.$personnes['personne']['j'].' '. $mois[$personnes['personne']['m']-1].' '. $personnes['personne']['a']. Question 4 (1.5pt) Ecrivez la fonction afficheage($personnes) qui prend comme paramètre un tableau créé comme précédemment et qui affiche pour chaque personne son âge (nombre d'années et de mois) à la date courante. Le résultat produit le 25 mai 2012 pour les deux personnes précédentes serait le suivant : Martin 11 ans 5 mois Thomas 31 ans 11 mois

page 14 Aide : utiliser la fonction php getdate(), sans paramètres, qui retourne un tableau associatif contenant des informations sur date courante locale. Les éléments du tableau associatif retourné sont les suivants : «mday» : Représentation numérique du jour du mois courant (1 à 31) «mon» : Représentation numérique du mois (1 à 12) «year» : Année, sur 4 chiffres (ex : 1999, 2003, etc.)

page 15 function afficheage($tab){ $datecrt=getdate() ; foreach($tab as $nom=>$daten){ if($datecrt['mon']<$daten['m']){ $annees=($datecrt['year']-1)-$daten['a'] ; if($datecrt['mday']<daten['j']) $mois=($datecrt['mon']-1)+(12-$daten['m']) ; else $mois=$datecrt['mon']+(12-$daten['m']) ; if($datecrt['mon']>$daten[1]){ $annees = $datecrt['year']-$daten['a'] ; if($datecrt['mday']<daten['j']) $mois=($datecrt['mon']-1)-$daten['m'] ; else $mois=$datecrt['mon']-$daten['m'] ; if($datecrt['mon']==$daten['m']){ if($datecrt['mday']<daten['j']){

page 16 $annees = ($datecrt['year']-1)-$daten['a'] ; $mois = ($datecrt['mon']-1)+(12-$daten['m']) ;//== 11 else{ $annees = ($datecrt['year']-1)-$daten['a'] ; $mois=0 ; echo $nom.' '.$annees.' ans '.$mois.' mois<br/>' ;