Compte rendu de TP n°4 Base de données avancée en PHPgalerneau.pierre.free.fr/Comptes...

87
Cours : Web Dynamique 2 (WD2) Professeur : M. J.P. Delcroix Compte rendu de TP n°4 Base de données avancée en PHP Gestion d’un camping Auteur : Pierre Galerneau Année Universitaire : 2008 / 2009

Transcript of Compte rendu de TP n°4 Base de données avancée en PHPgalerneau.pierre.free.fr/Comptes...

Page 1: Compte rendu de TP n°4 Base de données avancée en PHPgalerneau.pierre.free.fr/Comptes Rendus/Camping_final.pdfNavale), les bases de données ne dépassaient pas trois tables (que

Cours : Web Dynamique 2 (WD2) Professeur : M. J.P. Delcroix

Compte rendu de TP n°4

Base de données avancée en PHP

Gestion d’un camping

Auteur : Pierre Galerneau Année Universitaire : 2008 / 2009

Page 2: Compte rendu de TP n°4 Base de données avancée en PHPgalerneau.pierre.free.fr/Comptes Rendus/Camping_final.pdfNavale), les bases de données ne dépassaient pas trois tables (que

2

Page 3: Compte rendu de TP n°4 Base de données avancée en PHPgalerneau.pierre.free.fr/Comptes Rendus/Camping_final.pdfNavale), les bases de données ne dépassaient pas trois tables (que

3

Résumé

L’objectif de ce quatrième et dernier TP de Web Dynamique 2 faisant l’objet d’un compte rendu était de réaliser un site permettant de gérer un camping de l’arrivée des clients à leur départ en leur permettant de louer des emplacements, des matériels supplémentaires tels que des planches à voile ou des bateaux, etc. De plus, ce site devait permettre l’affichage de statistiques et gérer la comptabilité simplifiée du camping en permettant l’affichage du chiffre d’affaire journalier, saisonnier, etc. J’ai du mettre en œuvre toutes les compétences acquises en cours de Web Dynamique 2, notamment en PHP ainsi que celles acquises en Système d’information (bases de données) afin de mener à bien ce projet. De plus, j’ai tenté de limiter au maximum les répétitions de code au sein de mon site afin d’en rendre le code plus propre et plus clair à comprendre.

Page 4: Compte rendu de TP n°4 Base de données avancée en PHPgalerneau.pierre.free.fr/Comptes Rendus/Camping_final.pdfNavale), les bases de données ne dépassaient pas trois tables (que

4

Tab le des ma t iè res

Introduction ................................................................................................................................ 1

1 Présentation du projet ......................................................................................................... 2

2 La base de données ............................................................................................................. 2

2.1 Esquisse ....................................................................................................................... 2 2.2 La table camping_tarifs ............................................................................................... 3 2.3 La table camping_places ............................................................................................. 4 2.4 La table camping_stats ................................................................................................ 6 2.5 La table camping_caution ............................................................................................ 7 2.6 La table camping_ca .................................................................................................... 8 2.7 La base de données en général .................................................................................... 9

3 Mes choix de programmation ........................................................................................... 11

3.1 Choix d’architecture .................................................................................................. 11 3.1.1 Architecture et organisation des pages ............................................................... 11

3.1.2 Les différentes pages du site .............................................................................. 13 3.2 Quelle présentation adopter ? .................................................................................... 31

4 Explication du code .......................................................................................................... 32

4.1 Arbres programmatiques et explication hors programmation ................................... 32

4.1.1 Algorithme d’affichage des tarifs et des factures client ..................................... 33

4.1.2 Algorithme d’enregistrement d’une location ..................................................... 34

4.2 Détail des fonctionnalités de chaque page ................................................................. 35 4.2.1 L’accueil : la page accueil.php ........................................................................... 35 4.2.2 Insertion des barèmes de taris : la page baremes.php......................................... 36

4.2.3 Affichage des tarifs : la page aff_tarif.php ......................................................... 37

4.2.4 Initialisation des bases de données ..................................................................... 38

4.2.5 Initialisation de la table camping_stats .............................................................. 38

4.2.6 Ajout d’un client : la page enreg_entree.php ..................................................... 39

4.2.7 Ajout de locations supplémentaires : la page enreg_loc.php ............................. 40

4.2.8 Enregistrement d’un départ : la page depart.php ................................................ 41

4.2.9 Affichage des places disponibles : le fichier liste_places.php ........................... 41

4.2.10 Affichage du compte d’un campeur ................................................................... 42

4.2.11 Les statistiques saisonnières : page stats.php ..................................................... 42

4.2.12 Statistiques journalières : la page stop.php ........................................................ 43

4.3 Les erreurs et problèmes rencontrés .......................................................................... 43 4.3.1 L’affichage d’une facture formatée .................................................................... 43

4.3.2 Opérations sur les dates ...................................................................................... 44 Conclusion ................................................................................................................................ 45

Annexes .................................................................................................................................... 46

Annexe 1 : la page accueil.php ................................................................................................. 47

Annexe 2 : la page biremes.php ............................................................................................... 49

Annexe 3 : la page aff_tarifs.php ............................................................................................. 55

Annexe 4 : la page tarifs.php .................................................................................................... 56

Page 5: Compte rendu de TP n°4 Base de données avancée en PHPgalerneau.pierre.free.fr/Comptes Rendus/Camping_final.pdfNavale), les bases de données ne dépassaient pas trois tables (que

5

Annexe 5 : mise à jour de la table camping_places : le fichier maj_places.php ...................... 58

Annexe 6 : mise à jour des tables camping_ca et camping_stats ............................................. 60

Annexe 7 : enregistrement d’un client : la page enreg_entree.php .......................................... 63

Annexe 8 : affichage des disponibilités : la page liste.php ...................................................... 67

Annexe 9 : enregistrement d’une location supplémentaire ; la page enreg_loc.php ................ 69

Annexe 10 : enregistrement d’un départ : la page depart.php .................................................. 73

Annexe 11 : affichage des statistiques saisonnières, la page stats.php .................................... 78

Annexe 12 : affichage des statistiques journalières, la page stop.php ..................................... 80

Page 6: Compte rendu de TP n°4 Base de données avancée en PHPgalerneau.pierre.free.fr/Comptes Rendus/Camping_final.pdfNavale), les bases de données ne dépassaient pas trois tables (que

1

I n t roduc t ion

Dans ce dernier (4eme) rapport de Web Dynamique 2, je vas présenter les différents aspects de la réalisation d’un site professionnel permettant la gestion d’un camping. Ce site n’est pas destiné au public mais seulement aux professionnels du camping qui l’utiliseront comme interface de gestion. Ce rapport va donc me permettre de mettre sur papier et d’expliquer en détail la réflexion qu’il m’a été nécessaire de mettre en œuvre pour réaliser ce site.

Dans ce TP, comme dans les deux précédents, l’objectif principal était d’utiliser les bases

de données MySQL en ¨PHP. Ce rapport va donc être également l’occasion d’expliquer les différentes choses que j’ai pu utiliser en PHP ou en MySQL et surtout, comment j’ai fais pour organiser les données utiles au sein de bases de données et de tables MySQL.

Comme ce projet ne s’est pas réalisé en une seule étape, il est intéressant de se poser la question suivante pour comprendre comment j’ai pu en arriver au résultat final :

Quelles étapes et quels choix ont étés nécessaires à la réalisation en bonne et due forme d’un magasin de vente par correspondance en PHP utilisant bases de données MySQL comme sauvegarde de données Je vais donc tenter de répondre le plus clairement possible à toutes les questions soulevées par cette problématique au sein de ce rapport

Page 7: Compte rendu de TP n°4 Base de données avancée en PHPgalerneau.pierre.free.fr/Comptes Rendus/Camping_final.pdfNavale), les bases de données ne dépassaient pas trois tables (que

2

1 Présen ta t ion du p ro je t

Ce projet est le dernier « gros » TP que nous avons eu à réaliser en cours de Web

Dynamique 2 cette année. Son objectif était donc une sorte de récapitulatif de tout ce que nous avons vu; c'est-à-dire notamment la gestion de bases de données au moyen de MySQL et de PHP. L’objectif de ce projet étant de récapituler nos connaissances sur PHP et MySQL, je vais développer particulièrement les parties base de données et explication de code PHP de ce rapport afin de répondre aux objectifs. Ce site ne doit pas, contrairement aux sujet de TP précédents, permettre à plusieurs types d’utilisateurs différents de se connecter. En effet, seuls les employés du camping y auront accès, il est donc inutile de mettre en place un système de connexion par mot de passe. Tous les utilisateurs auront donc les mêmes droits et l’autorisation de faire la même chose, c'est-à-dire, tout ! Maintenant que les bases du projet sont posées et que l’on comprend qui pourra faire quoi sur notre site, il est nécessaire d’expliquer comment sont gérées les données et comment elles ont organisées entre elles au sein de nos tables.

2 La base de données

Dans ce projet, la base de données est une des plus complexes que j’ai eu à mettre en œuvre au cours du module Web Dynamique 2. En effet, dans les TP précédents (sauf la Bataille Navale), les bases de données ne dépassaient pas trois tables (que ce soit des bases MySQL ou en fichier texte). Ici, la base en compte 5, ce qui en complexifie l’explication. Je vais donc maintenant expliquer l’architecture et l’organisation des tables au sein de cette base afin que l’utilisation et l’importance de chaque table soit précisée. De plus, je vais présenter les scripts de créations de table afin que cette base soit redéployable sur n’importe quel serveur MySQL / PHP.

2.1 Esquisse

Dans ce TP, l’objectif était de réaliser un site permettant la gestion complète d’un camping, du point de vue professionnel, gestionnaire du camping. Pour cela, il nous a donc été nécessaire de mettre en place un certain nombre de tables indispensables au bon fonctionnement du site et au fait que le site puisse « ressortir » toutes les informations demandées par l’utilisateur. De fait, il nous fallait pouvoir conserver des informations sur :

- Les emplacements et les occupants des emplacements, - Les tarifs des différentes locations proposées, - Les cautions versées / encaissées par jour, - Les entrées et sorties d’argent de la caisse, - …

Page 8: Compte rendu de TP n°4 Base de données avancée en PHPgalerneau.pierre.free.fr/Comptes Rendus/Camping_final.pdfNavale), les bases de données ne dépassaient pas trois tables (que

3

Comme le sujet ne précise pas de quelle manière nous devions organiser nos données, je les ai organisées comme je le sentais, c'est-à-dire que j’ai analysé le sujet et qu’il en est ressorti un schéma de base de données contenant 5 tables que je vais détailler une par une ci-dessous. Remarque : comme je l’ai précisé dans les rapports précédents, il nous est nécessaire de préfixer le nom de nos tables par un mot correspondant au TP auquel appartient la table. En effet, nous ne disposons, chez Free, que d’une seule base de données, ce qui nous oblige à stocker toutes les tables de toutes les bases développées durant le cours de Web Dynamique 2 dans la même base mère. L’intérêt de ce préfixe est donc de pouvoir reconnaitre facilement les tables correspondant à un site où à un autre et surtout de ne pas risquer de les confondre au moment d’un appel au moyen d’un script PHP.

2.2 La table camping_tarifs La table camping_tarifs est destinée à contenir tous les prix des différentes prestations proposées par le camping. En effet, ces données doivent pouvoir être enregistrées par les employés du camping, modifiées ou affichées afin que l’on puisse toujours savoir exactement les prix de chaque prestation. Il était donc nécessaire de mettre en place une table ne contenant exclusivement que ces tarifs. Cette table devant pouvoir être modifiée facilement et toujours contenir un certain nombre d’informations, je l’ai construite de la manière suivante :

camping_tarifsidentifiantLibellePrix

Je vais maintenant décrire le type de chaque propriété de cette table : - Identifiant : entier séquentiel unique, - Libellé : caractère variable (chaine de caractères) ; - Prix : entier.

Comme nous utilisons le SQL, il est intéressant de montrer les scripts de créations de tables générés pour chaque table du modèle. En effet, le schéma est destiné à montrer comment la table va se présenter graphiquement, cependant ce n’est qu’une représentation abstraite. Il est donc important de donner également le script SQL de création puisque c’est lui qui va permettre réellement de créer et d’accéder aux tables par la suite. Script de création de la base camping_tarifs :

Page 9: Compte rendu de TP n°4 Base de données avancée en PHPgalerneau.pierre.free.fr/Comptes Rendus/Camping_final.pdfNavale), les bases de données ne dépassaient pas trois tables (que

4

Code

Ce script n’est pas un script de création MySQL mais un script SQL classique. Je pense que ca ne change pas grand-chose de présenter celui-ci plutôt qu’un autre puisque le principe est d’expliquer quel type de script est utilisé pour créer une table en SQL et non de faire un cours de MySQL…

2.3 La table camping_places Cette table est l’une des tables principales de ce site. En effet, c’est elle qui contient tous les emplacements du camping et qui va contenir de ce fait toutes les informations relatives aux clients. En effet, dans ce site, la particularité est que la gestion n’est pas réalisée a partir d’une table contenant les différents clients mais bien à partir des emplacements. La gestion du camping est donc faite par rapport aux emplacements et non pas par rapport aux clients. Ceci est un assez gros changement par rapport à tout ce que nous avons vu avant et cela modifie donc en conséquence la structure de la base de données puisqu’il n’y a pas de table client mais seulement une table emplacements qui contient toutes les données concernant un emplacement :

- Nom du client associé, - Nombre d’adultes, - Nombre d’enfants, - …

En voici la structure :

-- ================================================ ============ -- Table : CAMPING_TARIFS -- ================================================ ============ create table CAMPING_TARIFS ( IDENTIFIANT DECIMAL(6) not null, LIBELLE VARCHAR(50) not null, PRIX INTEGER not null ); -- ================================================ ============ -- Index : CAMPING_TARIFS_PK -- ================================================ ============ create unique index CAMPING_TARIFS_PK on CAMPING_TARIFS (IDENTIFIANT asc);

Page 10: Compte rendu de TP n°4 Base de données avancée en PHPgalerneau.pierre.free.fr/Comptes Rendus/Camping_final.pdfNavale), les bases de données ne dépassaient pas trois tables (que

5

camping_placesididCategorienomOccupantnbAdultesnbEnfantsadherantdisponibledateArriveenbHeuresTennisnbJoursPlanchenbJoursVelonbJoursPechenbJoursBateau

Les différents champs de cette table sont de type : - Id : entier séquentiel non nul unique, - idCategorie : entier correspondant à un enregistrement de la table camping_tarifs, - nomOccupant : chaine de caractères, - nbAdultes : entier, - nbEnfants : entier, - adherant : booléen permettant de savoir si le client est adhérant à la FNCLF, - disponible : booléen permettant de savoir si l’emplacement est disponible, - dateArrivee : date, - nbHeuresTennis : entier permettant de savoir le nombre d’heures ou le client a loué

le court de tennis, - nbJoursPlanche : entier permettant de savoir le nombre de jours où le client a loué

une planche à voile, - nbJoursVelo : entier permettant de savoir le nombre de jours ou le client a loué un

vélo, - nbJoursPeche : entier permettant de savoir le nombre de jours où le client a loué du

matériel de pêche, - nbJoursBateau : entier permettant de savoir le nombre de jours où le client a loué

un petit bateai. Une fois ce schéma établi, il ne reste plus qu’à générer le code SQL correspondant pour créer la table : Code -- ================================================ ============ -- Table : CAMPING_PLACES -- ================================================ ============ create table CAMPING_PLACES ( ID DECIMAL(6) not null, IDCATEGORIE INTEGER not null, NOMOCCUPANT VARCHAR(50) not null, NBADULTES INTEGER not null, NBENFANTS INTEGER not null, ADHERANT DECIMAL(1) not null, DISPONIBLE DECIMAL(1) not null,

Page 11: Compte rendu de TP n°4 Base de données avancée en PHPgalerneau.pierre.free.fr/Comptes Rendus/Camping_final.pdfNavale), les bases de données ne dépassaient pas trois tables (que

6

DATEARRIVEE DATE not null, NBHEURESTENNIS INTEGER not null, NBJOURSPLANCHE INTEGER not null, NBJOURSVELO INTEGER not null, NBJOURSPECHE INTEGER not null, NBJOURSBATEAU INTEGER not null ); -- ================================================ ============ -- Index : CAMPING_PLACES_PK -- ================================================ ============ create unique index CAMPING_PLACES_PK on CAMPING_PLACES (ID asc); Maintenant que nous avons détaillé la création et la structure des deux tables principales de notre site, il est nécessaire de présenter les tables “satellites” qui vont permettre de gérer les comptes, les statistiques et tous les autres traitements que l’on doit effectuer sur ce site.

2.4 La table camping_stats Cette table est celle dans laquelle on enregistre tous le nombre des nouveaux arrivants. C'est-à-dire que, chaque jour, on ajoute le nombre de nouvelles personnes qui sont arrivées au camping dans la journée à cette base. Les enregistrements ne sont supprimés que lorsque la saison est terminée et que l’on décide de réinitialiser la table, sinon, tout est toujours conservé, ce qui permet d’avoir un état du nombre de clients total sur la saison. Ceci est utilisé dans l’onglet « statistiques » du menu. Voici la structure de cette table :

camping_statsidStatnbNouveauCampeursdateArrivee

Les différentes propriétés de cette table sont de type : - idStat : entier séquentiel non nul et unique, - nbNouveauCampeurs : entier non nul, - dateArrivee : date.

Une fois ce schéma établi, il ne reste plus qu’à générer le code SQL correspondant pour créer la table : Code -- ================================================ ============ -- Table : CAMPING_STATS -- ================================================ ============ create table CAMPING_STATS ( IDSTAT DECIMAL(6) not null, NBNOUVEAUCAMPEURS INTEGER not null, DATEARRIVEE DATE );

Page 12: Compte rendu de TP n°4 Base de données avancée en PHPgalerneau.pierre.free.fr/Comptes Rendus/Camping_final.pdfNavale), les bases de données ne dépassaient pas trois tables (que

7

-- ================================================ ============ -- Index : CAMPING_STATS_PK -- ================================================ ============ create unique index CAMPING_STATS_PK on CAMPING_STATS (IDSTAT asc); Il reste encore deux tables à expliquer pour que tout soit clair dans l’organisation des données de ce site. En effet, pour l’instant, il est possible d’enregistrer des données sur :

- les tarifs des locations, - sur les places disponibles dans le camping et sur les utilisateurs concernés, - les statistiques (nombre de client total).

Cependant il est nécessaire de pouvoir en savoir plus, notamment au niveau des entrées et sorties de cautions. Pour cela, j’ai donc mis en place :

2.5 La table camping_caution Cette table est celle qui est destinée à référencer les entrées et sorties de cautions, c'est-à-dire le fait qu’un client paie sa caution en début de séjour et que l’on lui rembourse en fin de séjour. Cette table est nécessaire car il faut pouvoir effectuer un affichage de toutes les cautions encaissées et décaissées jour par jour. Il faut donc les enregistrer quelque part afin de pouvoir y accéder par la suite ! Structure de cette table :

camping_cautionidCautionmontantnomOccupantCorrespondantrenduOuEncaisse

Les différentes propriétés de cette table sont de type : - idCaution : entier séquentiel non nul et unique, - montant : entier non nul, - nomOccupantCorrespondant : chaine de caractère non nulle, - renduOuEncaisse : booléen.

Une fois ce schéma établi, il ne reste plus qu’à générer le code SQL correspondant pour créer la table : Code -- ================================================ ============ -- Table : CAMPING_CAUTION -- ================================================ ============ create table CAMPING_CAUTION ( IDCAUTION DECIMAL(6) not null, MONTANT INTEGER not null, NOMOCCUPANTCORRESPON VARCHAR(50) not null,

Page 13: Compte rendu de TP n°4 Base de données avancée en PHPgalerneau.pierre.free.fr/Comptes Rendus/Camping_final.pdfNavale), les bases de données ne dépassaient pas trois tables (que

8

RENDUOUENCAISSE DECIMAL(1) not null ); -- ================================================ ============ -- Index : CAMPING_CAUTION_PK -- ================================================ ============ create unique index CAMPING_CAUTION_PK on CAMPING_CAUTION (IDCAUTION asc); Enfin, la dernière table de la base de données du camping correspond à celle où l’on enregistre les mouvements de caisse afin de pouvoir obtenir le chiffre d’affaire total réalisé sur la saison.

2.6 La table camping_ca Cette table est destinée à enregistrer les différentes entrées et sorties d’argent, en dehors des cautions. De fait, il est demandé de pouvoir afficher l’état du chiffre d’affaire total depuis le début de la saison. Il ne faut pas intégrer les cautions car elles s’annulent : lorsqu’un utilisateur arrive il paie sa caution et quand il repart, on la lui rembourse. Ceci ne fait donc pas partie des mouvements de caisse correspondants au chiffre d’affaire. Structure de cette table :

camping_caidMouvementCAmontantCAdateMvtCA

Les différentes propriétés de cette table sont de type : - idMouvementCA : entier séquentiel non nul et unique, - montantCa : entier non nul, - dateMvtCA : date correspondant au nouvel enregistrement

Une fois ce schéma établi, il ne reste plus qu’à générer le code SQL correspondant pour créer la table : Code -- ================================================ ============ -- Table : CAMPING_CA -- ================================================ ============ create table CAMPING_CA ( IDMOUVEMENTCA DECIMAL(6) not null, MONTANT INTEGER , DATEMVTCA DATE not null ); -- ================================================ ============ -- Index : CAMPING_CA_PK -- ================================================ ============ create unique index CAMPING_CA_PK on CAMPING_CA (IDMOUVEMENTCA asc);

Page 14: Compte rendu de TP n°4 Base de données avancée en PHPgalerneau.pierre.free.fr/Comptes Rendus/Camping_final.pdfNavale), les bases de données ne dépassaient pas trois tables (que

9

Maintenant qu chaque table a été présentée en détail, présentons la base de données dans son ensemble :

2.7 La base de données en général Dans ce projet, la base de données se compose de tables Cependant, il n’est pas évident d’extraire un modèle de leur organisation car, le fait notamment que les places soient considérée comme unité de gestion principale à la place des personnes, complique un peu le modèle puisque aucune table n’est réellement dépendante des autres il n’y a aucune relation de type « porteuse » (1,n >> 1,n par exemple. Cependant, Je vais présenter ici les modèles qui m’ont permis d’arriver à cette modélisation :

- Le Modèle Conceptuel des Données (MCD), - Le Modèle Physique des Données (MPD). -

Ces deux modèles permettent de définir les données conceptuellement puis en terme de tables SQL, ce qui permet une analyse du problème propre et claire. Le MCD correspondant au camping :

camping_tarifsidentifiantLibellePrix

1,1 1,1

1,1

1,n

1,1

1,n

1,1 1,n

camping_placesididCategorienomOccupantnbAdultesnbEnfantsadherantdisponibledateArriveenbHeuresTennisnbJoursPlanchenbJoursVelonbJoursPechenbJoursBateau

camping_statsidStatnbNouveauCampeursdateArrivee

camping_cautionidCautionmontantCAnomOccupantCorrespondantrenduOuEncaisse

camping_caidMouvementCAmontantCAdateMvtCA

Ajoute

Paie Rembourse

Regle son sejour

Ce schéma permet de représenter le besoin en terme de tables nécessaires à la réalisation du site. On remarque notamment que la table camping_tarifs est indépendante, ce qui signifie qu’elle n’est en relation directe avec aucune autre table. De plus, il est intéressant de remarquer qu’aucune table n’est reliée à une autre par des cardinalités de type 0,n 0,n ou 1,n

Page 15: Compte rendu de TP n°4 Base de données avancée en PHPgalerneau.pierre.free.fr/Comptes Rendus/Camping_final.pdfNavale), les bases de données ne dépassaient pas trois tables (que

10

1,n. Ceci veut dire qu’aucune table de ce modèle ne contient d’informations reliées à deux tables différentes comme cela pourrait être le cas pour une gestion de site d’achat / vente par exemple. MPD de la gestion de camping :

CAMPING_TARIFSIDENTIFIANTLIBELLEPRIX

CAMPING_PLACESIDIDSTATIDCAUTIONCAM_IDCAUTIONIDCATEGORIENOMOCCUPANTNBADULTESNBENFANTSADHERANTDISPONIBLEDATEARRIVEENBHEURESTENNISNBJOURSPLANCHENBJOURSVELONBJOURSPECHENBJOURSBATEAU

CAMPING_STATSIDSTATIDNBNOUVEAUCAMPEURSDATEARRIVEE

CAMPING_CAUTIONIDCAUTIONMONTANTNOMOCCUPANTCORRESPONRENDUOUENCAISSE

CAMPING_CAIDMOUVEMENTCAIDMONTANTDATEMVTCA

Le MPD correspondant, quant à lui, au nombre réel de tables à créer pour que le site soit fonctionnel. Remarque : Je pense que l’architecture de ma base de données n’est pas parfaite, cependant je n’ai réalisé mon erreur que trop tard, une fois que le projet était presque terminé. Je n’ai vu les erreurs de modélisations que trop tard, du fait, je n’ai pas pu tout changer. Je pense notamment qu’il aurait été plus clair de faire une table « places » et une table « clients » reliées par une table « loue », ce qui aurait permis de faire la même chose que maintenant avec la table camping_places mais de manière plus propre. Maintenant que la structure de la base de données nécessaire au bon fonctionnement du site et celle des tables la composant a été expliquée, je vais décrire les choix que j’ai eu à faire lors de la programmation de ce projet.

Page 16: Compte rendu de TP n°4 Base de données avancée en PHPgalerneau.pierre.free.fr/Comptes Rendus/Camping_final.pdfNavale), les bases de données ne dépassaient pas trois tables (que

11

3 Mes cho ix de p rog rammat ion

Pour réaliser ce projet, nous n’avons pas eu le choix du langage puisque l’objectif du cours est d’apprendre le PHP et MySQL ! Cependant, il nous est resté de nombreuses choses à décider, notamment au niveau de :

- L’accessibilité utilisateur, - L’organisation des données - Etc.

Il a de plus fallu décider de quelle interface nous allions doter le site afin de permettre aux utilisateurs de l’utiliser le plus agréablement et le plus simplement possible. De fait, ce site ne devant pas être accessible au public, l’important est que l’interface soit fonctionnelle et pratique plutôt que belle et colorée ! En effet, seuls les employés du camping seront amené à l’utiliser, il n’y a donc pas besoin de faire un site vitrine, il suffit que l’interface soit claire et pratique.

3.1 Choix d’architecture Pour réaliser ce site, j’ai choisi une architecture classique, c'est-à-dire que chaque fonction principale est réalisée dans une page PHP particulière. Cependant, certaines pages (notamment celles permettant l’affichage de bases de données), sont des pages contenants plusieurs choix et donc plusieurs « sous pages » différentes, comme je l’avais fais pour la réalisation de la DVD Tech (compte rendu n°1).

3.1.1 Architecture et organisation des pages Comme dans ce site je n’ai pas besoin de faire une interface de connexion, les pages s’enchainent à partir du moment où un utilisateur se connecte sur le site. En effet, le site est destiné à un public très restreint et professionnel. Il n’y a donc aucunement besoin d’interface de connexion et donc, tout est accessible dès l’arrivé du visiteur sur le site. Selon ce qu’il veut faire, l’utilisateur présent sur le site peu accéder à différentes pages lui permettant de :

- Enregistrer une entrée, - Enregistrer une sortie, - Enregistrer une location supplémentaire pour un client, - Afficher la facture d’un client au moment présent, - Afficher des statistiques, - …

Toutes ces fonctionnalités sont accessibles à partir de la page d’accueil du site, cependant, je pense qu’il est important de montrer l’enchainement des pages du site au moyen d’un schéma :

Page 17: Compte rendu de TP n°4 Base de données avancée en PHPgalerneau.pierre.free.fr/Comptes Rendus/Camping_final.pdfNavale), les bases de données ne dépassaient pas trois tables (que

12

Page 18: Compte rendu de TP n°4 Base de données avancée en PHPgalerneau.pierre.free.fr/Comptes Rendus/Camping_final.pdfNavale), les bases de données ne dépassaient pas trois tables (que

13

Même si l’arborescence des pages est présentée ci-dessus, il est important que j’explique certains autres choix que j’ai fais concernant l’architecture du site, notamment au niveau du menu.

3.1.2 Les différentes pages du site J’ai déjà présenté en gros les différentes pages accessibles dans la section précédente, cependant, je pense qu’il est bon que je fasse une section dans laquelle je présente plus en détail chaque page de manière à présenter les choix graphiques que j’ai fais et les possibilités qu’un utilisateur a sur chaque page du site. Cette section n’est pas destinée à présenter la manière dont les pages sont générées par le serveur, mais seulement les choses qu’elles proposent aux utilisateurs, les différentes fonctions et possibilités proposées.

L’accueil

Lorsqu’un utilisateur arrive sur le site, il arrive sur cette page Il n’a pas besoin de se connecter au sens propre puisque ce site ne différencie pas les utilisateurs les uns des autres. Cette page lui propose donc tous les traitements auxquels il a accès sous forme de liens :

Page 19: Compte rendu de TP n°4 Base de données avancée en PHPgalerneau.pierre.free.fr/Comptes Rendus/Camping_final.pdfNavale), les bases de données ne dépassaient pas trois tables (que

14

Ces liens sont classés par grande catégories : - Traitements annuels, - Traitements journaliers.

En effet, différentes choses sont possibles sur ce site, notamment mettre à jour les bases de données (ou les supprimer). J’ai donc mis à part les liens permettant de réaliser les mises à zéro de base de données afin d’éviter au maximum les erreurs lors d’un clic malencontreux qui entrainerait un effacement total des bases. De plus, j’ai créé des sous catégories à l’aide de titres intermédiaires dans le cadre « traitements journaliers » parce que je trouvais ce cadre trop rempli. En effet, cela devenait illisible et surchargé du fait du nombre très important de liens présents les uns en dessous des autres. Je trouve que, de cette manière, c’est beaucoup plus clair et plus propre. Cela permet un repérage beaucoup plus rapide dans les différents liens de la page.

Modification des tarifs de location

Lorsqu’un utilisateur choisi de modifier les tarifs de location (normalement une fois par an), il se rend sur la page suivante :

Page 20: Compte rendu de TP n°4 Base de données avancée en PHPgalerneau.pierre.free.fr/Comptes Rendus/Camping_final.pdfNavale), les bases de données ne dépassaient pas trois tables (que

15

Cette page présente tous les articles pour lesquels il faut fixer un prix ainsi qu’un formulaire associé. Dans ce formulaire, on affiche pour chaque prestation le tarif enregistré actuellement afin que l’utilisateur puisse l’avoir sous les yeux directement, sans avoir besoin de retourner voir dans la page permettant l’affichage des tarifs. Lorsqu’un utilisateur choisi de modifier le prix d’un produit, il lui suffit de le modifier dans le formulaire puis de valider son choix au moyen du bouton « Modifier ». Lorsque ce choix est validé, le prix est modifié dans la base. Pour vérification, il suffira à l’utilisateur de se rendre sur la page permettant l’affichage des tarifs. En effet, la page de modification n’étant pas rechargée, le prix modifier ne sera pas affiché juste après le clic sur le bouton « modifier » mais après une actualisation (ou la modification du prix d’un autre article).

Affichage des tarifs

Page 21: Compte rendu de TP n°4 Base de données avancée en PHPgalerneau.pierre.free.fr/Comptes Rendus/Camping_final.pdfNavale), les bases de données ne dépassaient pas trois tables (que

16

Afin de permettre à un utilisateur de voir le prix de chaque prestation à tout moment de la saison, j’ai mis en place une page affichant la liste des taris selon les locations. En effet, il est important de pouvoir visualiser les tarifs à tout moment car l’utilisateur ne se souvient pas forcément de tout et il doit pouvoir renseigner efficacement les clients. C'est-à-dire qu’il doit avoir accès à toutes les informations importantes le plus rapidement possible.

Cette page n’est qu’une simple page d’affichage, il ne se passe donc pas grand-chose d’intéressant dessus !

Enregistrement d’un client

Lorsqu’un nouveau client arrive au camping et souhaite louer un emplacement, l’employé se rend dans la catégorie « Enregistrement d’une entrée » afin d’enregistrer le nouvel arrivant. Sur cette page, il a accès à différentes choses lui permettant de renseigner précisément le nouvel arrivant :

- La liste des places disponibles, - La liste des tarifs, - Un lien vers l’enregistrement à proprement parler.

Page 22: Compte rendu de TP n°4 Base de données avancée en PHPgalerneau.pierre.free.fr/Comptes Rendus/Camping_final.pdfNavale), les bases de données ne dépassaient pas trois tables (que

17

Celui lui permet d’avoir toutes les informations importantes à portée de clic et donc de pouvoir répondre à toutes les questions de client sans aucun problème. Lorsque l’utilisateur choisi d’afficher la liste des disponibilités, la page suivante s’affiche :

Page 23: Compte rendu de TP n°4 Base de données avancée en PHPgalerneau.pierre.free.fr/Comptes Rendus/Camping_final.pdfNavale), les bases de données ne dépassaient pas trois tables (que

18

On y voit donc tous les emplacements du camping (un par case), rangés par catégorie. Lorsque le numéro de l’emplacement est affiché, cela signifie qu’il est libre alors que ; si il n’est affiché que des tirets, cela signifie que l’emplacement est déjà loué à la date d’aujourd’hui. Lorsque l’utilisateur souhaite afficher la liste des tarifs afin de pouvoir renseigner un nouveau client, il lui suffit de cliquer sur le lien correspondant dans cette page d’enregistrement. La page suivante s’affiche alors :

Page 24: Compte rendu de TP n°4 Base de données avancée en PHPgalerneau.pierre.free.fr/Comptes Rendus/Camping_final.pdfNavale), les bases de données ne dépassaient pas trois tables (que

19

On y voit tout simplement un panneau contenant tous les tarifs actuellement en vigueur pour chaque catégorie d’emplacement en location ou de matériel. Ceci permet à l’utilisateur une utilisation plus simple et plus rapide du site : il a tout sous la main quand il le veut. Enfin, sur cette page on peut aussi enregistrer réellement le nouveau campeur (c’est le but de cette page en réalité). Pour cela, il faut cliquer sur le lien « Enregistrer un campeur ». Apparait alors un formulaire dans lequel l’utilisateur du site peut entrer le numéro de l’emplacement que le client souhaiterait louer. Une fois validé, ce formulaire affichera un message signifiant à l’utilisateur si l’emplacement demandé est libre ou non et donc si il est louable ou non ! Cela se présente de la manière suivante :

Page 25: Compte rendu de TP n°4 Base de données avancée en PHPgalerneau.pierre.free.fr/Comptes Rendus/Camping_final.pdfNavale), les bases de données ne dépassaient pas trois tables (que

20

Lorsque l’utilisateur entre un numéro d’emplacement et que celui-ci n’est pas libre, on a l’affichage suivant :

Page 26: Compte rendu de TP n°4 Base de données avancée en PHPgalerneau.pierre.free.fr/Comptes Rendus/Camping_final.pdfNavale), les bases de données ne dépassaient pas trois tables (que

21

Par contre, si l’emplacement est libre, alors on a l’affichage suivant :

Ce nouveau formulaire va alors permettre à l’employé du camping d’entrer toutes les informations nécessaires à l’enregistrement du nouveau client. En l’occurrence, il est nécessaire de savoir le nom du client, le nombre d’adultes et le nombre d’enfants composant la « famille » et si le client est adhérent de la FNCLF (afin d’appliquer ou non une réduction à la fin du séjour). Enfin, lorsque l’enregistrement est terminé et que le client a payé la caution, une page de confirmation est affichée afin de spécifier que le nouveau client a bien été enregistré dans la base de données pour l’emplacement qu’il a choisi et pour le nombre de personnes spécifié ! Voici cet affichage :

Page 27: Compte rendu de TP n°4 Base de données avancée en PHPgalerneau.pierre.free.fr/Comptes Rendus/Camping_final.pdfNavale), les bases de données ne dépassaient pas trois tables (que

22

Une fois que ce message est affiché, le nouvel arrivant est enregistré dans la base de données et son emplacement est bien réserve. L’employé du camping peut alors réaliser d’autres opérations comme notamment :

L’enregistrement de locations supplémentaires

Lorsqu’un client souhaite louer une prestation supplémentaire parmi celles proposées par le camping :

- Court de tennis (à l’heure), - Planche à voile (à la journée), - Matériel de pêche (à la journée), - Vélo (à la journée), - Petit bateau (à la journée),

Il lui suffit de se rendre à l’accueil du camping pour faire enregistrer sa location. Pour cela, l’employé du camping dispose d’un lien « Enregistrer une location ». Lorsqu’il choisi ce lien, voici l’affichage obtenu (zprès sélection du numéro d’emplacement du client concerné)

Page 28: Compte rendu de TP n°4 Base de données avancée en PHPgalerneau.pierre.free.fr/Comptes Rendus/Camping_final.pdfNavale), les bases de données ne dépassaient pas trois tables (que

23

: Cette page permet donc à l’utilisateur du camping de sélectionner le matériel que le client souhaite louer parmi tous ceux qui sont disponibles au camping. Une fois ce choix fait, il ne reste plus qu’à choisir le nombre d’heures ou de jours pour lesquels on veut louer le matériel en question. Pour cela, il suffit de valider le formulaire présenté ci-dessus. Une seconde page apparait donc, précisant le matériel que l’on souhaite louer et demandant le temps de location correspondant. Dans mon exemple, je me connecte à la place 1 (emplacement de M. Galerneau), et je demande la location d’un vélo (bicyclette) pour une journée. En voici l’affichage :

Page 29: Compte rendu de TP n°4 Base de données avancée en PHPgalerneau.pierre.free.fr/Comptes Rendus/Camping_final.pdfNavale), les bases de données ne dépassaient pas trois tables (que

24

Enfin, le site affiche un message confirmant que le matériel a bien été loué par le client correspondant :

Page 30: Compte rendu de TP n°4 Base de données avancée en PHPgalerneau.pierre.free.fr/Comptes Rendus/Camping_final.pdfNavale), les bases de données ne dépassaient pas trois tables (que

25

Enregistrement d’un départ

Puisque l’on peut enregistrer le fait qu’un nouveau client arrive au camping, il faut bien sur enregistrer également le cas inverse, c'est-à-dire le moment où un client s’en va. Pour cela, l’utilisateur a simplement à cliquer sur le lien « Enregistrer une sortie ». Comme toujours dans ce site, il devra choisir le numéro d’emplacement correspondant à son choix. Lorsqu’il aura choisi le bon emplacement, il lui sera affiché un récapitulatif du compte du client correspondant sous la forme suivante :

Page 31: Compte rendu de TP n°4 Base de données avancée en PHPgalerneau.pierre.free.fr/Comptes Rendus/Camping_final.pdfNavale), les bases de données ne dépassaient pas trois tables (que

26

Ce récapitulatif est en fait l’équivalent de la facture du client puisqu’il récapitule toutes les prestations demandées par le client en précisant les prix correspondants. Le client peut alors choisir de payer en cliquant sur le lien « Valider / Payer », son compte sera alors supprimé, sa place de camping libérée et le montant de sa facture ajoutée au chiffre d’affaire. Maintenant, nous avons présenté tous les états permettant à un professionnel du camping d’enregistrer ou de supprimer des informations concernant un campeur ou un emplacement du camping. Cependant, il reste des fonctions du site à expliquer. En effet, les utilisateurs doivent pouvoir accéder notamment aux données de prix et aux disponibilités de manière très rapide dès la première page du site. Pour cela, j’ai mis en place plusieurs liens :

- Un permettant l’affichage de l’état des disponibilités, - Un permettant l’affichage des prix, - Et un permettant l’affichage du compte d’un campeur.

Ces différents liens permettent un affichage formaté de la même manière que présenté ci-dessus. Comme je les ai déjà expliqués, je vais simplement présenter l’affichage correspondant :

Affichage des disponibilités

Page 32: Compte rendu de TP n°4 Base de données avancée en PHPgalerneau.pierre.free.fr/Comptes Rendus/Camping_final.pdfNavale), les bases de données ne dépassaient pas trois tables (que

27

Affichage des tarifs

Affichage du compte d’un campeur

Cet affichage est identique à celui réalisé pour afficher la facture du campeur et on pourrait donc penser que c’est une répétition inutile, cependant je ne pense pas. En effet, un utilisateur doit être en mesure d’afficher à l’écran la totalité des locations d’un campeur sans pour autant qu’il ne soit en train d’enregistrer son départ. En effet, un campeur peut à tout moment vouloir savoir combien lui a couté jusqu’au jour d’aujourd’hui son séjour, etc.

Page 33: Compte rendu de TP n°4 Base de données avancée en PHPgalerneau.pierre.free.fr/Comptes Rendus/Camping_final.pdfNavale), les bases de données ne dépassaient pas trois tables (que

28

Enfin, l’utilisateur du camping peut encore réaliser deux opérations principales :

- Afficher les statistiques depuis le début de la saison, - Afficher les statistiques du jour.

Affichage des statistiques générales

Cette page permet un affichage des statistiques de toute la saison (depuis le debut jusqu’à aujourd’hui). L’affichage est le suivant :

Page 34: Compte rendu de TP n°4 Base de données avancée en PHPgalerneau.pierre.free.fr/Comptes Rendus/Camping_final.pdfNavale), les bases de données ne dépassaient pas trois tables (que

29

On a donc ici un récapitulatif du

- nombre de clients actuellement présents, - Nombre de clients total depuis le début de la saison, - Chiffre d’affaire total depuis le début de la saison.

Lorsque l’on souhaite afficher les statistiques journalières, il suffit de se rendre sur le lien « arrêter le travail ». Celui-ci ouvre une page contenant différents autres liens permettant d’afficher telle ou telle statistique :

Page 35: Compte rendu de TP n°4 Base de données avancée en PHPgalerneau.pierre.free.fr/Comptes Rendus/Camping_final.pdfNavale), les bases de données ne dépassaient pas trois tables (que

30

On peut donc obtenir différents affichages avec cette page : - L’’affichage du montant des cautions reçues :

- Affichage du montant des cautions rendues :

Page 36: Compte rendu de TP n°4 Base de données avancée en PHPgalerneau.pierre.free.fr/Comptes Rendus/Camping_final.pdfNavale), les bases de données ne dépassaient pas trois tables (que

31

- Le montant du chiffre d’affaire du jour :7

- Le solde de trésorerie du jour. Ceci permet en réalité aux utilisateurs de sortir (d’imprimer) des bilans en fin de journée afin d’avoir une trace papier de ces statistiques. Enfin, il est possible de vider les bases de données journalières chaque jour afin que les statistiques restent bien journalières.

3.2 Quelle présentation adopter ? L’un des objectifs principaux de notre travail en cours de Web Dynamique est de réaliser des sites les plus professionnels possibles. Il faut donc, pour cela, réaliser les interfaces les plus conviviales possibles afin que l’utilisateur ai du plaisir à naviguer sur notre site et n’hésite pas à y revenir régulièrement. Puisqu’il s’agit ici d’un site de travail, cela est encore plus important car l’utilisateur devra l’utiliser à longueur de journée. Si l’interface est mauvaise et non attractive, ce sera donc un calvaire permanent.

Page 37: Compte rendu de TP n°4 Base de données avancée en PHPgalerneau.pierre.free.fr/Comptes Rendus/Camping_final.pdfNavale), les bases de données ne dépassaient pas trois tables (que

32

Pour commencer, j’ai donc décidé de mettre un titre. Comme dans les TP précédents, je n’ai pas fais de bannière afin de ne pas surcharger le design du site. Cependant, si ce site devait être réalisé dans un autre contexte, il serait certainement agrémenté d’une bannière.

En réalité, après avoir testé différentes banières plus ou moins colorées, j’ai décidé que ce titre suffisait emplement du fait que ce site n’est pas destiné à un public large ni à être diffusé sur internet. Je me suis dis qu’il valait mieux réaliser une interface épurée et simple afin que l’utilisateur ne soit pas « saoulé » par l’interface au fur et à mesure de ses jours de travail.

De plus, concernant le design, j’ai décidé de faire un menu dont les liens étaient matérialisés par des images à la place des simples boutons HTML que j’utilisais jusque maintenant ce qui, je trouve, donne un coté beaucoup plus « fun » et « beau » à mon site.

Remarque : Au départ, j’avais décidé de réaliser un menu contenant tous les traitements possible. Cependant, j’ai réalisé rapidement que ce n’était pas clair du tout et qu’il y avait besoin de trop de sous menus. C’est pourquoi j’ai décidé de faire un menu ne contenant qu’un seul lien permettant de retourner à l’accueil, et une page d’accueil contenant tous les liens de tous les traitements. Enfin, le choix du design général a été fait en surfant sur des vrais sites de vente en ligne. En effet, j’ai copié en partie leur design parce que je trouvais que les affichages de produits cote à cote à l’aide de DIV ou de tableaux HTML rendait bien et donnait une image claire et précise de ce que je site vendait. Maintenant que toutes mes motivations et mes choix sont expliqués, il me faut présenter et expliquer la programmation réalisée.

4 Exp l i ca t ion du code

4.1 Arbres programmatiques et explication hors programmation Dans ce paragraphe, je vais expliquer les algorithmes principaux hors langage de programmation à l’aide d’arbres programmatiques afin de rendre accessible à tous la compréhension des algorithmes et donc mla manière dont fonctionne réellement le site. Je vais expliquer un algorithme de chaque type, c'est-à-dire un algorithme :

- D’affichage des données, - D’enregistrement, - De modification des données.

Page 38: Compte rendu de TP n°4 Base de données avancée en PHPgalerneau.pierre.free.fr/Comptes Rendus/Camping_final.pdfNavale), les bases de données ne dépassaient pas trois tables (que

33

En effet, dans ce site, la plupart des algorithmes sont basés sur la même chose, les différences viennent simplement des tables de la base de données que l’on utilise.

4.1.1 Algorithme d’affichage des tarifs et des factures client Cet algorithme permet d’afficher en temps réel les tarifs en vigueur actuellement. Ceux-ci sont contenus dans la table camping_tarifs et on peut les modifier si on le souhaite (je le présenterais plus tard). Cet algorithme est se présente sous la forme suivante :

Cet algorithme est hyper simple, cependant ce n’est qu’un algorithme d’affichage et tous les autres fonctionnent de la même manière, même ceux dont l’affichage peut paraitre complique. Par exemple, lorsque l’on cherche à afficher la facture d’un client (correspondant à un emplacement), l’algorithme est du même type. Il est un peu plus compliqué car il fait également intervenir les prix des différentes locations, cependant il ne l’est pas tant que ca :

Page 39: Compte rendu de TP n°4 Base de données avancée en PHPgalerneau.pierre.free.fr/Comptes Rendus/Camping_final.pdfNavale), les bases de données ne dépassaient pas trois tables (que

34

Cet algorithme permet donc l’affichage de manière formaté de tout ce que le client a loué depuis son arrivée au camping. Toutes ces locations sont affichées couplées à leur prix unitaire. Ainsi, on peut afficher le total dut par le client pour chaque location. On peut alors également afficher le total de la facture !

4.1.2 Algorithme d’enregistrement d’une location Lorsqu’un professionnel du camping souhaite enregistrer une nouvelle location pour l’un des clients, il se rend sur le lien « enregistrement d’une location ». Il va alors devoir choisir le type de la location à ajouter au compte du client concerné, ainsi que la durée de la location. L’algorithme est donc tout aussi simple que le précédent :

Enregistrement

d’une nouvelle

location

seq

si

Identifiant =

identifiant de la

place du client

Paramètres :

identifiant de la place du client : entier

identifiant du matériel à louer : entier

temps : entier

Mettre à jour le

champ

correspondant au

matériel à louer en

lui ajoutant le

temps

Lire

l’enregistrement

suivant

Lire la table

camping_places

Cet algorithme ne réalise en réalité rien d’exceptionnel puisqu’il se contente de récupérer les valeurs choisies par l’utilisateur :

- Produit à louer, - Temps de location; - Identifiant du locataire,

Et de modifier la base de données camping_places en fonction de ces données. Il faut remarquer que, pour tous les autres algorithmes de modification (modification des tarifs, insertion d’un nouvel arrivant ou suppression d’un campeur), le principe est exactement identique. La seule différence est que les données récupérées ne sont pas les mêmes et que donc, on modifie des champs différents dans la base de données. Notamment, lorsque l’on

Page 40: Compte rendu de TP n°4 Base de données avancée en PHPgalerneau.pierre.free.fr/Comptes Rendus/Camping_final.pdfNavale), les bases de données ne dépassaient pas trois tables (que

35

supprime un campeur, on remet à leur valeur par défaut tous les champs de la table camping_places qui avaient étés modifiés. Comme l’explication or programmation des algorithmes est assez simple ici (tous les algorithmes se ressemblent), je vais les expliquer un par un plus en détail. En effet, je trouve qu’il est inutile que j’explique chaque algorithme au moyen d’un arbre programmatique alors qu’il est identique à ceux que je viens déjà de présenter.

4.2 Détail des fonctionnalités de chaque page Maintenant que j’ai expliqué les principaux algorithmes et leur forme ci-dessus, je vais parcourir tous les fichiers du projet pour les expliquer un à un afin de m’arrêter plus particulièrement sur chaque particularité de programmation dans ce que j’ai développé. Je vais donc tout expliquer en détail afin que tout le coté « code » soit expliqué et clair.

4.2.1 L’accueil : la page accueil.php Lorsqu’un utilisateur se connecte sur le site, il arrive sur la page d’accueil1. Il n’a pas besoin de passer par un formulaire de connexion puisque l’application n’est pas destinée à être publiée. Il se connecte donc sur la page d’accueil et voit alors apparaitre une liste de liens divisés en sous catégorie. En réalité, cette page est une page 100% HTML qui ne contient aucune ligne de code PHP. Elle sert simplement à ce que tous les liens soient présentés à l’utilisateur. Dans un soucis de clarté et de lisibilité, j’ai choisis de diviser ces liens en deux grandes catégories au moyen de DIV HTML. Ceci est utilisé de la manière suivante : Code <div align=left><span><h5>Catégorie 1</h5> <hr> <!—Liens -- > </span></div> <div align=left><span><h5>Catégorie 2</h5> <hr> <!—Liens -- > </span></div> Ceci permet d’obtenir l’affichage de deux « boites » qui contiennent chacune une des grandes divisions. En effet, dans ce site, le nombre de liens à afficher sur la première page est tellement important qu’il est indispensable de les diviser en catégorie afin que l’utilisateur puisse s’y retrouver et repérer rapidement celui qu’il souhaite. 1 Le code correspondant à la page accueil.php est disponible en annexe 1.

Page 41: Compte rendu de TP n°4 Base de données avancée en PHPgalerneau.pierre.free.fr/Comptes Rendus/Camping_final.pdfNavale), les bases de données ne dépassaient pas trois tables (que

36

4.2.2 Insertion des barèmes de taris : la page baremes.php

La page baremes.php2 va permettre à un utilisateur du site de modifier les prix des locations (que ce soit les matériels type bicyclette, planche à voile, ou les emplacements) enregistrés dans la base de données. Dans cette page, on affiche toutes les choses qui sont louables au camping accompagnées d’un formulaire permettant de modifier le prix associé. De fait, les prix de chaque matériel (ou emplacement) sont enregistrés dans la table camping_places. Au départ (lors de la création de la base), ils sont tous initialisés à 0. Il faut que l’utilisateur du camping puisse les visualiser et les modifier afin que tout soit en accord avec les prix qu’il a décidé. C’est à cela que sert cette page. Afin de permettre cela, cette page affiche donc chaque catégorie et le prix associé actuellement. Ce prix actuel est affiché dans un formulaire HTML, et plus particulièrement dans un champ de type : Code <input type=text> Ce qui permet d’en modifier le contenu. L’affichage du prix actuellement enregistré dans la base de données se fait au moyen d’une requête SQL de type select dont la syntaxe est la suivante : Code <?php $requete="select * from camping_tarifs where libelle='Emplacement catégorie 1 Adulte';"; ?> Ceci permet donc de récupérer toute la ligne correspondant à un enregistrement donné de la table camping_tarifs. Il suffit alors de ne récupérer que la valeur du prix (la colonne prix) pour obtenir la valeur à afficher dans le champ HTML de type text. Ceci se fait de la manière suivante : Code <?php if($reponse=mysql_query($requete)){ ?> <tr><td>Catégorie 1 Adulte</td><td><form method=post action="baremes.php?c=cat1A"><input type=text value=<?php echo mysql_result($reponse,0, 2);?> name=cat1a size=5> </td><td><input type=submit value=Modifier></form></td></tr>

En réalité, on affiche simplement le contenu de la colonne numéro 2 du résultat obtenu. L’utilisateur peut donc visualiser les prix actuellement enregistrés et les modifier à sa guise. Officiellement, cette opération ne doit être possible qu’en début de saison, lors de la réouverture du camping, cependant, ce n’est pas la problème ici. Le principal étant de pouvoir modifier en temps réel et en ligne les différentes valeurs enregistrées.

2 Le code correspondant à la page baremes.php est disponible en annexe 2.

Page 42: Compte rendu de TP n°4 Base de données avancée en PHPgalerneau.pierre.free.fr/Comptes Rendus/Camping_final.pdfNavale), les bases de données ne dépassaient pas trois tables (que

37

Lorsqu’un utilisateur modifie le prix d’une location à l’aide du formulaire correspondant, il clique ensuite sur le bouton « Modifier » associé. On récupère alors l’identifiant de l’enregistrement à modifier puis le nouveau prix souhaité. Une requête de modification de type update est alors exécutée. Celle-ci est de type : Code $requete="update camping_tarifs set prix=$prix where libelle='Emplacement catégorie 1 Adulte';";

Il faut remarquer que cette page permet aussi bien l’affichage du formulaire que l’enregistrement des nouvelles données dans la table camping_tarifs. Ceci est réalisé au moyen d’un formulaire interne. C'est-à-dire que, lorsque l’on clique sur un bouton « modifier », une valeur de choix est envoyée, correspondant au produit dont on désire modifier le prix. La page est alors rechargée et on teste la valeur de ce choix. Si ce choix n’existe pas ou n’est pas initialisé, alors on ne fait rien (on affiche simplement le formulaire), sinon, on exécute une portion de code spéciale qui permet la mise à jour de la base de données. Exemple : Lorsque l’on choisi de modifier le prix d’un emplacement de catégorie 1 pour les adultes, au clic sur le bouton « modifier » correspondant, on transmet une valeur de choix égale à « cat1A » au moyen de l’url de la page. Lorsque la page se recharge, on récupère cette valeur au moyen d’une requête PHP : Code $choix=$_GET[‘valeur’] ;

Et on teste la valeur de cette variable. Si elle vaut « cat1A », alors on exécute la portion de code qui permet la mise à jour de la ligne « catégorie 1 adulte » de la table camping_tarifs. Une fois que les tarifs sont mis à jour, on peut avoir besoin de les afficher pour en vérifier les valeurs. Pour cela, il suffit de cliquer sur le lien « affichage des tarifs ».

4.2.3 Affichage des tarifs : la page aff_tarif.php Dans cette page3, l’objectif est d’afficher le contenu de la table camping_tarifs de manière à ce qu’un utilisateur puisse vérifier les valeurs enregistrées ou se les remettre en tête afin de renseigner correctement un client. Cette page est très simple car, en réalité, elle se contente d’afficher le contenu de la table sous une forme formatée. De plus, comme on utilise en plusieurs endroits l’algorithme d’affichage des tarifs et afin de ne pas le réécrire plusieurs fois, je l’ai créé dans une page à part, la page tarfs.php4. Celle-ci ne contient presque aucun code HTML, c’est simplement une page PHP destinée à être incluse dans d’autres pages. Ceci permet de simuler l’utilisation de fonctions générales à

3 Le code correspondant à la page aff_tarifs est disponible en annexe 3. 4 Le code correspondant à la page tarifs est disponible en annexe 4.

Page 43: Compte rendu de TP n°4 Base de données avancée en PHPgalerneau.pierre.free.fr/Comptes Rendus/Camping_final.pdfNavale), les bases de données ne dépassaient pas trois tables (que

38

tout le projet. De ce fait, il suffit d’inclure la page tarifs.php dans la page souhaitée si on veut les vor s’afficher. Pour l’inclure dans une page, on y ajoute la ligne de code suivante : Code <?php include("tarifs.php"); ?>

Cette page permet donc l’affichage des tarifs de chaque catégorie de locations. Lorsque l’utilisateur souhaite remettre à 0 ses bases de données (en début de saison par exemple), il dispose de plusieurs possibilités que je vais expliquer ci-dessous.

4.2.4 Initialisation des bases de données

Initialisation de la table camping_places

Cette table est celle qui contient toutes les places disponibles dans le camping et qui permet d’enregistrer les locations affectées à un client. Au début d’une saison, il est donc indispensable que la table soit totalement réinitialisée, c'est-à-dire que les 299 emplacements du camping doivent être remis à 0. Ceci est fait grâce au fichier maj_places.php5. Pour cela, on utilise une requête SQL de type update qui permet, pour chaque ligne de la table, de remettre les valeurs des champs à leur valeur par défaut. Cette requête se présente de la manière suivante : Code $requete="update camping_places set nomOccupant='**********', nbA=0, nbE=0, disponible=0, date='', nbHTennis=0, adherant=0, nbJPlanche=0, nbJPeche=0, nbJBateau=0, nbJVelo=0 where id<>0;";

Son exécution permet donc de retrouver une table complètement « propre », c'est-à-dire qu’elle ne contient plus aucuns enregistrements correspondants à la saison précédente. Il est nécessaire de remettre à 0 la table contenant les places disponibles au camping, cependant, il peut aussi l’être au niveau des statistiques. En effet, le site contient des bases de données permettant la sauvegarde de données correspondants au nombre de clients, au chiffre d’affaire, etc. Ces données doivent également pouvoir être modifiées à partir de l’interface utilisateur.

4.2.5 Initialisation de la table camping_stats Dans cet algorithme, il ne faut pas remettre à 0 tous les enregistrements mais tout simplement tous les supprimer. En effet, un enregistrement correspond à l’arriver d’une nouvelle famille de clients. Comme on veut avoir une table ne contenant plus aucune référence au nombre de clients de l’année précédente, il suffit de la vider complètement au moyen d’une requête SQL de type delete : 5 Le code correspondant au fichier maj_places.php est disponible en annexe 5.

Page 44: Compte rendu de TP n°4 Base de données avancée en PHPgalerneau.pierre.free.fr/Comptes Rendus/Camping_final.pdfNavale), les bases de données ne dépassaient pas trois tables (que

39

Code $requete="delete from camping_stats where id<>0;";

Voici la requête correspondante. Celle ci permet la suppression de tous les enregistrements de la table et donc de la vider. L’initialisation de la table camping_ca contenant toutes les lignes du chiffre d’affaire de l’année précédente doit également être supprimée. Pour cela, une requete identique à celle présentée ci-dessus est exécutée. Ceci est fait au moyen de la page maj_ca.php6. Maintenant que les traitements annuels principaux ont étés expliqués, il faut présenter les traitements journaliers et les pages associées.

4.2.6 Ajout d’un client : la page enreg_entree.php Cette page7 est celle qui va servir aux professionnels du camping à enregistrer l’arrivée d’un nouveau campeur. Elle doit donc permettre un certain nombre de choses afin que le travail de l’employé soit le plus simple et le plus efficace possible. En effet, l’employé doit pouvoir accéder aux disponibilités du camping et aux prix des différentes locations à partir de cette page afin que, lorsque le client lui pose une question, il ai tout sous les yeux. Pour cela, j’ai mis en place trois liens qui permettent respectivement de :

- Afficher les disponibilités, - Afficher les tarifs des locations, - Enregistrer un nouveau client.

L’affichage des tarifs est identique à l’affichage expliqué plus haut. En effet, il suffit d’inclure un fichier pour effectuer cet affichage, c’est donc très simple. De même, l’affichage des disponibilités est assez simple. En effet, j’ai également créé un fichier secondaire contenant le traitement à effectuer afin de ne pas avoir à faire des copier / coller intempestifs lorsque j’ai besoin de réutiliser certains algorithmes déjà vu précédemment. Explication de l’algorithme d’affichage des places disponibles : Lorsqu’un utilisateur demande l’affichage des disponibilités, il est indispensable de lui afficher les places disponibles catégorie par catégorie. En effet, si on affiche les 299 emplacements en vrac, il sera compliqué de s’y retrouver simplement alors que, si on affiche une catégorie dans un tableau, une autre dans un autre tableau, etc, c’est beaucoup plus clair et pratique. On fait donc cela en parcourant tous les enregistrements de la table camping_places. Pour chacun d’eux, il faut alors vérifier la valeur du champ « disponible » afin d’afficher quelque chose de différent si la place est disponible ou déjà louée. De fait, on affiche « --» lorsque la place n’est pas libre et le numéro correspondant lorsqu’elle l’est. Tout ceci est fait au moyen de la page liste.php8.

6 Le code correspondant aux pages maj_ca et maj_stats est disponible en annexe 6. 7 Le code correspondant à la page enreg_entree.php est disponible en annexe 7. 8 Le code correspondant à la page liste.php est disponible en annexe 8.

Page 45: Compte rendu de TP n°4 Base de données avancée en PHPgalerneau.pierre.free.fr/Comptes Rendus/Camping_final.pdfNavale), les bases de données ne dépassaient pas trois tables (que

40

Enfin, l’utilisateur peur choisir d’enregistrer l’entrée d’un nouvel utilisateur. Pour cela, un formulaire lui sera affiché. Il faudra alors entrer le numéro d’emplacement souhaité par le nouveau client. Une vérification sera alors faite dans la table camping_places afin de savoir si l’emplacement sélectionné est libre ou non. S’il n’est pas libre, alors un message sera affiché signifiant qu’il y a une erreur, sinon, on pourra commencer l’enregistrement du client. Pour ce faire, un formulaire sera affiché. L’utilisateur devra alors saisir différentes données concernant le nouveau client afin d’enregistrer sa location dans la base. Il devra notamment renseigner :

- Le nom du client, - Le nombre d’adultes correspondant, - Le nombre d’enfants correspondant - L’appartenance ou non du client à la FNCLF.

Une fois ce formulaire validé, l’enregistrement du client sera validé et sa place sera alors non disponible. Cet enregistrement se fait au moyen de l’exécution d’une requête SQL de type update dont la syntaxe est la suivante : Code $requete="update camping_places set nomOccupant='".$nom."',adherant=$ad, nbA=$a, nbE=$e, disponible=1, date='".$date."' where id=$emp;";

Les variables correspondent aux valeurs suivantes :

- $nom : nom saisit dans le formulaire précédent, - $ad : adhérent ou non à la FNCLF, - $a : nombre d’adultes correspondants, - $e : nombre d’enfants correspondants, - Disponible : la place n’est plus disponible, - $date : date du jour.

Lorsque cette requête a été exécutée avec succès, le client est enregistré et un message est alors affiché afin de récapituler l’enregistrement. Si un utilisateur doit pouvoir enregistrer l’arrivée d’un nouveau client, il doit également pouvoir enregistrer des locations supplémentaires pour le compte de l’un ou l’autre des clients. Ceci est fait au moyen de la page :

4.2.7 Ajout de locations supplémentaires : la page enreg_loc.php Lorsqu’un utilisateur souhaite enregistrer une nouvelle location pour un campeur (à sa demande), il doit se rendre sur la page enreg_loc.php9. Celle-ci va lui permettre d’enregistrer dans le compte du client un certain nombre d’heures ou de jours de location pour une prestation précise. Lorsque l’utilisateur arrive sur la page enreg_loc, on lui demande de saisir le numero d’emplacement du client souhaitant louer un matériel suppléméntaire. Ceci est indispensable car on stock est locations dans le compte du client au niveau de son emplacement dans la table camping_places.

9 Le code correspondant à la page enreg_loc.php est disponible en annexe 9.

Page 46: Compte rendu de TP n°4 Base de données avancée en PHPgalerneau.pierre.free.fr/Comptes Rendus/Camping_final.pdfNavale), les bases de données ne dépassaient pas trois tables (que

41

Lorsque l’utilisateur a saisi un numéro d’emplacement, l’algorithme vérifie que celui-ci est bien loué. Si ce n’est pas le cas, alors un message est affiché signifiant que l’emplacement demandé est libre et que l’utilisateur a du faire une erreur de saisie. Sinon, un formulaire s’affiche. Il contient une liste de tous les matériels disponibles en location. L’utilisateur n’a donc qu’à choisir le matériel que le client souhaite louer. Apres ce choix, il suffit de cliquer sur le bouton de validation afin de passer au formulaire suivant. Ce second formulaire permet quand à lui de choisir le temps que l’on souhaite louer le matériel sélectionné précédemment. Un formulaire HTML contenant un champ de type text est affiché, et sa valeur est initialisée à 1. Lorsque l’on valide ce formulaire, la valeur saisie dans le champ de type text est récupérée et ajoutée au champ correspondant dans le compte de l’utilisateur. Ceci permet d’enregistrer pour chaque client le nombre d’heures ou de jours pendant lesquels il a loué des matériels supplémentaires au camping. Enfin, un utilisateur doit également pouvoir enregistrer le fait qu’un utilisateur quitte le camping. Pour cela, il lui faut se rendre sur la page :

4.2.8 Enregistrement d’un départ : la page depart.php Lorsque l’utilisateur du logiciel souhaite enregistrer le départ d’un des clients, il lui fait cliquer sur le lien « enregistrer un départ », ce qui le redirige vers le page depart.php10. Celle-ci commence par lui demander, comme les précédentes, le numéro de l’emplacement correspondant. Une fois la disponibilité de celui-ci vérifiée, elle affiche la facture correspondant à l’emplacement sélectionné. L’utilisateur peut alors vérifier que la facture correspond bien à ce que le client a loué. Une fois ceci fait, il suffit de cliquer sur le bouton de validation pour que l’emplacement soit libéré au sein de la base de données à l’aide d’une requête SQL de type update. Tous les champs de l’enregistrement sélectionnés sont alors remis à leur valeur par défaut.. Affichage de la facture : Pour afficher la facture détaillé d’un client en fonction de son emplacement, il faut récupérer les données contenues dans la table camping_tarifs et les croiser avec celles contenues dans la table camping_places. En effet, pour chaque location du client, il faut afficher le prix unitaire (contenu dans la table camping_tarifs) et le prix total à payer (multiplication du nombre de locations par le prix unitaire). L’employé du camping peut, ne plus d’ajouter ou de supprimer des locations et des clients, afficher les états de disponibilités des emplacements et les tarifs. L’affichage des tarifs a déjà été expliqué donc il est inutile de revenir dessus, cependant, je vais expliquer la page d’affichage des disponibilités puisque je ne l’ai expliquée que brièvement plus haut.

4.2.9 Affichage des places disponibles : le fichier liste_places.php

10 Le code correspondant à la page depart.php est disponible en annexe 10.

Page 47: Compte rendu de TP n°4 Base de données avancée en PHPgalerneau.pierre.free.fr/Comptes Rendus/Camping_final.pdfNavale), les bases de données ne dépassaient pas trois tables (que

42

Le fichier liste_places.php permet d’afficher la disponibilité des emplacements du camping. C’est un simple fichier HTML dans lequel une ligne de PHP est ajoutée : la ligne Code <?php include(« liste.php"); ?>

Qui permet l’affichage des disponibilités, comme je l’ai expliqué plus haut. Aucun autre traitement n’est possible sur cette page.

4.2.10 Affichage du compte d’un campeur Tout comme pour l’affichage des tarifs ou des disponibilités, l’affichage du compte d’un campeur est identique à quelque chose que l’on a déjà expliqué au par avant. Ici, c’est la facture de l’utilisateur qui est affichée. L’affichage est donc exactement le même que dans la page depart.php. La seule différence est que l’on n’affiche pas de bouton de validation permettant de supprimer le compte et les locations du client correspondant à la facture. Remarque : Je n’ajout pas d’annexe expliquant le code des deux dernières pages présentées puisque ce code a déjà été présenté dans les pages précédentes. Il est inutile de se répéter de cette manière, je pense. Enfin, un employé du camping peut afficher des statistiques, qu’elles soient journalières ou saisonnières. Pour cela, il doit se rendre sur deux pages différentes :

- Affichage des statistiques saisonnières : page stats.php, - Affichage des statistiques journalières : page stop.php.

4.2.11 Les statistiques saisonnières : page stats.php11

Le camping doit disposer de statistiques permettant de savoir quel nombre de clients sont actuellement présent dans le camping, combien il y en a eu depuis le début de la saison, etc. Pour cela, la page stats.php exécute plusieurs requêtes SQL permettant de répondre à ces problèmes.

Pour afficher le nombre de clients actuellement présents, elle exécute une requête sur la table camping_places et additionne le nombre d’enfants et d’adultes de toutes les places occupées. Pour afficher le nombre total de clients passés au camping depuis le début de la saison, une requête est effectuée sur la table camping_stats qui consigne toutes les arrivées depuis le début de la saison. On additionne alors les valeurs de chaque enregistrement et on obtient le nombre total de clients de la saison. Remarque : Le nombre de clients est incrémenté à chaque fois qu’une nouvelle famille arrive au camping. En effet, lors de l’enregistrement d’un nouveau client, une requête est exécutée sur la table camping_stats afin d’insérer une nouvelle ligne contenant le nombre de clients nouvellement arrivés. Cette table ne sera vidée qu’en fin de saison. En cours de saison, les seules modifications autorisées sur elle seront des ajouts de données afin que l’on ne puisse pas modifier les états de statistique.

11 Le code correspondant à la page stats.php est disponible en annexe 11.

Page 48: Compte rendu de TP n°4 Base de données avancée en PHPgalerneau.pierre.free.fr/Comptes Rendus/Camping_final.pdfNavale), les bases de données ne dépassaient pas trois tables (que

43

4.2.12 Statistiques journalières : la page stop.php12

De la même manière, des statistiques journalières peuvent être affichées. Pour cela, on enregistrer chaque mouvement de caisse (encaissement de caution, décaissement de caution, paiement d’une location,…) dans la table camping_ca. Il suffit alors d’afficher le contenu de cette table avec un certain filtre pour afficher les statistiques demandées. Par exemple, pour afficher les cautions encaissées, on exécutera la requête suivante : Code $requete="select * from camping_caution where renduOuEnc=1;";

Alors que pour afficher le montant des cautions rendues ont exécutera la requête : Code $requete="select * from camping_caution where renduOuEnc=0;";

4.3 Les erreurs et problèmes rencontrés Durant toute la durée de mon projet, j’ai eu des choix à faire, des erreurs à corriger et des problèmes à régler. Ces problèmes et erreurs ont puent être de toutes natures, de la simple faute de frappe à l’erreur de logique. Il m’a donc été nécessaire réfléchir, de chercher comment résoudre mes problèmes en tous genres. Dans cette partie, je vais présenter les principales choses qui m’on demandé réflexion (en dehors des choix que j’ai présenté plus haut). Ce projet ayant été plus simple que les précédents dans le sens où il ne nécessitait pas de réflexion spéciale concernant la réalisation des algorithmes (ce sont des algorithmes proches de ceux réalisés pour la VPC ou la DVD Tech), je n’ai pas rencontré de réel problème de logique ou de codification. De plus, ce projet est le dernier que nous avons eu à réaliser et nous sommes donc plus aguerris en matière de programmation PHP, cela est donc plus facile puisque les erreurs principales que nous pouvons faires ont déjà été rencontrées et corrigées au fil des TP précédents. Cependant, cela ne signifie pas que je n’ai rencontré aucun problème, simplement que j’en ai rencontré beaucoup moins que dans les TP précédents.

4.3.1 L’affichage d’une facture formatée Le problème le plus important que j’ai rencontré est d’un ordre purement logique. En effet, j’ai cherché quelques temps comment il fallait faire pour afficher la facture de l’utilisateur de manière formatée, et surtout de manière à ce qu’elle ressemble à une vraie facture. Cela m’a pris un certain temps car il faut pour cela jongler entre les différentes tables du projet et donc ce n’est pas forcément évident. Il m’est arrivé une ou deux fois de me perdre dans mon résonnement à cause de la quantité de données à manipuler.

12 Le code correspondant à la page stop.php est disponible en annexe 12.

Page 49: Compte rendu de TP n°4 Base de données avancée en PHPgalerneau.pierre.free.fr/Comptes Rendus/Camping_final.pdfNavale), les bases de données ne dépassaient pas trois tables (que

44

4.3.2 Opérations sur les dates Enfin, j’ai rencontré un second problème. En effet, nous devions enregistrer des dates (notamment la date d’arrivée du client) dans la base de données afin de pouvoir calculer notamment le nombre de jour depuis quand le client était arrivé. J’avais au départ choisi d’utiliser un champ de base de données de type date mais je n’ai pas réussi à écrire des données cohérentes à l’intérieur. Apres une heure d’essais et de recherche, j’ai décidé de modifier ma structure et d’enregistrer ma date sous forme de chaine de caractère dans ma base de données. Je pensais alors devoir utiliser des timestamps en PHP afin de pouvoir calculer les différences entre dates, etc. Cependant, j’ai tenté (en me disant que je n’avais rie à perdre), de simplement soustraire les deux dates que j’avais (la date enregistrée et la date du jour) et cela a fonctionné ! Je pouvais donc récupérer l’intervalle entre deux dates simplement en les soustrayant de la manière suivant : Date enregistrée – date du jour Cela m’a fait gagner un temps certain de fait que je n’ai pas eu à chercher comment utiliser les timestamps. Je n’ai eu qu’à effectuer une opération classique !

Page 50: Compte rendu de TP n°4 Base de données avancée en PHPgalerneau.pierre.free.fr/Comptes Rendus/Camping_final.pdfNavale), les bases de données ne dépassaient pas trois tables (que

45

Conc lus ion

Au cours de la réalisation de ce projet, j’ai eu à confirmer pour la 4ème et dernière fois ce que les cours de Web Dynamique 2 m’avais permis de prendre en main : c'est-à-dire le langage PHP. Grâce à ces connaissances, j’ai pu réaliser un site de vente par correspondance complet. Il m’a également fallu mettre en application les compétences acquises en cours de Bases de Données au moyen de la base de données MySQL. J’ai donc pu investir les connaissances acquises dans deux matières différentes afin de réaliser un site qui soit le plus professionnel et le mieux réalisé possible Après ce projet et la réalisation des 4 TP de Web Dynamique 2 faisant l’objet d’un compte rendu, je pense avoir pu appréhender la plupart des concepts du PHP, cependant, je pense qu’il serait intéressant dans le cadre du cours de PHP (de Web Dynamique 2), de voir, ou d’entrevoir, le coté objet du PHP. En effet, je pense que programmer objet en PHP serait très intéressant puisque, dans nos sites, de nombreuses méthodes sont très proches les unes des autres. Ceci permettrait un gain de temps et de clarté non négligeable. Pour conclure sur ce projet et les autres réalisés durant ce cours de Web Dynamique 2, je pense que nous avons appris énormément de choses et que maintenant, nous sommes capables de développer n’importe quel type d’application en PHP. Nous avons vu tous les concepts principaux du langage et réalisés des TP importants qui prouvent que nous avons une certaine maitrise du PHP après ce semestre. Cependant, comme je l’ai dis juste au dessus, je pense qu’une approche de la programmation objet en PHP serait un plus et un bon complément au cours, je vais donc certainement m’y intéresser très prochainement.

Page 51: Compte rendu de TP n°4 Base de données avancée en PHPgalerneau.pierre.free.fr/Comptes Rendus/Camping_final.pdfNavale), les bases de données ne dépassaient pas trois tables (que

46

Annexes

Page 52: Compte rendu de TP n°4 Base de données avancée en PHPgalerneau.pierre.free.fr/Comptes Rendus/Camping_final.pdfNavale), les bases de données ne dépassaient pas trois tables (que

47

Annexe 1 : la page accue i l .php

Code <?php session_start(); ?> <html> <head> <title>Camping des flots bleus</title> <link rel="stylesheet" type="text/css" href="../style.css"> </head> <body bgcolor="#cdcdcd"> <center> <?php $racine="../"; include("$racine/bandeau.php"); ?> <table height=75%> <td class="menu"> <?php include("$racine/menu.php"); ?> </td> <td class="corps"> <center> <h2>Camping des flots bleus</h2> <?php include("menu.php"); ?><h3>Interface de travail</h3> Vous pouvez effectuer les modifications suivantes : <br><br> <div align=left><span><h5>Traitements annuels</h5> <hr> <a href="baremes.php">Insertions des Barêmes de tarifs</a><br> <a href="aff_tarifs.php">Affichage des tarifs</a><br> <a href="maj_places.php">Initialisation des places disponibles</a><br> <a href="maj_stats.php">Initialiser la base contenant les clients de toute la saison</a><br> <a href="maj_ca.php">Initialiser la base contenant le CA de toute la saison</a><br> </span></div> <div align=left><span><h5>Traitements journaliers</h5> <hr> <b>Enregistrements</b><br><br> <a href="enreg_entree.php">Enregistrement d'une entrée (arrivée d'un campeur)</a><br> <a href="enreg_loc.php">Enregistrement d'une location</a><br> <a href="depart.php">Enregistrer une sortie (départ)</a><br><br> <b>Etats</b><br><br> <a href="liste_places.php">Etat des disponibilités</a><br> <a href="campeur.php">Compte d'un campeur</a><br> <a href="liste_tarifs.php">Tarifs</a><br><br> <b>Statistiques</b><br><br> <a href="stats.php">Afficher les statistiques</a><br><br> <b>Arret</b><br><br> <a href="stop.php">Arreter le travail</a><br> </span></div> </td>

Page 53: Compte rendu de TP n°4 Base de données avancée en PHPgalerneau.pierre.free.fr/Comptes Rendus/Camping_final.pdfNavale), les bases de données ne dépassaient pas trois tables (que

48

</table> <table height="10%"><center> <td class="signe"> <?php include("$racine/bas.php"); ?> </td></center> </table> <!--C'est fini !--> </body> </html>

Page 54: Compte rendu de TP n°4 Base de données avancée en PHPgalerneau.pierre.free.fr/Comptes Rendus/Camping_final.pdfNavale), les bases de données ne dépassaient pas trois tables (que

49

Annexe 2 : la page b i remes .php

Code <?php session_start(); ?> <html> <head> <title>Camping des flots bleus | Barème des tarifs</title> <link rel="stylesheet" type="text/css" href="../style.css"> </head> <body bgcolor="#cdcdcd"> <center> <?php $racine="../"; include("$racine/bandeau.php"); ?> <table height=75%> <td class="menu"> <?php include("$racine/menu.php"); ?> </td> <td class="corps"> <center> <h2>Camping des flots bleus</h2> <?php include("menu.php"); ?> <h3>Barème des tarifs</h3> <p>Sur cette page, vous pourrez visualiser et modifier le barème des tarifs du camping pour la saison en cours.</p> <h4>Prix actuels :</h4> <table class=table border=1> <tr><td><b>Emplacements</b></td><td></td><td></td>< /tr> <?php $requete="select * from camping_tarifs where libelle='Emplacement catégorie 1 Adulte';"; $requete0="select * from camping_tarifs where libelle='Emplacement catégorie 1 Enfant';"; $requete1="select * from camping_tarifs where libelle='Emplacement catégorie 2 Adulte';"; $requete10="select * from camping_tarifs where libelle='Emplacement catégorie 2 Enfant';"; $requete2="select * from camping_tarifs where libelle='Emplacement catégorie 3 Adulte';"; $requete20="select * from camping_tarifs where libelle='Emplacement catégorie 3 Enfant';"; $requete3="select * from camping_tarifs where libelle='Court de tennis';"; $requete4="select * from camping_tarifs where libelle='Planche à voile';"; $requete5="select * from camping_tarifs where libelle='Bicyclette';"; $requete6="select * from camping_tarifs where libelle='Materiel de peche';"; $requete7="select * from camping_tarifs where libelle='Petit bateau';"; $base=mysql_connect("localhost", "root", ""); if(mysql_select_db("galerneau_pierre", $base)){ if($reponse=mysql_query($requete)){ ?> <tr><td>Catégorie 1 Adulte</td><td><form method=post action="baremes.php?c=cat1A"><input type=text value=<?php echo mysql_result($reponse,0, 2);?> name=cat1a size=5> </td><td><input type=submit value=Modifier></form></td></tr> <?php }

Page 55: Compte rendu de TP n°4 Base de données avancée en PHPgalerneau.pierre.free.fr/Comptes Rendus/Camping_final.pdfNavale), les bases de données ne dépassaient pas trois tables (que

50

if($reponse=mysql_query($requete0)){ ?> <tr><td>Catégorie 1 Enfant</td><td><form method=post action="baremes.php?c=cat1e"><input type=text value=<?php echo mysql_result($reponse,0, 2);?> name=cat1e size=5> </td><td><input type=submit value=Modifier></form></tr> <?php } if($reponse=mysql_query($requete1)){ ?> <tr><td>Catégorie 2 Adulte</td><td><form method=post action="baremes.php?c=cat2A"><input type=text value=<?php echo mysql_result($reponse,0, 2);?> name=cat2a size=5> </td><td><input type=submit value=Modifier></form></tr> <?php } if($reponse=mysql_query($requete10)){ ?> <tr><td>Catégorie 2 Enfant</td><td><form method=post action="baremes.php?c=cat2e"><input type=text value=<?php echo mysql_result($reponse,0, 2);?> name=cat2e size=5> </td><td><input type=submit value=Modifier></form></tr> <?php } if($reponse=mysql_query($requete2)){ ?> <tr><td>Catégorie 3 Adulte</td><td><form method=post action="baremes.php?c=cat3A"><input type=text value=<?php echo mysql_result($reponse,0, 2);?> name=cat3a size=5> </td><td><input type=submit value=Modifier></form></tr> <?php } if($reponse=mysql_query($requete20)){ ?> <tr><td>Catégorie 3 Enfant</td><td><form method=post action="baremes.php?c=cat3e"><input type=text value=<?php echo mysql_result($reponse,0, 2);?> name=cat3e size=5> </td><td><input type=submit value=Modifier></form></tr> <?php } if($reponse=mysql_query($requete3)){ ?> <tr><td><b>Matériels</b></td><td></td></tr> <tr><td>Court de tennis</td><td><form method=post action="baremes.php?c=tenn"><input type=text name=tenn value="<?php echo mysql_result($reponse,0, 2);?>" size=5></td><td><input type=submit value="Modifier"></form></td></tr> <?php } if($reponse=mysql_query($requete4)){ ?> <tr><td>Planche à voile</td><td><form method=post action="baremes.php?c=planche"><input type=text name=planche value="<?php echo mysql_result($reponse,0, 2);?>" size=5></td><td><input type=submit value="Modifier"></form></td></tr> <?php } if($reponse=mysql_query($requete5)){ ?> <tr><td>Bicyclette</td><td><form method=post action="baremes.php?c=velo"><input type=text name=velo value="<?php echo mysql_result($reponse,0, 2);?>" size=5></td><td><input type=submit value="Modifier"></form></td></tr> <?php } if($reponse=mysql_query($requete6)){

Page 56: Compte rendu de TP n°4 Base de données avancée en PHPgalerneau.pierre.free.fr/Comptes Rendus/Camping_final.pdfNavale), les bases de données ne dépassaient pas trois tables (que

51

?> <tr><td>Matériel de pêche</td><td><form method=post action="baremes.php?c=peche"><input type=text name=peche value="<?php echo mysql_result($reponse,0, 2);?>" size=5></td><td><input type=submit value="Modifier"></form></td></tr> <?php } if($reponse=mysql_query($requete7)){ ?> <tr><td>Petit bateau</td><td><form method=post action="baremes.php?c=pb"><input type=text name=pb value="<?php echo mysql_result($reponse,0, 2);?>" size=5></td><td><input type=submit value="Modifier"></form></td></tr> <?php } ?> </table> <?php } $choix=$_GET["c"]; if($choix=="cat1A"){ $prix=$_POST["cat1a"]; echo "<h3>Modification des prix de catégorie 1 Adulte</h3>"; $requete="update camping_tarifs set prix=$prix where libelle='Emplacement catégorie 1 Adulte';"; $base=mysql_connect("localhost", "root", ""); if(mysql_select_db("galerneau_pierre", $base)){ if($reponse = mysql_query($requete)){ echo "Tarifs modifiés avec succès !<br><br>Vous avez modifié le tarif des catégories 1 Adulte en le mettant à <b>$prix €</b>.<br><br> Si vous souhaitez modifier cette valeur, resaisissez la dans le formulaire ci dessus !"; } } mysql_close(); }else if($choix=="cat1e"){ $prix=$_POST["cat1e"]; echo "<h3>Modification des prix de catégorie 1 Enfant</h3>"; $requete="update camping_tarifs set prix=$prix where libelle='Emplacement catégorie 1 Enfant';"; $base=mysql_connect("localhost", "root", ""); if(mysql_select_db("galerneau_pierre", $base)){ if($reponse = mysql_query($requete)){ echo "Tarifs modifiés avec succès !<br><br>Vous avez modifié le tarif des catégories 1 Enfant en le mettant à <b>$prix €</b>.<br><br> Si vous souhaitez modifier cette valeur, resaisissez la dans le formulaire ci dessus !"; } } mysql_close(); }else if($choix=="cat2A"){ $prix=$_POST["cat2a"]; echo "<h3>Modification des prix de carégorie 2 Adulte</h3>"; $requete="update camping_tarifs set prix=$prix where libelle='Emplacement catégorie 2 Adulte';"; $base=mysql_connect("localhost", "root", ""); if(mysql_select_db("galerneau_pierre", $base)){ if($reponse = mysql_query($requete)){ echo "Tarifs modifiés avec succès !<br><br>Vous avez modifié le tarif des catégories 2 Adulte en le mettant à <b>$prix €</b>.<br><br> Si vous souhaitez modifier cette valeur, resaisissez la dans le formulaire ci dessus !"; } }

Page 57: Compte rendu de TP n°4 Base de données avancée en PHPgalerneau.pierre.free.fr/Comptes Rendus/Camping_final.pdfNavale), les bases de données ne dépassaient pas trois tables (que

52

mysql_close(); }else if($choix=="cat2e"){ $prix=$_POST["cat2e"]; echo "<h3>Modification des prix de carégorie 2 Enfant</h3>"; $requete="update camping_tarifs set prix=$prix where libelle='Emplacement catégorie 2 Enfant';"; $base=mysql_connect("localhost", "root", ""); if(mysql_select_db("galerneau_pierre", $base)){ if($reponse = mysql_query($requete)){ echo "Tarifs modifiés avec succès !<br><br>Vous avez modifié le tarif des catégories 2 Enfant en le mettant à <b>$prix €</b>.<br><br> Si vous souhaitez modifier cette valeur, resaisissez la dans le formulaire ci dessus !"; } } mysql_close(); }else if($choix=="cat3A"){ $prix=$_POST["cat3a"]; echo "<h3>Modification des prix de carégorie 3 Adulte</h3>"; $requete="update camping_tarifs set prix=$prix where libelle='Emplacement catégorie 3 Adulte';"; $base=mysql_connect("localhost", "root", ""); if(mysql_select_db("galerneau_pierre", $base)){ if($reponse = mysql_query($requete)){ echo "Tarifs modifiés avec succès !<br><br>Vous avez modifié le tarif des catégories 3 Adulte en le mettant à <b>$prix €</b>.<br><br> Si vous souhaitez modifier cette valeur, resaisissez la dans le formulaire ci dessus !"; } } mysql_close(); }else if($choix=="cat3e"){ $prix=$_POST["cat3e"]; echo "<h3>Modification des prix de carégorie 3 Enfant</h3>"; $requete="update camping_tarifs set prix=$prix where libelle='Emplacement catégorie 3 Enfant';"; $base=mysql_connect("localhost", "root", ""); if(mysql_select_db("galerneau_pierre", $base)){ if($reponse = mysql_query($requete)){ echo "Tarifs modifiés avec succès !<br><br>Vous avez modifié le tarif des catégories 3 Enfant en le mettant à <b>$prix €</b>.<br><br> Si vous souhaitez modifier cette valeur, resaisissez la dans le formulaire ci dessus !"; } } mysql_close(); }else if($choix=="tenn"){ $prix=$_POST["tenn"]; echo "<h3>Modification des prix du court de tennis</h3>"; $requete="update camping_tarifs set prix=$prix where libelle='Court de tennis';"; $base=mysql_connect("localhost", "root", ""); if(mysql_select_db("galerneau_pierre", $base)){ if($reponse = mysql_query($requete)){ echo "Tarifs modifiés avec succès !<br><br>Vous avez modifié le tarif des courts de tennis en le mettant à <b>$prix €</b>.<br><br> Si vous souhaitez modifier cette valeur, resaisissez la dans le formulaire ci dessus !"; } } mysql_close(); }else if($choix=="planche"){ $prix=$_POST["planche"]; echo "<h3>Modification des prix des planches à voile</h3>"; $requete="update camping_tarifs set prix=$prix where libelle='Planche à voile';"; $base=mysql_connect("localhost", "root", ""); if(mysql_select_db("galerneau_pierre", $base)){ if($reponse = mysql_query($requete)){

Page 58: Compte rendu de TP n°4 Base de données avancée en PHPgalerneau.pierre.free.fr/Comptes Rendus/Camping_final.pdfNavale), les bases de données ne dépassaient pas trois tables (que

53

echo "Tarifs modifiés avec succès !<br><br>Vous avez modifié le tarif des planches à voile en le mettant à <b>$prix €</b>.<br><br> Si vous souhaitez modifier cette valeur, resaisissez la dans le formulaire ci dessus !"; } } mysql_close(); }else if($choix=="velo"){ $prix=$_POST["velo"]; echo "<h3>Modification des prix des bicyclettes</h3>"; $requete="update camping_tarifs set prix=$prix where libelle='Bicyclette';"; $base=mysql_connect("localhost", "root", ""); if(mysql_select_db("galerneau_pierre", $base)){ if($reponse = mysql_query($requete)){ echo "Tarifs modifiés avec succès !<br><br>Vous avez modifié le tarif des bicyclettes en le mettant à <b>$prix €</b>.<br><br> Si vous souhaitez modifier cette valeur, resaisissez la dans le formulaire ci dessus !"; } } mysql_close(); }else if($choix=="peche"){ $prix=$_POST["peche"]; echo "<h3>Modification des prix du matériel de pêche</h3>"; $requete="update camping_tarifs set prix=$prix where libelle='Materiel de peche';"; $base=mysql_connect("localhost", "root", ""); if(mysql_select_db("galerneau_pierre", $base)){ if($reponse = mysql_query($requete)){ echo "Tarifs modifiés avec succès !<br><br>Vous avez modifié le tarif des matériels de pêche en le mettant à <b>$prix €</b>.<br><br> Si vous souhaitez modifier cette valeur, resaisissez la dans le formulaire ci dessus !"; } } mysql_close(); }else if($choix=="pb"){ $prix=$_POST["pb"]; echo "<h3>Modification des prix des petits bateaux</h3>"; $requete="update camping_tarifs set prix=$prix where libelle='Petit bateau';"; $base=mysql_connect("localhost", "root", ""); if(mysql_select_db("galerneau_pierre", $base)){ if($reponse = mysql_query($requete)){ echo "Tarifs modifiés avec succès !<br><br>Vous avez modifié le tarif des petits bateaux en le mettant à <b>$prix €</b>.<br><br> Si vous souhaitez modifier cette valeur, resaisissez la dans le formulaire ci dessus !"; } } mysql_close(); } ?> </td> </table> <table height="10%"><center> <td class="signe"> <?php include("$racine/bas.php"); ?> </td></center> </table> <!--C'est fini !--> </body>

Page 59: Compte rendu de TP n°4 Base de données avancée en PHPgalerneau.pierre.free.fr/Comptes Rendus/Camping_final.pdfNavale), les bases de données ne dépassaient pas trois tables (que

54

</html>

Page 60: Compte rendu de TP n°4 Base de données avancée en PHPgalerneau.pierre.free.fr/Comptes Rendus/Camping_final.pdfNavale), les bases de données ne dépassaient pas trois tables (que

55

Annexe 3 : la page a f f_ ta r i fs .php

Code <?php session_start(); ?> <html> <head> <title>Camping des flots bleus | Barème des tarifs</title> <link rel="stylesheet" type="text/css" href="../style.css"> </head> <body bgcolor="#cdcdcd"> <center> <?php $racine="../"; include("$racine/bandeau.php"); ?> <table height=75%> <td class="menu"> <?php include("$racine/menu.php"); ?> </td> <td class="corps"> <center> <h2>Camping des flots bleus</h2> <?php include("menu.php"); ?> <h3>Barème des tarifs</h3> <p>Sur cette page, vous pourrez visualiser et modifier le barème des tarifs du camping pour la saison en cours.</p> <?php include("tarifs.php"); ?><br>Pour modifier ces tarifs, retournez au menu et sélectionnez le premier item du menu "Traitements annuels" ou cliquez <a href="baremes.php">ici</a>. </td> </table> <table height="10%"><center> <td class="signe"> <?php include("$racine/bas.php"); ?> </td></center> </table> <!--C'est fini !--> </body> </html>

Page 61: Compte rendu de TP n°4 Base de données avancée en PHPgalerneau.pierre.free.fr/Comptes Rendus/Camping_final.pdfNavale), les bases de données ne dépassaient pas trois tables (que

56

Annexe 4 : la page ta r i f s .php

Code <h4>Prix actuels :</h4> <table class=table1> <tr><td><b>Emplacements</b></td><td></td></tr> <?php $requete="select * from camping_tarifs where libelle='Emplacement catégorie 1 Adulte';"; $requete0="select * from camping_tarifs where libelle='Emplacement catégorie 1 Enfant';"; $requete1="select * from camping_tarifs where libelle='Emplacement catégorie 2 Adulte';"; $requete10="select * from camping_tarifs where libelle='Emplacement catégorie 2 Enfant';"; $requete2="select * from camping_tarifs where libelle='Emplacement catégorie 3 Adulte';"; $requete20="select * from camping_tarifs where libelle='Emplacement catégorie 3 Enfant';"; $requete3="select * from camping_tarifs where libelle='Court de tennis';"; $requete4="select * from camping_tarifs where libelle='Planche à voile';"; $requete5="select * from camping_tarifs where libelle='Bicyclette';"; $requete6="select * from camping_tarifs where libelle='Materiel de peche';"; $requete7="select * from camping_tarifs where libelle='Petit bateau';"; $base=mysql_connect("localhost", "root", ""); if(mysql_select_db("galerneau_pierre", $base)){ if($reponse=mysql_query($requete)){ ?> <tr><td>Catégorie 1 Adulte </td><td>>>></td><td><?p hp echo mysql_result($reponse,0, 2);?>€</td></tr> <?php } if($reponse=mysql_query($requete0)){ ?> <tr><td>Catégorie 1 Enfant</td><td>>>></td><td><?ph p echo mysql_result($reponse,0, 2);?>€</td></tr> <?php } if($reponse=mysql_query($requete1)){ ?> <tr><td>Catégorie 2 Adulte</td><td>>>></td><td><?ph p echo mysql_result($reponse,0, 2);?>€</td></tr> <?php } if($reponse=mysql_query($requete10)){ ?> <tr><td>Catégorie 2 Enfant</td><td>>>></td><td><?ph p echo mysql_result($reponse,0, 2);?>€</td></tr> <?php } if($reponse=mysql_query($requete2)){ ?> <tr><td>Catégorie 3 Adulte</td><td>>>></td><td><?ph p echo mysql_result($reponse,0, 2);?>€</td></tr> <?php } if($reponse=mysql_query($requete20)){ ?> <tr><td>Catégorie 3 Enfant</td><td>>>></td><td><?ph p echo mysql_result($reponse,0, 2);?>€</td></tr> <?php }

Page 62: Compte rendu de TP n°4 Base de données avancée en PHPgalerneau.pierre.free.fr/Comptes Rendus/Camping_final.pdfNavale), les bases de données ne dépassaient pas trois tables (que

57

if($reponse=mysql_query($requete3)){ ?> <tr><td><b>Matériels</b></td></tr> <tr><td>Court de tennis</td><td>>>></td><td><?php e cho mysql_result($reponse,0, 2);?>€</td></tr> <?php } if($reponse=mysql_query($requete4)){ ?> <tr><td>Planche à voile</td><td>>>></td><td><?php e cho mysql_result($reponse,0, 2);?>€</td></tr> <?php } if($reponse=mysql_query($requete5)){ ?> <tr><td>Bicyclette</td><td>>>></td><td><?php echo m ysql_result($reponse,0, 2);?>€</td></tr> <?php } if($reponse=mysql_query($requete6)){ ?> <tr><td>Matériel de pêche</td><td>>>></td><td><?php echo mysql_result($reponse,0, 2);?>€</td></tr> <?php } if($reponse=mysql_query($requete7)){ ?> <tr><td>Petit bateau</td><td>>>></td><td><?php echo mysql_result($reponse,0, 2);?>€</td></tr> <?php } ?> </table> <?php } ?>

Page 63: Compte rendu de TP n°4 Base de données avancée en PHPgalerneau.pierre.free.fr/Comptes Rendus/Camping_final.pdfNavale), les bases de données ne dépassaient pas trois tables (que

58

Annexe 5 : mi se à jou r de la tab le

camp ing_p laces : l e f i ch ie r ma j_p laces .php

Code <html> <head> <title>Camping des flots bleus | Mise à jour de la table places</title> <link rel="stylesheet" type="text/css" href="../style.css"> </head> <body bgcolor="#cdcdcd"> <center> <?php $racine=".."; include("$racine/bandeau.php"); ?> <table height=75%> <td class="menu"> <?php include("$racine/menu.php"); ?> </td> <td class="corps"><center> <h2>Camping des flots bleus</h2> <?php include("menu.php"); ?> <h3>Mise à jour des places disponibles</h3> <img src="../Images/panneau-attention.gif" height="40px"><br><br> Cette page a réinitialisé la base des places : elles sont maintenant toutes considérées commes libres !<br><br> <?php $requete="update camping_places set nomOccupant='**********', nbA=0, nbE=0, disponible=0, date='', nbHTennis=0, adherant=0, nbJPlanche=0, nbJPeche=0, nbJBateau=0, nbJVelo=0 where id<>0;"; $bool=true; $base=mysql_connect("localhost", "root", ""); if(mysql_select_db("galerneau_pierre", $base)){ if($reponse=mysql_query($requete)){ }else{ $bool=false; } if($bool){ echo "Remise à jour de la base des places effectuée !"; }else{ echo "Une erreur s'esr produite lors de la mise à jour de la base des places ! "; } mysql_close(); }else{ echo mysql_error(); } ?>

Page 64: Compte rendu de TP n°4 Base de données avancée en PHPgalerneau.pierre.free.fr/Comptes Rendus/Camping_final.pdfNavale), les bases de données ne dépassaient pas trois tables (que

59

<br><br> <a href="liste_places.php">Affichier la liste des places</a> </td> </table> <table height="10%"><center> <td class="signe"> <?php include("$racine/bas.php"); ?> </td></center> </table> <!--C'est fini !--> </body> </html>

Page 65: Compte rendu de TP n°4 Base de données avancée en PHPgalerneau.pierre.free.fr/Comptes Rendus/Camping_final.pdfNavale), les bases de données ne dépassaient pas trois tables (que

60

Annexe 6 : mi se à jou r des tab les camp ing_ca e t

camp ing_s ta ts

Fichier camping_ca Code <html> <head> <title>Camping des flots bleus | Mise à jour de la table CA</title> <link rel="stylesheet" type="text/css" href="../style.css"> </head> <body bgcolor="#cdcdcd"> <center> <?php $racine=".."; include("$racine/bandeau.php"); ?> <table height=75%> <td class="menu"> <?php include("$racine/menu.php"); ?> </td> <td class="corps"><center> <h2>Camping des flots bleus</h2> <?php include("menu.php"); ?> <h3>Mise à jour de la table sauvegardant les CA de toute la saison</h3> <img src="../Images/panneau-attention.gif" height="40px"><br><br> Cette page a réinitialisé la base des CA : Tous les mouvements de tresorerie ont été supprimés !<br><br> <?php $requete="delete from camping_ca where id<>0;"; $bool=true; $base=mysql_connect("localhost", "root", ""); if(mysql_select_db("galerneau_pierre", $base)){ if($reponse=mysql_query($requete)){ }else{ $bool=false; } mysql_close(); }else{ echo mysql_error(); } ?> </td> </table> <table height="10%"><center>

Page 66: Compte rendu de TP n°4 Base de données avancée en PHPgalerneau.pierre.free.fr/Comptes Rendus/Camping_final.pdfNavale), les bases de données ne dépassaient pas trois tables (que

61

<td class="signe"> <?php include("$racine/bas.php"); ?> </td></center> </table> <!--C'est fini !--> </body> </html>

Fichier camping_stats Code <html> <head> <title>Camping des flots bleus | Mise à jour de la table stats</title> <link rel="stylesheet" type="text/css" href="../style.css"> </head> <body bgcolor="#cdcdcd"> <center> <?php $racine=".."; include("$racine/bandeau.php"); ?> <table height=75%> <td class="menu"> <?php include("$racine/menu.php"); ?> </td> <td class="corps"><center> <h2>Camping des flots bleus</h2> <?php include("menu.php"); ?> <h3>Mise à jour de la table sauvegardant les utilisateurs sur toute la saison</h3> <img src="../Images/panneau-attention.gif" height="40px"><br><br> Cette page a réinitialisé la base des statistiqes : il n'y a donc plus aucun nombre d'utilisateur enregistré ! C'est le redélarrage d'une nouvelle saison !<br><br> <?php $requete="delete from camping_stats where id<>0;"; $bool=true; $base=mysql_connect("localhost", "root", ""); if(mysql_select_db("galerneau_pierre", $base)){ if($reponse=mysql_query($requete)){ }else{ $bool=false; } mysql_close(); }else{ echo mysql_error(); }

Page 67: Compte rendu de TP n°4 Base de données avancée en PHPgalerneau.pierre.free.fr/Comptes Rendus/Camping_final.pdfNavale), les bases de données ne dépassaient pas trois tables (que

62

?> </td> </table> <table height="10%"><center> <td class="signe"> <?php include("$racine/bas.php"); ?> </td></center> </table> <!--C'est fini !--> </body> </html>

Page 68: Compte rendu de TP n°4 Base de données avancée en PHPgalerneau.pierre.free.fr/Comptes Rendus/Camping_final.pdfNavale), les bases de données ne dépassaient pas trois tables (que

63

Annexe 7 : enreg is t remen t d ’un c l i en t : la page

en reg_en t ree .php

Code <html> <head> <title>Camping des flots bleus | Enregistrement d'une entrée</title> <link rel="stylesheet" type="text/css" href="../style.css"> </head> <body bgcolor="#cdcdcd"> <center> <?php $racine=".."; include("$racine/bandeau.php"); ?> <table height=75%> <td class="menu"> <?php include("$racine/menu.php"); ?> </td> <td class="corps"><center> <h2>Camping des flots bleus</h2> <?php include("menu.php"); ?> <h3>Enregistrement d'une entrée</h3> <div><span> <a href="enreg_entree.php?c=d">Afficher les disponibilités</a><br> <a href="enreg_entree.php?c=t">Afficher les tarifs</a><br> <a href="enreg_entree.php?c=e">Enregistrer un campeur</a><br> </span></div> <?php $choix=$_GET["c"]; if($choix=="d"){ echo "<br><br><br><br>"; include('liste.php'); }else if($choix=="t"){ ?> <div><span> <h4>Tarifs :</b></h4> <?php include("tarifs.php"); ?> </span></div> <?php }else if($choix=="e"){ echo "<br><br><br><br><h3>Enresgitrer une réservation</h3>"; ?> <form method=post action="enreg_entree.php?c=ee"> <table class=table> <tr><td> Numéro de l'emplacement choisi : </td><td> <input type=text value=0 name=emp size=5>

Page 69: Compte rendu de TP n°4 Base de données avancée en PHPgalerneau.pierre.free.fr/Comptes Rendus/Camping_final.pdfNavale), les bases de données ne dépassaient pas trois tables (que

64

</td></tr> <tr><td></td><td> <input type=submit value="Vérifier la disponibilité"> </td></tr> </table> </form> <?php }else if($choix=="ee"){ echo "<br><br><br><br><h3>Enregistrer un campeur</h3>"; $emp=$_POST["emp"]; $requete="select disponible from camping_places where id=$emp;"; $base=mysql_connect("localhost", "root", ""); if(mysql_select_db("galerneau_pierre", $base)){ if($reponse=mysql_query($requete)){ if(mysql_result($reponse, 0)==0){ echo "L'emplacement $emp est libre ! <br><br>Vous pouvez maintenant insérer les informations correspondants à l'utilisateur :<br><br>"; $requete1=" SELECT * FROM camping_tarifs, camping_places WHERE camping_places.id=$emp AND camping_places.idCategorie = camping_tarifs.id;"; $base=mysql_connect("localhost", "root", ""); if(mysql_select_db("galerneau_pierre", $base)){ if($reponse1=mysql_query($requete1)){ $res=20*mysql_result($reponse1, 0, 2); echo "<br>Caution à payer pour cet emplacement :<br> 20 * prix journalier de l'emplacement = 20 * ".mysql_result($reponse1, 0, 2)."€ = $res €<br><br>"; }else{ echo mysql_error(); } }else{ echo mysql_error(); } ?> <form method=post action="enreg_entree.php?c=eer"> <table class=table> <tr><td>Nom </td><td><input type=text value="********" name=nom></td></tr> <tr><td>Nombre d'adultes</td><td><input type=text value=0 name=adultes></td></tr> <tr><td>Nombre d'enfants ( - 12 ans) </td><td><input type=text value=0 name=enfants></td></tr> <tr><td>Adhérant à la FNCLF </td><td><input type=text value=Non name=ad></td></tr> <input type=hidden value=<?php echo $emp;?> name=emp> <tr><td></td><td><input type=submit value="Valider la réservation"></td></tr> </table> </form> <?php }else if(mysql_result($reponse, 0)==1){ echo "L'emplacement $emp n'est pas libre !"; } }else{ echo mysql_error(); } }else{ echo mysql_error(); }

Page 70: Compte rendu de TP n°4 Base de données avancée en PHPgalerneau.pierre.free.fr/Comptes Rendus/Camping_final.pdfNavale), les bases de données ne dépassaient pas trois tables (que

65

}else if($choix=="eer"){ echo "<br><br><br><br><h3>Enresgitrer une réservation</h3>"; $date=date("d.m.Y"); $ad=$_POST["ad"]; $emp=$_POST["emp"]; $nom=$_POST["nom"]; $a=$_POST["adultes"]; $e=$_POST["enfants"]; if($ad=="oui"){ $ad=0; }else{ $ad=1; } $requete="select * from camping_places where id=".$emp.";"; $base=mysql_connect("localhost", "root", ""); if(mysql_select_db("galerneau_pierre", $base)){ if($reponse=mysql_query($requete)){ $requete2="select * from camping_tarifs where libelle='Emplacement catégorie ".mysql_result($reponse, 0, 1)." Adulte';"; $base=mysql_connect("localhost", "root", ""); if(mysql_select_db("galerneau_pierre", $base)){ if($reponse=mysql_query($requete2)){ $caution=20*mysql_result($reponse, 0, 2); } } } } $requete="update camping_places set nomOccupant='".$nom."',adherant=$ad, nbA=$a, nbE=$e, disponible=1, date='".$date."' where id=$emp;"; $base=mysql_connect("localhost", "root", ""); if(mysql_select_db("galerneau_pierre", $base)){ if($reponse=mysql_query($requete)){ echo "Enregistrement du nouveau campeur terminé !"; $requete2="insert into camping_stats values('', $e+$a, '$date');"; $base=mysql_connect("localhost", "root", ""); if(mysql_select_db("galerneau_pierre", $base)){ if($reponse=mysql_query($requete2)){ $requete3="insert into camping_caution values('', $caution, '$emp', 1);"; $base=mysql_connect("localhost", "root", ""); if(mysql_select_db("galerneau_pierre", $base)){ if($reponse=mysql_query($requete3)){ ?> <h3>Récapitulatif :<h3> <?php echo "M. $nom a loué l'emplacement n°$emp pour :<br>$a adultes et $e enfants le $date."; } } } } } } }

Page 71: Compte rendu de TP n°4 Base de données avancée en PHPgalerneau.pierre.free.fr/Comptes Rendus/Camping_final.pdfNavale), les bases de données ne dépassaient pas trois tables (que

66

?> </td> </table> <table height="10%"><center> <td class="signe"> <?php include("$racine/bas.php"); ?> </td></center> </table> <!--C'est fini !--> </body> </html>

Page 72: Compte rendu de TP n°4 Base de données avancée en PHPgalerneau.pierre.free.fr/Comptes Rendus/Camping_final.pdfNavale), les bases de données ne dépassaient pas trois tables (que

67

Annexe 8 : a f f i chage des d ispon ib i l i t és : l a page

l i s te .php

Code <html> <head> <title>Camping des flots bleus | Barème des tarifs</title> <link rel="stylesheet" type="text/css" href="../style.css"> </head> <body> <h3>Places disponibles le <?php echo date("d.m.Y")." à ".date("G")."h".date("i"); ?></h3> <?php $c1="<table class=table1 border=1>"; $c2="<table class=table1 border=1>"; $c3="<table class=table1 border=1>"; $i=1; $requete="select * from camping_places;"; $base=mysql_connect("localhost", "root", ""); if(mysql_select_db("galerneau_pierre", $base)){ if($reponse=mysql_query($requete)){ while($donnees=mysql_fetch_array($reponse)){ if($donnees['id']<100){ if($i%10==1 || $i==0){ $c1.="<tr>"; } if($donnees['disponible']==0){ $c1.="<td> ".$donnees['id']." </td>"; }else{ $c1.="<td>--</td>"; } if($i%10==0 && $i>0){ $c1.="</tr>"; } }else if($donnees['id']<=199){ if($i%10==0 && $i>101){ $c2.="<tr>"; } if($donnees['disponible']==0){ $c2.="<td> ".$donnees['id']." </td>"; }else{ $c2.="<td>--</td>"; } if($i%10==9 && $i>101){ $c2.="</tr>"; } }else if($donnees['id']<=299){ if($i%10==0 && $i>201){ $c3.="<tr>"; } if($donnees['disponible']==0){ $c3.="<td> ".$donnees['id']." </td>"; }else{ $c3.="<td>--</td>"; }

Page 73: Compte rendu de TP n°4 Base de données avancée en PHPgalerneau.pierre.free.fr/Comptes Rendus/Camping_final.pdfNavale), les bases de données ne dépassaient pas trois tables (que

68

if($i%10==9 && $i>200){ $c2.="</tr>"; } } $i++; } } } $c1.="</table>"; $c2.="</table>"; $c3.="</table>"; echo "<div><span><h4>Catégorie 1</h4>".$c1."</span></div>"; echo "<div><span><h4>Catégorie 2</h4>".$c2."</span></div>"; echo "<div><span><h4>Catégorie 3</h4>".$c3."</span></div>"; ?> </body> </html>

Page 74: Compte rendu de TP n°4 Base de données avancée en PHPgalerneau.pierre.free.fr/Comptes Rendus/Camping_final.pdfNavale), les bases de données ne dépassaient pas trois tables (que

69

Annexe 9 : enreg is t remen t d ’une loca t ion

supp lémenta i re ; l a page en reg_ loc .php

Code <html> <head> <title>Camping des flots bleus | Enregistrement d'une location</title> <link rel="stylesheet" type="text/css" href="../style.css"> </head> <body bgcolor="#cdcdcd"> <center> <?php $racine=".."; include("$racine/bandeau.php"); ?> <table height=75%> <td class="menu"> <?php include("$racine/menu.php"); ?> </td> <td class="corps"><center> <h2>Camping des flots bleus</h2> <?php include("menu.php"); ?> <h3>Enregistrement d'une location</h3> <form method=post action="enreg_loc.php?c=ee"> <table class=table> <tr><td> Numéro de l'emplacement choisi : </td><td> <input type=text value=0 name=emp size=5> </td></tr> <tr><td></td><td> <input type=submit value="Vérifier la disponibilité"> </td></tr> </table> </form> <?php $choix=$_GET["c"]; if($choix=="ee"){ $emp=$_POST["emp"]; $requete="select * from camping_places where id=$emp;"; $base=mysql_connect("localhost", "root", ""); if(mysql_select_db("galerneau_pierre", $base)){ if($reponse=mysql_query($requete)){ if(mysql_result($reponse, 0, 6)==0){ echo "L'emplacement $emp est libre ! Vous avez fait une erreur !"; }else if(mysql_result($reponse, 0, 6)==1){ echo "L'emplacement $emp n'est pas libre ! M. ".mysql_result($reponse, 0, 2)." en est le locataire actuellement."; echo "<h3>Quel matériel voulez vous louer ?</h3>"; $requete1="select * from camping_tarifs where id>6;";

Page 75: Compte rendu de TP n°4 Base de données avancée en PHPgalerneau.pierre.free.fr/Comptes Rendus/Camping_final.pdfNavale), les bases de données ne dépassaient pas trois tables (que

70

$base=mysql_connect("localhost", "root", ""); if(mysql_select_db("galerneau_pierre", $base)){ if($reponse1=mysql_query($requete1)){ echo "<table class=table><form method=post action=enreg_loc.php?c=loc>"; while($donnees=mysql_fetch_array($reponse1)){ echo "<tr><td>".$donnees['libelle']."</td><td><input typ e=radio name=loc value=\"".$donnees['libelle']."\"</td></tr>"; } echo "<input type=hidden value=$emp name=emp><tr><td></td><td><input type=submit value=Louer></td></tr></form></table>"; } } } }else{ echo mysql_error(); } }else{ echo mysql_error(); } }else if($choix=="loc"){ $loc=$_POST["loc"]; $emp=$_POST["emp"]; echo "Vous avez choisi de louer un <b>$loc</b>.<br>"; ?> <form method=post action="enreg_loc.php?c=erloc"> <table class=table> <?php if($loc=="Court de tennis"){ echo "<tr><td>Combien de temps voulez vous louer ce matériel ? (en heures)</td><td><input type=text value=1 name=tps size=5></td></tr>"; }else{ ?> <tr><td>Combien de temps voulez vous louer ce matériel ? (en jours)</td><td><input type=text value=1 name=tps size=5></td></tr> <?php } ?> <input type=hidden name=emp value=<?php echo $emp; ?>> <input type=hidden name=loc value="<?php echo $loc; ?>"> <tr><td></td><td><input type=submit value=Louer></td></tr> </table> </form> <?php }else if($choix=="erloc"){ $emp=$_POST["emp"]; $loc=$_POST["loc"]; $qte=$_POST["tps"]; if($loc=="Court de tennis"){ $requete="update camping_places set nbHTennis=nbHTennis+$qte where id=$emp;"; $base=mysql_connect("localhost", "root", ""); if(mysql_select_db("galerneau_pierre", $base)){ if($reponse=mysql_query($requete)){ $requete = "select * from camping_places where id=$emp;"; $base=mysql_connect("localhost", "root", ""); if(mysql_select_db("galerneau_pierre", $base)){ if($reponse=mysql_query($requete)){ echo "M. ".mysql_result($reponse, 0, 2).", vous avez

Page 76: Compte rendu de TP n°4 Base de données avancée en PHPgalerneau.pierre.free.fr/Comptes Rendus/Camping_final.pdfNavale), les bases de données ne dépassaient pas trois tables (que

71

réservé le court de tennis pour $qte heures ! Cette quantité a été ajouté à votre facture."; } } }else{ echo mysql_error(); } }else{ echo mysql_error(); } }else if($loc=="Planche à voile"){ $requete="update camping_places set nbJPlanche=nbJPlanche+$qte where id=$emp;"; $base=mysql_connect("localhost", "root", ""); if(mysql_select_db("galerneau_pierre", $base)){ if($reponse=mysql_query($requete)){ $requete = "select * from camping_places where id=$emp;"; $base=mysql_connect("localhost", "root", ""); if(mysql_select_db("galerneau_pierre", $base)){ if($reponse=mysql_query($requete)){ echo "M. ".mysql_result($reponse, 0, 2).", vous avez réservé une planche à voile pour $qte jour ! Cette quantité a été ajouté à votre facture."; } } }else{ echo mysql_error(); } }else{ echo mysql_error(); } }else if($loc=="Bicyclette"){ $requete="update camping_places set nbJVelo=nbJVelo+$qte where id=$emp;"; $base=mysql_connect("localhost", "root", ""); if(mysql_select_db("galerneau_pierre", $base)){ if($reponse=mysql_query($requete)){ $requete = "select * from camping_places where id=$emp;"; $base=mysql_connect("localhost", "root", ""); if(mysql_select_db("galerneau_pierre", $base)){ if($reponse=mysql_query($requete)){ echo "M. ".mysql_result($reponse, 0, 2).", vous avez réservé une bicyclette pour $qte jour ! Cette quantité a été ajouté à votre facture."; } } }else{ echo mysql_error(); } }else{ echo mysql_error(); } }else if($loc=="Materiel de peche"){ $requete="update camping_places set nbJPeche=nbJPeche+$qte where id=$emp;"; $base=mysql_connect("localhost", "root", ""); if(mysql_select_db("galerneau_pierre", $base)){ if($reponse=mysql_query($requete)){ $requete = "select * from camping_places where id=$emp;"; $base=mysql_connect("localhost", "root", ""); if(mysql_select_db("galerneau_pierre", $base)){ if($reponse=mysql_query($requete)){ echo "M. ".mysql_result($reponse, 0, 2).", vous avez réservé un équipement de pêche pour $qte jour ! Cette quantité a été ajouté à votre facture."; } }

Page 77: Compte rendu de TP n°4 Base de données avancée en PHPgalerneau.pierre.free.fr/Comptes Rendus/Camping_final.pdfNavale), les bases de données ne dépassaient pas trois tables (que

72

}else{ echo mysql_error(); } }else{ echo mysql_error(); } }else if($loc=="Petit bateau"){ $requete="update camping_places set nbJBateau=nbJBateau+$qte where id=$emp;"; $base=mysql_connect("localhost", "root", ""); if(mysql_select_db("galerneau_pierre", $base)){ if($reponse=mysql_query($requete)){ $requete = "select * from camping_places where id=$emp;"; $base=mysql_connect("localhost", "root", ""); if(mysql_select_db("galerneau_pierre", $base)){ if($reponse=mysql_query($requete)){ echo "M. ".mysql_result($reponse, 0, 2).", vous avez réservé un petit bateau pour $qte jour ! Cette quantité a été ajouté à votre facture."; } } }else{ echo mysql_error(); } }else{ echo mysql_error(); } } } ?> </td> </table> <table height="10%"><center> <td class="signe"> <?php include("$racine/bas.php"); ?> </td></center> </table> <!--C'est fini !--> </body> </html>

Page 78: Compte rendu de TP n°4 Base de données avancée en PHPgalerneau.pierre.free.fr/Comptes Rendus/Camping_final.pdfNavale), les bases de données ne dépassaient pas trois tables (que

73

Annexe 10 : en reg is t remen t d ’un dépa r t : l a page

depar t .php

Code <html> <head> <title>Camping des flots bleus | Enregistrement d'un départ</title> <link rel="stylesheet" type="text/css" href="../style.css"> </head> <body bgcolor="#cdcdcd"> <center> <?php $racine=".."; include("$racine/bandeau.php"); ?> <table height=75%> <td class="menu"> <?php include("$racine/menu.php"); ?> </td> <td class="corps"><center> <h2>Camping des flots bleus</h2> <?php include("menu.php"); ?> <h3>Enregistrement d'un départ</h3> <form method=post action="depart.php?c=ee"> <table class=table> <tr><td> Numéro de l'emplacement choisi : </td><td> <input type=text value=0 name=emp size=5> </td></tr> <tr><td></td><td> <input type=submit value="Vérifier la disponibilité"> </td></tr> </table> </form> <?php $choix=$_GET["c"]; if($choix=="ee"){ $emp=$_POST["emp"]; echo "[".$emp."]"; $requete="select * from camping_places where id=$emp;"; $base=mysql_connect("localhost", "root", ""); if(mysql_select_db("galerneau_pierre", $base)){ if($reponse=mysql_query($requete)){ if(mysql_result($reponse, 0, 6)==0){ echo "L'emplacement $emp est libre ! Vous avez fait une erreur !"; }else if(mysql_result($reponse, 0, 6)==1){ echo "L'emplacement $emp n'est pas libre ! M. ".mysql_result($reponse, 0, 2)." en est le locataire actuellement."; echo "<h3>Récapitulatif du compte :</h3>";

Page 79: Compte rendu de TP n°4 Base de données avancée en PHPgalerneau.pierre.free.fr/Comptes Rendus/Camping_final.pdfNavale), les bases de données ne dépassaient pas trois tables (que

74

$requete1="select * from camping_tarifs where id>3;"; $base=mysql_connect("localhost", "root", ""); ?> <table class=table> <tr><td><h4>Indications générales</h4></td><td></td></tr> <tr><td>Nom du locataire</td><td><?php echo mysql_result($reponse, 0,2); ?></td></tr> <tr><td>Date d'arrivée</td><td><?php echo mysql_result($reponse, 0,7); ?></td></tr> <tr><td>Nombre d'adultes</td><td><?php echo mysql_result($reponse, 0,3); ?></td></tr> <tr><td>Nombre d'enfants</td><td><?php echo mysql_result($reponse, 0,4); ?></td></tr> <tr><td>Adhérant à la FNCLF</td><td><?php if(mysql_result($reponse, 0,5)==0){ echo "oui"; }else{ echo "non"; } ?></td></tr> <tr><td><h4>Locations supplémentaires</h4></td><td></td></tr> <tr><td>Court de tennis</td><td><?php echo mysql_result($reponse, 0,8); ?> heure(s)</td></tr> <tr><td>Planche à voile</td><td><?php echo mysql_result($reponse, 0,9); ?> jour(s)</td></tr> <tr><td>Bicyclette</td><td><?php echo mysql_result($reponse, 0,10); ?> jour(s)</td></tr> <tr><td>Matériel de pêche</td><td><?php echo mysql_result($reponse, 0,11); ?> jour(s)</td></tr> <tr><td>Petit bateau</td><td><?php echo mysql_result($reponse, 0,12); ?> jour(s)</td></tr> </table> <h3>Facture correspondante :</h3> <?php //Recuperation des prix $requete1="select * from camping_tarifs;"; $base=mysql_connect("localhost", "root", ""); if(mysql_connect("localhost", "root", "")){ if($reponse1=mysql_query($requete1)){ $i=0; while($donnees=mysql_fetch_array($reponse1)){ $tab[$donnees['libelle']]=$donnees['prix']; $i++; } } } mysql_close(); ?> <table border=1 class=table> <tr><td>Nom</td><td><?php echo mysql_result($reponse, 0,2); ?></td></tr> <tr><td>Date d'arrivée</td><td><?php echo mysql_result($reponse, 0,7); ?></td></tr> <tr><td>Date de départ</td><td><?php echo date("d.m.Y"); ?></td></tr> </table> <br><?php //Selection identifiant de la categorie $requete2="select * from camping_tarifs/* where

Page 80: Compte rendu de TP n°4 Base de données avancée en PHPgalerneau.pierre.free.fr/Comptes Rendus/Camping_final.pdfNavale), les bases de données ne dépassaient pas trois tables (que

75

id=".mysql_result($reponse, 0, 1)."*/;"; $base=mysql_connect("localhost", "root", ""); if(mysql_connect("localhost", "root", "")){ if($reponse2=mysql_query($requete2)){ while($donnees1=mysql_fetch_array($reponse2)){ $tabPC[$donnees1['libelle']]=$donnees1['prix']; } }else{ echo mysql_error(); } }else{ echo mysql_error(); } $nbJ=date("d.m.Y")-mysql_result($reponse, 0,7)+1 ; $totalA=$tabPC['Emplacement catégorie '.mysql_result($reponse, 0, 1).' Adulte']*mysql_result($reponse, 0, 3); $totalE=$tabPC['Emplacement catégorie '.mysql_result($reponse, 0, 1).' Enfant']*mysql_result($reponse, 0, 4); $total=($totalA + $totalE)*$nbJ; ?> <table border=1 class=table> <tr><td><b>Prestation</b></td><td><b>Quantité</b>< /td><td><b>Prix unitaire</b></td><td><b>Total</b></td></tr> <tr><td>Location emplacement n°<?php echo mysql_result($reponse, 0,0) ;?> (catégorie <?php echo mysql_result($reponse, 0,1) ;?>)</td><td><?php echo date("d.m.Y")-mysql_result($reponse, 0,7)+1 ;?> jours</td><td>Adulte : <?php echo $tabPC['Emplacement catégorie '.mysql_result($reponse, 0, 1).' Adulte']."€"; ?><br>Enfant : <?php echo $tabPC['Emplacement catégorie '.mysql_result($reponse, 0, 1).' Enfant']."€"; ?></td><td><?php echo $total."€"; ?></td></tr> <tr><td>Court de tennis</td><td><?php echo mysql_result($reponse, 0,8); ?> heure(s)</td><td><?php echo $tabPC['Court de tennis']; ?>€</td><td><?php echo $tabPC['Court de tennis']*mysql_result($reponse, 0,8); ?>€</td></tr> <tr><td>Planche à voile</td><td><?php echo mysql_result($reponse, 0,9); ?> jour(s)</td><td><?php echo $tabPC['Planche à voile']; ?>€</td><td><?php echo $tabPC['Planche à voile']*mysql_result($reponse, 0,9); ?>€</td></tr> <tr><td>Bicyclette</td><td><?php echo mysql_result($reponse, 0,10); ?> jour(s)</td><td><?php echo $tabPC['Bicyclette']; ?>€</td><td><?php echo $tabPC['Bicyclette']*mysql_result($reponse, 0,10); ?>€</td></tr> <tr><td>Matériel de pêche</td><td><?php echo mysql_result($reponse, 0,11); ?> jour(s)</td><td><?php echo $tabPC['Materiel de peche']; ?>€</td><td><?php echo $tabPC['Materiel de peche']*mysql_result($reponse, 0,11); ?>€</td></tr> <tr><td>Petit bateau</td><td><?php echo mysql_result($reponse, 0,12); ?> jour(s)</td><td><?php echo $tabPC['Petit bateau']; ?>€</td><td><?php echo $tabPC['Petit bateau']*mysql_result($reponse, 0,12); ?>€</td></tr> <tr><td>Caution</td><td></td><td>20*prix parcelle/j</td><td><?php echo -20*$tabPC['Emplacement catégorie '.mysql_result($reponse, 0, 1).' Adulte']; ?>€</td></tr> <tr><td>Reduction club FNCLF</td><td></td><td>10% du total</td><td><?php $tot=$total+$tabPC['Court de tennis']*mysql_result($reponse, 0,8)+$tabPC['Planche à voile']*mysql_result($reponse, 0,9)+$tabPC['Bicyclette']*mysql_result($reponse, 0,10)+$tabPC['Materiel de peche']*mysql_result($reponse, 0,11)+$tabPC['Petit bateau']*mysql_result($reponse, 0,12)-20*$tabPC['Emplacement catégorie '.mysql_result($reponse, 0, 1).' Adulte']; if(mysql_result($reponse, 0,5)==0){ $reduc=$tot*10/100; echo (-$tot*10/100)."€"; }else{ $reduc=0;

Page 81: Compte rendu de TP n°4 Base de données avancée en PHPgalerneau.pierre.free.fr/Comptes Rendus/Camping_final.pdfNavale), les bases de données ne dépassaient pas trois tables (que

76

echo "-0€"; } ?></td></tr> <tr><td><b>Total</b></td><td></td><td></td><td> <?php echo $tot-$reduc; ?>€</td></tr> </table> <form method=post action="depart.php?c=paie"> <input type=hidden value=<?php echo -20*$tabPC['Emplacement catégorie '.mysql_result($reponse, 0, 1).' Adulte'];?> name=caution> <input type=hidden value=<?php echo $emp;?> name=emp> <input type=hidden value=<?php echo $tot-$reduc; ?> name=paie> <input type=submit value="Valider / Payer"> </form> <?php }else{ echo "Erreur !"; } }else{ echo mysql_error(); } }else{ echo mysql_error(); } }else if($choix=="paie"){ $caution=-$_POST["caution"]; $paie=$_POST["paie"]; $emp=$_POST["emp"]; $requete="update camping_places set nomOccupant='**********', nbA=0, nbE=0, disponible=0, date='', nbHTennis=0, adherant=0, nbJPlanche=0, nbJPeche=0, nbJBateau=0, nbJVelo=0 where id=".$emp.";"; $bool=true; $base=mysql_connect("localhost", "root", ""); if(mysql_select_db("galerneau_pierre", $base)){ if($reponse=mysql_query($requete)){ $requete2="insert into camping_ca values('', $paie, '".date("d.m.Y")."');"; $base=mysql_connect("localhost", "root", ""); if(mysql_select_db("galerneau_pierre", $base)){ if($reponse=mysql_query($requete2)){ $requete3="insert into camping_caution values('', $caution, '$emp', 0);"; $base=mysql_connect("localhost", "root", ""); if(mysql_select_db("galerneau_pierre", $base)){ if($reponse=mysql_query($requete3)){ echo "<h3>Paiement terminé avec succès !</h3>L'utilisateur a été supprimé de la base et la place est donc libérée !"; } } } } } } }

Page 82: Compte rendu de TP n°4 Base de données avancée en PHPgalerneau.pierre.free.fr/Comptes Rendus/Camping_final.pdfNavale), les bases de données ne dépassaient pas trois tables (que

77

?> </td> </table> <table height="10%"><center> <td class="signe"> <?php include("$racine/bas.php"); ?> </td></center> </table> <!--C'est fini !--> </body> </html>

Page 83: Compte rendu de TP n°4 Base de données avancée en PHPgalerneau.pierre.free.fr/Comptes Rendus/Camping_final.pdfNavale), les bases de données ne dépassaient pas trois tables (que

78

Annexe 11 : a f f i chage des s ta t i s t iques

sa isonn iè res , l a page s ta ts .php

Code <html> <head> <title>Camping des flots bleus | Statistiques</title> <link rel="stylesheet" type="text/css" href="../style.css"> </head> <body bgcolor="#cdcdcd"> <center> <?php $racine=".."; include("$racine/bandeau.php"); ?> <table height=75%> <td class="menu"> <?php include("$racine/menu.php"); ?> </td> <td class="corps"><center> <h2>Camping des flots bleus</h2> <?php include("menu.php"); ?> <h3>Statistiques</h3> <?php $nbCampeurs=0; $requete="select * from camping_places where nbA>0 or nbE>0;"; $base=mysql_connect("localhost", "root", ""); if(mysql_select_db("galerneau_pierre", $base)){ if($reponse=mysql_query($requete)){ if(mysql_num_rows($reponse)>1){ while($donnees=mysql_fetch_array($reponse)){ $nbCampeurs+=$donnees['nbA']+$donnees['nbE']; } }else if(mysql_num_rows($reponse)==1){ $nbCampeurs+=mysql_result($reponse, 0, 3)+mysql_result($reponse, 0, 4); } } } $nbCampeursSaison=0; $requete="select * from camping_stats;"; $base=mysql_connect("localhost", "root", ""); if(mysql_select_db("galerneau_pierre", $base)){ if($reponse=mysql_query($requete)){ if(mysql_num_rows($reponse)>1){ while($donnees=mysql_fetch_array($reponse)){ $nbCampeursSaison+=$donnees['nbCampeurs']; } }else if(mysql_num_rows($reponse)==1){ $nbCampeursSaison+=mysql_result($reponse, 0, 1); } }

Page 84: Compte rendu de TP n°4 Base de données avancée en PHPgalerneau.pierre.free.fr/Comptes Rendus/Camping_final.pdfNavale), les bases de données ne dépassaient pas trois tables (que

79

} $ca=0; $requete="select * from camping_ca;"; $base=mysql_connect("localhost", "root", ""); if(mysql_select_db("galerneau_pierre", $base)){ if($reponse=mysql_query($requete)){ if(mysql_num_rows($reponse)>1){ while($donnees=mysql_fetch_array($reponse)){ $ca+=$donnees['paiement']; } }else if(mysql_num_rows($reponse)==1){ $ca+=mysql_result($reponse, 0, 1); } } } echo "<div align=left><span><h4>Nombre de campeurs présents</h4>Les campeurs, adultes et enfants confondus sont : <font color=red><b>$nbCampeurs</b></font> aujourd'hui !</span></div>"; echo "<div align=left><span><h4>Nombre de campeurs de la saison</h4>Les campeurs, adultes et enfants confondus ont été : <font color=red><b>$nbCampeursSaison</b></font> depuis le début de la saison !</span></div>"; echo "<div align=left><span><h4>Chiffre d'affaire de la saison</h4>Le chiffre d'affaire de la saison est de <font color=red><b>$ca €</b></font> au ".date("d.m.Y")." !</span></div>"; ?> </td> </table> <table height="10%"><center> <td class="signe"> <?php include("$racine/bas.php"); ?> </td></center> </table> <!--C'est fini !--> </body> </html>

Page 85: Compte rendu de TP n°4 Base de données avancée en PHPgalerneau.pierre.free.fr/Comptes Rendus/Camping_final.pdfNavale), les bases de données ne dépassaient pas trois tables (que

80

Annexe 12 : a f f i chage des s ta t i s t iques

jou rna l i è res , l a page s top .php

Code <html> <head> <title>Camping des flots bleus | Arreter l'application</title> <link rel="stylesheet" type="text/css" href="../style.css"> </head> <body bgcolor="#cdcdcd"> <center> <?php $racine=".."; include("$racine/bandeau.php"); ?> <table height=75%> <td class="menu"> <?php include("$racine/menu.php"); ?> </td> <td class="corps"><center> <h2>Camping des flots bleus</h2> <?php include("menu.php"); ?> <h3>Etats de fin de journée</h3> <div align=left><span> <a href="stop.php?c=cr">Montant des cautions recues aujourd'hui</a><br> <a href="stop.php?c=crend">Montant des cautions rendues aujourd'hui</a><br> <a href="stop.php?c=ca">Chiffre d'affaire du jour</a><br> <a href="stop.php?c=tr">Solde de trésorerie du jour</a><br><br> <a href="stop.php?c=v">Vider les bases journalieres</a> </span></div> <?php $choix=$_GET["c"]; $tot=0; if($choix=="cr"){ $requete="select * from camping_caution where renduOuEnc=1;"; $base=mysql_connect("localhost", "root", ""); if(mysql_select_db("galerneau_pierre", $base)){ if($reponse=mysql_query($requete)){ echo "<br><br><br><br><br><br><h3>Cautions percu es le ".date("d.m.Y")."</h3>"; if(mysql_num_rows($reponse)>1){ echo "<br><br><table class=table>"; while($donnees=mysql_fetch_array($reponse)){ echo "<tr><td>Caution :</td><td>".$donnees['montant']." €</td></tr>"; $tot+=$donnees['montant']; } echo "<tr><td>Total :</td><td>$tot €</td></tr>< /table>"; }else if(mysql_num_rows($reponse)==1){

Page 86: Compte rendu de TP n°4 Base de données avancée en PHPgalerneau.pierre.free.fr/Comptes Rendus/Camping_final.pdfNavale), les bases de données ne dépassaient pas trois tables (que

81

$tot+=mysql_result($reponse, 0, 1); echo "Total : ".$tot."€"; }else { echo "Vous n'avez percu aucune cautions aujourd'hui !"; } }else{ echo mysql_error(); } }else{ echo mysql_error(); } }else if($choix=="crend"){ $requete="select * from camping_caution where renduOuEnc=0;"; $base=mysql_connect("localhost", "root", ""); if(mysql_select_db("galerneau_pierre", $base)){ if($reponse=mysql_query($requete)){ echo "<br><br><br><br><br><br><h3>Cautions rendue s le ".date("d.m.Y")."</h3>"; if(mysql_num_rows($reponse)>1){ echo "<br><br><table class=table>"; while($donnees=mysql_fetch_array($reponse)){ echo "<tr><td>Caution :</td><td>".$donnees['montant']." €</td></tr>"; $tot+=$donnees['montant']; } echo "<tr><td>Total :</td><td>$tot €</td></tr>< /table>"; }else if(mysql_num_rows($reponse)==1){ $tot+=mysql_result($reponse, 0, 1); echo "Total : ".$tot."€"; } else { echo "Vous n'avez rendu aucune cautions aujourd'hui !"; } }else{ echo mysql_error(); } }else{ echo mysql_error(); } }else if($choix=="ca"){ $requete="select * from camping_ca;"; $base=mysql_connect("localhost", "root", ""); if(mysql_select_db("galerneau_pierre", $base)){ if($reponse=mysql_query($requete)){ echo "<br><br><br><br><br><br><h3>Chiffre d'affai re du ".date("d.m.Y")."</h3>"; if(mysql_num_rows($reponse)>1){ echo "<br><br><table class=table>"; while($donnees=mysql_fetch_array($reponse)){ echo "<tr><td>Paiement :</td><td>".$donnees['montant']." €</td></tr>"; $tot+=$donnees['montant']; } echo "<tr><td>Total :</td><td>$tot €</td></tr>< /table>"; }else if(mysql_num_rows($reponse)==1){ echo "<br><br><table class=table>"; $tot+=mysql_result($reponse, 0, 1); echo "<tr><td>Paiement :</td><td>".mysql_result($reponse, 0, 1)." €</td></tr>"; echo "<tr><td>Total :</td><td>".$tot."€</td></t r></table>"; } }else{ echo mysql_error();

Page 87: Compte rendu de TP n°4 Base de données avancée en PHPgalerneau.pierre.free.fr/Comptes Rendus/Camping_final.pdfNavale), les bases de données ne dépassaient pas trois tables (que

82

} }else{ echo mysql_error(); } }else if($choix=="v"){ $requete="delete from camping_caution;"; $base=mysql_connect("localhost", "root", ""); if(mysql_select_db("galerneau_pierre", $base)){ if($reponse=mysql_query($requete)){ echo "<br><br><br><br><br><br><h3>Vider la base d es cautions du ".date("d.m.Y")."</h3>"; echo "La base a été vidée avec succès !"; }else{ echo mysql_error(); } }else{ echo mysql_error(); } } ?> </td> </table> <table height="10%"><center> <td class="signe"> <?php include("$racine/bas.php"); ?> </td></center> </table> <!--C'est fini !--> </body> </html>