Page principale Mlam

SourceForge Logo

Que peut-on trouver dans mlam ?
Présentation générale
Le but de mlam est de faciliter la mise en place de zones de saisie pour insérer ou mettre à jour des données dans une base de données. Ce travail généralement long et fastidieux qui consiste à afficher une table html avec toutes les données courantes, puis de gérer les procédures d'enregistrement avec quand on a le temps quelques routines de vérification des données soumises est pris en charge par mlam.
De manière générale, après avoir défini une structure (grâce à un outil spécifique), il suffit de 3 lignes dans un fichier php pour gérer un nombre infini de données dans une base. Ces données sont présentées dans une table html générée automatiquement. La table html présentant ces données est générée par mlam, et toutes les routines de vérification avant enregistrement font aussi partie du rôle de mlam, le tout sur la même page php. Quand des données posent problème, mlam réaffiche l'écran soumis en indiquant où se trouvent les erreurs, permettant ainsi une correction immédiate.
L'affichage des messages par mlam peut se faire en n'importe quelle langue, à partir du moment où ils ont été traduit. Tous les messages utilisés par mlam sont dans des fichiers éditables permettant la création de nouvelles langues et une prise en compte automatique. Mlam génère les tables avec des tags css spécifiques. Un fichier css est appelé par mlam à chaque génération de page. Il est donc facile d'habiller à sa convenance les pages générées. Mlam n'impose pas l'utilisation de pages php toutes faites, mais au contraire consiste à utiliser une seule fonction où le veut le développeur (c'est en quelque sorte un outil ouvert). Enfin, mlam propose plusieurs fonctionnalités particulières selon les types de données à éditer (est-ce qu'un bigint représente un chiffre ou une clé externe sur une autre table par exemple ?).
Comme la gestion de toutes ces possibilités requière un fichier de définition rapidement illisible, mlam contient son propre outil d'édition de ce fichier. Cet outil permet d'éditer plusieurs projets différents. Il est complètement dynamique en se greffant sur les propriétés des bases de données éditées.
Encore une petite fonctionnalité, comme un outil de gestion est généralement réservé uniquement aux personnes autorisées, si désiré, tous les appels à mlam passent obligatoirement par une authentification (qui reste active pendant toute la session de l'utilisateur).
Voila en gros (!) ce que fait mlam...

Quelles options pour quelles types de données ?
Note : Les formats de données suivant sont spécifiques à mysql
int - tinyint - smallint - float - double - real - decimal - numeric
Les options sont : taille de la fenêtre de saisie et limitation du nombre de caractères.
(1) : apparence par défaut
(2) : taille limitée à 3 caractères
(3) : limitation du nombre de caractères à 3
Ces options sont combinables.
Les routines de vérification marchent, avec quelques exceptions
pour les très grands nombres réels (à exponentielle). Les routines de vérification prennent en compte
les définitions mysql comme int(11).
Diverses façons de présenter ce type.
(1)
(2)
(3)

bigint - mediumint - integer
Si la donnée est bien un nombre, elle est gérée comme le type integer (ou équivalent), autrement dit les options (1), (2) et (3).
Cette donnée peut aussi être utilisée comme une clé externe (sa valeur est la même que la valeur d'une clé externe dans une table). Pour être clair, prenons l'exemple de 2 tables (table_a et table_b), et plus précisément une colonne dans table_a (col_a). Chaque valeur de col_a représente des données dans table_b (toutes les données dont la clé primaire a la même valeur que dans col_a). Mlam propose plusieurs façons de traiter ce cas, qui peut être traité de beaucoup de manières différentes.

Toutes les façons de gérer ce type.
(1)
(2)
(3)
(4) : liste des données disponibles
Avec cette option on affiche une vue de toutes les éléments présents dans table_b. Mlam permet de choisir la colonne affichée dans la liste (une des colonnes de table_b), et permet de sélectionner une colonne pour faire un tri des données. Ca peut être la même colonne (affichage d'une colonne col de table_b ordonnée), mais ça peut en être une autre (affichage d'une colonne col de table_b triée par colonne date).
(5) : Insertion directe d'un nouveau lien
En option, mlam peut laisser l'utilisateur créer une nouvelle donnée. Quand le formulaire sera soumis, une nouvelle donnée sera créée dans table_b, laquelle sera directement liée à l'enregistrement courant dans table_a. On ne peut pas indiquer plus d'une valeur avec cette option.
Note : Cette option devient lourde à l'affichage quand il y a trop de données à afficher.

(4)
option : nouvelle valeur (5)
(6) : liste hiérarchique des données disponibles
Le principe est en gros le même que pour (4), mais les données sont affichées suivant un héritage père-fils. Cela signifie dans notre exemple que table_b contient une colonne spécifique (nommée par exemple col_père) qui représente le "père" de la valeur courante (quand il y a une valeur). Si cette colonne ne contient rien, elle est considérée comme un père. Tous les fils sont présentées en dessous de leur père (avec un signe '+' devant leur valeur). Pour utiliser cette option, il suffit d'indiquer à mlam quelle est la colonne à considérer comme col_père.

(6)
(7) : outil de recherche
Quand le nombre de valeurs dans table_b devient trop grand pour tous les afficher, le seul moyen de permettre la liaison avec une des valeurs est de la rechercher. Mlam contient donc un outil de recherche.
Cette recherche peut s'effecteur sur autant de colonnes que disponibles dans table_b. C'est dans l'outil d'administration qu'on définit les champs de recherche (et leurs intitulés). Si l'utilisateur indique plusieurs données, le moteur recherche des résultats réunissant toutes les conditions. Suivant le type des colonnes, mlam adapte automatiquement la façon de faire des recherches (voir ci-contre la différence entre une recherche dans un champ de type entier et des champs de type texte).
La page de résultats aussi configurable. On peut y indiquer autant de colonnes que de valeurs disponibles. Mlam intègre aussi une limitation du nombre de résultats retournés. Quand cette limite est atteinte, mlam propose une interface classique de déplacement dans les résultats (voir les résultats suivant ou précédant). Chaque résultat est sélectionnable pour être relié à l'enregistrement courant dans table_a.
Mlam a encore une possibilité : créer un nouvel enregistrement dans table_b, et lier automatiquement cette nouvelle valeur à l'enregistrement courant dans table_a. Ca se fait en indiquant simplement la structure à utiliser pour éditer les enregistrements dans table_b. On peut ainsi créer un nouvel enregistrement complet.
Ainsi, avec une seule page php (avec 3 lignes spécifiques), vous avez la possibilité d'éditer un enregistrement dans une table, chercher des données dans une autre table pour lier la valeur, mais aussi éventuellement créer un nouvel enregistrement dans cette autre table pour enfin lier le résultat à l'enregistrement initial !!

rechercher dans champ 1 :
rechercher chiffres : > <
rechercher dans champ 2 : (7)
(8) : bouton type radio
Ce style de présentation est difficilement utilisable avec beaucoup de valeurs dans table_b. Tous les éléments de cette table sont présentés ici avec les même possibilités de choix de colonne et de tri que pour (4).
(9) : liste complète
Encore une fois, il vaut mieux utiliser cette option avec peu d'enregistrements dans table_b. Les options sont les mêmes que pour (8), mais mlam doit connaître ici le nombre d'éléments à montrer (en html, c'est la même chose que (4) mais avec une fixation du nombre de sélections possibles).

option 1
option 2(8)
option 3
(9)
(10) : sélection par image
Cette méthode est pratique quand les données stockées dans table_b représentent des images (en général une des colonnes contient le nom du fichier, les autres des données comme la hauteur et la largeur...). Pour faciliter le choix de l'image désirée, mlam propose ce menu déroulant. Toutes les images sont listées avec les mêmes options de choix de colonne et de tri que (4). Quand l'utilisateur choisit une valeur dans le menu déroulant, le chargement de l'image correspondante se lance automatiquement pour affichage en dessous du menu (fonction javascript). Il est du coup très facile de vérifier que c'est bien la bonne image voulue.

visualisation de l'image choisie(10)

date - datetime - timestamp
Les options sont en gros les mêmes que pour le type integer (taille de la fenêtre de saisie et limitation du nombre de caractères). Mlam vérifie la cohérence des dates soumises (alors que mysql met la valeur à NULL quand celle-ci est fausse). Mlam propose aussi la sauvegarde automatique de la valeur courante (côté serveur). Liée au fait que l'on peut choisir un enregistrement que lors d'une insertion ou lors d'une mise à jour, on peut très facilement conserver en permanence une date de création et la dernière de modification avec deux champs date dans une table.
char - varchar - tinyblob - tinytext
Si ces données représentent bien du texte, les options sont les mêmes que pour le type integer (limitation de la taille de saisie et du nombre de caractères). Mlam vérifie que le nombre de caractères soumis ne dépasse pas la limite donnée par la définition du champ. Ces types de données peuvent aussi être utilisées pour représenter des fichiers ou aussi des images.
Note très importante : si vous voulez utiliser ce genre de données binaires, n'oublier pas de rajouter encode="multipart/form-data" dans la définition html de la balise form
1 : fichiers génériques
Mlam a besoin de connaître le répertoire d'upload des fichiers, ainsi que l'url correspondant à ce répertoire. Avec ces informations, mlam considère la valeur de la colonne courante comme étant le nom d'un fichier. Quand un nouveau fichier est chargé, le précédent est effacé du serveur.
2 : fichiers images
Ces fichiers peuvent être traités exactement comme les fichiers génériques, mais quelques fonctions utiles sont disponibles si ImageMagick est installé sur votre système, ou si vous avez compilé php avec l'extension GD. Je vous conseille de jeter un oeil à ImageMagick's homepage si les fonctionnalités qui suivent vous intéressent, les résultats sont bien meilleurs qu'avec la librarie gd.
Avec ImageMagick installé, mlam a besoin de connaître la location de l'utilitaire convert pour vous permettre de créer des vignettes pour chaque image uploadée dans votre outil d'administration (sinon il tente d'utiliser la librarie gd par défaut). Il n'y a pas de limitations pour le nombre de vignettes. Mlam ne touche pas à la taille du fichier envoyé (sauvé dans le répertoire d'upload par défaut). Par contre il peut réduire la taille de celle-ci et sauver cette réduction dans un sous répertoire. Pour chaque vignette, il faut indiquer le nom du sous-répertoire à utiliser (il sera créé s'il n'est pas présent) et la taille limite autorisée en hauteur et en largeur (en pixels). Lors de la réduction, le ratio est conservé. Pour montrer la valeur courante, on peut indiquer quelle vignette utiliser (s'il y en a). Ce sera cette image qui sera affichée dans votre outil de gestion, avec des liens vers toutes les autres vignettes créées (si c'est le cas), plus un lien vers l'image originale.
blob - text - tinyblob - tinytext
Ce type de données correspond à des chaînes d'au moins 256 caractères. Mlam les manipule quasiment comme (1). La différence vient de la définition de la taille de la saisie qui se fait en nombre de colonnes et en nombre de lignes.
Pour les utilisateurs qui utilisent internet explorer 5 et plus, mlam offre la possibilité d'utiliser un mode spécifique qui permet d'éditer le contenu en html sans passer par l'écriture des balises. Vous pouvez voir un exemple (poussé) de ce que propose internet explorer sur le site de microsoft : microsoft msdn. Les fonctionnalités implémentées dans mlam sont : gras, italic, souligné, lien http. De plus, en indiquant un répertoire et son url correspondante, mlam propose une possibilité d'intégration d'images dans le texte directement à la souris (drag and drop).
(1)

tables de liaisons multiples
Nous considérons ici des liaisons entre tables un peu dans le même style que (4) (une colonne dans une table correspond à des données dans une autre table), sauf qu'on veut pouvoir lier plusieurs tables à une autre sans avoir à créer des colonnes à chaque fois dans la première table. Je vais essayer d'être plus clair avec un exemple "concret". On considère une table nommée projet et une autre table nommée développeur. Chacune de ces tables contient ces propres champs. Un projet a un nom, une date de début, une durée prévue, un numéro de version... Un développeur a un nom, un prénom, et d'autres propriétés. Une table de liaison multiple a pour but de permettre de gérer les liaisons entre les projets et les développeurs qui travaillent dessus. Il ne peut pas y avoir de limitation sur le nombre de développeurs qui travaillent sur un projet. On ne peut donc pas prévoir des colonnes dans la table projet pour stocker les développeurs. On passe donc par la création d'une table spécifique (nommée par exemple lien_projet_développeur). Pour que mlam puisse reconnaître et utiliser cette table, les conditions suivantes doivent être présentes :
- la table de liaison (ici lien_projet_développeur) doit avoir une clé primaire (avec l'option auto increment)
- la table de liaison (ici lien_projet_développeur) doit posséder deux colonnes utilisables comme clé externe (donc du type bigint).
Le résultat de l'utilisation de cette table est visible en (11). Les éléments que doit connaître mlam sont:
1: le nom de la table de liaison (ici lien_projet_développeur) et le nom de sa clé primaire
2: le nom de la table liée (ici développeur) et le nom de sa représentation dans la table de liaison
3: la colonne (de la table liée) dont on veut montrer le contenu à l'écran (cf (11)). Les éléments de cette colonne sont ordonnés.
Tous ces réglages sont grandement facilités par l'outil d'administration. Mlam montre dans un menu déroulant la liste des liaisons possibles (sans les liaisons éventuellement effectives). Ensuite vient la liste des liaisons déjà enregistrées, avec la possibilité de les supprimer (les liaisons uniquement). Il suffit donc de sélectionner un élément dans la liste déroulante et de valider la page pour l'ajouter, et de cocher une ou plusieurs liaisons pour les supprimer (ce qui peut se faire en même temps que l'ajout).
De plus, si la table de liaison contient un champ entier, celui-ci peut être utilisé pour organiser l'ordre dans lequel les données sont reliées (comme sur l'exemple ci-contre). Dans l'outil d'administration, il suffit d'indiquer quel est le champ à utiliser pour rendre cette possibilité fonctionnelle.
En option : les images
Si la table liée contient un champ image (par exemple les photos des développeurs), elles peuvent être affichées à la place des noms. Mlam a besoin alors de connaître le répertoire contenant les images ainsi que l'url correspondante. Encore une fois, ces réglages sont simplifiés avec l'utilisation de l'outil d'administration.

choisir des éléments à supprimer
développeur 3  
développeur 5  (11)
 
Vous avez aussi la possibilité d'utiliser un moteur de recherche pour trouver les données à relier (cf 12). Il marche de la même manière que celui proposé pour les "simples" clés étrangères, avec les mêmes fonctionnalités. Sauf qu'ici, on a en plus la gestion des enregistrements dans la table de liaison.
choisir des éléments à supprimer
développeur 3  
développeur 5  (12)
Chercher dans les noms

enum - set
Ces types ne sont pas supportés par mlam. Peut-être plus tard :)