Aller au contenu

[MYSQL] base de donnée


Messages recommandés

Bonsoir,

Je viens vers vous pour m'informer et demander de l'aide.. encore..

Je suis étudiant alternant en 1ere année de BTS informatique de gestion option administrateur réseaux, pour mon entreprise j'ai eu l'idée de créer une petite base de donnée avec divers informations pour faciliter l'adressage ip.

J'aimerais créer une base de donnée de façon à ce que je puisse trouver en tapant une IP à qui elle appartient et inversement en gros (plusieurs informations suivront celles-ci mais je demande déjà la base.. :D )

Cependant il me manque beaucoup de connaissance sur le sujet car c'est ma première année d'informatique.

Je sais donc utiliser phpmyadmin, je sais faire des tables, ajouter des champs, faire des requêtes ect..

Mais je ne comprends pas quel est le lien entre un utilisateur qui n'y connait rien et la base de donnée.

En cours pour trouver une information je dois faire ma requête (select xxx from .. where ..) mais comment fait un utilisateur ?

J'ai lu qu'il fallait coder du php qui fait l'intermédiaire entre la bdd et l'utilisateur mais j'en connais pas plus.

Pour finir par une petite illustration je ne comprends pas les liens entre un utilisateur qui tape une requête et les résultats qui vont apparaitre ( un peu comme avec les moteurs de recherche, on tape un mot et des sites avec ce mot apparaissent..)

J’espère avoir été clair, je lis aussi le siteduzéro.

Cordialement

Lien vers le commentaire
Partager sur d’autres sites

Salut,

oui il te faut une interface si tu veux utiliser les données de ta base depuis autre chose que PHPMYADMIN. Pour ca soit tu te fait une page web(php ...) soit un programme (c++, vb...) mais dans chacun des cas tu dois utiliser des connecteurs, ou des lien de connexion (connectionstring, cherche sur google ;) )

Pour savoir quoi utiliser il faut que tu définisse correctement tes besoins, pour déterminer qui à accès à quoi ...

Edit : un utilisateur lambda NE DOIT PAS TAPER une requête, c'est le fait de faire une action qui engendre une requête : par exemple quand tu liste les topics de ce forum, tu fais une requete sur une BDD sans le savoir (select * from tablePCI where type = 'Software : systèmes, logiciels et lignes de codes' -> ceci est un exemple bidon :D)

Lien vers le commentaire
Partager sur d’autres sites

Voila tu viens déjà de m'apprendre plusieurs choses :D

Je vais commencer déjà par me faire mes tables.

Peut être quelque chose du genre :

ADRESSAGE( ip, acces_internet )

EMPLOYE(N°employé, nom_emp, prenom_emp, num_intern_emp, service_emp)

ORDINATEUR (N°ordi, marque_ordi, model_ordi, os_ordi, num_ecran)

MESSAGERIE (adresse_mail, mot_de_passe)

Je sais pas vraiment quoi mettre de plus, je suis preneur d'idées.

Voila car enfaite on est souvent confronter à savoir à qui appartient une ip ect..

Cordialement

Lien vers le commentaire
Partager sur d’autres sites

Oui je suis sur livron sur drome, tu connais ? :D

Enfaite c'est juste le service informatique qui utiliserais cette base de donnée, chez nous la politique est d'attribuer une IP fixe par utilisateur, et en fonction de cette ip et de l'utilisateur lui donnée le droit d’accéder à internet ect..

Et comme on a pas de plan d'adressage à jour j'aimerais faire une petite base de donnée à jour.

Des fois on dois tester un matériel, ou l'installer et donc le mettre sur le reseau et il nous faut une IP et comme c'est pas à jour on sais pas laquelle prendre..

Ou desfois tout simplement on trouve une IP mais on sais pas à quoi elle correspond, je pourrais ajouter une table PERIPHERIQUE et mettre les différents périphériques et leurs IP ( switch, serv ect..)

Oui je sais on peut faire un petit ping vite fait ect mais bon ctte base de donnée sera aussi utilisé pour une des mes PTI de mon BTS.

Cordialement

Lien vers le commentaire
Partager sur d’autres sites

Ba oué je connais je suis juste à coté de Livron :D

Dans ton cas tu peux te faire un logiciel soit c++ soit VB par exemple, une interface avec une map de ta boite et gérer tt ca avec une BDD! tu peux faire pas mal de truc, genre une partie qui gère les IP disponibles (test, ping...), une partie qui gère les PC (tu peux créer un bon de programme qui récupère les données des PC à distance via les commandes en CMD/DOS que tu peux exécuter dans ton programme)...

Enfin c’est vaste, il y a pas mal de possibilités !

Lien vers le commentaire
Partager sur d’autres sites

humm... Loriol ? :D

Je connais pas du tout le langage C, C++ et ni VB, je connais juste un petit peu de php.

Sa m’intéresse bien le programme qui peut récupérer les données à distance aussi, sa peut me faire aussi une PTI.

Ce que je comprends pas c'est que wamp c'est un serveur virtuel ? si je fais une base de donné avec phpmyadmin de wamps sa va pas le faire du coup.

Il me manque certaines bases, je le sais mais je suis là pour évoluer et apprendre, je peux comprendre que sa en embête plus d'un.

Cdlt

Lien vers le commentaire
Partager sur d’autres sites

Nan Aouste sur sye :ouioui:

En fait il me semble (à confirmer donc) que tu peux interroger des PC à distance pour récupérer des infos sur eux (il y a une méthode c'est sur, mais je ne sait plus si ca se fait en CMD).

Tu peux faire ton programme en VB, ou même VB.Net, ce sont des langages assez simple, en tout cas plus que le C++.

Tu peux donc découper ton programme en partie (onglet comme tu veux):

- une pour interroger les PC à distance, ne s'utilise qu'une fois ou seulement lorsque 'un nouveau PC est arrivé sur le réseau

- une pour gérer la BDD sous forme de tableau, puis si tu y arrive sous forme de plan/map pour cartographier le réseau. C'est utile lorsqu'une boite possède des PC, des copieur, et des machines industrielle tout ca sur le réseau. En fonction du type de matos tu peux le représenter sur un plan ;)

- ... a toi d'imaginer un peu :D

Pour la BDD je peux simplement te dire d'installer (pour commencer simple) easyPHP qui comprend phpmyadmin et les serveurs qui te permettront d'exploiter ta BDD. Tu mes ca sur un PC dédier, serveur ou autre, et tu programme avec Visual Studio par exemple.

Il y a par contre une étape que tu as du sauter, mais importante : il faut que tu te définisse un cahier des charges, pour savoir de quoi tu auras besoin, comment faire, et en combien de temps.

Et pour visualiser la BDD, tu peux utiliser "Merise" avec le logiciel "DbDesigner". Ca va te simplifier la vie, ou plutot tu auras une vue globale en schéma de ta BDD, ce qui est pratique pour la modifier ou voir ce qui ne va pas.

Tout ca parrait un peu lourd, mais comme tu as dit tu es la pour apprendre, et sache que sur un CV d'info ca sert toujours :) Même les logiciels de représentation (Merise dans ton cas)

Voila voila, bon courage en tout cas ;)

Lien vers le commentaire
Partager sur d’autres sites

ADRESSAGE( ip, acces_internet )

EMPLOYE(N°employé, nom_emp, prenom_emp, num_intern_emp, service_emp)

ORDINATEUR (N°ordi, marque_ordi, model_ordi, os_ordi, num_ecran)

MESSAGERIE (adresse_mail, mot_de_passe)

Juste pour t'embêter, cela pique les yeux: aie cela fait très mal: :eeek2:

  • La table Adressage ne contient pas d'ID: mettre en clef primaire une adresse IP c'est moche.
  • Stocker ton adresse IP en long
  • Le champ model_ordi dépend du champ marque_ordi(voire même num_ecran). Ta base n'est pas 2NF ou 3NF. À moins que tu fasses une clef composite: :francais: (**)
  • La table MESSAGERIE ne contient pas d'ID: mettre en clef primaire une adresse électronique c'est moche.
  • Le champ mot_de_passe doit être plutôt mot_de_passe_crypté. *

Sinon tu peux faire cela en 5-6 jours en Objective-C "IPhone" avec sqlite

* -> Soit au md5 Soit au crypt ou autre du PHP Soit avec mysql

** -> Avec une clef composite c'est juste une partie de ta clef: pas 3NF je crois

Et d'un très lointain souvenir, stocker l'adresse IP n'est pas pertinent à cause de DHCP: cela dépend de ton réseau.

Il faut stocker l'adresse MAC: :D

Lien vers le commentaire
Partager sur d’autres sites

non mais j'ai fait sa à la va vite c'était juste pour me/ vous donner une idée :)

Est ce que comme sa c'est mieux ? (manque les clés étrangères)

ADRESSAGE(ID_adressage, ip, acces_internet )

EMPLOYE(ID_employé, nom_emp, prenom_emp, num_intern_emp, service_emp)

ORDINATEUR (ID_ordi, marque_ordi, model_ordi, os_ordi, num_ecran)

MESSAGERIE (ID_messagerie, adresse_mail, mot_de_passe)

Le mot de passe apparaitra pas en crypté je pense.. à cause de mon manque de compétence en la matière.

Je vais stocker l'adresse IP et pas l'adresse MAC tout simplement car ce qui m’intéresse c'est l'adresse IP, dans mon entreprise une adresse IP est attribuer à un employé uniquement et cette IP le suit n'importe où. (Cependant je pourrais y stocker l'adresse MAC mais encore une fois manque de connaissance en la matière je vais pas m'ajouter une charge en plus.. :s mais ton idée était bonne)

Si déjà j'arrive à faire sa je serrais pas mal :D

Lien vers le commentaire
Partager sur d’autres sites

ADRESSAGE(ID_adressage, ip, acces_internet )

EMPLOYE(ID_employé, nom_emp, prenom_emp, num_intern_emp, service_emp)

ORDINATEUR (ID_ordi, marque_ordi, model_ordi, os_ordi, num_ecran)

MESSAGERIE (ID_messagerie, adresse_mail, mot_de_passe)

Je vois plus un truc comme cela (sauf que les clefs primaires sont immondes)

Je dirais plutôt:

ADRESSAGE(ip_long(*), accès_internet)

EMPLOYÉ(num_intern_emp (**), nom_emp, prénom_emp)

SERVICE(num_service, nom_service, [peut être adresse])

ORDINATEUR(model_ordi (***), marque_ordi, os_ordi, num_ecran, adresse_mac)

MESSAGERIE(adresse_mail, mot_de_passe)

Même

1) Si chaque ordinateur a une seule adresse IP, tu peux fusionner la table ADRESSAGE et la table ORDINATEUR

ORDINATEUR(model_ordi, marque_ordi, os_ordi, num_ecran, adresse_mac, ip_long(*), accès_internet)

2) Si chaque employé a une seule adresse électronique, tu peux fusionner la table EMPLOYÉ et la table MESSAGERIE

EMPLOYÉ(num_intern_emp (**), nom_emp, prénom_emp, adresse_mail, mot_de_passe)

3) etc

4) Sinon, pour avoir des combinaisons multiples:

ASSOC EMPLOYÉ SERVICE(num_intern_emp, num_service)

ASSOC EMPLOYÉ ORDINATEUR(num_intern_emp, model_ordi, [ip_long(*)] (<- optionnel))

ASSOC EMPLOYÉ MESSAGERIE(num_intern_emp, adresse_mail,)

(*) -> http://www.fobec.com/CMS/web/php/stocker-une-adresse-dans-une-mysql_1018.html

(**) -> Seulement si le num_intern_emp est unique

(***) -> En théorie chaque constructeur à son propre nommage et il ne devrait pas avoir de doublon

Bizarre ton accès Internet: tu as plusieurs accès Internet? sinon tu le dégages et la table ADRESSAGE aussi: :francais:

Lien vers le commentaire
Partager sur d’autres sites

Le mot de passe apparaitra pas en crypté je pense... à cause de mon manque de compétence en la matière.

C'est pas bien compliqué à faire. Néanmoins, si j'ai bien compris, ici tu aurais besoin de ça pour que les administrateurs au besoin puissent se connecter sur un compte utilisateur ? À ce moment-là, ou bien c'est une information sensible et on fait du chiffrement symétrique (et on définit une procédure d'accès permettant de savoir qui a eu cette information et quand) ou alors c'est pas si sensible et on laisse en clair (de toute manière seul un petit nombre de personnes identifiées auront accès aux informations en base, non ?). Après, est-il vraiment besoin de stocker cette informations ?

Je vais répéter ce qu'a dit bneben mais il faut absolument commencer par faire un cahier des charges propre avant de commencer le reste. Peut-être te rendras-tu compte que certaines informations sont inutiles, ou que d'autres manquent parce que quelqu'un a besoin d'une fonctionnalité à laquelle tu n'avais pas pensé. Et puis ça permet de réfléchir aux contraintes qui peuvent exister, liées à la cohérence des informations ou à la façon dont ces informations sont exploitées. Quand tu as une vision relativement claire de tout ça, que les priorités sont définies, que tes besoins sont identifiés et que les questions qui n'ont pas manquées de faire surface se sont vues répondues, alors toute la conception technique fine et le développement ne devraient plus poser aucun problème.

Je vais revenir sur une question que tu as posée au tout début, vis-à-vis de l'utilisation de WAMP. Pas de problème pour héberger sur ta machine une version de développement à l'aide de cet outil. Tu devrais même pouvoir présenter un prototype ou une version beta, utilisant des données réalistes voire réelles, de la sorte. Par contre pour ce qui est de la version stable de l'application, qui sera exploitée par les utilisateurs finaux, il est plus que conseillé que cela soit déployé sur un serveur spécifique. J'imagine que ta boite dispose déjà d'un ou plusieurs sites et outils en ligne sur son intranet, et donc de serveurs susceptibles d'accueillir ton application. Il y a des chances qu'il faille voir avec les administrateurs de ces machines.

Bon courage pour la suite en tout cas. Si tu as des questions précises relatives à la construction de ta base de données ou l'utilisation de MySQL, je t'aiderais volontiers (par contre, je ne viens pas voir le forum tous les jours, toutes les chances que je me fasse griller par foetus la plupart du temps :p).

Lien vers le commentaire
Partager sur d’autres sites

Coucou,

Par où commencer.. :D

@foetus : Tu as raison, je dois regrouper certaines tables pour une meilleur utilisation de ma bdd.

Je vais me pencher sur les "combinaisons multiples" je connais les clés primaires, étrangères, les contraintes etc.. mais sa je ne crois pas l'avoir étudier (ou alors j'étais sur ce forum même pendant que mon formateur expliquait.. huhu :cartonjaune: )

Les accès internet sont établis en fonction de l'IP >.< donc un seul accès par personne sa suffit ^^

@BreizFenrir : "C'est pas bien compliqué à faire" !! facile à dire quand on connait !! :mdr:

Enfaite seul le service informatique aurait accès à cette BDD (5-6 personnes max).

Au final, le mot de passe de la messagerie est assez sensible et nécessitera un cryptage je pense, car connaissant les personnes qui y sont je vais me faire taper sur les doigts si je les laisses en "clairs".

Les informations qu'il me faudrait sont les IP, MAC, Nom, Prénom, Accès internet (oui/non), num de tel interne et pour finir le service. Sa c'est le strict minimum qu'il me faut..

Je ne sais pas trop quoi mettre dans mon cahier des charges, j'ai pas vraiment de contraintes.. C'est une initiative perso que je prends pour faciliter l'information et aussi pour faire une PTI pour mon bts.

Dans un premier temps, je vais développer la BDD sur mon pc, voir si j'y arrive ect..

Je vais maintenant essayer de refaire mes tables avec vos conseils et vous les faire parvenir ici même.

Je vais surement vous demandez beaucoup de questions et d'aides, et pour cela j'en suis désolé d'avance.. :pleure:

Cordialement.

Lien vers le commentaire
Partager sur d’autres sites

Voici ce que j'en conclue :

EMPLOYE (ID_employé, nom_emp, prenom_emp, num_intern_emp, service_emp,adresse_mail, mot_de_passe_messagerie)

ORDINATEUR (ID_ordi, marque_ordi, model_ordi, os_ordi, num_ecran, ip_long, acces_internet, adresse_mac)

SERVICE (num_service, nom_service )

C'est cohérent pour vous ?

Pour la suite il me semble que c'est :

CREAT TABLE EMPLOYE
(num_intern_emp numeric,
nom_emp	 	varchar(20),
prenom_emp 	varchar(20),
num_intern_emp	numeric,
service_emp	varchar(20),
adresse_mail	varchar(20),
mot_de_passe_messagerie varchar (10),
CONSTRAINT pk_EMPLOYE PRIMARY KEY(num_intern_emp));

CREAT TABLE ORDINATEUR
(ip_long	numeric,
marque_ordi 	varchar(20),
model_ordi 	varchar(20),
os_ordi 	varchar(10),
num_ecran  	numeric,
acces_internet	varchar(3),
adresse_mac	varchar(16),
CONSTRAINT pk_ORDINATEUR PRIMARY KEY(ip_long));


CREAT TABLE SERVICE
(num_service 	numeric,
nom_service 	varchar(10),
CONSTRAINT pk_SERVICE PRIMARY KEY(num_service));

Ne rigolez pas de mes abominabilités :D

Lien vers le commentaire
Partager sur d’autres sites

Ça me semble plutôt propre et bien foutu à première vue. Je ne suis pas sûr néanmoins que numeric soit le choix à faire pour les identifiants que tu stockes. integer me semble plus à propos (voir la documentation de MySQL, qui aide bien en général).

Pour le reste, assure-toi que la taille de tes champs de type varchar est suffisante. 20 caractères me semble un peu court pour nom et prénom (même s'il est vrai que ça passe dans la plupart des cas). Pour l'adresse email, ça dépend ce que tu stockes dedans (partie locale de l'adresse uniquement ? adresse complète mais dont la taille maximum est connue du fait des règles de construction ? adresse personnelle de contact ?) mais là aussi ça me semble un peu court. Par exemple, mon adresse email professionnelle compte 32 caractères. 10 caractères pour le mot de passe c'est trop peu.

Enfin, si j'ai bien compris le champ acces_internet est une valeur booléenne. Préfère utiliser à ce moment-là un tinyint ou similaire, en utilisant les valeurs prédéfinies true et false.

Sinon pour le chiffrement si ma phrase laissait à penser que ça coulait de source c'est surtout pour te dire qu'il ne fallait pas être impressionné et ne pas hésiter à faire quelques essais. Là encore, on trouve les informations dont on a besoin dans la documentation de MySQL. Je te conseille d'utiliser les fonctions AES. Comme je le disais par contre, en ajoutant le chiffrement on ne rend pas les données sûres pour autant ; cela implique de définir une politique de gestion de ces données (droits d'accès donc, mais aussi procédure de changement de clef, etc.). Si tu n'as pas envie de te prendre la tête je pense que personne ne t'en voudra si tu passes outre dans un premier temps. Au pire un de tes collègues peut sans doute t'aider pour cette partie-là, tant il est vrai qu'il faut bien comprendre ce que l'on fait.

Lien vers le commentaire
Partager sur d’autres sites

Merci de ta réponse, j'ai mis numéric car après avoir été sur le lien de foetus j'ai vu qu'il fallait du numeric mais j'ai aussi vu ta commande.. je savais plus quoi mettre du coup ^^'

Il est vrai qu'en réfléchissant bien j'ai visé un peu court avec mes varchar, je vais rectifier sa.

Oui c'est une valeur booléenne, oui ou non.

Bon maintenant je vais rentrer tout ça dans mon wamp, et je vais mettre des valeurs fausses pour simuler une base de donnée. Ensuite,c'est là que je vais vraiment avoir du mal car je ne connais pas les démarches à faire entre la programmation SQL et PHP..

Je vais retourner m'informer sur lesiteduzero avec leurs tutos :p

CREATE TABLE EMPLOYE
       (num_intern_emp integer,
       nom_emp         varchar(30),
       prenom_emp      varchar(30),
       service_emp     varchar(20),
       adresse_mail    varchar(40),
       mot_de_passe_messagerie varchar (20),
       CONSTRAINT pk_EMPLOYE PRIMARY KEY(num_intern_emp));

CREATE TABLE ORDINATEUR
       (ip_long        integer,
       marque_ordi     varchar(20),
       model_ordi      varchar(20),
       os_ordi         varchar(10),
       num_ecran       integer,
       acces_internet  tinyint,
       adresse_mac     varchar(16),
       CONSTRAINT pk_ORDINATEUR PRIMARY KEY(ip_long));


CREATE TABLE SERVICE
       (num_service    integer,
       nom_service     varchar(10),
       CONSTRAINT pk_SERVICE PRIMARY KEY(num_service));

Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

si les employés ne change pas souvent d'ordinateur peut être rajouter une ligne dans une table pour pouvoir trouver quel ordinateur utilise quel employé.

si num_intern_emp est le numéro de l'employé je rajouterais +/- cette ligne dans la table ordinateur pour identifier qui utilise quel ordinateur et inversement.

enfin il existe plusieurs possibilités mais je mettrais une donnée permettant de relier rapidement ordi / employé si par exemple un employé se plaint de son ordi ou si vous avez besoin de le contacter rapidement.

Lien vers le commentaire
Partager sur d’autres sites

num_intern_emp est le numéro de téléphone interne de l'employé, il est unique.

Je comprends pas bien pourquoi tu veux un accès rapide entre ses 2 tables uniquement, sachant qu'il y a que 3 tables ..

EDIT : je viens de voir que j'ai déjà le service" dans ma table employé, donc sa ne sert à rien de creer une nouvelle table :D

EDIT 2 : Je suis bloqué maintenant que j'ai crée ma base de donnée, je sais pas comment faire pour faire une relation entre une base de donnée et une fonction de recherche en php ?

help ^^

Lien vers le commentaire
Partager sur d’autres sites

Je suis très très rouillé niveau PHP, mon aide va à ce moment-là être plus limitée. À l'époque où j'en faisais, j'utilisais les fonctions mysql intégrées à PHP. Néanmoins il me semble qu'il est préférable d'utiliser au moins mysql improved ; voire si tu veux avoir un code PHP indépendant du moteur de base de données utilisée, PDO.

Je te laisse le soin de trouver les didacticiels te permettant de bien voir comment ils faut les utiliser (il ne me semble pas qu'il y ait tant d'exemples que ça dans la doc officielle, hormis dans les commentaires des pages -- dont la lecture est souvent intéressante). Ne t'inquiète pas si tu n'es pas capable de les utiliser dans l'heure. ;)

Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

je disais cela car je pensais que çà serait plus pratique de savoir qui utilise quel PC... sans avoir à chercher ailleurs.

Sinon il faut exécuter les requêtes SQL via PHP je pense que ce site t'en apprendras beaucoup : http://www.siteduzero.com/tutoriel-3-14506-lire-des-donnees.html je pense que le mieux est que tu lises toi même le cours car résumer le tout en 3 lignes n'est pas aisé..

Lien vers le commentaire
Partager sur d’autres sites

Enfaite j'ai déjà lu ce cours et d'autres, c'est toujours pareille. Le problème resiste (je crois que c'est mental mon problème :francais: )

Enfaite j'arrive pas à comprendre la relation entre une fonction rechercher où on va taper par exemple "192.168.9.2" et la base de donnée.

Faut il mettre des clés etrangeres afin que toutes les tables soient raccordées et ensuite faire un SELECT * FROM touteslestables pour que la recherche se fasse dans toute la base de donnée ?

J'arrive pas vraiment à m'exprimer sur mon blocage .. :s

Lien vers le commentaire
Partager sur d’autres sites

alors c'est bien ce que je disais, il faut que tu relis les 2 tables en indiquant par exemple dans la table des PCs qui l'utilise par exemple.

j'ai rajouté un id à tes employés et j'ai mis l'id de l'employé qui l'utilise dans la table dse PCs mais tu peux également faire l'inverse çà n'est qu'un exemple rapide.

CREAT TABLE EMPLOYE
       (id numeric,
       num_intern_emp numeric,
       nom_emp         varchar(20),
       prenom_emp      varchar(20),
       num_intern_emp  numeric,
       service_emp     varchar(20),
       adresse_mail    varchar(20),
       mot_de_passe_messagerie varchar (10),
       CONSTRAINT pk_EMPLOYE PRIMARY KEY(num_intern_emp));

CREAT TABLE ORDINATEUR
       (id_employe numeric,
       ip_long        numeric,
       marque_ordi     varchar(20),
       model_ordi      varchar(20),
       os_ordi         varchar(10),
       num_ecran       numeric,
       acces_internet  varchar(3),
       adresse_mac     varchar(16),
       CONSTRAINT pk_ORDINATEUR PRIMARY KEY(ip_long));


CREAT TABLE SERVICE
       (num_service    numeric,
       nom_service     varchar(10),
       CONSTRAINT pk_SERVICE PRIMARY KEY(num_service));

Après soit tu fais 3 requêtes séparées.

Dans la première requete par exemple tu donne l'ip du pc et tu récupères

 id_employe 
       ip_long  
       marque_ordi
       model_ordi 
       os_ordi        
       num_ecran     
       acces_internet 
       adresse_mac    

Tu fais une seconde requete en donnant l'id_employé et tu récupères

id numeric,
       num_intern_emp 
       nom_emp    
       prenom_emp   
       num_intern_emp 
       service_emp   
       adresse_mail  
       mot_de_passe_messagerie

tu fais une troisième requête pour récupérer le nom du service.

Sinon tu dois tout pouvoir faire en une seule requête avec join (à vérifier il se fait tard ) Mais bon tu peux le laisser en 3 requêtes dans un premier temps çà ne devrait pas mettre à genoux le serveur.

Si tu veux à tout pris utiliser inner join je peux voir comment j'ai fait sur mon forum.

Lien vers le commentaire
Partager sur d’autres sites

Je comprend mieux ton problème en voyant ton dernier message, Arghotien. On va reprendre quelques bases, si tu veux bien. Je vais remettre tout ça en contexte, en simplifiant un peu, avant de rentrer dans le vif du sujet.

Tu as une architecture en 3 tiers, avec l'interface gérée au niveau du navigateur de l'utilisateur (langages HTML/CSS/Javascript), les données stockées en base (langage SQL), et le c½ur de l'application au milieu (langage PHP). Ce dernier définit la manière dont l'utilisateur accède et utilise les données de la base.

Ces trois éléments ont besoin de communiquer. Côté utilisateur, cela se fait via le protocole HTTP. Le navigateur lors de la validation de formulaires envoie des couples clef-valeur au code PHP, et ce dernier renvoie des pages web. Côté base de données, c'est un protocole spécifique dans le détail duquel je ne rentrerais pas, mais qui permet au code PHP d'envoyer des requêtes SQL et lui retourne des tableaux de données. Jusque là, tu me suis j'imagine.

On va prendre l'exemple suivant (volontairement ultra simple) : avec la base que tu nous décris, tu veux à partir de l'identifiant d'un employé accéder à ses nom et prénom.

  1. Côté utilisateur, on a une page avec un champ permettant de spécifier l'identifiant (nommons ce champ 'id') à rechercher et un bouton pour valider
  2. Côté code PHP, on récupère cet identifiant dans $_POST['id']. On veut ensuite communiquer avec la base pour récupérer les données associées. Il faut donc construire une requête, l'envoyer, et récupérer les données. C'est ce dont doit se charger le code ci-après.
    <?php
    // On considère les variables $host, $user, $pass et $dbname comme préalablement initialisées
    $mysqli_obj = new mysqli($host, $user, $pass, $dbname);
    // À ce stade, on est normalement connecté.
    // Voir des exemples de code pour vérifier cela à l'adresse http://fr.php.net/manual/fr/mysqli.connect.php
    
    // On récupère l'identifiant fourni par l'utilisateur.
    // On échappe ce dernier, histoire d'éviter les attaques par injection SQL.
    $id = $mysqli->real_escape_string($_POST["id"]);
    
    // On construit la requête, où la seule chose à changer d'exécution en exécution est l'identifiant fourni par l'utilisateur
    $sql = "SELECT nom_emp, prenom_emp FROM EMPLOYE WHERE id = '$id'";
    
    // On soumet la requête à MySQL
    $result = $mysqli->query($sql);
    
    // On récupère le résultat de cette dernière (un enregistrement est normalement trouvé, j'ai encore omis des vérifications)
    $employe = $result->fetch_object();
    
    // On n'oublie surtout pas de clore les ressources une fois que l'on n'en a plus besoin !
    $result->close();
    $mysqli->close();
    
    // On peut récupérer nom et prénom via $employe->nom_emp et $employe->prenom_emp
    ?>


  3. Les données récupérées, on s'en sert pour construire la page à renvoyer à l'utilisateur.

L'exemple de code a un peu été fait à l'arrache en me basant sur la doc de PHP, il y a des chances qu'il faille le modifier quelque peu. Rajouter des vérifications, déjà. L'adapter au code que tu utilises pour gérer les pages de ton application, aussi.

Pour toutes les données que tu veux récupérer en base, le fonctionnement est le même. Si tu veux récupérer plusieurs enregistrements, $result->fetch_object() doit être appelé dans une boucle ; tu les récupères un à la fois. Si tu veux récupérer des données de plusieurs tables en même temps, tu peux suivre la méthode de treflemard si tu veux éviter d'utiliser des JOIN. Tu ne sembles de toute manière pas avoir d'impératif de performance important.

Pour les requêtes de type INSERT, UPDATE et DELETE, le code PHP fonctionne de la même manière (sauf qu'il n'y a pas à ce moment-là de données à récupérer après soumission de la requête SQL, juste à vérifier que l'exécution s'est bien passée).

Si tu as d'autres questions, ou que tu veux voir certains points plus détaillés, n'hésite pas. En attendant, n'hésite pas non plus à faire des tests avec des exemples de code simple pour bien assimiler ce que tu n'avais pas bien compris.

Enfin, un petit aparté, mais qui est plus lié à la manière que j'ai de fonctionner quand je travaille avec du SQL : liste toujours explicitement les champs que tu souhaites lire, y compris quand tu lis tous les champs d'une table ; et préfère récupérer les données de ces champs via leur nom. Comme ça, le jour où certains changements seront effectués en base, ton code ou bien continuera de tourner comme un charme, ou bien plantera tout de suite si tu as oublié de mettre à jour ton code (suivant la nature du changement).

Lien vers le commentaire
Partager sur d’autres sites

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.

×
×
  • Créer...