Aller au contenu

[MYSQL] base de donnée


Messages recommandés

  • 4 semaines après...

Me revoilàààà :D

Après de nombreuses hésitation à partir sur un autre projet de base de donnée j'ai finalement renoncé et je vais garder cette idée.

Je vais modifier un peu ma base de donnée mais grossièrement elle aura toujours la même utilité.

J'ai relu ton post BreizFenrir et je comprends mieux ce soir ... ( a cause de l’éclipse ? :-D )

J'ai donc compris la chose, si je résume à ma manière :

- L'utilisateur disposera d'une page web (protocole http) où il y aura un champ pour entrer ce que l'on rechercher par exemple le nom d'une personne et un bouton envoyé (langage php )

Une fois cette requête http envoyé cela va faire le lien avec la base de donnée et le langage sql.

Cependant, je ne comprends pas tout et sa m’énerve de pas comprendre la subtilité de la chose. Comment fait la base de donnée pour que quand je tape le nom d'une personne il ne s'affiche que son prénom et service par exemple et pas le reste ?

Je sais pas si vous me suivez :transpi:. J'ai un peu de mal à m'exprimer et décrire ce que je ne comprends pas vraiment.

Cordialement

Lien vers le commentaire
Partager sur d’autres sites

ben ca c'est (si je comprends bien ta question) le principe même des BdD:

Pour chacune de tes tables, chaque ligne doit avoir un identifiant unique (appelé clef primaire) -> cela peut être un numéro de sécu, de tel, une adresse email ou ip par exemple, n'importe quoi du moment que ca identifie de facon unique chaque observation (une clef primaire peut être composé de 2 champs aussi: nom et prénom par exemple)

A partir de là, chaque requête que tu fera cherchera dans ta table cette clef, et pourra renvoyer n'importe quel autre champs de cette ligne.

une syntaxe SQL pour requeter ta BdD sera donc du type:

AFFICHE prénom, service DEPUIS ta_table SI clef = 123456

Cela t'affichera donc le prénom et le service dans lequel travaille la personne qui a pour clef le numéro 123456.

Tu pourrais faire pareil en filtrant par le nom de famille (pas obligé que ce soit la clef) mais cela te retournera autant de ligne qu'il y a d'observation dans ta table avec le même nom.

As-tu compris?? ^^

a+

Lien vers le commentaire
Partager sur d’autres sites

coucou,

oui j'ai compris mais sa veut dire que chaque possibilité doit avoir en amont une requete ?

Il faut faire une requete pour chaque combinaison possible de la base de donnée ? ou alors une requête qui ira chercher toute seule là où il le faut ?

Je crois que j'ai jamais eu autant de mal a m'exprimer que sur une base de donnée :transpi:

Q+

Lien vers le commentaire
Partager sur d’autres sites

"Chaque possibilité doit avoir en amont une requête."

C'est à peu près ça. Pour toutes les opérations qui manipulent la base de données, il faut que tu définisses la requête à soumettre (éventuellement paramétrée) au niveau PHP. Il y a plusieurs techniques qui permettent de garder son code relativement propre et clair. Quand on n'a pas une base ni des opérations complexes, en général implémenter les opérations CRUD pour chaque table suffit (en fait, faire ça pour toutes les tables est même bien souvent de trop, il faut toujours se contenter de ce qu'on a besoin et laisser le reste de côté).

CRUD = Create, Read, Update, Delete, ce que l'on considère généralement comme les quatre opérations de base lorsque l'on manipule une base de données.

Mon activité étant le développement Java, j'espère que tu utilises du développement "objet" sinon tu risques d'avoir un peu de mal à suivre la suite. Je te propose d'implémenter des Data Access Objects (DAO), c'est à dire des classes définissant sous forme de méthode les quatre opérations dont je parle plus tôt.

Les exemples de code que je vais donner ne sont peut-être pas du PHP correct, et seront volontairement simples voire simplistes. Je te laisse le soin de corriger au besoin.

On définit tout d'abord, si ça n'est pas déjà le cas, la manière dont on représente un enregistrement de la table qui nous intéresse, ici une version simplifiée d'EMPLOYE.

<?php
class Employe {
 public $id;
 public $nom;
 public $prenom;
}
?>

Puis on définit notre DAO, associé à cette classe.

<?php
class EmployeDAO {
 function create($employe, $mysqli) {
   $sql = "INSERT INTO `EMPLOYE`(`id`, `nom_emp`, `prenom_emp`) VALUES(" . $employe->id . ", '" . $employe->nom . "', '" . $employe->prenom . "')";
   $mysqli->query($sql);
 }

 function read($id, $mysqli) {
   $sql = "SELECT `id`, `nom_emp`, `prenom_emp` FROM `EMPLOYE` WHERE `id` = " . $id;
   $result = $mysqli->query($sql);
   $tmp = $result->fetch_object();
   $ret = new Employe();
   $ret->id = $tmp->id;
   $ret->nom = $tmp->nom_emp;
   $ret->prenom = $tmp->prenom_emp;
   return $ret;
 }

 function update($id, $employe, $mysqli) {
   $sql = "UPDATE `EMPLOYE` SET `id` = " . $employe->id . ", `nom_emp` = '" . $employe->nom . "', `prenom_emp` = '" . $employe->prenom . "' WHERE `id` = " + $id;
   $mysqli->query($sql);
 }

 function delete($id, $mysqli) {
   $sql = "DELETE FROM `EMPLOYE` WHERE `id` = " . $id;
   $mysqli->query($sql);
 }
}
?>

On utilise ici des requêtes simples. Le fonctionnement est tout à fait similaire avec des requêtes plus complexes, mais il importe de bien adapter son code à ses besoins, et de garder les fonctions et méthodes relativement simples. Un ajout qui pourrait être fait ici (c'est un bon exercice à mon avis), c'est une méthode qui retourne l'ensemble des employés et non un seul suivant son identifiant. On peut aussi avoir besoin de rechercher les employés par nom de famille, auquel cas il s'agit de définir encore une méthode avec la requête SQL qui va bien à l'intérieur.

À noter que l'utilisation de DAO n'est pas une obligation, tout comme l'utilisation de classes et d'objets (ça rend les choses en général plus simple, néanmoins). Si tu as du mal avec cette façon de fonctionner, il doit y avoir d'autres façons de faire décrites ici ou là sur Internet, et tu as sans doute des collègues ou amis qui ont déjà dû résoudre ce genre de problème et peuvent te donner des idées voire des solutions.

En tout cas, si on reprend le code de mon précédent message, et qu'on le modifie pour que le DAO ici défini soit utilisé, ça donne ça :

<?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éalement, on fait ça dans le DAO!
$id = $mysqli->real_escape_string($_POST["id"]);

// On récupère l'employé associé
$employe = EmployeDAO::read($id, $mysqli);

// On n'oublie surtout pas de clore les ressources une fois que l'on n'en a plus besoin !
$mysqli->close();

// On peut récupérer nom et prénom via $employe->nom et $employe->prenom
?>

Lien vers le commentaire
Partager sur d’autres sites

Coucou,

Merci BreizFenrir de prendre du temps à me répondre.

J'ai modifier mes tables, est ce qu'elle sont bonnes ? :

CREATE TABLE EMPLOYE
       (emp_num_intern 		integer,
       emp_nom        			varchar(30),
       emp_prenom      		varchar(30),
       emp_service     			varchar(20),
       CONSTRAINT pk_EMPLOYE PRIMARY KEY(emp_num_intern));


CREATE TABLE SERVICE
       (serv_num   			integer,
       serv_ nom     			varchar(10),
       CONSTRAINT pk_SERVICE PRIMARY KEY(serv_num));

CREATE TABLE MATERIEL
       (mat_marque_uc     		varchar(20),
       mat_model_uc      		varchar(20),
       mat_os_uc        		varchar(20),
       mat_ram_uc       		integer,
       mat_dd_uc       			integer,
       mat_cpu_uc      		varchar(20),
       CONSTRAINT pk_ORDINATEUR PRIMARY KEY(mat_marque_uc));


CREATE TABLE AUTHENTIFICATION
       (auth_ip_long        			integer,
       auth_acces_internet  			tinyint,
       auth_adresse_mac     			varchar(16),
       auth_adresse_mail    			varchar(40),
       auth_mot_de_passe_messagerie 		varchar (20),
       CONSTRAINT pk_SERVICE PRIMARY KEY(auth_ip_long));

Maintenant si j'ai compris je fais mes tables en php ce qui me donne :

<?php
class Employe {
 public $emp_num_intern;
 public $emp_nom;
 public $emp_prenom;
 public $emp_service;
}

class Service {
 public $serv_num;
 public $serv_nom;
}

class Materiel {
 public $mat_marque_uc;
 public $mat_model_uc;
 public $mat_os_uc;
 public $mat_ram_uc;
 public $mat_dd_uc;
 public $mat_cpu_uc; 
}

class Authentification {
 public $auth_ip_long;
 public $auth_acces_internet;
 public $auth_adresse_mac;
 public $auth_adresse_mail;
 public $auth_mot_de_passe_messagerie;
}
?>

Et ensuite je dois donc créer une DAO si j'ai bien compris, j'ai télécharger une doc microsoft qui parle de la DAO mais je comprends pas tout donc je vais essayer de comprendre ton code php.

Petite question une DAO se crée via un langage php, j'ai bien compris ? Est ce que je dois créer 2 documents.php (un pour la déclaration des tables et un pour le DAO) ?

Beaucoup de questions encore desolé..

Cordialement

Lien vers le commentaire
Partager sur d’autres sites

Tu sembles avoir bien compris le principe. Si tu fais des recherches sur les DAO tu vas trouver beaucoup d'exemples, écrit dans un nombre varié de langages. La raison en est que le DAO est un concept généraliste, exploitable du moment que tu utilises un langage objet. Et même avec un langage non-objet, tu peux t'arranger pour avoir un fonctionnement approchant.

"DAO" fait partie d'un ensemble de recettes généralistes visant à résoudre des problèmes courant, nommés Design Patterns. Il y en a un certain nombre, et il n'est absolument pas utile de tous les apprendre par coeur. Mais c'est intéressant de savoir quand on peut faire appel à certains.

Pour revenir sur ton problème, ton schéma de base de données me semble correct (mais il n'y avait pas des relations entre certaines tables et des clefs étrangères à un moment ? J'ai un peu la flemme de relire le fil de discussion). Les classes associées correspondent. Les DAO sont à implémenter en PHP, comme dans mon exemple. Avant néanmoins, passe en revue toutes les opérations que ton application doit autoriser, et fait l'inventaires des DAO et opérations que tu vas devoir implémenter. Comme ça tu ne vas pas perdre de temps à implémenter des méthodes inutilisées.

Pour ce qui est de comment organiser ton code, tu fais comme tu veux, suivant la façon dont tu préfères t'organiser. ;)

Lien vers le commentaire
Partager sur d’autres sites

Oui il me manque les clés étrangères que je n'ai pas encore faites.

Le DAO enfaite c'est juste une règle qui permet à des gens d'avoir une interface et qui fournit une connexion avec la base de donnée ?

J'ai peur d'avoir dit une énormité mais bon j'ignore donc je demande..

Si c'est sa alors je n'ai pas vraiment besoin d'un DAO mais je vais quand même le faire pour ma culture personnelle et pour en apprendre plus sur les bases de données, et sa peut que me rapporter des points.

Je suis en train de gratter à tes exemples et de les transformer et adapter à ma base de donnée.

Est ce que quand je lance mon DAO.php il doit y avoir une apparition de quelque chose ?

Enfaite je me demande où est l'interface utilisateur ^^'

j'ai trouvé cette commande

mysqli mysqli_connect ([string $host = ini_get("mysqli.default_host") [, string $username = ini_get("mysqli.default_user") [, string $passwd = ini_get("mysqli.default_pw") [, string $dbname = "" [, int $port = ini_get("mysqli.default_port") [, string $socket = ini_get("mysqli.default_socket") ]]]]]] )

mais quand je lance ma page php j'ai une erreur synthax direct avec le STRING il me dit.

EDIT : Voilà je suis bloqué maintenant, je vous joints le code adapté

<?php
$hostname = "localhost";
$user     = "";
$password = "";
$nom_base_donnees = "test";

// variables $host, $user, $pass et $dbname comme préalablement initialisées
$connection = new mysqli($hostname, $user, $password, $nom_base_donnees);

// À 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éalement, on fait ça dans le DAO!
$id = $mysqli->real_escape_string($_POST["id"]);

// On récupère l'employé associé
$employe = EmployeDAO::read($id, $mysqli);

// On n'oublie surtout pas de clore les ressources une fois que l'on n'en a plus besoin !
$mysqli->close();

// On peut récupérer nom et prénom via $employe->nom et $employe->prenom
?>

Je ne sais pas vraiment ce qu'il doit se passer maintenant..

Cordialement

Lien vers le commentaire
Partager sur d’autres sites

Le DAO enfaite c'est juste une règle qui permet à des gens d'avoir une interface et qui fournit une connexion avec la base de donnée ?

J'ai peur d'avoir dit une énormité mais bon j'ignore donc je demande..

J'ai l'impression que tu as bien compris. Plus précisément et clairement, c'est une des techniques permettant d'encapsuler la définition des requêtes SQL et l'utilisation de ces dernières. Ainsi, le code utilisant les DAO n'a absolument pas besoin de connaître le schéma de base de données, et n'a pas besoin d'être modifié si des modifications sont faites dans le DAO (correction de bug, changement léger du schéma de base de données).

Si c'est sa alors je n'ai pas vraiment besoin d'un DAO mais je vais quand même le faire pour ma culture personnelle et pour en apprendre plus sur les bases de données, et sa peut que me rapporter des points.

Comme je le disais ça n'est pas la seule technique. L'important de toute façon est que tu utilises une méthode qui te sied, et dans le cadre de tes études tu sois capable d'expliquer, quitte à ce que ce soit succinct, pourquoi tu penses que la technique utilisée est bonne (la facilité d'implémentation est un argument tout à fait valable !).

Est ce que quand je lance mon DAO.php il doit y avoir une apparition de quelque chose ?

Enfaite je me demande où est l'interface utilisateur ^^'

Il n'y a absolument aucune interface utilisateur dans le code que je t'ai fourni. C'est à toi de l'implémenter suivant tes besoins. ;)

Une fois que tu as récupéré ton ou tes enregistrement de base de données, ce sont des objets PHP tout à fait similaires aux autres. Il n'y a plus aucune implication de MySQL du moment que tes requêtes fonctionnent.

Si tu bloques sur ce point, n'hésite pas à demander aux collègues ou enseignants capables de t'aider. Si tu as encore des questions relative à la définition et l'utilisation des interfaces utilisateur à l'aide de PHP, je te conseille de les poser dans un nouveau fil de discussion (car ça pourrait intéresser des gens qui ont ignoré ce sujet car n'étant pas très intéressé par les bases de données ;)).

mais quand je lance ma page php j'ai une erreur synthax direct avec le STRING il me dit.

Tu as le message d'erreur exact ? (Toujours penser à le joindre quand on demande de l'aide, même si on fournit une interprétation avec, dans le cas où celle-ci n'est pas assez claire ou fausse, ce qui arrive.)

Lien vers le commentaire
Partager sur d’autres sites

Alors j'ai eu un cours et il s’avère qu'il ne faut pas que je fasses tout sa car c'est trop cherché et poussé et donc pas bon pour mon oral.

Je fais un BTS IG option réseaux, si je m'aventure la dedans je risque d'endormir le jury et de prendre une mauvaise note car trop de developpement et pas assez de réseaux..

Ma PTI sera donc composé d'une base de donnée, création et restriction de droits, sauvegarde automatique et d'une interface utilisateur.

Tout simplement.

J'ai un autre cours dans 1-2 semaines, j'attends donc ce cours et je vous tiens au courant.

Merci BreizFenrir, tu m'as super bien aidé et tu m'as appris beaucoups de choses, ces informations me serviront tôt ou tard.

Cordialement

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...