Vous êtes sur la page 1sur 7

Master Miage M1

EXAMEN Session de juin 2010

Code du module : C216 Intitul du module : Architecture client-serveur Nom de lenseignant : Nicolas Royackkers

Dure de lpreuve : 2 heures Note : lusage de documents papier est interdit ; l'usage d'une calculatrice est autoris ; lusage de tout autre matriel lectronique est interdit Nombre de pages : 7

I.

Environnement de dveloppement Un ami vous confie une cl USB contenant un petit site dynamique quil a dvelopp en PHP. Cette application n'utilise pas de base de donnes ou autre ressource externe. On suppose que votre ordinateur est en fonctionnement et que tous les logiciels ncessaires l'excution locale d'un programme PHP sont dj installs, mais pas dmarrs. Comment allez-vous procder pour faire fonctionner le site de votre ami sur votre ordinateur ? Donner toutes les tapes, en dveloppant sur une demi-page maximum.

1/7

II.

PHP On donne un fichier XHTML nomm formulaire_saisie.html , dont le code est le suivant :
<?xml version="1.0" encoding="iso-8859-15"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr"> <head> <title>Formulaire de saisie</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-15" /> </head> <body> <h2>Un formulaire tout simple...</h2> <form method="post" action=""> <p> <label>Saisir une chane </label> <input type="text" name="chaine" value="" /> </p> <p> <input type="submit" name="validation" value="Valider" /> </p> </form> </body> </html>

1. On charge ce fichier dans un navigateur. a) Comment la page est-elle affiche ? b) Que se passe-t-il lorsque l'on valide le formulaire ? 2. On renomme le fichier prcdent formulaire_saisie.php avant d'y insrer du code PHP. a) Avec PHP, comment peut-on tester que le formulaire a t valid ? Expliquer le principe en cinq lignes maximum. b) Quel est le rle de la fonction PHP htmlspecialchars ? En quoi peut-elle tre utile dans l'affichage de donnes issues dun formulaire ? c) Complter le code du fichier de manire ce que la validation du formulaire provoque un affichage aprs le bouton, sous la forme Chane de caractres saisie : xxx , o xxx est la chane de caractres qui a t tape dans le champ de saisie du formulaire avant la validation de ce dernier. 3. On souhaite grer le cas o rien na t saisi dans le formulaire. a) Comment tester si le champ de saisie de texte a bien t rempli avant la validation du formulaire ? Expliquer en cinq lignes maximum. b) Complter le code prcdent pour que la page affiche le message Pas de saisie aprs la validation du formulaire, si aucun caractre na t saisi dans ce dernier.

2/7

4. On souhaite maintenant conserver l'affichage de la valeur saisie dans le formulaire, aprs sa validation. a) Comment mmoriser le contenu du champ de saisie de texte aprs validation du formulaire ? Expliquer en cinq lignes maximum. b) Complter le code prcdent pour mettre en place cette mmorisation. 5. la suite du message Chane de caractres saisie : xxx , on souhaite effectuer laffichage Chane de caractres l'envers : yyy , o yyy est la chane saisie inverse ou crite lenvers . Par exemple, si le mot Bonjour a t saisi dans le formulaire, la page doit afficher, sous le formulaire et aprs validation de celui-ci : Chane de caractres saisie : Bonjour Chane de caractres l'envers : ruojnoB On rappelle que : - laccs aux caractres composant une chane de caractres peut tre ralis grce un indice plac entre accolades. Exemple : si la variable $chaine a pour valeur "Bonjour", $chaine{0} vaut 'B' (premier caractre de la chane), $chaine{1} vaut 'o' (second caractre de la chane), etc. - la fonction int strlen ( string $text ) calcule et renvoie la taille de la chane de caractres passe en paramtre. a) crire une fonction inverser_chaine($chaine), qui prend en argument une chane de caractres quelconque et renvoie cette chane crite lenvers . b) En utilisant la fonction prcdente, complter le code de lexercice 4 de manire obtenir laffichage dsir aprs validation du formulaire (chane saisie puis chane lenvers).

III.

SQL Sur la machine localhost , on dispose d'un serveur MySQL et d'un accs une base de donnes relationnelle appele exercices , grce l'identifiant script_php et au mot de passe 8Hfg47A . Cette base contient trois tables : editeur (id_editeur*, nom) auteur (id_auteur*, nom, prenom) livre (id_livre*, id_auteur, id_editeur, titre, date_publication)

3/7

Voici le contenu de ces tables : editeur id_editeur 1 2 3 4 5 nom ENI Eyrolles O'Reilly Micro Application Pearson Education

auteur id_auteur 1 2 3 4 5 6 7 8 9 livre id_livre id_auteur id_editeur 1 2 3 4 5 6 7 8 9 10 2 1 3 3 4 6 5 7 8 9 1 2 3 3 4 1 1 5 2 3 titre date_publication PHP 5.2 - Dvelopper un site Web dynamique 2007-11-12 et interactif PHP 5 avanc 2008-10-23 Introduction PHP 5 2004-10-21 PHP en action 2008-04-25 PHP 5 & MySQL 5 : Crez votre site web 2007-09-27 dynamique de A Z Apache (version 2) : Installation, 2004-05-13 administration et scurisation MySQL 5 : Installation, mise en oeuvre, 2006-02-01 administration et programmation SQL 2008-05-23 Apprendre SQL avec MySQL : Avec 40 2006-03-23 exercices corrigs SQL "Tte la premire" 2007-12-06 nom Daspet Heurtel Sklar Bois Thibaud Pirio Brouard Soutou Beighley prenom Eric Olivier David Franois-Xavier Cyril Mikal Frdric Christian Lynn

4/7

Dans un premier temps, on se met la place du systme de gestion de base de donnes pour interprter des requtes SQL. Donner le tableau rsultat de chacune des requtes suivantes : 1. SELECT id_editeur FROM editeur ORDER BY nom DESC ; 2. SELECT UPPER(nom) AS 'Auteur' FROM auteur WHERE LOWER(prenom) LIKE 'c%' ; 3. SELECT DISTINCT id_editeur, id_auteur FROM livre ORDER BY id_editeur, id_auteur ; 4. SELECT titre FROM livre, editeur WHERE livre.id_editeur = editeur.id_editeur AND editeur.nom = 'O''Reilly' AND date_publication >= '2005-01-01' ORDER BY date_publication ; 5. SELECT titre AS 'Titre', auteur.nom AS 'Auteur', YEAR(date_publication) AS 'Anne' FROM livre, auteur, editeur WHERE livre.id_auteur = auteur.id_auteur AND livre.id_editeur = editeur.id_editeur AND editeur.nom IN ('Eyrolles', 'Pearson Education') AND YEAR(date_publication) BETWEEN 2004 AND 2007 ORDER BY titre ;

Il s'agit maintenant d'crire les requtes SQL permettant de raliser des tches formules en langage naturel : 6. Slectionner l'identifiant des livres dont le titre contient le mot MySQL . 7. Slectionner la date de publication, le titre et le nom dauteur de tous les livres, avec classement du plus rcent au plus ancien. 8. Slectionner le nom des diteurs ayant publi au moins un livre en 2004 ou en 2007 (chaque diteur slectionn ne devant apparatre qu'une seule fois dans la liste). 9. Slectionnez le titre de tous les livres qui n'ont pas t publis par Micro Application, avec classement par ordre alphabtique. 10. Slectionner le titre, le nom de l'auteur, le nom de l'diteur et lanne de publication de tous les livres publis par ENI ou OReilly entre 2005 et 2007 et traitant de PHP.

5/7

IV.

PHP et SQL

On souhaite raliser un programme PHP permettant dajouter un nouveau livre la base MySQL prsente dans l'exercice prcdent. Le programme doit se connecter la base de donnes et afficher le formulaire de saisie suivant :

Le premier lment du formulaire est une liste droulante. Elle liste tous les noms dditeurs prsents dans la base de donnes, par ordre alphabtique. De la mme manire, le second lment est une liste droulante qui liste tous les noms dauteurs rpertoris dans la base de donnes, par ordre alphabtique. Le troisime lment du formulaire est une zone de saisie de texte permettant de taper le titre du livre qui doit tre ajout la base de donnes. Le quatrime lment du formulaire est galement une zone de texte, qui permet quant elle de saisir la date de publication du livre, dans le format aaaa-mm-jj (exemple : 2009-06-15 ). Le dernier lment est un bouton qui dclenche la validation du formulaire et l'ajout du livre dans la base de donnes, en utilisant les valeurs slectionnes et saisies dans le formulaire. Comme on peut le constater, ce formulaire de saisie permet seulement d'ajouter un livre dont l'diteur et l'auteur sont tous deux dj prsents dans la base de donnes. Si ce n'tait pas le cas, il faut considrer que l'application met galement disposition de l'utilisateur les formulaires Saisie d'un nouvel diteur et Saisie dun nouvel auteur , utiliser pralablement si ncessaire. On considrera que ces formulaires existent dj. Ils ne sont pas raliser ici. Dans le cadre de cet exercice, aucun mcanisme de scurisation du formulaire ou de mmorisation des donnes saisies ne sera mis en place (pas de test des champs vides, du format du titre ou de la date, etc.).

6/7

En revanche, avant de dclencher l'ajout d'un livre, on vrifiera que celui-ci n'est pas dj prsent dans la base de donnes. Si le livre renseign dans le formulaire existe dj dans la base, on affichera le message Ce livre est dj enregistr dans la base. . Dans le cas contraire, il sera ajout la base de donnes et on affichera le message Le nouveau livre a bien t enregistr dans la base. . Donner le programme PHP permettant d'obtenir le comportement dsir. Remarque : l'utilisation de fonctions ou de constantes n'est pas obligatoire. En revanche, on demande un programme comment de manire pertinente.

7/7

Vous aimerez peut-être aussi