Page 1 sur 1

Gestion de vols en php/mysql

Posté : 15 mars 2008, 09:41
par oscar
Bonjour tous le monde;

Il y a une idée qui me tient vraimement à la tête mais je ne sais pas par ou commencer. En fait mon projet consiste en la création d'une agence de voyage en ligne, réservation de vols (en php/mysql).
Je me suis bloqué au niveau des moteurs de recherche de vols.

Je vous remercie pour votre aide.

Posté : 15 mars 2008, 09:57
par Cyrano
À ce stade, ce n'est pas un problème de PHP, c'est un problème de méthodologie. Te poses-tu les bonnes questions ?

Si comme client potentiel je veux réserver un vol, je vais chercher quoi ?
- D'où je pars;
- avec combien de personnes;
- la destination;
- la date de départ;
- la date de retour;
- la catégorie d'hébergement;
- je veux ou non louer un véhicule sur place;
- je veux la demi-pension ou la pension complète;
- ...

En faisant une liste du genre, tu auras déjà une première idée des données générales. il te restera ensuite à affiner tout ça en construisant un modèle de données cohérent et complet. Après, il sera toujours temps de coder par un découpage du problème global en une suite de problèmes simples.

Mais globalement, tu ne peux pas envisager de coder quoi que ce soit si tes données ne sont pas déjà structurées. Pour te donner une comparaison : si je vais chercher des champignons, je vais devoir me balader et avec un peu de chance, je trouverai des champignons, peut-être des girolles ou des cèpes si j'ai beaucoup de pot, mais peut-être rien parce que je n'ai pas cherché au bon endroit. Mais si je vais faire des courses, ce ne sera pas une ballade parce que je connais mon magasin et je sais ce que je vais chercher en allant aux rayons appropriés : je ne chercherai pas les camemberts dans les surgelés ou du vin dans les fruits et légumes.

Une base de données, c'est un peu la même chose : on doit découper ça en rayons et ranger les données là où elles seront logiquement trouvées. Partant de là, ton programme sera constitué de questions qui seront envoyées vers les bons rayons, pas au hasard.

Posté : 15 mars 2008, 11:14
par oscar
Je travaille déja sur l'application et j'ai constitué mon modéle de donnée qui consiste à proposer des vols.
Merci pour l'exemple du champignon et j'imagine qu'il correspond à mes besoins (je me suis perdu :cry: ). Car j'aurai souhaité gérer les escales avec un moteur de recherche des vols.
Exemple: Ville de départ Paris Ville d'arrivée Durban
on partant de Paris le vol fait escale à Rabat puis de Rabat vers Johanesburg et en fin de Johanesburg à Durban

Merci de votre aide

Posté : 15 mars 2008, 11:23
par Cyrano
Est-ce que le modèle de données tient compte de ces escales ? Doit-on faire correspondre des vols indépendants les uns des autres ?

Ce que je veux dire : je pars de Paris jusqu'à Rabat avec une compagnie A, de Rabat, j'embarque dans un appareil de la compagnie B pour Johannesbourg et de là dans un autre appareil d'une compagnie C pour Durban. Pour que ça marche, je dois avoir les heures de départ et d'arrivée de façon à ce que le départ de Rabat n'ait pas lieu avant l'arrivée à Rabat, pareil pour Johannesbourg.

Qu'est-ce qu'on distingue dans tout ça ? Un vol a une ville et une heure de départ, une ville et une heure d'arrivée. Un voyage peut être composé de plusieurs vols successifs avec des compagnies différentes. Si le voyage se fait avec la même compagnie, les escales ont moins d'importance. Toutefois, ma recherche ira d'abord vers les vols directs, sans escale si possible, avec s'il y a lieu mais de préférence avec la même compagnie. etc... Je te laisse poursuivre le raisonnement.

Posté : 15 mars 2008, 12:10
par oscar
Oui c'est ça comme raisonnement
Et je suis juste bloqué au niveau du script de recherche de vols escale.
Mes tables se presentent de la maniere suivante:
compagnie assure un à plusieurs vol
vol correspond à une date départ et date arrivée, il est assuré par une compagnie, dans un vol il y a un aeroport de départ et un aeroport d'arrivée
aeroport s'effectue un à plusieurs vol départ et arrivée
escale est assuré par un vol et un aeroport pour une date départ et date arrivée

Svp, pourriez vous m'aider sur le script php/mysql qui permet de faire le recherche des vols escale?

Merci

Posté : 15 mars 2008, 12:23
par Cyrano
Je me demande si tu réalises bien la nature exacte de ta demande :
- Soit tu sais exprimer quelle question tu veux poser à la base de données mais sans savoir le traduire en SQL;
- Soit tu n'arrives pas à formuler cette question:

Dans le premier cas, oui, on peut t'aider : montre-nous la structure de tes tables et le libellé de ta question, on t'aidera à trouver la manière d'écrire cette question en SQL;

Dans le second cas, c'est un problème de méthodologie et là c'est différent. D'abord ça signifie qu'on est pas dans le bon forum, ensuite, et c'est plus grave, ça veut dire que tu as l'idée générale mais pas les compétences pour le faire et tu as besoin qu'on développe le raisonnement à ta place... :-k

Donc à mon avis, il va falloir dans un premier temps que tu arrives à formuler en français la question à envoyer à la base de données : à partir de là, on pourra avancer...

Posté : 15 mars 2008, 15:52
par oscar
La structure des tables de la base est :
Aeroport

Code : Tout sélectionner

CREATE TABLE `aeroport` ( `num_aero` int(11) NOT NULL auto_increment, `nom_aero` varchar(50) NOT NULL default '', `num_ville1` int(11) NOT NULL default '0', PRIMARY KEY (`num_aero`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=7 ;
Compagnie

Code : Tout sélectionner

CREATE TABLE `compagnie` ( `code_comp` varchar(5) NOT NULL default '', `rs_comp` varchar(30) NOT NULL default '', `ss_comp` varchar(30) NOT NULL default '', `type_transport` varchar(11) NOT NULL default '', `logo` blob NOT NULL, PRIMARY KEY (`code_comp`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1;
Vol

Code : Tout sélectionner

CREATE TABLE `vol` ( `num_vol` int(11) NOT NULL auto_increment, `date_depart` date NOT NULL default '0000-00-00', `heure_depart` time NOT NULL default '00:00:00', `date_arrivee` date NOT NULL default '0000-00-00', `heure_arrivee` time NOT NULL default '00:00:00', `num_aero_dep` int(11) NOT NULL default '0', `num_aero_arr` int(11) NOT NULL default '0', `code_compV` char(5) NOT NULL default '', PRIMARY KEY (`num_vol`,`date_depart`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ;
Ville

Code : Tout sélectionner

CREATE TABLE `ville` ( `num_ville` int(11) NOT NULL default '0', `nom_ville` varchar(30) NOT NULL default '', PRIMARY KEY (`num_ville`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1;
Escale

Code : Tout sélectionner

CREATE TABLE `escale` ( `num_volE` int(11) NOT NULL default '0', `date_departE` date NOT NULL default '0000-00-00', `num_aeroE` int(11) NOT NULL default '0', `heure_dep_esc` time NOT NULL default '00:00:00', `heure_arr_esc` time NOT NULL default '00:00:00', PRIMARY KEY (`num_volE`,`date_departE`,`num_aeroE`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1;
A chaque insertion d'un nouveau vol, je l'insere dans la table Escale afin de le declarer par défaut. Pour cela Chaque vol effectue un escale.
La question est:
Saisir la ville de depart et la ville d'arrivée, tant qu'il ne s'agit d'un vol direct parcourir dans la table vol et trouver les villes l'union (escale) entre le depart et l'arrivée.

Posté : 15 mars 2008, 16:26
par Cyrano
Reste quand même un problème : il faudrait qu'on utilise la même terminologie.

Dans mon esprit, on fait un voyage entre un point de départ et un point d'arrivée.

Pour ce voyage, on effectuera un à plusieurs vols selon qu'il existe ou non un vol direct.

L'escale, c'est une pause aucun d'un voyage et ça sous-entend qu'on repart avec le même appareil. Dans le modèle de données, je dirais que c'est de la pollution intellectuelle et que ça n'a pas autant d'importance qu'on lui en accorde ici. Parce qu'au bout du compte, on va parler soit d'un voyage avec des escales en utilisant le même appareil du départ à l'arrivée finale, soit on fera plusieurs vols successifs en empruntant différentes compagnies.

Là ça se corse à mon avis parce que je dois trouver comment organiser mon voyage en changeant le moins de fois possible et en arrivant le plus rapidement possible.

Il faudrait donc établir des règles de gestion des priorités. Si par exemple je veux aller de Paris à Athènes et que j'ai le choix suivant :
- Vol direct, départ midi, arrivée 17h30;
- Vol de Paris à Rome avec AirBête, départ midi arrivée 13h35 puis de Rome avec AirNiais départ 14h15 arrivée 17h15;
Est-ce que je donne la priorité au plus direct ou au plus rapide ?

Le problème général de toutes façon, ce sera dans le cas où il n'existe pas de vol direct (avec ou sans escale) parce qu'il va falloir calculer toutes les possibilités à partir de la date et de l'heure de départ pour trouver la combinaison la plus intéressante. Techniquement, rien ne m'interdit de passer de Paris à New-York puis Moscou pour me rendre à Athènes, mais il est évident qu'on doit pouvoir trouver un itinéraire moins chaotique.
Il faut donc établir les villes intermédiaires possibles entre la ville de départ et celle d'arrivée. Ça sous entend que la table des villes doit avoir une relation réflexive établissant les liens existant, une ville pouvant être reliée à une ou plusieurs autres villes... et réciproquement.

Rapidement comme ça, j'ai pas la réponse au vu du modèle tel qu'il est, mais à mon avis, le modèle de données actuel est bancal :-k

Posté : 15 mars 2008, 21:34
par zeus
Modération :
oscar, afin d'améliorer la lisibilité de ton message,
pense à utiliser les balises [code] ou [php] (selon le langage utilisé).

Elles sont disponibles au-dessus de la zone de saisie de ton message
lorsque tu postes un nouveau message.

Des indications sont disponibles sur la manière de mettre en forme vos messages dans la FAQ