Rapport de stage Nicolas PLAZE Licence Pro A2I. Rapport de Stage LICENCE PRO A2I. Société INFHOTIK. Nicolas PLAZE



Documents pareils
Administration du site (Back Office)

Utiliser un CMS: Wordpress

Cyberclasse L'interface web pas à pas

Création d'un site dynamique en PHP avec Dreamweaver et MySQL

Manuel d utilisation de la messagerie.

TP JAVASCRIPT OMI4 TP5 SRC

1. Introduction Création d'une macro autonome Exécuter la macro pas à pas Modifier une macro... 5

ContactForm et ContactFormLight - Gestionnaires de formulaire pour Prestashop Edité par ARETMIC S.A.

Dossier Technique. Détail des modifications apportées à GRR. Détail des modifications apportées à GRR Le 17/07/2008. Page 1/10

Utilisation avancée de SugarCRM Version Professional 6.5

Guide de l utilisateur du Centre de gestion des licences en volume LICENCES EN VOLUME MICROSOFT

Formation. Module WEB 4.1. Support de cours

Sommaire. I.1 : Alimentation à partir d un fichier Access (.mdb)...2

Afin d accéder à votre messagerie personnelle, vous devez vous identifier par votre adresse mail et votre mot de passe :

Publication dans le Back Office

Table des matières L INTEGRATION DE SAS AVEC JMP. Les échanges de données entre SAS et JMP, en mode déconnecté. Dans JMP

Manuel d utilisation du module Liste de cadeaux PRO par Alize Web

Plate-forme de tests des fichiers XML virements SEPA et prélèvements SEPA. Guide d'utilisation

Gestion du parc informatique matériel et logiciel de l Ensicaen. Rapport de projet. Spécialité Informatique 2 e année. SAKHI Taoufik SIFAOUI Mohammed

RÉALISATION D UN SITE DE RENCONTRE

Manuel d utilisation de la plate-forme de gestion de parc UCOPIA. La mobilité à la hauteur des exigences professionnelles

Créer le schéma relationnel d une base de données ACCESS

Le modèle de données

SUPPORT DE COURS / PHP PARTIE 3

Climat Scolaire - Manuel utilisateur - Chapitre 2 : «Créer, Editer et suivi d un texte»

Sage 100 CRM Guide de l Import Plus avec Talend Version 8. Mise à jour : 2015 version 8

Groupe Eyrolles, 2003, ISBN : X

Plateforme PAYZEN. Intégration du module de paiement pour la plateforme Magento version 1.3.x.x. Paiement en plusieurs fois. Version 1.

PRODIGE V3. Manuel utilisateurs. Consultation des métadonnées

Sage 100 CRM - Guide de la Fusion Avancée Version 8. Mise à jour : 2015 version 8

Portail étudiant de la Faculté des sciences Notice d'utilisation du site d'inscription aux unités d enseignement

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

Guide d utilisation IPAB-ASSOCIATION v5.0 GUIDE D UTILISATION. à destination des associations et organismes sans but lucratif.

Création, analyse de questionnaires et d'entretiens pour Windows 2008, 7, 8 et MacOs 10

Gestion du parc informatique des collèges du département du Cher. Manuel d utilisation de la solution de gestion de Parc

TAGREROUT Seyf Allah TMRIM

SOMMAIRE. 1. Connexion à la messagerie Zimbra Pré-requis Ecran de connexion à la messagerie 4

Manuel d utilisation pour la plateforme BeExcellent MANUEL D UTILISATION POUR LA PLATEFORME BEEXCELLENT

Qlik Sense Cloud. Qlik Sense Copyright QlikTech International AB. Tous droits réservés.

Programmation Web TP1 - HTML

GUIDE DE DÉMARRAGE. SitagriPro Infinite FINANCEAGRI. Un service. c o r p o r a t e

LISTES DE DISTRIBUTION GÉRÉES PAR SYMPA DOCUMENT EXPLICATIF DE L'INTERFACE WEB À L'INTENTION DES ABONNÉS

Campagnes d ings v.1.6

MANUEL D UTILISATION LIVRET DE L ENSEIGNANT

Sage CRM. 7.2 Guide de Portail Client

Création d un formulaire de contact Procédure

DISTRILOG 2 QUICK START

Création d'un questionnaire (sondage)

Manuel du gestionnaire

CRÉER, ROUTER ET GÉRER UNE NEWSLETTER, UN ING

Comment accéder à d Internet Explorer

Manuel utilisateur. des. listes de diffusion. Sympa. l'université Lille 3

CREG : versailles.fr/spip.php?article803

Manuel d'utilisation de l'administration du site Japo.ch - 1

Institut Universitaire Professionnalisé Génie Mathématiques et Informatique

NOMBRE DE PAGES : 13 NOTE SUR LE MODULE RESERVATIONS ET RESSOURCES PARAMETRAGE

MEDIAplus elearning. version 6.6

claroline classroom online

Publier dans la Base Documentaire

Access 2007 FF Access FR FR Base

Le logiciel de création de site internet IZISPOT est un outil très puissant et qui est assez simple après quelques temps d utilisation.

Whitepaper. Méthodologie de création de rapports personnalisés SQL Server Reporting Services

Projet en nouvelles technologies de l information et de la communication

Website Express Créer un site professionnel avec Orange

TUTORIEL Qualit Eval. Introduction :

7.0 Guide de la solution Portable sans fil

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

Guide de démarrage rapide

Manuel d utilisation NETexcom

Saisissez le login et le mot de passe (attention aux minuscules et majuscules) qui vous ont

Guide Tenrox R8.7 de configuration de Microsoft Reporting Services

1. Des chartes graphiques homogènes, élégantes, créatives

Documentation Honolulu 14 (1)

Manuel de l administrateur

e)services - Guide de l utilisateur e)carpa

GUIDE DE DEMARRAGE RAPIDE:

RAPPORT AUDIT SEO. Élaboré à l'attention de : Monsieur Greber Élaboré par : Cédric Peinado

RECOPLUS LOGICIEL DE GESTION DES RECOMMANDES NOTICE D UTILISATION DE RECOPLUS RESEAU. N de série

Manuel d utilisation du web mail Zimbra 7.1

Guide de prise en main. Yourcegid SOLOS. Devis-Factures. 12/08/2013 Page 1 / 38

WINDOWS 8. Windows 8 se distingue par la présence de 2 interfaces complémentaires :

COMPTABILITE SAGE LIGNE 30

Sommaire. 1 Introduction Présentation du logiciel de commerce électronique 23

GUIDE MEMBRE ESPACE COLLABORATIF. Février 2012

KWISATZ_TUTO_module_magento novembre 2012 KWISATZ MODULE MAGENTO

Le générateur d'activités

Tenrox. Guide d intégration Tenrox-Salesforce. Janvier Tenrox. Tous droits réservés.

Guide Utilisateur. Edition Mars Agenda. s. Evènements. Synchroniser avec les identités de gestion, de. Messagerie interne. Post-it.

Utiliser Access ou Excel pour gérer vos données

INTRODUCTION AU CMS MODX

Mise en place d un intranet de travail collaboratif. Guide utilisateur

Gestion de stock pour un magasin

Guide d utilisation. Version 1.1

SOMMAIRE. Travailler avec les requêtes... 3

FORMATION PcVue. Mise en œuvre de WEBVUE. Journées de formation au logiciel de supervision PcVue 8.1. Lieu : Lycée Pablo Neruda Saint Martin d hères

SFEA. Ce document peut être imprimé au format livret. Guide utilisateurs du site "Se Former en Alsace"

GROUPE CAHORS EXTRANET

Transcription:

Rapport de Stage LICENCE PRO A2I Société INFHOTIK Nicolas PLAZE Année 2001-2002 1

I. L ENTREPRISE 1. Raison sociale 2. Activité 3. Personnel 4. L offre infhotik hôtel 5. Les projets SOMMAIRE II. OBJECTIFS 1. Introduction 2. Limites de l ancien site 3. Objectif principal du site a/ Référencement, moteur de recherche b/ inscription en ligne et ajout des établissements c/ Outils d administration 3. Caractéristiques techniques. a/ outils disponibles pour le développement b/ Gestion de comptes utilisateur c/ Référencement de chaque manipulation de la base d/ choix de la ligne graphique III. FONCTIONNALITES DU SITE 1. Procédures a/ Inscription des utilisateurs b/ Connexion de l utilisateur c/ Ajout d un établissement d/ Page de détail de l établissement e/ Liste des établissements de l utilisateur 2. Procédure d administration a/ Vérification des comptes Utilisateur b/ Vérification des établissements c/ Cotisations d/ Ajout de données supplémentaires e/ Ajout d un utilisateur, et d un établissement en son nom f/ Conclusion 3. Mise en œuvre technique du projet a/ La base de données b/ le moteur de recherche c/ Détail de l établissement d/ Partie privée du site (partie utilisateur) e/ Partie administration du site f/ Affichage des pages / identification g/ Fonction d insertion de code HTML h/ Vérification de l intégrité des informations insérées 4. Navigation a/ Barre de navigation pour les visiteurs (simple consultation de la base) b/ Barre de navigation pour les utilisateurs (gestion d un compte) c/ Barre de navigation pour les administrateurs (gestion du site entier) Conclusion 2

I L ENTREPRISE 1. Raison sociale Infhotik Distribution est une SARL (société à responsabilité limitée) créée a Cran Gevrier (Haute Savoie) en 1993, sous la forme d'un commerce indépendant. En 1999, INFHOTIK devient un éditeur de logiciel à part entière. 2. Activité Son activité principale est l'édition de logiciel (conception du logiciel INFHOTIK HOTEL de gestion hôtelière). Afin d'offrir aux hôteliers une solution globale et complète, INFHOTIK vend également le matériel informatique, et propose aux clients d'installer et de paramétrer les bases sur place. Par ailleurs, un service de maintenance permanent est en place pour dépanner les clients qui peuvent rencontrer des difficultés dans l'utilisation du logiciel. 3. Personnel La société INFHOTIK emploie 6 salariés. Le directeur général d'infhotik est Sergio RAKOTOZAFY. Il a à la fois un rôle de gestion et de responsable commercial. Cédric ABONNEL est le développeur d'infhotik. Il maintient le logiciel, prend en charge le débuggage, la création de nouveaux modules et de nouvelles fonctionnalités. La maintenance du logiciel est assurée par 2 techniciennes. L'une d'elles est également chargée avec un troisième technicien de l installation des bases et la formation des hôteliers. 4. L'offre INFHOTIK HOTEL a/ Fonctionnalités INFHOTIK est un logiciel de gestion hôtelière, permettant de centraliser les plannings hôtel, la réservation hôtel, la réservation restaurant, les arrhes, les disponibilités... Il est également possible d'éditer simplement des états, les notes, les factures... b/ Forme Ce logiciel a été développé sous ACCESS (logiciel de gestion de bases de données intégrant des possibilités d'interfaçage), c'est à dire à partir d'une base de données ACCESS et en utilisant les modules d'interfaçage et la programmation en VBA incluse dans ce logiciel. Cette solution, qui avait été choisie au début des années 1990 pour son prix avantageux, s'est avérée à la longue être extrêmement difficile à maintenir. En dehors des faiblesse manifestes d'access en ce qui concerne les interfaces, les objets graphiques, son manque de souplesse, la séparation du programme en modules entraîne des redondances dans le code, qui est très difficile à intégrer. 3

Toutes ces difficultés ont contribué au choix de changer de solution de développement, étant donné les incompatibilités entre un projet de développement souple, évolutif et puissant et un logiciel dépassé et peu puissant. Il a donc été décidé qu'access cèderait sous peu la place à DELPHI (logiciel de programmation objet en Pascal édité par Borland). c/ les clients INFHOTIK Le logiciel équipe à ce jour environ 360 hôtels, qui sont pour la plupart des hôtels indépendants ou intégrés à des chaînes hôtelières qui n'ont pas donné d'orientation quant au choix du logiciel à utiliser pour la gestion de l'hôtel. Ces hôtels sont répartis sur tout le territoire français. 5. Les projets Le principal projet, en dehors du changement de support du logiciel, consiste en la création d'un site portail sur Internet sur les hôtels. Ce site a déjà été créé, mais sous forme statique. Il a donc été décidé de reprendre cet ancien site, et de le retravailler sous une forme dynamique. Ce portail permettra à la fois de créer une base de données importante des hôtels français (mais également étrangers) et de générer des profits grâce aux cotisations et à la publicité. C'est afin de mettre en oeuvre ce projet que j'ai intégré INFHOTIK en tant que stagiaire. Je vais développer dans la prochaine partie l'ensemble des caractéristiques et des fonctionnalités de ce site. 4

II OBJECTIFS 1. Introduction Comme je l'ai indiqué précédemment, il s'agit principalement de remplacer le site statique actuel par une version dynamique, supportée par une base de données. Je commencerai par développer les caractéristiques techniques du site, puis j'évoquerai les objectifs du site. Enfin, je décrirai en détail l'ensemble des fonctionnalité et des procédures d'utilisations du site. 2. Limites de l ancien site Pour commencer, je dirai que le principal inconvénients de ce site est son manque de souplesse et de dynamisme. Mis à part une ligne graphique dont les limites sont dues à l emploi d un logiciel de création de pages HTML quelques peu dépassé, le problème est l obligation de gérer les mises à jour du site à la main. En effet, pour créer une fiche hôtel, il faut d abord créer la page de présentation, puis ajouter les liens vers cette page dans les listes d hôtels de chaque ville, éventuellement ajouter la ville dans la liste des villes couvertes, etc. L objectif du nouveau site est donc d automatiser l ajout des établissements, et de rendre l administration plus rapide et pratique. 3. Objectif principal du site a/ Référencement, moteur de recherche Il s'agit tout d'abord de référencer sur un même site un grand nombre d'hôtels et de restaurants, et de permettre au visiteur de rechercher dans la base selon plusieurs critères afin de trouver un établissement correspondant à sa demande. Le moteur de recherche propose d'abord un formulaire réunissant ces critères. Une fois ce formulaire rempli correctement et validé, l'utilisateur débouche sur une page présentant une liste d'établissements correspondants aux critères, et présentant un minimum d'information (dont une photo). Il doit être possible d'accéder par la fiche résumé de l'établissement sur une page présentant le détail de celui ci, c'est à dire toutes les informations qui ont été fournies. Il doit également être possible d'accéder à une page contenant une présentation rédigée par le propriétaire concernant son établissement. (dans le cas des établissements équipés par INFHOTIK et donc déjà présent sur l'ancienne version de www.hotels-voyages.com, la page de l'ancien site est insérée en lieu et place de cette page). b/ inscription en ligne et ajout des établissements Dans l'ancienne version du site, l'ajout des établissements était effectué par un employé d'infhotik, en statique, c'est à dire dans le langage HTML. Cela obligeait de fréquentes mises à jour du site, et entraînait une gestion assez lourde. Afin de simplifier cette procédure relativement fastidieuse, nous avons pris le parti de laisser chacun remplir les informations pour son propre établissement, directement sur le site. L'utilisateur, après s'être inscrit en ligne, peut ajouter un établissement et le soumettre à la validation par les administrateurs. Les informations n'étant pas forcément fiables à priori doivent donc être vérifiées par les administrateurs une fois que l'utilisateur a décidé de les soumettre. Une fois ces données vérifiées, les fiches (utilisateurs ou établissements) sont validées ou refusées. 5

c/ Outils d administration Différentes actions doivent être possible à partir même du site, afin d administrer le site et rendre plus rapide et pratique la vérification, et l ajout des informations. Il s agit principalement de la validation des données fournies par les utilisateurs, à propos des établissements ou même de leurs propres coordonnées. Les cotisations sont également gérées en ligne, c est à dire qu une fois que les utilisateurs du site (donc les hôteliers) ont payé l abonnement, l établissement devient visible pour toute la période couverte par cet abonnement. 3. Caractéristiques techniques. a/ outils disponibles pour le développement Pour le développement, nous avons choisi d'utiliser une solution PHP / Mysql. Le choix de ce langage a été fait du fait de sa connaissance par le programmeur d'infhotik, qui garantit la possibilité de maintenir et de continuer à développer le site après la fin de ma période de stage. b/ Gestion de comptes utilisateur La création de comptes était nécessaire afin de permettre aux utilisateurs du site de référencer leur établissement eux-mêmes, tout en permettant de tracer chaque manipulation de la base et garantir une implémentation qui solliciterait au minimum le webmaster. Nous avons mis en place un système de comptes comprenant plusieurs niveaux. L'utilisateur peut créer une fiche hôtel, et la soumettre ensuite à la validation. Il existe également des comptes administrateur dont le rôle consiste à vérifier les informations rentrées dans la base de données. Celui ci doit également pouvoir implémenter la base pour permettre aux utilisateurs qui ne peuvent ou ne veulent pas s'inscrire d'être référencés sur le site. c/ Référencement de chaque manipulation de la base Afin de garantir la sécurité du site, nous avons décidé de tracer toutes les modifications effectuées par les utilisateurs (mises à jour des tables, ajouts et suppressions d enregistrements). Nous pouvons ainsi lister chaque commande, et en conserver la date, l identifiant de l utilisateur qui l a effectué, son adresse IP d/ choix de la ligne graphique La seule contrainte était de conserver les dominantes jaune / bleuté de l ancien site. J ai donc choisi une ligne plutôt sobre, avec un minimum de formes arrondies, avec quelques touches de rouge et de gris. 6

III. FONCTIONNALITES DU SITE 1. Procédures a/ Inscription des utilisateurs L inscription débute sur un formulaire de demande d informations sur l utilisateur. Les informations demandées sont les coordonnées de l utilisateur (nom, prénom, adresse complète, téléphone, fax et email). On propose aussi au futur utilisateur de se choisir un pseudo et un mot de passe pour sa future connexion. On voit que les champs obligatoires sont indiqués par un texte en gras. Les informations fournies dans ce formulaire peuvent être consultées voire modifiées dans la partie réservée à l utilisateur, après connexion. Comme dans tous les formulaires, il existe un système de vérification informations que je développerai dans une partie ultérieure. des b/ Connexion de l utilisateur Une fois que l utilisateur possède un pseudo et un mot de passe il peut se connecter dans la partie privée du site. Une fois connecté, l utilisateur débouche sur une page d accueil qui lui indique les différentes possibilités qui lui sont offertes. 7

Il peut ajouter un établissement, même si son compte n a pas été validé. En effet, nous avons décidé qu il était plus intéressant d éviter à l utilisateur de devoir revenir plusieurs fois sur le site pour inscrire un établissement. Il lui est donc possible de tout faire dans la foulée et de voir quel apparence aura la fiche de son établissement. Deux liens supplémentaires sont affichés par défaut, et permettent d accéder à la liste des établissements ajoutés et à la fiche réunissant les informations relatives à l utilisateur, et éventuellement de les modifier. La gestion des comptes et les procédures concernant la vérification des informations seront développées dans la partie réservée à l administration. c/ Ajout d un établissement Une fois inscrit, il est possible à l utilisateur d ajouter un établissement sur son compte. Cette inscription se décline en plusieurs étapes variant selon le type d établissement à inscrire. Une première page présente un formulaire permettant de remplir les informations concernant l établissement en général. Ici tous les champs des caractéristiques sont obligatoires. - Il s agit d abord du type d établissement (hôtel, restaurant, hôtel-restaurant). - Il est également possible de renseigner la chaîne de l établissement (par ex : campanile, ibis, etc.) Le bouton comportant le signe [+] indique qu il est possible à l utilisateur d ajouter un enregistrement pour la catégorie concernée. - L environnement correspond au cadre de l établissement (campagne, zone périurbaine, centre ville ). Le champ image permet à l utilisateur d ajouter une photographie de son établissement, ou un logo Cette image doit correspondre aux spécifications indiqués un peu plus bas. La validation du formulaire d ajout de l établissement renvoie sur la page présentant le détail de toutes les informations concernant l établissement, que je vais présenter dans le prochain paragraphe. 8

d/ Page de détail de l établissement Cette page présente toutes les informations qui ont été fournies par l utilisateur sur son établissement. Elle sert également de page d administration de l établissement. Elle regroupe en effet les liens vers les différentes pages permettant de renseigner ces informations (page de contact de l établissement, caractéristiques/tarif de l hôtel, du restaurant, listes des caractéristiques, des attraction disponibles à proximité de l établissement, services apportés, etc.). Les informations sont regroupées selon plusieurs parties. - A informations générales, ce sont celles remplies dans le formulaire décrit précédemment. On y retrouve les mêmes informations, plus l état de la cotisation de l établissement et sa date d ajout. - B1 et B2 Les contacts de l établissement. Seules les informations fournies sont présentées, les champs non remplis étant automatiquement cachés. Si l établissement est un hôtel-restaurant et si les contacts du restaurant et de l hôtel sont différents, les deux fiches sont affichées. Sinon, une seule fiche apparaît pour les deux. - C1 Les caractéristiques de l hôtel. Elles regroupent le nombre d étoiles, de chambres, les périodes de fermeture, les différents tarifs des prestations existantes. - C2 Les caractéristiques du restaurant. On y retrouve la catégorie de restaurant (parmi gourmet, rapide, économique des catégories fixées par l administrateurs et non susceptibles d être modifiées par l utilisateur). On y retrouve également les tarifs minimum et maximum des différents menus. - D1, D2, D3 Il s agit d éléments correspondant à des caractéristiques de l établissement, sur les services, les environs de celui ci, etc. Les éléments apparents ne sont pas ajoutés par l utilisateur mais choisis par lui dans des listes où il n a qu a cocher ce qui correspond aux prestations qu il souhaite voir apparaître dans la fiche. 9

e/ Liste des établissements de l utilisateur Cette liste possède certaines caractéristiques qui seront développées dans le chapitre technique dans un paragraphe spécifique. Il est possible pour l utilisateur d accéder à une liste présentant tous les établissements qu il à inscrits sur le site. Les établissements sont affichés différemment selon qu ils viennent d être ajoutés, qu ils ont été soumis à la validation, validés ou refusés. Les établissements qui ne sont pas complets sont présentés avec un fond grisé. Un lien invite l utilisateur à les compléter. S ils sont remplis correctement, un autre lien permet de les soumettre à la validation. Une fois soumis, il faut attendre la vérification par l administrateur. Après intervention de l administrateur, ils peuvent être soit validés soit refusé. S ils sont validés, le fond de la fiche passe à une couleur verte. S ils sont refusés, le fond devient rouge. Il est alors possible d effacer l établissement, ou bien de le moidifier pour le soumettre ultérieurement à une nouvelle validation. Cette liste permet pour chaque établissement d accéder à la fiche de détail qui permettra la mise à jour de l établissement en cas de besoin. 2. Procédure d administration a/ Vérification des comptes Utilisateur C est le premier niveau de contrôle du site. Tous les comptes douteux sont refusés, et en cascade, tous les établissements remplis par ces utilisateurs. Ceux qui semblent remplis correctement (ceux qui comportent des données plausibles) sont conservés et validés. Ensuite, les établissements eux-mêmes sont vérifiés. b/ Vérification des établissements Tous les établissements qui ont été soumis par les utilisateurs et ont donc les informations requises sont vérifiées par l administrateur. Il s agit principalement de s assurer que les noms ne sont pas remplis n importe comment, et que les photographies insérées dans la base correspondent véritablement à ce qu elles sont censées représenter. La vérification se fait à partir d une liste présentant tous les établissements soumis à la validation. Les fiches sont affichées, et des liens supplémentaires sont disponible. Ils permettent de retrouver le pseudo de l utilisateur qui l a ajouté, et donc de voir sa fiche, et également de valider ou refuser la fiche. Il est bien sûr possible de visualiser la fiche complète de l établissement pour vérifier l intégrité de toutes les données. 10

c/ Cotisations Une fois l établissement validé, l utilisateur est invité à contacter Infhotik pour régler le montant de la cotisation. Une fois cette cotisation encaissée, l administrateur fixe la date d échéance de l abonnement, en ajoutant des mois de validité. d/ Ajout de données supplémentaires Un outils est disponible pour permettre à l administrateur d ajouter, supprimer et modifier les données de la base. En effet, il est nécessaire pour la mise à jour des données de donner la possibilité d ajouter de nouvelles options au site. Par exemple, ajouter de nouveaux pays dans la liste, de nouvelles villes, de nouvelles caractéristiques, des services supplémentaires pour les établissements. Néanmoins, nous avons estimé qu il était important de laisser la possibilité aux utilisateurs du site d ajouter des données supplémentaires (ex : chaînes hôtelières, villes, etc.) Dans cette optique, nous laissons à leur disposition un outil semblable à celui de l administrateur. Bien sûr, les possibilités sont bridées et toutes les informations sont soumises à la validation des administrateur. e/ Ajout d un utilisateur, et d un établissement en son nom Afin de permettre aux administrateurs d effectuer eux-mêmes les inscriptions d établissements à la place des propriétaires qui ne peuvent ou ne souhaitent pas le faire, j ai créé des pages qui permettent de créer des comptes utilisateurs. Il est également possible de choisir les droits qui leur seront attribués. Voici un aperçu de la page permettant la gestion des comptes utilisateurs. On y retrouve la liste de tous les utilisateurs inscrits sur le site. Il est possible de trier cette liste selon différents critères ( pseudo, nom, date d inscription et droits). On peut également les valider ou les refuser directement à partir de cette liste (mise à jour du champ de validation de l enregistrement correspondant à l utilisateur dans la table user ). De plus, et afin de maintenir le compte de ces utilisateurs, il est possible de se connecter sous leur nom afin de leur affecter des établissements que l administrateur ajoute luimême. Il suffit pour cela de cliquer sur le pseudo de l utilisateur en question. Par la suite, tout se passe comme si c était l utilisateur qui était connecté. (la liste d établissements proposé est la sienne, ainsi que la fiche contact accessible depuis la partie utilisateur de la barre de navigation, tout établissement ajouté lui sera affecté, etc.) Les données étant insérées par l administrateur, elle sont fiables a priori et sont donc immédiatement validées. 11

f/ Conclusion Pour résumer, je dirais que la tâche de l administrateur se résume en deux principes fondamentaux. Maintien de la base : il est chargé de mettre à jour la base et d offrir toujours de nouvelles possibilités aux utilisateurs. Vérification et validation des données : le choix pris de laisser les utilisateurs remplir la base implique un soucis d intégrité des informations et donc leur vérification. Afin de fournir aux visiteurs du site un service efficace et fiable, l administrateur se doit d être extrêmement vigilant. 12

3. Mise en œuvre technique du projet a/ La base de données Elle a été créée sous Mysql. Voici sa structure. J ai défini pour formaliser les données certain termes qui m ont permis d établir une structure relationnelle. L établissement. Il s agit d un hôtel, d un restaurant ou d un hôtel-restaurant. Il est donc rattaché à un hôtel ou à un restaurant ou aux deux. (champs hotel_id et restaurant_id). Le type d établissement est défini par l existence d une valeur dans chacun des champs. - Il peut être rattaché à une chaîne (champ chaine_id). - Il est situé dans un environnement (environnement_id). - Il peut se voir attribuer une image pour sa fiche résumé (image_id). - Il peut avoir une page dans l ancien site (page_url). - Il est rattaché à un propriétaire ou utilisateur (user_id par la table user_etablissement) - Son état de validation est défini par le champ validation_id. - Les services, caractéristiques et les attraction disponible à proximité sont listées sous la forme d une liste formatée en texte dans les champs service, proximité, et caracteristique. - L échéance de la validation est stockée sous la forme d une chaîne de caractéristique. (format : YYYYMMJJHHMMSS) - La date d ajout est stockée de la même façon, dans le champ date_ajout. 13

Le restaurant Le restaurant possède un certain nombre de caractéristiques qui lui sont propres. J ai donc créé d autres tables pour les stocker. - Les tarifs sont conservés dans la table restaurant_tarif - Les caractéristiques (nombre de couverts, etc.) sont stockées dans la table restaurant_caracteristique. - Les coordonnées du restaurant sont stockées dans les tables contact, ville, departement, pays. L hôtel L hôtel possède un certain nombre de caractéristiques qui lui sont propres. J ai donc créé d autres tables pour les stocker. - Les tarifs sont conservés dans la table hotel_tarif - Les caractéristiques (nombre de couverts, etc.) sont stockées dans la table hotel_caracteristique. - Les coordonnées du restaurant sont stockées dans les tables contact, ville, departement, pays. L utilisateur Il s agit du propriétaire ou d un contact dans l établissement. - il possède un contact qui contient ses coordonnées, tout comme les hôtels et les restaurants. - Son état de validation est également stocké dans la table (champ validation _id). - Comme il existe plusieurs types d utilisateurs, ses droits sont définis par le champ type_user_id. b/ le moteur de recherche Il permet de retrouver dans la base les établissements validés correspondant à un certain nombre de critères. Quand un champ de critère du formulaire de recherche est rempli, on rajoute une portion de code dans la clause WHERE (la chaîne $sql_where) de la requête SQL de recherche d établissement. Tous ces critères sont additionné, c est à dire que l établissement doit répondre à toutes les conditions de la requête. Ces critères sont : - Type d établissement Il est possible pour le visiteur de rechercher un établissement selon son type. En effet, il a 3 possibilités. S il recherche un hôtel, tous les établissements comportant un hôtel seront listés, c est à dire les hôtels et les hôtels restaurant. S il recherche un restaurant, les restaurants et les hôtels-restaurant seront répertoriés. Par contre, s il recherche un hôtel restaurant, seuls ceux ci seront présentés. Portion de code : Ecriture paramétrée de la requête SQL de la recherche d établissements. // si on recherche un hôtel if($type_etablissement_id==1){ $sql_where.= "hvetablissement.hotel_id<>'0' and "; $type_etab="hotel"; // si on recherche un restaurant if($type_etablissement_id==2){ $sql_where.= "hvetablissement.restaurant_id<>'0' and "; $type_etab="restaurant"; // si on recherche un hôtel-restaurant 14

if($type_etablissement_id==3){ $sql_where.= "hvetablissement.restaurant_id<>'0' and hvetablissement.hotel_id<>'0' and "; $type_etab="hotel"; - Localisation, pays : Le premier champ est une chaîne qui est découpée et étudiée. On peut y inscrire plusieurs noms de villes (complets ou non), plusieurs codes postaux (complets ou non). Portion de code : Ecriture paramétrée de la requête SQL de la recherche d établissements. //gestion de la zone géographique //la ou les villes, la ou les cp //ville est le champ dans lequel est entré le paramètre de recherché géographique //sql_where est la partie de la requête ou on spécifie les clauses de la recherche. //type-etab est le type d etablissement, restaurant ou hôtel. if($ville){ $sql_where.="( "; while(list($key, $ville)=each($search)){ if(!is_numeric($ville) && $ville && strlen($ville)>3){ $sql_where.= "hv". $type_etab. "_ville.ville_nom LIKE '%$ville%' OR "; if(is_numeric($ville) && $ville && strlen($ville)==2 strlen($ville)==2){ $sql_where.= "hv". $type_etab. "_ville.ville_cp LIKE '$ville%' OR "; $sql_where.="0) AND "; //le pays if($pays_id){ $sql_where.="(hvhotel_dep.pays_id='$pays_id' OR hvrestaurant_dep.pays_id='$pays_id') AND "; - Tarifs On propose au visiteur d entrer un prix maximum pour sa nuit d hôtel ou son repas au restaurant. Il faut donc, selon qu il cherche un hôtel ou un restaurant, rechercher l info dans la table hotel_tarif ou restaurant_tarif, ce qui complique un peu la requête. Portion de code : Ecriture paramétrée de la requête SQL de la recherche d établissements. //gestion du tarif maximum //le prix minimal d un établissement doit être inférieur ou égal au prix maximum fixé par le visiteur if($tarif_max){ $sql_where.="hv". $type_etab. "_tarif.tarif_min <= '". euro($tarif_max). "' AND "; - caractéristiques générales Il est également permis au visiteur de choisir l établissement en fonction du nombre d étoiles de l hôtel ou la catégorie du restaurant. Portion de code : Ecriture paramétrée de la requête SQL de la recherche d établissements. //gestion de la catégorie d hôtel ou de restaurant //gestion des caracteristiques //si le champ nombre d étoiles est rempli, il s agit d un hôtel et on rajoute ce paramètre à la requête if($nb_etoiles){ $sql_where.="hvhotel_caracteristique.nb_etoiles >= '$nb_etoiles' AND "; //si le champ type_restaurant est rempli, il s agit d un restaurant et on rajoute ce paramètre à la requête if($type_restaurant_id){ $sql_where.="hvrestaurant.type_restaurant_id = '$type_restaurant_id' AND "; 15

c/ Détail de l établissement Afin de récupérer toutes les informations de l établissement et une fois la clause where définie, on a récupéré les identifiants des établissements correspondants à la demande du visiteur. On peut alors faire la requête de détail, qui permet de récupérer toutes les informations de l établissement. Cette requête étant très longue et utilisée plusieurs fois, je l ai placée dans un fichier, que j appelle quand j en ai besoin. Extrait de la requête SQL permettant de récupérer toutes les informations concernant l établissement. SELECT hvetablissement.etablissement_id, hvetablissement.date_ajout, hvetablissement.hotel_id, hvetablissement.restaurant_id, hvchaine.chaine_lbl_fra as chaine, hvetablissement.date_ajout, hvetablissement.services, hvetablissement.proximite, hvetablissement.caracteristiques, hvenvironnement.environnement_lbl_fra as environnement, hvenvironnement.environnement_id, hvimage.image_src, hvetablissement.page_url, hvetablissement.validation_id, hvetablissement.visibilite_id, hvetablissement.echeance_cotisation, hvhotel.contact_id as hotel_contact_id, hvhotel_contact.contact_nom as hotel_nom, hvhotel_contact.contact_adresse as hotel_adresse, hvhotel_contact.ville_id as hotel_ville_id, hvhotel_pays.pays_lbl_fra as hotel_pays, hvhotel_contact.contact_tel as hotel_tel, hvhotel_contact.contact_fax as hotel_fax, hvhotel_contact.contact_email as hotel_email, hvhotel_ville.ville_nom as hotel_ville_nom, hvhotel_ville.ville_cp as hotel_ville_cp, hvtype_hotel.type_hotel_lbl_fra as type_hotel, hvhotel.hotel_caracteristique_id, hvhotel_caracteristique.nb_etoiles as hotel_etoiles, hvhotel_caracteristique.nb_chambres as hotel_nb_chambres, hvhotel.hotel_tarif_id, hvhotel_tarif.tarif_min as hotel_tarif_min, hvhotel_tarif.tarif_max as hotel_tarif_max, hvhotel_tarif.tarif_pension_complete as hotel_tarif_pension_complete, hvhotel_tarif.tarif_demi_pension as hotel_tarif_demi_pension, hvhotel_tarif.petit_dej as hotel_petit_dej, hvhotel_fermeture.ouverture_mois as hotel_o_m, hvhotel_fermeture.ouverture_jour as hotel_o_j, hvhotel_fermeture.fermeture_mois as hotel_f_m, hvhotel_fermeture.fermeture_jour as hotel_f_j, hvrestaurant.contact_id as restaurant_contact_id, hvrestaurant_contact.contact_nom as restaurant_nom, hvrestaurant_contact.contact_adresse as restaurant_adresse, hvrestaurant_contact.ville_id as restaurant_ville_id, hvrestaurant_pays.pays_lbl_fra as restaurant_pays, hvrestaurant_contact.contact_tel as restaurant_tel, hvrestaurant_contact.contact_fax as restaurant_fax, hvrestaurant_contact.contact_email as restaurant_email, hvrestaurant_ville.ville_nom as restaurant_ville_nom, hvrestaurant_ville.ville_cp as restaurant_ville_cp, hvtype_restaurant.type_restaurant_lbl_fra as type_restaurant, hvrestaurant.restaurant_caracteristique_id, hvrestaurant_caracteristique.nb_etoiles as restaurant_etoiles, hvrestaurant_caracteristique.nb_couverts as restaurant_nb_couverts, hvrestaurant.restaurant_tarif_id, hvrestaurant_tarif.tarif_min as restaurant_tarif_min, hvrestaurant_tarif.tarif_max as restaurant_tarif_max, hvrestaurant_fermeture.ouverture_mois as restaurant_o_m, hvrestaurant_fermeture.ouverture_jour as restaurant_o_j, hvrestaurant_fermeture.fermeture_mois as restaurant_f_m, hvrestaurant_fermeture.fermeture_jour as restaurant_f_j, hvuser.user_pseudo, hvuser.user_id FROM hvetablissement LEFT JOIN hvuser_etablissement on hvetablissement.etablissement_id = hvuser_etablissement.etablissement_id LEFT JOIN hvuser on hvuser_etablissement.user_id = hvuser.user_id LEFT JOIN hvchaine on hvetablissement.chaine_id = hvchaine.chaine_id LEFT JOIN hvimage on hvetablissement.image_id = hvimage.image_id LEFT JOIN hvenvironnement on hvetablissement.environnement_id = hvenvironnement.environnement_id LEFT JOIN hvhotel ON hvetablissement.hotel_id = hvhotel.hotel_id LEFT JOIN hvcontact as hvhotel_contact on hvhotel_contact.contact_id = hvhotel.contact_id LEFT JOIN hvville as hvhotel_ville on hvhotel_ville.ville_id = hvhotel_contact.ville_id LEFT JOIN hvdepartement as hvhotel_dep on hvhotel_dep.departement_id = hvhotel_ville.departement_id LEFT JOIN hvpays as hvhotel_pays on hvhotel_pays.pays_id = hvhotel_dep.pays_id LEFT JOIN hvtype_hotel ON hvhotel.type_hotel_id = hvtype_hotel.type_hotel_id 16

LEFT JOIN hvhotel_caracteristique ON hvhotel.hotel_caracteristique_id = hvhotel_caracteristique.hotel_caracteristique_id LEFT JOIN hvhotel_tarif ON hvhotel.hotel_tarif_id = hvhotel_tarif.hotel_tarif_id LEFT JOIN hvperiode_fermeture as hvhotel_fermeture ON hvhotel.periode_fermeture_id = hvhotel_fermeture.periode_fermeture_id LEFT JOIN hvrestaurant ON hvetablissement.restaurant_id = hvrestaurant.restaurant_id LEFT JOIN hvcontact as hvrestaurant_contact on hvrestaurant.contact_id = hvrestaurant_contact.contact_id LEFT JOIN hvville as hvrestaurant_ville on hvrestaurant_contact.ville_id = hvrestaurant_ville.ville_id LEFT JOIN hvdepartement as hvrestaurant_dep on hvrestaurant_dep.departement_id = hvrestaurant_ville.departement_id LEFT JOIN hvpays as hvrestaurant_pays on hvrestaurant_dep.pays_id = hvrestaurant_pays.pays_id LEFT JOIN hvtype_restaurant ON hvrestaurant.type_restaurant_id = hvtype_restaurant.type_restaurant_id LEFT JOIN hvrestaurant_caracteristique ON hvrestaurant.restaurant_caracteristique_id = hvrestaurant_caracteristique.restaurant_caracteristique_id LEFT JOIN hvrestaurant_tarif ON hvrestaurant.restaurant_tarif_id = hvrestaurant_tarif.restaurant_tarif_id LEFT JOIN hvperiode_fermeture as hvrestaurant_fermeture ON hvrestaurant.periode_fermeture_id = hvrestaurant_fermeture.periode_fermeture_id WHERE hvetablissement.etablissement_id= $etablissement_id ; Dans les listes d établissements proposés, des fiches résumant les informations principales sont affichées. On y retrouve bien sûr les noms des établissements, le nombre d étoiles des hôtels, les atrifs des prestations, les types de restaurant et les différents tarifs des menus, ainsi qu une adresse abrégée (avec seulement la ville, le code postal et le pays) et le numéro de téléphone de l établissement. Un lien propose d accéder à la fiche complète de l établissement, et si une photo est disponible, elle est affichée, avec un lien sur la page de présentation préexistante (ancien site), intégrée spécialement dans le site. d/ Partie privée du site (partie utilisateur) Cette partie permet à l utilisateur d opérer toutes les manipulations décrites dans la partie procédure de ce rapport. Je commencerai par décrire la méthode d identification des utilisateurs. Lors de l identification, une fonction va vérifier les pseudonyme et mot de passe de l utilisateur. Portion de code PHP : Fonction testant les pseudo et mot de passe de l utilisateur. //verifie les pseudo et pass et le cas echeant connecte l'user function teste_login(){ global $HTTP_POST_VARS; $pseudo=$http_post_vars['pseudo']; $pass=$http_post_vars['pass']; $pass=md5($pass); //on recherche l identifiant de l utilisateur correspondant au pseudo et au pass $sql="select user_id as current_user from hvuser where user_pseudo='$pseudo' and user_pass='$pass'"; $result=query($sql); while($row=@mysql_fetch_array($result)){ extract($row); //si un utilisateur correspond if ($current_user && $pass){ //$temp_id est l identifiant de session $temp_id=session_id(); 17

//on déconnecte les utilisateurs éventuellement connecté sous le même numéro de session disconnect(); //on place l'identifiant de session dans la base $sql="update hvuser set user_temp_id='$temp_id' where user_id=$current_user;"; query($sql); //on le place dans un cookie sur le client après l avoir codé en md5 setcookie("temp_id",md5($temp_id),time()+36000); Pour résumer le principe de l identification, on peut dire que l utilisateur est authentifié par le numéro de session de son navigateur, et un cookie qui contient ce même numéro codé. Etant donné que le mot de passe de l utilisateur est stocké dans la base après avoir été codé en md5, il n est pas possible de le retrouver en clair sur le site. Lors de la connexion de l utilisateur, le mot de passe est récupéré, codé et comparé au mot de passe codé dans la base. Il est donc indispensable de passer par la page d identification pour se connecter car c est elle qui permet d insérer dans la base le numéro de session et de créer le cookie. Ainsi, les possibilités d usurpation d identité sont très limitées. Aussi, la déconnexion est très simple à effectuer, il s agit en effet simplement d effacer le cookie et d effacer un champ dans la base de données. e/ Partie administration du site Elle consiste globalement à des formulaires permettant de mettre à jour les tables. Il s agit alors de simples modification au niveau des enregistrements. Portion de code : mise à jour de l état de validation des utilisateurs // si un utilisateurs est sélectionné if($user_id){ //si l action est une validation if($action=="2"){ //on valide query("update hvuser set validation_id=2 where user_id='$user_id'"); //si l action est un refus if($action=="1"){ //on refuse la fiche query("update hvuser set validation_id=1 where user_id='$user_id'"); //si l action est une suppression if($user_id && $action=="suppr"){ //on supprime la fiche $sql="delete from hvuser where user_id='$user_id'"; query($sql); 18

f/ Affichage des pages / identification Afin de permettre un accès restreint aux pages, nous avons décidé d utiliser une page principale (page.php), qui permet la connexion à la base de données, et qui contient toutes les fonctions en php, en javascript et les feuilles de styles nécessaires au fonctionnement du site. Pour tous les scripts, formulaires et pages spécifiques à une action (par exemple la page d identification login.php ), l adresse de la page est passée en paramètre à la page principale. Exemple : Cela m a permis, selon l adresse de la page, d accepter ou de refuser l accès aux pages du répertoire utilisateur (priv/), au répertoire d administration (admin/) selon que l utilisateur est connecté ou non et selon ses droits (type_user_id). Par exemple, quelqu'un qui tenterait d accéder (en tapant l url manuellement) à une page privée alors qu il n est pas connecté sera redirigé vers une page d erreur. Voici la fonction testant l url et la connexion de l utilisateur. Une fonction a préalablement défini que la page en question nécessitait une connexion de l utilisateur. Portion de code PHP : vérifie que l'utilisateur peut accéder a la page. Le paramètre est l adresse (url) de la page function teste($url){ //le type et l identifiant de l utilisateur courant (type_current_user et current_user) sont récupérés au chargement de la page global $type_current_user, $current_user; //si l utilisateur est connecté (cookie et enregistrement de l identifiant de session effectué) if (isconnected()){ //si l url correspond à un fichier d un répertoire privé et les droits de l utilisateur le permettent if((dirname($url)=="priv" && $type_current_user>=1) (dirname($url)=="admin" && $type_current_user>=2)){ extract($globals); //on affiche la page include($url); //si les droits ne le permettent pas else{ //on affiche une page d erreur include("./errors/page_introuvable.php"); //si l utilisateur n est pas connecté else{ //on affiche une page d erreur include("./errors/page_introuvable.php"); 19

Ce système apporte déjà un niveau de sécurisation fiable, étant donné que l affichage d une page (notamment une page privée) en dehors de la page principale ne permet pas la connexion à la base, et donc aucune manipulation ou accès à celle-ci. Néanmoins, j ai décidé d ajouter un script permettant d envoyer un message d erreur à toute personne tentant cette manipulation abusive. Voici ce petit script, qui est placé en en tête de toutes les pages à accès restreint. Le test permettant de vérifier que la page principale n est pas utilisée est le fait qu une fonction définie dans son code n est pas définie. Portion de code PHP : affichage d une page d erreur en cas d accès abusif à une page nécessitant une identification //si une certaine fonction de la page principale n existe pas if(!function_exist( isconnected ){ //on le renvoie sur une page d erreur header( Location : http://www.hotels-voyages.com/page.php?page=error ); g/ Fonction d insertion de code HTML Voici différentes fonctions permettant de rendre l affichage d objets HTML plus rapide et efficace. Fonction permettant l affichage d un menu contenant les enregistrements d une table de la base de données. Portion de code PHP : affichage d une liste déroulante en HTML contenant les enregistrements d une table <? //cette fonction a pour parametre le nom de la table, et la valeur par défaut que doit prendre la liste déroulante function list_db($table, $id){ //on récupère tous les enregistrements validés de la table $sql="select * from hv$table where validation_id = 3 order by $table". "_lbl_fra;"; $result_list=query($sql);?> <!-- on ouvre un select dans le code HTML de la page --> <select name="<? echo $table?>_id" class="field"> <option value="">choisir</option> <? //pour chaque enregistrement while($row_list=@mysql_fetch_array($result_list)){ extract($row_list);?> <!-- on crée un item dans le select pour chaque enregistrement --> <! si l identifiant de l item à ajouter est celui défini par défaut dans les paramètres de la fonction il est sélectionné --> <option value="<? echo $row_list["$table". "_id"]?>" <? if($id==$row_list["$table". "_id"]){?>selected <??>><? echo $row_list["$table". "_lbl_fra"]?></option> <??> <!-- on ferme le select dans le code HTML --> </select> <??> Affichage automatisé des images Les enregistrements de certaines tables contiennent un champ image, comme dans la table langue. On a à peu près la structure suivante : Table langue - langue_id (identifiant de la langue) - langue_lbl_fra (libellé en français de la langue) 20