LI345 Bases de données et sites Web Licence de Sciences et Technologies Mention Informatique Fascicule de TD/TME PHP Année 2014/2015 1
Table des matières Planning indicatif des séances...3 Notions de base PHP...4 Exercice 1...4 Exercice 2...4 Exercice 3...5 Exercice 4...5 Exercice 5...5 Exercice 6...6 Exercice 7...6 Exercice 8...6 Site VideoExpress (1ère partie)...7 I. Présentation générale du site...7 II. Présentation de la base de données «VideoExpress»...8 III. Travail à effectuer : création de la base...9 IV. Interpréteur de commandes MySQL...9 Vue d'ensemble du site...11 Site VideoExpress (2ème partie)...12 I. Pages d'accueil du site "Client"...12 II. Premières pages du site "Gestion"...13 Site VideoExpress (3ème partie)...14 I. Fonctions utilitaires...14 II. Recherche de films...14 III. Descriptif d'un film...15 IV. Cassettes détenues par un abonné...15 Fonctions MySQL de dates et d'heures...15 Site VideoExpress (4ème partie)...17 I. Retour de cassettes...17 II. Commande de cassettes...17 Site VideoExpress (5ème partie)...19 I. Identification de l'abonné...19 II. Panier électronique...19 2
Planning indicatif des séances Durée : 3 semaines Sujets des séances TD1 : Notions de base ex 1 à ex 5 TME1 : Création de la base Accueil, AccueilDescriptif, Outils IdentificationC, IdentificationD TD2 : AccueilRecherche, Recherche, Commande TME2 : Descriptif, finir Recherche, Detenues, ConfirmeCommande TD3 : Notions de base ex 6 à ex 8 TME3 : Finir de réaliser tous les fichiers restants 3
Notions de base PHP On organisera les pages Web des exercices 1, 2, 3, 4, 5, 6, 7 et 8 comme un site : une page d accueil index.htm affichera la liste des exercices, avec un lien pour chacun vers la première page de l exercice concerné (Exo1.htm, Exo2.htm, Exo3.htm, Exo4.htm, Exo5.php, Exo6.htm, Exo6.php, Exo7.htm, Exo7.php, Exo8.htm). Exercice 1 Variables issues d un formulaire, instruction «echo», structure conditionnelle if..then..else 1. Préparer une page Exo1.htm contenant un formulaire avec : - un groupe de trois boutons radio, de valeurs respectives Monsieur, Madame et Mademoiselle, - une zone de saisie de texte où l utilisateur tapera son nom, - un bouton de soumission. L action associée au formulaire correspondra au fichier Message.php décrit ci-dessous. 2. En réponse à l envoi de son formulaire, l utilisateur recevra une page contenant un texte qui lui est nommément adressé : Cher Monsieur Dubois, Bla bla bla bla bla bla bla bla bla. Bla bla bla bla bla bla bla bla bla.... 2.1.Composer, avec un éditeur de textes, le code du fichier Message.php qui affiche l en-tête adapté ( Cher Monsieur Dubois, Chère Mademoiselle Durand, ). 2.2.Publier les pages index.htm, Exo1.htm et Message.php sur le serveur d adresse poux.ufr-infop6.jussieu.fr, dans un sous-répertoire basicphp du répertoire public_html de son répertoire privé. 2.3.Tester l enchaînement des pages, à partir de l URL http:// poux.ufr-info-p6.jussieu.fr/~login/basicphp, où login est le nom de connexion au serveur. Exercice 2 Définition de variables, Boucle. On se propose de créer une page qui affiche le tarif d un parking, sous forme d un tableau donnant le prix pour chaque durée allant de d1 à d2 heures, d1 et d2 étant deux valeurs issues d un formulaire (d1<= d2). Sachant que ce prix en Euro est égal à 1+ 2*d, où d est la durée en heures, le tableau sera rempli de façon automatique. 1. Préparer une page Exo2.htm qui permette la saisie des valeurs d1 et d2 et appelle la page de réponse Tarif.php. 4
2. Préparer la page Tarif.php avec, dans un premier temps, un tableau HTML à 2 lignes et deux colonnes : la première ligne contiendra les en-têtes de colonnes Durée et Prix ; la seconde ligne contiendra une valeur quelconque pour la durée et le prix. 3. Avec un éditeur de textes, ajouter le code PHP permettant de répéter l affichage de la deuxième ligne pour chaque durée allant de d1 à d2, et de placer les valeurs calculées convenables dans chaque nouvelle ligne. Exercice 3 Variables de type tableau à une dimension. On se propose de réaliser un contrôle d accès sur une partie d un site. 1. Préparer une page Exo3.htm contenant un formulaire avec : - une zone de saisie de texte, où l utilisateur tapera son nom, - un bouton de soumission. L action associée au formulaire correspondra au fichier ControleBeta.php décrit ci-dessous. 2. Ecrire le code du fichier ControleBeta.php, selon le principe suivant : un tableau $ABONNES contient les noms des utilisateurs autorisés ; on compare le nom issu du formulaire aux noms du tableau ; si on trouve une concordance, on affiche : «BIENVENUE!» ; sinon, on affiche «DESOLE! VOUS N ETES PAS INSCRIT A CE SERVICE.». Exercice 4 Tableaux à indices non numériques (tableaux associatifs). 1. Composer la page Exo4.htm, à partir d une copie de Exo3.htm, en y ajoutant une seconde zone de saisie de texte, où l utilisateur inscrira son code d abonné (identifiant unique). L action associée au formulaire correspondra au fichier Controle.php décrit ci-dessous. 2. Composer le code Controle.php, avec un tableau $ABONNE contenant le nom de chaque utilisateur autorisé, associé à son code personnel, de façon à tester la validité du nom et du code indiqués dans le formulaire. Exercice 5 Instruction conditionnelle switch, tableaux indicés, fonctions prédéfinies (date, chaînes de caractères). Composer la page Exo5.php qui affiche la date du jour en anglais (nom et numéro du jour, mois, année), ainsi que son équivalent français. 5
Exercice 6 En-tête de requête. Ecrire une page HTML Exo6.htm qui affiche un texte comprenant les caractères é, è, à, ê, ô et ç (par exemple, "Ceci est un texte français à afficher avec tous les caractères accentués. Cette tâche est-elle bien effectuée par notre hôte?"), avec un éditeur de texte utilisant le codage iso-8859-1. 1. Placer cette page sur le serveur poux et observer le résultat obtenu dans le navigateur. 2. Faire une copie Exo6.php de la page précédente, et y ajouter l'envoi d'une en-tête imposant le codage iso-8859-1 au navigateur. Exercice 7 En-tête de requête. Ecrire une page Exo7.htm qui affiche, en gros caractères verts sur fond rouge, "Ceci ne doit pas être affiché.". Faire une copie Exo7.php de la page précédente, et y ajouter l'envoi d'une en-tête effectuant une redirection sur la page Exo5.php (C'est Exo5.php qui s'affichera, et non plus le texte prévu dans le corps de Exo7.php). Exercice 8 En-tête de requête. Fonctions prédéfinies d'accès aux fichiers. Ecrire une page Exo8.htm qui propose le téléchargement, au choix, d'une image donnée, d'un fichier texte ou d'un fichier zip donné. Chacun de ces éléments sera le support d'un lien ayant la page telecharger.php pour cible. La référence du fichier correspondant à l'élément choisi sera transmise avec l'url de cette page (méthode GET). La page telecharger.php comportera les en-têtes nécessaires à la transmission du fichier demandé, en fichier attaché, et enverra le contenu du fichier en utilisant la fonction prédéfinie readfile. 6
Site VideoExpress (1 ère partie) I. Présentation générale du site Le site marchand «VideoExpress» a pour objet la location de films sur cassette vidéo (VHS) ou sur support DVD. Pour accéder à ce service, il convient d être inscrit comme abonné, en ayant fourni son adresse complète et ses coordonnées bancaires. Chaque nouvel abonné reçoit un code différent. En fournissant ce code et son patronyme, un abonné peut alors commander, en ligne, des cassettes ou des DVD, qui lui seront livrés, dans l heure, par porteur. Il restitue les films, le lendemain, ou les jours suivants, en les déposant dans un magasin de son quartier, relais «VideoExpress». Son compte bancaire est débité en fonction du temps écoulé entre la livraison et la restitution des films. L abonné verse une caution à l inscription, et ne peut pas détenir, simultanément, plus de 3 cassettes ou DVD. Outre la passation de commandes, le site permet de : rechercher les films disponibles, correspondant à certains critères (mots du titre, nom du réalisateur, noms d acteurs, genre, ) ; afficher la fiche signalétique complète d un film ( réalisateur, liste des principaux acteurs, résumé,.) ; afficher la liste des cassettes et DVD détenus par l abonné. Vous allez travailler par binôme, chaque binôme réalise un site videoexpress complet. Sur MySQL, chaque binôme dispose d'un compte utilisateur nommé videon et d'une base de données de même nom (au départ, la base est vide). demandez votre numéro N à votre enseignant. Le site PHP est hébergé par l'un des 2 membres du binôme (soit 1234567, son nom de login), dans son sous-répertoire de 1234567/public_html. cd $HOME/public_html mkdir videon (où N correspond un numéro de binôme) Pour restreindre l'accès au site, tout en permettant à son binôme de mettre à jour le projet, l'étudiant 1234567 crée les répertoires nécessaires en leur affectant les droits suivants: chmod o+x $HOME chmod 711 $HOME/public_html chmod 777 $HOME/public_html/videoN ainsi que pour tous les répertoires du site commun (sousrépertoires BD et GESTION), le nom videon (nom d'utilisateur MySQL) n'étant connu a priori que du binôme et de l'enseignant. En phase de développement, le site commun ne contient que les pages parfaitement mises au point. Chaque membre (y compris l'hébergeur 1234567) possède, dans son répertoire personnel, une copie de l'état actuel du site; c'est avec cette copie qu'il teste les nouvelles pages dont il est chargé. Lorsqu'une nouvelle page est prête, elle est ajoutée au site commun (et testée à nouveau, pour vérification, dans ce contexte). 7
Le serveur web se trouve sur la machine poux.ufr-info-p6.jussieu.fr. Cette machine monte les comptes étudiants, il est donc inutile de vous connecter à poux pour éditer vos fichiers PHP. L'accès au serveur web de poux se fait depuis votre navigateur (firefox) avec l'url : http://poux.ufr-info-p6.jussieu.fr/~1234567/videon (remplacer 1234567 par votre login linux et videon par votre nom de base MySQL). En revanche, il faut vous connecter sur poux (par ssh) pour gérer votre BD car le client mysql n'est disponible que sur poux. Documentation: Documentation sur MySQL et PHP sur le site du module. II. Présentation de la base de données «VideoExpress» On constituera une base comprenant les tables suivantes : FILMS(NoFilm, Titre, Nationalite, Realisateur, Couleur, Annee, Genre, Duree, Synopsis) ; ACTEURS(NoFilm, Acteur) ; CASSETTES(NoFilm, NoExemplaire, Support, Statut) ; ABONNES(Code, Nom, Prenom, NoRue, CodePostal, Ville, Batiment, Etage, Digicode, Telephone, Email, Banque, Guichet, Compte, NbCassettes) ; EMPRES( NoFilm, NoExemplaire, CodeAbonne, DateEmpRes) ; Les attributs soulignés correspondent aux clés des relations. Les attributs NoFilm des relations ACTEURS et CASSETTES correspondent à l attribut de même nom de la relation FILMS. Les attributs NoExemplaire et CodeAbonne de la relation EMPRES prennent leurs valeurs, respectivement, parmi celles des attributs NoExemplaire de CASSETTES et Code de ABONNES. Le Genre d un film peut être "Comédie", "Comédie dramatique", "Drame", "Aventure" ou "Documentaire". L attribut Couleur a la valeur "Couleurs" ou "Noir et Blanc". L année et le pays de production du film sont indiqués par les attributs Année et Nationalité; ce dernier peut prendre des valeurs comme "français", "américain", "franco-italien", La durée du film est exprimée en minutes. Le Synopsis résume le film en moins de 256 caractères. La table CASSETTES recense l ensemble des cassettes vidéo et des DVD que possède VideoExpress. On distingue les deux types d enregistrement par la valeur de l attribut Support, qui peut être "VHS" ou "DVD". L attribut Statut a la valeur "disponible", "réservée" ou "empruntée". Le code d un abonné comporte des chiffres et des lettres. Son adresse complète est enregistrée dans les attributs NoRue à Digicode. NoRue est constitué du numéro d immeuble et du nom de la voie, séparés par une virgule («124, Rue des alouettes», «1bis, Bd Beaumarchais», ). Ses coordonnées bancaires figurent dans les attributs Banque, Guichet et Compte ; les deux premiers sont numériques ; la désignation du compte peut comporter des chiffres et des lettres. Le nombre total de cassettes et DVD détenus par un abonné est maintenu à jour dans l attribut NbCassettes. 8
On créera les 5 tables précédentes avec leurs contraintes d intégrité. On remplira les tables FILMS, ACTEURS et CASSETTES de façon à avoir plusieurs films d un même réalisateur, plusieurs films d un même acteur, plusieurs cassettes (VHS ou DVD) d un même film. La table ABONNES comportera quelques personnes (quatre). La table EMPRES sera vide au départ ; on y enregistrera aussi bien les emprunts que les réservations de cassettes; elle sera mise à jour par l application, lors de la passation des commandes et la restitution des cassettes. III. Travail à effectuer : création de la base Préparation Chaque binôme demande à son chargé de TD un numéro de compte mysql et un mot de passe. Les comptes sont nommés videon (avec N de 1 à 100). Le mot de passe est un nombre entier à 4 chiffres. Télécharger le fichier CREATEBASE.tgz. Puis se connecter à la base, en suivant les instructions indiquées sur la page Interpréteur de commandes MySQL, puis exécuter les scripts contenus dans le dossier CREATEBASE, pour créer les tables et les remplir. commande cd répertoire de travail tar xzvf CREATEBASE.tgz ssh poux.ufr-info-p6.jussieu.fr cd répertoire de travail cd CREATEBASE mysql -u videon -p Enter password: mysql> use videon mysql> source All.sql mysql> describe FILMS ; mysql> select * from FILMS ; description aller dans votre répertoire de travail décompresser l'archive se connecter sur poux aller dans votre répertoire de travail aller dans le dossier contenant les scripts de création se connecter au SGBD saisir les 4 chiffres de votre mot de passe choisir sa base créer la base affiche le schéma d'une relation requête (attention, nom de table sensible à la casse) Hébergement de la base La base de donnée est hébergée (comme l'ensemble du site) sur le serveur poux.ufr-infop6.jussieu.fr, où l'on dispose d'un SGBD MySQL 3.23.58. IV. Interpréteur de commandes MySQL Accès à la base MySQL Se loger sur poux.ufr-info-p6.jussieu.fr, avec les mêmes login et mot de passe Linux que sur les machines ari-31-3xx-xx. Depuis votre PC lancer la commande : ssh poux.ufr-info-p6.jussieu.fr Se connecter au SGBD MySQL par la commande : mysql -u videon -p où videon (N allant de 1 à 100) représente le nom attribué à votre binôme; 9
en réponse au prompt Enter password:, saisir les 4 chiffres de votre mot de passe indiquer le nom de la base à laquelle vous avez accès: use videon lancer une requête SQL de son choix, ou une commande MySQL. Commandes MySQL élémentaires use nom_de_base : show tables : sélectionne la base nom_de_base (exemple: use video100) affiche la liste des tables de la base describe nom de table : source fichier : quit : les noms de table et d'attributs sont case sensitive exécute les commandes SQL contenues dans le script fichier (extension.sql) termine le client mysql Type des données et Contraintes d'intégrité On utilisera le type datetime pour la colonne DateEmpRes de la table EMPRES, destinée à enregistrer aussi bien une date d'emprunt qu'une date-et-heure de réservation. La clause CHECK n'étant pas reconnue, on utilisera la type ENUM pour toutes les colonnes dont la valeur est une chaîne de caractères appartenant à une liste déterminée. On posera les contraintes d'intégrité référentielle pour assurer la portabilité des scripts, mais elles ne seront pas actives avec la version de MySQL utilisée. Remplissage des tables FILMS et ACTEURS On pourra utiliser les données du fichier Films.txt ou prendre les films de son choix, en respectant les contraintes suivantes: - films existant réellement; - plusieurs films d'un même réalisateur; - plusieurs films d'un même acteur. 10
Vue d'ensemble du site 11
Site VideoExpress (2 ème partie) L'application comportera un site "client" et un sous-site de "gestion". Le site "client" offrira les services suivants: Descriptif d un film ; Recherche de films ; Commande de cassettes ; Liste des cassettes détenues. Les deux premiers services seront en accès libre, alors que les deux derniers seront réservés aux abonnés. Le sous-site de gestion permettra aux administrateurs de "videoexpress" d'enregistrer les retours de cassettes et de gérer les abonnés. Les pages constituant le sous-site de gestion seront placées dans un répertoire GESTION, placé sous la racine du site "client", et donc frère du répertoire BD défini en 1 ère partie. Pour accéder à ces pages, il faudra fournir les mêmes nom d utilisateur et mot de passe, que pour accéder à la base de données. I. Pages d'accueil du site "Client" 1. Créer la page d accueil du site "client", Accueil.php. Cette page, dont l'extension php sera utile à la 5 ème partie, présentera le menu des services disponibles sur le site. Chaque élément du menu sera associé à la page d accueil du service concerné, par un lien hypertexte : Descriptif d un film sera lié à la page AccueilDescriptif.php ; Recherche de films sera lié à la page AccueilRecherche.php ; Commande de cassettes sera lié à la page IdentificationC.php; Liste des cassettes détenues sera lié à la page IdentificationD.php. Le haut de page comportera un en-tête affichant, entre deux lignes horizontales, le nom du site (VideoEXPRESS) en gros caractères et les noms des auteurs de la page en petits caractères ( Dupont et Durant). 2. Créer la page AccueilDescriptif.php. Cette page comportera : - le titre de la rubrique ( Descriptif d un film ) : - le champ de saisie d un numéro de film ; - un bouton d envoi ; - une bannière d en-tête affichant, entre deux lignes horizontales, le nom du site (VideoEXPRESS), les noms des auteurs de la page, ainsi qu un menu de navigation vers la page d accueil du site et chacun des autres services ; on créera cette bannière à l aide de la fonction banniere définie dans le fichier d inclusion Outils.inc (cf. tâche 5). La page de réponse sera générée par le fichier Descriptif.php. 3. Créer la page IdentificationC.php, qui demande le nom et le numéro d abonné et appelle la page Commande.php. Les zones de saisie seront nommées NOM et PASS. Comme toutes les pages du site, cette page comportera une bannière d en-tête avec un menu de navigation vers les autres services, en utilisant la fonction banniere du fichier Outils.inc. 4. Créer la page IdentificationD.php, qui demande le nom et le numéro d abonné et appelle la page Detenues.php. Comme toutes les pages du site, cette page offrira un menu de navigation vers les autres services. 5. Ecrire le fichier Outils.inc définissant la fonction banniere($page,$auteurs) qui affiche, entre deux lignes horizontales, le nom du site (VideoEXPRESS), les noms des auteurs de la page courante ( $auteurs), 12
ainsi qu un menu de navigation vers la page d accueil principale du site et vers les pages d accueil des différents services offerts ; elle admet en paramètre la référence de fichier de la page d'accueil du service, qui ne devra pas figurer au menu (en principe, le service courant). II. Premières pages du site "Gestion" 6. Créer une page index.htm qui demande le nom et le mot de passe d administration et appelle la page Menu.php. 7. Créer la page Menu.php. Cette page : - vérifie les nom et mot de passe fournis ; - s ils sont incorrects, elle affiche un message approprié et propose un retour à la page précédente pour refaire la saisie ; - sinon, elle affiche le menu des opérations disponibles (Retour de cassettes, Enregistrer de nouveaux abonnés, Modifier des fiches d abonnés, Radier des abonnés), avec un lien de l item Retour de cassettes vers la page AccueilRetour.php. 8. Créer la page AccueilRetour.php qui affiche un formulaire de saisie du numéro de film et du numéro d exemplaire de la cassette à rentrer, avec un bouton de soumission appelant la page Retour.php. 13
I. Fonctions utilitaires Site VideoExpress (3 ème partie) On ajoutera les fonctions suivantes au fichier Outils.inc: 1. la fonction DB_connect() effectue une demande de connexion au serveur mysql (à l aide de mysql_connect), sélectionne la base de données (à l aide de mysql_select) ; en cas d échec, elle affiche un message d erreur approprié et renvoie 0 ; sinon, elle renvoie la valeur de l identifiant de connexion ; 2. la fonction DB_execSQL($req, $serv) exécute la requête $req avec la connexion d identifiant $serv (à l aide de mysql_query) ; en cas d échec, elle affiche un message d erreur approprié et renvoie 0 ; sinon, elle renvoie la valeur de l identifiant de résultat. II. Recherche de films 3. Ecrire la page d'accueil de ce service (AccueilRecherche.php) comportant: - le titre de la rubrique (Recherche de films) ; - une zone de saisie de texte où l utilisateur pourra taper des mots du titre ; - une liste déroulante permettant de choisir le support (DVD, VHS, indifférent) ; - une liste déroulante permettant de spécifier la disponibilité du film (disponible, indifférent) ; - une liste déroulante permettant de choisir le genre du film (Comédie, Comédie dramatique, Drame,, ou Genre indifférent) ; - une liste déroulante permettant de choisir le nom du réalisateur ; - une liste déroulante permettant de choisir le nom d un acteur ; - un bouton d envoi ; - une bannière d en-tête avec un menu de navigation (en utilisant la fonction banniere du fichier Outils.inc). Les options des trois dernieres listes déroulantes (Genre, Réalisateur et Acteur) seront construites grâce à du code PHP, qui recherchera les valeurs possibles dans la base de données. On utilisera directement, dans un premier temps, les fonctions d interface de PHP et mysql, pour la connexion à la base, l exécution des requêtes et la gestion des erreurs. On simplifiera le code, dans un deuxième temps, en utilisant les fonctions définies dans le fichier Outils.inc, pour ces opérations (cf. paragraphe I.); on mettra alors en commentaire les lignes de la programmation précédente. 4. Ecrire la page Recherche.php constituant la réponse à la page de formulaire AccueilRecherche.php (cf. tâche 3). Comme toutes les pages du site, cette page comportera une bannière d en-tête avec un menu de navigation vers les autres services, en utilisant la fonction banniere du fichier Outils.inc. Comme pour la tâche précédente, n utilisera, dans un premier temps, les fonctions d interface de PHP et mysql, puis les fonctions DB_connect et DB_execSQL du fichier Outils.inc. 14
III. Descriptif d'un film 5. Composer le fichier Descriptif.php constituant la réponse à la page de formulaire AccueilDescriptif.php, de façon à générer l affichage des éléments suivants, pour le film dont le numéro a été fourni dans la page précédente: Numéro du film ; Titre ; Nationalité ; Réalisateur : Année de production, Couleur/Noir et Blanc, Durée ; Résumé ; Genre ; Liste des principaux acteurs. Ces différentes informations seront extraites de la base de données stockée sur le serveur. On utilisera ici les fonctions définies en I. La présentation de cette page de réponse devra être claire et agréable ; on pourra, par exemple, utiliser des tableaux pour structurer les éléments de réponse. La page comportera enfin une bannière d en-tête avec un menu de navigation, grâce à la fonction banniere du fichier Outils.inc. IV. Cassettes détenues par un abonné 6. Créer la page Detenues.php constituant la réponse à la page de formulaire IdentificationD.php. Comme toutes les pages du site, cette page comporte une bannière d en-tête avec un menu de navigation dans le site, grâce à la fonction banniere du fichier Outils.inc. De plus, elle : vérifie que l abonné est bien enregistré dans la base avec le nom et le code indiqués à la page précédente ; si ce n est pas le cas, elle affiche un message approprié ; le menu de navigation doit alors permettre d aller vers un autre service, ou de retourner à la page précédente pour recommencer la saisie ; sinon, la page affiche la référence (numéro de film et numéro d exemplaire), le titre, le réalisateur et la date d emprunt de chacune des cassettes détenues par l abonné ; ou un message approprié, si le nombre de cassettes détenues par l abonné est nul, ; le menu de navigation de la bannière d en-tête ne propose alors que les autres services du site. Tester les pages de ce service, après avoir affecté des cassettes (films 1 à 9) aux deux premiers abonnés de la table des abonnés, en modifiant, de façon cohérente, les tables ABONNES (colonne NbCassettes), CASSETTES (colonne Statut) et EMPRES à l'aide de l'interpréteur de commandes mysql. Les parties 3 et 4 du projet nécessitent l'utilisation de fonctions permettant de traiter une date dans une requête MySQL (pages Detenues.php, confirmecommande.php, executecommande.php). Les fonctions suivantes pourront notamment être utiles: 15
Date et heure courante: NOW() Conversion d'une donnée de type datetime en Timestamp UNIX: UNIX_TIMESTAMP(date) Ajout ou soustraction d'une durée à une date (type date ou datetime): DATE_ADD(date, INTERVAL expr type) DATE_SUB(date, INTERVAL expr type) où expr est la durée et où type est l'unité dans laquelle cette dernière est exprimée (SECOND, MINUTE, HOUR, DAY, WEEK, MONTH, YEAR,...) Extraction des composants d'une donnée de type datetime: EXTRACT(type FROM date) les valeurs possibles du type étant identiques à celles des fonctions DATE_ADD et DATE_SUB. 16
I. Retour de cassettes Site VideoExpress (4 ème partie) 1. Créer la page Retour.php appelée par la page de formulaire AccueilRetour.php créée en 2 ème partie : met à jour la colonne Statut de la table CASSETTES, pour la cassette concernée ; met à jour la colonne NbCassettes de la table ABONNES ; supprime la ligne concernée dans la table EMPRES ; affiche un message rendant compte du déroulement de l opération. Tester les pages de ce service, après avoir affecté des cassettes (films 10 à 18) aux troisième et quatrième abonnés de la table des abonnés, en modifiant, de façon cohérente, les tables ABONNES (colonne NbCassettes), CASSETTES (colonne Statut) et EMPRES grâce à l'interpréteur de commandes mysql. II. Commande de cassettes 2. Créer la page Commande.php appelée par la page de formulaire IdentificationC.php créée en 2 ème partie : vérifie que l abonné est bien enregistré dans la base avec le nom et le numéro indiqués à la page précédente ; si ce n est pas le cas, elle affiche un message approprié, et un menu de navigation permettant d aller vers un autre service, ou de retourner à la page précédente pour recommencer la saisie ; sinon, elle affiche le nombre maximum de films que l abonné peut commander, compte tenu des films qu il détient déjà (le total ne pouvant pas dépasser 3) ; puis elle affiche un tableau à 2 colonnes, dont le nombre de lignes est égal à ce nombre maximum ; sur chaque ligne, la première colonne contient une zone de saisie (nommée NumFilm1 en ligne 1, NumFilm2 en ligne 2, ) pour un numéro de film ; la seconde colonne contient un groupe de deux boutons radio (nommé Support1 en ligne 1, ) pour le choix du support (DVD ou VHS). Le code de l abonné est transmis à la page suivante par un champ caché nommé PASS. Un bouton de soumission de valeur Commander permet d appeler la page ConfirmeCommande.php.. 3. Créer la page ConfirmeCommande.php. Cette page affiche dans un tableau, pour chaque film demandé à la page précédente: le rappel de son numéro, son titre, sa disponibilité ( oui, si le film est disponible pour le support demandé ; sinon, support dans lequel il est disponible, ou non si le film n est disponible ni en VHS, ni en DVD), si le film est disponible, une case à cocher nommée NumFilmi (i=1, 2, 3 ) et ayant pour valeur le numéro du film (déjà cochée si le film est disponible pour le support demandé) ; le numéro d exemplaire de la cassette trouvée est transmis par un champ caché nommé Exi. Les exemplaires trouvés sont notés comme réservés (colonne Statut de la table CASSETTES mise à reservee, ajout 17
d'une ligne dans la table EMPRES), sachant que la réservation n'est valable que durant 5 minutes (au delà des 5 minutes, la cassette sera considérée comme disponible). Un bouton de soumission Commander, appartenant au même formulaire que les élément du tableau précédent, permet d appeler la page ExecuteCommande.php, en lui transmettant le code de l abonné par un champ caché nommé PASS. Le bouton Commander n apparaît que si au moins un film disponible a été choisi ; dans le cas contraire, le message «Vous n avez choisi aucun film disponible» s affiche. La page contient un second formulaire, dont le bouton de soumission Revoir le choix permet de rappeler la page Commande.php, en lui transmettant le code de l abonné par un champ caché nommé PASS. 4. Créer la page ExecuteCommande.php, qui met à jour les tables CASSETTES (colonne Statut), ABONNES (colonne NbCassettes) et EMPRES, pour tous les films cochés à la page précédente. 18
Site VideoExpress (5 ème partie) COOKIES I. Identification de l'abonné On se propose d'utiliser un cookie pour éviter au visiteur de redonner plusieurs fois son nom et son code d'abonné au cours de sa navigation dans le site. Au cours d'une session, il fournira ces indications lors du premier accès à l'un des services réservés aux abonnés (Commande ou Cassettes détenues); ces informations seront alors stockées dans un cookie, nommé identite, structuré comme un tableau: le nom sera placé à l'indice 0, le code à l'indice 1. Lorsque l'abonné retournera dans l'un de ces services, il ne passera pas par le formulaire de saisie de l'identité, mais accèdera directement à la page suivante (Commande.php ou Detenues.php, selon le cas), son nom et son code d'abonné étant disponibles dans le cookie. Il conviendra, pour cela, d'effectuer les modifications suivantes des pages écrites précédemment: 1. Page Detenues.php: Rechercher l'abonné dans la table ABONNES de la base à partir des informations stockées dans le cookie s'il est défini, à partir des informations issues du formulaire de la page précédente sinon. Dans ce dernier cas, définir le cookie si l'abonné est reconnu ; ce cookie disparaîtra à la fermeture du navigateur. 2. Page Commande.php: Modification identique à celle de la page précédente. 3. Page Accueil.php: Si le cookie identite est défini, l'entrée du service Commande sera la page Commande.php, l'entrée du service Cassettes détenues sera la page Detenues.php; sinon, ces services seront respectivement associés aux pages IdentificationC.php et IdentificationD.php. 4. Fichier Outils.inc: Modification de la fonction banniere, analogue à celle du menu de la page précédente. Révision, en conséquence, de l'appel de cette fonction dans les pages Detenues.php, Commande.php, ConfirmeCommande.php et ExecuteCommande.php. II. Panier électronique On se propose d'utiliser un cookie pour mettre à la disposition du visiteur, la liste des films qui l'ont intéressé au cours de sa consultation du site (service Recherche de films, service Descriptif d'un film) : il pourra placer, dans ce panier électronique, la référence des films de son choix (parmi les films obtenus en résultat d'une recherche, ou parmi ceux dont il aura demandé le descriptif détaillé) ; il pourra ensuite se référer à cette sélection pour consulter le service Descriptif d'un film s'il vient du service Recherche de films, ou pour passer commande. Cette sélection restera disponible d'une session à l'autre. Pour cela: 5. Ecrire une page index.htm définissant un partage horizontal de la fenêtre du navigateur en deux cadres: un cadre, nommé Principal, qui affichera l'ensemble des pages écrites jusqu'à présent (au démarrage, ce cadre affichera la page Accueil.php); un cadre, nommé Panier, où sera affiché, le moment venu, le contenu du panier, ainsi que tous les messages concernant des opérations sur le panier; au démarrage, ce cadre affichera une page Panier.htm comportant deux boutons permettant de voir le contenu du panier ou de vider le panier, en appelant respectivement les pages VoirSelection.php et SuppSelection.php dans le cadre courant. 19
6. Ajouter, à la page Descriptif.php: un bouton AjoutSelection qui appelle la page AjoutSelection.php dans le cadre Panier, en lui transmettant le numéro du film concerné par un champ caché; un bouton VoirSelection qui appelle la page VoirSelection.php dans le cadre Panier. 7. Ajouter, à la page Recherche.php: un bouton AjoutSelection semblable à celui de la page précédente, pour chacun des films trouvés en résultat de la recherche; un bouton VoirSelection semblable à celui de la page précédente. 8. Le panier électronique sera réalisé par un cookie, nommé selection, structuré comme un tableau: on stockera, à l'indice 0, le nombre total de films placés dans le panier; les numéros des films sélectionnés seront successivement placés à l'indice 1, puis 2, puis 3 Ce cookie restera disponible après la fermeture du navigateur, pendant un mois. Ecrire la page AjoutSelection.php qui ajoute un film au panier. Pour cela, elle: incrémente de 1 le nombre de films enregistré en case 0 du cookie selection, s'il est déjà défini; crée le cookie en initialisant cette valeur à 1, sinon; place le nouveau numéro de film dans la prochaine position libre du cookie; affiche le message "Film ajouté". 9. Ecrire la page VoirSelection.php qui affiche la liste des films du panier. Pour cela, elle: affiche le messsage "Aucun film sélectionné", si le cookie n'est pas défini ou s'il indique un nombre de films nul à l'indice 0 sinon, elle : affiche les numéros de films stockés dans le cookie, ainsi que les titres de ces films (en recherchant cette dernière information dans la base de données); place, en regard de chaque référence de film, une case à cocher (nommée Case1 pour le premier film, Case2 pour le deuxième.); toutes les cases appartiennent à un même formulaire, dont le bouton de soumission Supprimer appelle la page SuppSelection.php dans le cadre Panier; affiche un bouton ViderSelection appelant la page ViderSelection.php dans le cadre Panier. 10. Ecrire la page SuppSelection.php qui retire du panier les films cochés à la page précédente (VoirSelection.php). Pour cela, elle: recopie, dans le cookie selection, les seuls numéros des films dont la case n'a pas été cochée dans la page précédente ; ajuste le nombre total de film en selection[0]; affiche le nombre de films supprimés; affiche un bouton VoirSelection fonctionnant comme en 2.2. 11. Ecrire la page ViderSelection.php qui retire tous les films du panier. Pour cela, elle: met à 0 le nombre de films stocké en selection[0]; transforme le cookie selection en cookie temporaire, disparaissant à la fermeture du navigateur 20