| baseportal | ||
| Start | ||
| Documentation baseportal |
| Introduction | ^ |
Les bases de données sont utiles pour structurer des donnés. Vous pouvez faire ceci p. ex. en remplissant à la main un carnet d'adresses ou en utilisant votre ordinateur pour saisir les données. Toutes sortes de choses peuvent être considérées comme des données et tout un chacun les utilise. Adresses, produits d'une firme, résultats de basket, extraits de votre journal, listes d'achats, etc.
Afin de pouvoir utiliser ces données, elles doivent être structurées. La solution la plus commune, et bien souvent la plus évidente sera la création d'un tableau. Voici par exemple un tableau d'adresses:
| Nom | Rue | Localité |
|---|---|---|
| Robert Miller | Duff Drive. | Winston-Salem, NC 27105 |
| Nancy Douglas | National Blvd. | Seattle, WA 98198 |
| George Smith | Kelly Ave. | New York, NY 10016 |
| Tiffany Gray | Jim Bob Rd. | Bloomington, IN 47404 |
Les données sont organisées en lignes et colonnes. Un champ est l'intersection d'une colonne spécifique localisée avec une ligne spécifique. La première ligne est bien entendu très importante. Elle intitule les colonnes sans toutefois faire partie des données.
En regardant cette configuration nous posons la question suivante: qu'y a-t-il de commun entre toutes ces données? Comment regrouper ces informations de manière intelligente?
Il faut bien y veiller lors de la création d'une base de données: avant de pouvoir saisir des données, nous devons savoir quelle type de données nous voulons collecter.
En principe 3 choses:
Le dernier point est la raison principale de l'utilisation de bases de données: pour un ordinateur c'est trois fois rien d'afficher des données de maintes manières différentes. Même s'il y a des millions d'enregistrements dans lesquels le champ "Nom" commance par "a" et le champ "Localité" est "Washington D.C.", l'ordinateur sera capable de trouver extrêmenent rapidement les enregistrements correspondants!
baseportal fournit en principe un système de bases de données sur Internet. Vous pouvez accéder à vos données via Internet de n'importe quel endroit du monde. Ou bien vous pouvez créer votre site Internet en utilisant des bases de données. Des mises à jour, telles que par exemple celles constamment requises pour une boutique en ligne, peuvent être assurées via l'interface d'utilisateur de baseportal de manière très conviviale. Dépassé le temps où l'on devait encore éditer le code HTML. Des données récurrentes, telles que des adresses, peuvent être affichées automatiquement sur votre site via baseportal. Et vous spécifiez l'ordre dans lequel s'afficheront vos données.
Afin de mieux comprendre le concept de bases de données sur Internet, rendez-vous à Premiers Pas et créez vous-même votre première base de données.
| Page d'affichage et balises | ^ |
Les pages d'affichage sont des pages web normales sur lesquelles vous pouvez utiliser de nouvelles commandes HTML (balises).
baseportal modifie les pages avant de les afficher et remplace ces balises spécifiques p.ex. par le contenu d'une base de données, par une autre page ou par le résultat d'un calcul.
Dès lors que ces pages sont utilisées pour l'affichage (l'output), elles s'appellent pages d'affichage.
Exemple:
| <html></head><title>Meilleurs scores</title></head> <body bgcolor="ffffff"> <h2>Meilleurs scores</h2> <include src=introduction> <do action=all> <center> <table width="90%" border="1"> <tr> <td>Nom</td> <td>Score</td> </tr> <loop sort=- range=0,10> <tr> <td><b>$Nom</b></td> <td>$Score</td> </tr> </loop> </table> </center> </body></html> |
Les balises de couleur noire sont des commandes HTML classiques.
Rouge = Nouvelles balises spécifiques de baseportal.
Tout comme les balises classiques du HTML les balises de baseportal commencent avec le signe "plus petit que" < et se terminent par le signe "plus grand que" >. Certaines balises peuvent être utilisées seules, comme p.ex. <include...>, d'autres entourent en couple leur aire d'influence. La fin du passage influencé doit être marquée avec la balise de fermeture. Cette balise porte le même nom que la balise d'ouverture précédé d'une barre oblique /, comme p.ex.: <loop> ... </loop>. Il importe peu que vous utilisiez des majuscules ou des minuscules, mais il est courant d'utiliser uniquement des minuscules.
Bleu = Paramètres qui influencent l'exécution des commandes.
Certains balises ont besoin pour un fonctionnement correct d'informations supplémentaires transmises par des paramètres. Comme p.ex.: <include src=...> requiert le nom du fichier qui est à inclure à cet endroit. D'autres balises ne nécessitent pas toujours de paramètres, mais celles-ci peuvent toutefois aider à adapter légèrement l'exécution de la commande. Comme p.ex. l'utilisation de différentes techniques de tri ou le choix d'une autre couleur d'arrière-plan. Les noms de balise et leurs paramètres sont séparés les uns des autres par un espace. Plusieurs paramètres de suite sont séparés de la même manière. Attention: les guillemets sont interprètés comme éléments d'une variable. Ils ne renferment pas une variable comme c'est le cas dans le HTML classique. Dès lors il vaut mieux ne pas utiliser du tout de guillemets...
Vert = Variables qui vont être remplacées par des donnés actuelles.
Les variables sont simplement des "emplacements de réserve" dans lesquels des valeurs seront insérées. Elles commencent, tout comme dans les langues de programmation Perl ou PHP, toujours par le signe du dollar $. Il existe une série de variables spéciales qui contiennent p.ex. le nombre d'enregistrements lus ou le nom de la base de données affichée. Mais les variables représentent dans la plupart des cas les champs d'une base de données et contiennent la valeur respective d'un enregistrement.
Bien souvent, certains textes sont répétés sur plusieurs pages HTML. Avec baseportal vous n'aurez plus à les répéter dans chaque fichier. Vous pouvez stocker du texte dans des fichiers séparés. Quand vous en avez besoin, vous les insérez tout simplement dans d'autres pages. Si vous mettez à jour un tel texte séparé, toutes vos pages contenant ce texte seront automatiquement mises à jour.
Definition:
| <include src=nom_fichier_texte[paramètres]> |
Exemple:
La page mapage contient le code suivant:
| Voici l'introduction:<p> <include src=entete> C'est tout... |
Une deuxième page entete dans le même dossier se présente ainsi:
| <p><b>C'est simpa... </b></p> <p><i>...de naviguer sur ma page.</i><br> Merci à tous les gens que je connais!</p> |
Si vous accédez maintenant à la page mapage, vous obtiendrez l'affichage suivant:
| Voici l'introduction: C'est simpa... ...de naviguer sur ma page. C'est tout... |
include est particulièrement utile pour les menus qui bien souvent restent les mêmes de page en page. Les variables offrent la possibilité de les adapter de différentes façons.
Des encastrements en série sont possibles et faciles: si une troisième page contient la commande...
| <include src=mapage> |
...l'affichage intégral du code que nous avons saisi plus haut sera inséré à l'endroit spécifié. Ensuite, un quatrième fichier peut "inclure" le troisième et ainsi de suite. baseportal reconnaît et sait gérer des boucles infinies (le fichier 1 contient le fichier 2, le fichier 2 contient le fichier 3 qui contient le fichier 1) et les interrompt.
Pour toute référence à une page dans un autre dossier, vous devez spécifier son emplacement. Ceci est possible d'une manière relative...
| <include src=projet2/finition> |
...ou absolue:
| <include src=/AlexS/menus/standart> |
Ceci insert la page standard du dossier menus de l'utilisateur AlexS
La balise do rend possible l'exécution d'une multitude de fonctions. C'est pourquoi il est possible de le contrôler via une série de paramètres. Par exemple, le paramètre language=fr affichera les communications de baseportal en français. Cliquez ici pour la liste de tous les paramètres possibles.
Definition:
| <do action=Commande[Paramètres]> |
Les valeurs possibles pour Commande sont: input (saisie), list (liste) ou all (toutes).
all génère l'affichage complet de la base de données, permet de rechercher des enregistrements spécifiques, contrôle les droits d'accès et, si cela est permis, affiche également un formulaire de saisie. Et vous pouvez le contrôler avec une multitude de paramètres.
Exemples:
| <p>Voici ma liste d'adresses:</p> <do action=all db=adresses sort=-Nom border=1 datasize=4> |
Dans ce cas, tous les enregistrements de la base de données "adresses" vont être triés d'après le champ "Nom" par ordre alphabétique inversé (de Z à A). Le tableau comprendra des bordures et les données apparaîtront en police de taille relative 4.
| <p>Voici ma liste d'adresses:</p> <do action=all listfields=Nom,Rue,Localite keyfield=Localite> |
Dans ce cas, tous les enregistrements seront triés selon leur Id (leur identificateur interne, ce qui revient à dire dans l'ordre de leur saisie dans la base de données). Seuls les champs Nom, Rue et Localite seront affichés, et le lien vers le reste de l'information concernant chaque enregistrement est disponible via le champ Localite.
Pour apprendre à connaître davantage de paramètres, cliquez ici.
| <do action=input> |
Ceci procède à la saisie, la modification ou la suppression d'enregistrements (si les droits y afférents sont attribués). Si vous n'utilisez pas cette commande, aucune altération de votre base de données ne sera possible même si vous avez correctement rempli le formulaire de saisie et disposez des droits nécessaires.
Vous aurez besoin de list pour contrôler l'affichage de façon plus précise.
| <do action=list listtype=add db=utilisateur> |
affiche le formulaire de saisie de la base de données utilisateur.
| <do action=list listtype=all db=utilisateur> |
affichage total de la base de données utilisateur (formulaire de saisie, onglets, routine de recherche, contenu)
| <do action=list listtype=list db=utilisateur> |
affiche uniquement le contenu de la base de données utilisateur.
| <do action=list listtype=search db=utilisateur> |
affiche uniquement le formulaire de recherche de la base de données utilisateur.
Différents paramètres sont possibles selon le type de liste.
Une page d'affichage complète avec une mise en forme moins structurée, comme celle produite par la fonction "all", pourrait ressembler à ceci:
| <html><head><title>Liste des erreurs</title></head> <body> <do action=input> <p>Voulez-vous ajouter quelque chose? Allez-y:</p> <do action=list listtype=add> <hr size=1> <p>Les contributions:</p> <do action=list listtype=list databack=ffffff spacing=1 gridcolor=808080 dataface=arial datasize=2 listfields=Titre,Auteur,Date,Commentaires> </body></html> |
Un affichage possible:
| Voulez-vous ajouter quelque chose? Allez-y: Les contributions:
|
Malgré les nombreuses facilités offertes par <do action=all> ou <do action=list>, dans bien des cas vous ne serez pas satisfaits de la façon dont se présente l'affichage standardisé des données. Si vous désirez définir vous-même l'affichage des champs, vous y parviendrez avec loop. Il va prendre un par un tous les enregistrements de la base de données et mettre à disposition chaque champ sous forme de variable.
Definition:
| <loop [Paramètres]> ...[$nom_du_champ]... </loop> |
Exemple:
| <p><b>Dernières Nouvelles:</b></p> <loop db=nouvelles sort=-> <h3><a href="$URL">$Titre</a></h3> <ul>$Texte</ul> <p><i>par $Auteur</i></p> <p></p> </loop> |
Cet exemple pourrait faire partie d'un système de rédaction: loop passe en revue tous les enregistrements de la base de données nouvelles. Vu qu'aucun champ n'a été choisi pour le tri, l'affichage se fera selon la chronologie, mais dans le sens inverse à cause du signe "moins" figurant après le signe "égal" (sort=-). Les derniers enregistrements seront donc affichés en haut de page, ce qui est certainement logique pour un système de rédaction de nouvelles.
Les variables précédées d'un symbole de dollar $, correspondent, dans tous les cas, au nom d'un champ défini au sein de la base de données (faites attention à la casse, majuscules et minuscules). Si vous utilisez un nom de champ n'existant pas, rien ne va s'afficher.
L'accès à des champs comme Prix en € ou Question / Reponse est quelque peu plus difficile, car dans ces cas, les noms de ces champs ne pourront servir de variables. A cause des espaces et des caractères spéciaux (€, et respectivement /), une requête directe n'est pas possible. Vous devrez procéder comme ceci:
| $_loop{"Prix en €"} $_loop{"Question / Reponse"} |
Et voici une page d'affichage possible pour la page de nouvelles:
| Dernières nouvelles: Madonna rejoint South Park
|
(Prière de noter que ceci n'est qu'un exemple et ne reflète en aucun cas la réalité! ;-) )
Ceci est probablement l'un des outils les plus impressionants de baseportal... ;-) Que faire si vous avez besoin de fonctions complexes, de calculs, de manipulations de textes, de conditions, de boucles? baseportal met à votre disposition un language de programmation facile à comprendre et bien établi: Perl, qui vous offre tout ce dont vous aurez jamais besoin... et plus! Variables, boucles, conditions, fonctions texte très élaborées et ainsi de suite.
baseportal élargit Perl de nouvelles commandes pour accéder aux bases de données et pour faciliter la création de sites Internet.
L'utilisation de Perl sur vos pages est remarquablement facile:
Definition:
| <perl [Paramètres]> ... </perl> |
Exemples:
| <p><b>Table de multiplications:</b></p> <perl> for($i=1; $i<=10; $i++) { out "$i * $i = ", $i*$i, "<br>"; } </perl> |
Si vous ne disposez d'aucune expérience de programmation à ce jour, ceci pourra vous sembler confus, mais ne craignez rien: programmer n'est pas si difficile que cela en a l'air. Le programme ci-dessus génère une série de 1 à 10 et établit une table de multiplication en affichant les résultats.
Et voici comment se présente l'affichage:
| Table de multiplications: 1 x 1 = 1 2 x 2 = 4 3 x 3 = 9 4 x 4 = 16 5 x 5 = 25 6 x 6 = 36 7 x 7 = 49 8 x 8 = 64 9 x 9 = 81 10 x 10 = 100 |
Important: Veillez à bien utiliser out au lieu de print pour afficher vos données. Dans baseportal out remplace intégralement print, qui est la fonction normale dans Perl. L'utilisation de print n'est pas permise et générera des erreurs.
Pour afficher beaucoup de lignes en même temps, veuillez juste taper ceci:
| out <<EOF; Vous pouvez écrire ici beaucoup de texte... Vous pouvez également utiliser des variables: $Texte Et également des lignes vides: <b>Et, bien sûr, des balises HTML!</b> et ainsi de suite... EOF |
Notez les deux signes "plus petit que" << avant et le point-virgule après le EOF.
Le second EOF doit rester entièrement seul dans une ligne, sans point-virgule. Tout ce qui se trouve entre ces deux EOF sera affiché, et les variables seront remplacées par leur valeur actuelle.
Une explication détaillée de Perl dépasserait les limites de ce document, mais nous vous invitons à découvrir les nombreux livres sur le sujet et bien des introductions sur la toile.
| Requêtes de bases de données | ^ |
Vous pouvez contrôler de nombreuses fonctions de baseportal via l'adressage Internet (URL). En fait, vous pouvez transmettre tous les paramètres possibles pour n'importe quelle page d'affichage via son URL. Les indications contenues dans la page d'affichage ont priorité sur les indications contenues dans l'URL d'adressage, ce qui revient à dire que si vous avez défini un paramètre dans une page d'affichage spécifique, sa valeur va remplacer celle indiquée dans l'URL. En cas de besoin, vous pouvez renverser cette priorité.
Definition:
| http://fr.baseportal.com/baseportal[/utilisateur/chemin/page_d_affichage?paramètres] |
Exemples:
| http://fr.baseportal.com/baseportal |
Ceci va afficher la page d'accès de baseportal. Elle va vous demander d'indiquer votre login (identificateur) et votre mot de passe et, si les deux sont corrects, vous pourrez accéder à votre espace personnel.
| http://fr.baseportal.com/baseportal/Joseph_Durant/rendezvous |
Ceci va appeler la page d'affichage rendezvous de l'utilisateur Joseph_Durant.
| http://fr.baseportal.com/baseportal/Joseph_Durant/code/complete?db=/Joseph_Durant/Projet1/chansons |
Ceci va appeler la page d'affichage complete située dans le dossier code de l'utilisateur Joseph_Durant. Le nom de la base de données utilisée est chansons et elle se trouve dans le dossier Projet1 (en commençant par le dossier de base).
Un paramètre contenu dans une page d'affichage remplace normallement le même paramètre défini dans une URL. Si vous ne le voulez pas, vous devez placer le symbole ^ avant le signe égal = dans la page d'affichage. Ceci "relativise" le paramètre en question et fonctionnera avec tous les paramètres. La définition de ce paramètre via une URL aura désormais la priorité.
| <do action=all db^=test> |
Ceci va définir comme base de donnée actuelle test, si aucune base de données n'est transmise via URL
Vous pouvez effectuer une requête en combinant n'importe quelles conditions pour n'importe quels champs. P.ex.: Recherche tous les enregistrements dans lesquels le champ Nom commence avec la lettre "a" (majuscule ou minuscule), le champ Sum est inférieur à 100 et le champ VIP contient la lettre x - pas de problème!
Definition:
| <champ><opérateur><valeur>[<conjonction>...] |
champ = nom du champ qui doit être défini dans la base de données
operateur = détermine le taux de correspondance:
| Operateur | Description |
|---|---|
| ~= | prend en compte uniquement le début de la valeur; ignore la casse (majuscules/minuscules) |
| == | recherche une valeur exacte; ignore la casse |
| ~=! | regarde uniquement le début de la valeur; respecte la casse |
| ==! | recherche une valeur exacte; respecte la casse |
| < <= <> >= > | recherche "plus petit que", "plus petit que" ou "égal à", "inégal à", "plus grand que" ou "égal à", "plus grand que"; ignore la casse |
| ! >=! >! | recherche "plus petit que", "plus petit que" ou "égal à", "inégal à", "plus grand que" ou "égal à", "plus grand que"; respecte la casse |
| ~<= ~<> ~> | recherche "plus petit que" ou "égal à", "inégal à", "plus grand que" le début de la valeur; ignore la casse |
| ~<=! ~<>! ~>! | recherche "plus petit que" ou "égal à", "inégal à", "plus grand que" le début de la valeur; respecte la casse |
| ~< ~>= ~=! | Redondant; la même chose que < >= =! |
valeur = la valeur que vous recherchez.
Certaines valeurs ont une interprétation spécifique:
| Caractère | Description |
|---|---|
| * | Correspond à tout. Tous les enregistrements seront affichés, dans l'ordre défini par le champ. |
| # | Correspond à la valeur du champ dans le dernier enregistrement, p.ex. dans le cas d'enregistrements qui seraient triés comme "a", "b", "c" , cela corespondrait à "c". |
| ? | Correspond à un enregistrement pris au hasard (random). Opérateurs possibles: ==, < et >. |
conjonction = comment combiner plusieurs conditions ou paramètres:
| Caractère | Conjonction | Description |
|---|---|---|
| & | AND | Uniquement les enregistrements répondant aux deux conditions. |
| | | OR | Tous les enregistrements correspondant au moins à une des conditions (ou aux deux). |
| ° | NOT | Tous les enregistrements correspondant à la première condition, mais ne correspondant pas à la seconde. |
Prière de noter: Vous pouvez uniquement effectuer une requête sur un champ pour lequel vous avez choisi un type de tri lors de la définition de la base de données.
Exemples:
| Nom~=c |
Vous obtiendrez tous les enregistrements dont la valeur du champ Nom commence par "c" (majuscule/minuscule).
| Nom==Sylvie |
Vous obtiendrez tous les enregistrements dont la valeur du champ Name contient le nom exact sylvie, que ce soit en majuscules ou en minuscules.
| Age<30&ville==!Nancy |
Fournit tous les enregistrements dont la valeur du champ Age est inférieur à 30 ET dont le champ ville correspond exactement à Nancy (avec le N en majuscule, le reste en minuscule).
| Profession==Programmeur|Profession==Administrateur&Code-postal~=1 |
Fournit tous les enregistrements dont la valeur du champ Profession contient la valeur "Programmeur" OU "Administrateur" ET dont le champ Code-postal commence par "1".
| Titre>=!d&Titre<!k°Titre~=!h |
Fournit tous les enregistrements dont la valeur du champ Title commence par un "d", "e", "f", "g", "i" ou "j" en minisucule.
| Id==? |
Fournit n'importe quel enregistrement pris au hasard (random).
Vous pouvez facilement effectuer les requêtes ci-haut via une URL:
| http://fr.baseportal.com/baseportal/urxi/out1?db=test&Nom>t&Rue~=montee+de |
L'affichage d'une base de données via la page d'affichage out1 de l'utilisateur urxi fournit tous les enregistrements de la base de données test dans lesquels le champ Nom commence par une lettre de l'alphabet ultérieure à "t" ET dont le champ Rue correspond à "montee de". Prière de noter que dans une URL l'espace est remplaçé par le signe "plus" +.
Vous pouvez facilement effectuer les requêtes ci-haut avec des paramètres dans les balises spécifiques de baseportal:
| <do action=all Categorie==Thriller or Categorie==Romance not Langue==Anglais and Disponible==1> |
Ceci vous fournira tous les enregistrements dont le champ Categorie contient la valeur "Thriller" OU "Romance" ET dont le champ Langue ne contient PAS "Anglais" ET dont le champ Disponible correspond à "1". Vous pouvez également ommettre le AND vu qu'il représente la conjonction par défaut.
| <do action=all Compagnie==Sony Produit~=tv> |
Ceci vous fournira tous les enregistrements dont le champ Compagnie a la valeur "Sony" et dont la valeur du champ Produit commence avec "tv".
Vous pourriez avoir des problèmes avec une requête en y utilisant quelques caractères spéciaux, p.ex. l'espace, puisqu'il sert également de séparateur entre les paramètres, ou bien avec le symbole "plus grand que" > qui sert normalement à déterminer la fin d'une balise. C'est pourquoi ces caractères spéciaux doivent être masqués avec une barre oblique inversée en les précédant d'un \:
| <loop Nom==Joseph\ Durant Age\>21> |
Ceci vous fournira tous les enregistrements dont le nom Nom est "Joseph Durant" et dont l'âge Age est supérieur à 21.
|
Definition:
| sort=[-]Champ[,[-]Champ...] |
Vous ne pouvez trier vos données que si vous avez défini un mode de tri pour les champs correspondants lors de la définition de la base de données. Rappelez-vous de la différence entre un tri en mode 'Nombre' (tri numérique) ou en mode 'Texte' (tri alphabétique):
| Nombre | Texte |
|---|---|
| 1 | 1 |
| 7 | 10 |
| 10 | 115 |
| 13 | 13 |
| 22 | 22 |
| 76 | 7 |
| 115 | 76 |
La séquence inhabituelle du tri ci-dessus démontre que les textes sont comparés caractère par caractère alors que chez les nombres leur position spécifique dépendra de leur valeur spécifique.
Exemple:
En ne définissant pas de conditions pour la requête, toutes les données seront triées dans un ordre chronologique, de sorte que les données saisies en premier lieu seront les premières à être affichées. Si vous définissez des conditions, le tri s'effectuera selon le premier champ mentionné:
| <do action=all Nom_de_famille~=ba> |
Ceci va trier tous les enregistrements dont le champ Nom_de_famille commence par "ba" p.ex.: "Bachman", "Barbier", "Barman", "Baxter", et ainsi de suite. Si l'ordre de tri doit être différent de celui transmis indirectement par la requête, vous devez l'indiquer explicitement en utilisant le paramètre sort.
| <loop Nom_de_famille~=ba sort=Prenom>$Nom_de_famille, $Prenom<br></loop> |
Ceci va fournir tous les enregistrements dont le contenu du champ Nom_de_famille commence par "ba" et l'affichage va être trié selon le Prenom, p.ex.: "Bachman, Albert", "Baxter, Benoît", "Barman, Christine", "Barbier, Denis", et ainsi de suite.
|
Si vous voulez réverser l'ordre d'affichage, tout ce dont vous aurez besoin est de précéder le nom du champ du signe "moins" -:
Ceci va fournir tous les enregistrements dont le contenu du champ Nom_de_famille commence par "ba" mais l'affichage va être trié par le Prenom en ordre inverse, c.à-d. de "Z" à "A", p.ex.: "Barbier, Denis", "Barman, Christine", "Baxter, Benoît", "Bachman, Albert", et ainsi de suite.
Si vous voulez juste afficher tous les enregistrements en sens inverse, il suffit de noter "sort=-":
| <loop sort=->$Nom_de_famille<br></loop> |
Ceci va fournir toutes les données dans l'ordre chronologique inverse de leur saisie.
Vous pouvez bien sûr également faire ceci en même temps qu'une requête sur un autre champ:
| <loop Nom_de_famille~=b sort=->$Nom_de_famille<br></loop> |
Ceci va fournir tous les enregistrements dont le contenu du champ Nom_de_famille commence par "b" en ordre inverse comme ceci: "Baxter", "Barman", "Barbier", "Bachman", et ainsi de suite.
Vous pouvez également trier selon le contenu de plusieurs champs. Dans ce cas le tri s'effectuera d'abord selon le premier champ, après selon le deuxième, ensuite le troisième etc...
| <loop Nom_de_famille~=ba sort=Nom_de_famille,Prenom,-Age> $Nom_de_famille, $Prenom ($Age)<br> </loop> |
Ceci va fournir tous les enregistrements dont le contenu du champ Nom_de_famille commence par "ba" et dont l'affichage va être trié par les champs Nom_de_famille, Prenom et Age, ce dernier en ordre inverse, p.ex.: "Bachman, Albert (44)", "Bachman, Brian (62)", "Barbier, Denis (31)", "Barbier, Denis (12)", "Barman, Christina (35)", "Baxter, Benoît (55)", "Baxter, Benoît (28)", et ainsi de suite.
Tous les exemples ci-dessus fonctionnent également via URL, p.ex.:
| http://fr.baseportal.com/baseportal/tom/adresses?Nom_de_famille==*&sort=- |
Ceci va trier toutes les données selon le champ Nom_de_famille et en sens inverse. (Notez que ceci est plus rapide que sort=-Nom_de_famille)
Definition:
| range=[-]Point_de_départ[,Quantité] |
Ceci va définir combien d'enregistrements correspondant à une requête vont être affichés.
Exemples:
| <db action=all sort=- range=0,10> |
Ceci va fournir les 10 enregistrements les plus récents en commancant avec le plus récent.
| <db action=all Nom_de_famille~=a range=5,4> |
Ceci va fournir du 5ème au 9ème enregistrement dont le champ Nom_de_famille commence par "a".
| <db action=all range=10> |
Ceci va fournir toutes les données à partir du dixième enregistrement jusqu'à la fin.
| <db action=all Nom_de_famille==* sort=- range=-20,10> |
Ceci va afficher 10 des 20 derniers enregsitrements triés selon Nom_de_famille en sens inverse.
Tous les exemples ci-dessus fonctionnent également via URL, p.ex.:
| http://fr.baseportal.com/baseportal/tom/adresses?Nom_de_famille==*&range=-18 |
Ceci va afficher les derniers 18 enregistrements triés selon Nom_de_famille.
| Programmation | ^ |
baseportal met à disposition des commandes spéciales pour la manipulation de bases de données. Ceci permet de sélectionner des enregistrements, d'en ajouter, de les modifier ou de les supprimer. Etant donné que ces commandes sont contenues dans les pages d'affichage et que vous êtes les seuls à pouvoir accéder à ces pages, vous pourrez donc accéder à toutes vos bases de données sans considération des droits attribués.
Definition:
| get requête, base_de_donnée, résultat; |
Tous les paramètres sont facultatifs. Si vous ne spécifiez rien, les paramètres transmis via URL seront appliqués. Si ceux-ci n'existent pas non plus, la base de données ayant le même nom que la page d'affichage sera lue complètement.
requête correspond à une requête telle qu'on l'utilise dans "loop", "do" ou via URL et peut être transmise comme texte ou comme référence à une liste.
base_de_donnée indique le nom de la base de données.
résultat représente un "hash" dans lequel les enregistrements résultants seront mémorisés; le nom de la base de données est utilisé par défaut.
Le premier enregistrement correspondant est mémorisé sous forme de variables portant les noms des champs respectifs (exactement comme avec "loop").
Exemples:
| get "Numero_Client==32631", "adresses"; out "Nom_de_famille: $Nom_de_famille, Ville: $Ville, Telephone:$Telephone"; |
Ceci lit tous les enregistrements de la base de données "adresses" dans lesquels le champ Numero_Client porte la valeur "32631", ensuite s'affiche le premier enregistrement.
Avec le code suivant vous pourrez facilement créer une base de données protégée par un mot de passe:
| get "Utilisateur==!$nom_saisi", "utilisateurs"; if($Mot_de_passe ne "" && $Mot_de_passe eq $mot_de_passe_saisi) { # l'affichage de la base de données # p.ex. avec get_next (voir ci-bas) } else { out "Accès refusé!"; } |
Ceci va sélectionner dans la base de données utilisateurs l'utilisateur Utilisateur correspondant au nom que le visiteur a transmis via $nom_saisi (transmis soit via URL ou par un formulaire). La valeur du champ Mot_de_passe va ensuite être comparée à $mot_de_passe_saisi (transmis également via URL ou par un formulaire). Si les deux valeurs sont correctes, le visiteur pourra par exemple accéder à la base de données. Si les valeurs ne correspondent pas, le message "Accès refusé!" s'affichera à l'écran. Assurez-vous tout de même que pour la base de données utilisateurs vous n'avez pas attribué de droits à autrui!
Pour sélectionner d'autres enregistrements correspondant à la requête, vous aurez besoin d'une autre commande:
Definition:
| get_next Resultat; |
Ceci lit le prochain enregistrement contenu dans Resultat et mémorise les valeurs de ses champs dans les variables respectives. Si Resultat ne comprend pas d'enregistrements, la commande va utiliser la dernière base de donnée utilisée.
Exemples:
| get; while (get_next) { out "Nom: $Nom - Voiture: $Voiture<br>"; } |
Ceci va sélectionner et afficher tous les enregistrements de la base de données.
Les commandes get et get_next peuvent être combinées:
| get "Id==*", "client"; while (get_next "client") { out "Client: $Nom<br>"; get "Nom==$Voiture", "voiture"; out "Voiture: $Nom<br>" out "Description: $Description<p>"; } |
Dans le code ci-dessus, une relation a été établie entre les bases de données client et voiture. Chaque enregistrement de client contient une information dans le champ Voiture avec le type de voiture qu'il possède. Cette valeur est utilisée pour rechercher l'enregistrement correspondant dans la base de données voiture afin d'en afficher la description.
Vous pouvez également mémoriser plusieurs requêtes différentes de la même base de données. Le paramètre Result permet de différiencier ces requêtes:
| get "Nom~=a", "client"; get "Nom~=b", "client", "c_avec_b"; out "Tous les clients avec a:<p>"; while (get_next "client") { out "Client: $Nom<br>"; } out "<hr>Tous les clients avec b:<p>"; while (get_next "c_avec_b") { out "Client: $Nom<br>"; } |
La première requête mémorise les enregistrements de la base de données client dont le nom commence par "a" dans le résultat portant le même nom (vu qu'aucun nom n'a été attribué). Ensuite la deuxième requête stocke les enregistrements de la base de données client dont le nom commence par "b" dans le résultat portant le nom "c_avec_b". Finalement les résultats des deux requêtes sont affichées respectivement via des boucles du type "get_next".
Ajoute de nouveaux enregistrements à la base de données
Definition:
| put valeurs, base_de_donnée; |
Tous les paramètres sont facultatifs. Si vous ne spécifiez rien, les paramètres transmis via URL seront appliqués.
valeurs défini l'enregistrement, les valeurs peuvent être transmises sous différentes formes.
base_de_donnée indique le nom de la base de donnée.
Exemples:
| put ["Nom", "Gilles Gravier", "Voiture", "BMW"], "client"; |
Ceci va créer un nouvel enregistrement dans la banque de données client. "Gilles Gravier" sera inséré dans le champs Nom et "BMW" dans le champ Voiture. Les valeurs correspondantes alternent en mentionnant le nom du champ et son contenu, sa valeur. Il n'est pas obligatoire de mentionner tous les champs (Un champ non mentionné sera considéré comme vide et correspond à un champ de formulaire laissé vide). De plus, il importe peu dans quel ordre les champs sont remplis (il est tout aussi valable d'attribuer d'abord la valeur à Voiture et ensuite à Nom)
Il est également possible d'ajouter plusieurs enregistrements en même temps, il suffira de répéter un champ déjà mentionné:
| put ["Nom", "Gilles Gravier", "Voiture", "BMW", "Nom", "Henri Duchemin", "Voiture", "VW Golf"], "client"; |
Ceci va créer deux nouveaux enregistrements dans la base de données client. Pour être explicite: un nouvel enregistrement au nom de "Gilles Gravier" avec sa "BMW" et un autre sous le nom de "Henri Duchemin" avec sa "VW Golf".
Cette méthode ne convient pas particulièrement à l'ajout de nombreux enregistrements pour les raisons suivantes: d'abord cela pourra engendrer des problèmes si un champ a été omis, et ensuite il faudra répéter les noms des champs "à tout bout de champ" ;-). Il sera préférable d'utiliser tout simplement le code suivant:
| put { Nom = > ["Henri", "Thomas", "Gloria"], Voiture = > ["Mercedes", undef, "Ford"] }, "client"; |
Ceci va créer trois nouveaux enregistrements dans la base de données client. Pour être explicite: un nouvel enregistrement au nom de "Henri" avec sa "Mercedes", ensuite "Thomas" sans spécifier son modèle de voiture et finalement "Gloria" avec sa "Ford".
Ceci modifie des enregistrements existants
Définition:
| mod requête, valeurs, base_de_données |
Tous les paramètres sont facultatifs. Si vous ne spécifiez rien, les paramètres transmis via URL seront appliqués.
requête correspond aux requêtes chez "get", "loop", ou "do".
valeurs défini l'enregistrement, les valeurs peuvent être transmises sous différentes formes (même principe que chez "put").
base_de_donnée indique le nom de la base de donnée.
Exemples:
| mod "Nom==!Henri", ["Nom", "Steve", "Voiture", "Honda"], "client"; |
Ceci modifie l'enregistrement portant le nom de "Henri" dans la banque de données client: Le champ Nom obtient la valeur "Steve" et le champ "Voiture" contient à présent "Honda". Si l'enregistrement requis par la requête n'existe pas (par exemple si "Henri" n'existe pas), alors rien ne se passera.
Des champs non mentionnés resteront inchangés:
| mod "Nom==!Gloria", ["Voiture", "Golf"], "client"; |
Ceci change le contenu du champ "Voiture" et y inscrit à présent "Golf" dans l'enregistrement portant le nom de "Gloria" dans la base de données client. Le nom "Gloria" reste inchangé.
Pour vider un champ il suffit d'insérer un "texte" vide:
| mod "Nom==!Gloria", ["Voiture", ""], "client"; |
Ceci va vider le champ Voiture de l'enregistrement portant le nom de "Gloria" dans la base de données client.
On peut effectuer beaucoup de changements en même temps:
| mod "Id==3 or Id==4 or Id==7", {Nom = > [ "François", "Thomas", "Carla"], Voiture = > ["Mercedes", "Chrysler", "Toyota" ] }, "client"; |
Ceci modifiera les enregistrements portant les Id (numéros d'identification) 3, 4, et 7 de la base de données client. L'enregistrement au numéro Id 3 portera désormais le nom Nom="François" et Voiture="Mercedes", l'enregistrement au numéro Id 4 sera modifié avec Nom="Thomas" et Voiture="Chrysler". L'enregistrement au numéro Id 4 sera modifié avec Nom="Carla" et Voiture="Toyota". Prière de noter l'utiliation de la conjonction avec or (= ou).
Au cas où plusieurs enregistrements correspondraient à la requête, les changements vont être effectués plusieurs fois de suite:
mod "Nom~=s", ["Voiture", "BMW"], "client";
Ceci va changer le contenu du champ Voiture en "BMW" dans tous les enregistrements dont le contenu du champ Nom commence par "s".
Supprimera des enregistrements d'une base de données.
Definition:
| del requête, base_de_données |
Tous les paramètres sont facultatifs. Si vous ne spécifiez rien, les paramètres transmis via URL seront appliqués.
requête correspond aux requêtes chez "get", "mod", "loop", ou "do".
base_de_donnée indique le nom de la base de donnée.
Exemples:
| del "Nom==!Henri", "client"; |
Ceci va supprimer l'enregistrement dont le contenu du champ "Nom" est "Henri" dans la base de données client. Si un tel enregistrement n'exite pas, rien ne se passera.
Plusieurs enregistrements peuvent être supprimés en même temps:
| del "Age<18", "client"; |
Ceci va supprimer tous les enregistrements de la base de données client dont la valeur du champ Age est inférieure à 18.
do_all génère tout l'affichage de la balise <do action=all>. Peuvent être transmises aussi bien les paramètres que les valeurs aditionnels obtenus via URL.
Definition:
| do_all paramètres, valeurs; |
Exemples:
| do_all "db=adresses maxlistlength=100", "utilisateur=joseph", "mot_de_passe"; |
Ceci va afficher tous les enregistrements de la base de données adresses. La longueur de l'affichage de la valeur des champs sera limitée à 100 caractères. Le paramètre utilisateur avec sa valeur "joseph" sera transmis, ainsi que le paramètre "mot_de_passe".
Vous pouvez aussi utiliser du code Perl dans une boucle de type loop.
Definition:
| <loop code=perl [paramètres]> ... </loop> |
Exemple:
| <b>Tout en majuscules. . . </b><p> <loop code=perl> out "Nombre: ", ++$cnt, "<br>"; out "Nom: ", uc ($Nom), "<br>"; out "Rue: ", uc ($Rue), "<br>"; out "Localité: ", uc ($Localite), "<p>"; </loop> |
Ce code Perl s'applique ainsi à tous les enregistrements de la base de données. Le contenu des variables provient des valeurs respectives des champs. En plus, nous utilisons ici une variable de type "compteur" $cnt qui apparaîtra devant chaque enregistrement comme numéro consécutif. La fonction Perl uc() convertit tous les caratères en majuscules.
Voici un affichage possible:
| Tout en majuscules... Numéro: 1 Nom: CHRISTINE REIDER Rue: RUE DE LA MONTEE 32 Localité: ST-MALOT Numéro: 2 Nom: GABRIEL LEVANTON Rue: PLACE DU PARC 154 Localité: BESANCON Numéro: 3 Nom: HENRI DUCHEMIN Rue: RUE DU PONT 1156 Localité: NANCY |
baseportal doit "digérer" grand nombre de caractères spéciaux en provenance de différentes langues et de différents standarts et qui doivent être traités individuellement de manière spécifique. P.ex. un "<" en HTML représente le "<" (plus petit que), et, en HTML, quand un texte est encadré de guillemets "....", ceci devrait être codé avec des """.
Dans les adresses URL (liens) les caractères spéciaux doivent être traités de manière complètement différente. Il ne peut y avoir des espaces, ils devront être remplaçés par des "+" (signe plus). Mais que faire lorsque l'on veut vraiment utiliser un "plus" ? Alors il faudra indiquer: %2b. Mais vu que le signe % a également une autre signification, il faudra également l'encoder en le remplaçant par %25.
Perl ou Javascript utilisent les caratères spéciaux de manière différente.
C'est pourquoi baseportal propose une série de routines de conversion:
| Commande | Description |
|---|---|
| convert_br | convertit un saut à la ligne en code HTML: <br> |
| convert_html | remplace &, ", <, > avec les encodages du HTML respectifs &, ", <, > |
| convert_quote | remplace les guillemets ", l'apostrophe ' et la barre oblique inversée (back slash) \ en ", \', et \\ |
| convert_url | remplace %, \, |, &, ", + dans leurs encodages respectifs de type %xx, et remplace l'espace par un + encodé. |
Exemple:
| <do action=input> <loop code=perl> out convert_html($Nom)." - " ; out '<a href="/baseportal/nom/page&cmd=del&Id=$_id" onclick="return confirm (\'Vraiment supprimer'.convert_quote($Nom).'\')">Supprimer?</a>'; out "<p>"; </loop> |
Ceci va encoder tous les caratères spéciaux dans le champ Nom et l'affiche ensemble avec un lien proposant de le supprimer. Si vous cliquez sur ce lien, une requête Javascript apparaît et vous demande si vous voulez réellement accomplir cette action. Si le lien contient des apostrophes, ceux-ci vont être encodés afin d'éviter toute erreur de Javascript.
| Date et heure | ^ |
Quelques millénaires culturels ont décidément laissé leurs traces: Même si cela paraît facile, peut-être parce que nous nous y sommes habitués, l'utlisation des dates et des heures est chose complexe. baseportal essaye de vous faire sentir le moins possible cette complexité tout en laissant ouvertes toutes les options possibles.
La requête d'une date peut être effectuée de deux manières: requête sur les composantes de la date ou requête directe.
Il faut ajouter un trait bas _ au début du nom de champ, et aussi au début de la composante de la date (jour, mois, année, etc.):
| _date_year==2000 |
Ce type de requête est principalement utilisé dans des formulaires. Voici deux exemples, l'un pour une recherche avec un menu déroulant...
| <form action="/baseportal/nom/page" method="post" enctype="multipart/form-data"> <select name="_anniversaire_year~="><option>1960<option>1961<option>1962<option>1963...etc.</select> <select name="_anniversaire_month~="><option>1<option>2<option>3<option>4...etc.</select> <select name="_anniversaire_day~="><option>1<option>2<option>3<option>4...etc.</select> </form> |
... l'autre sous forme de recherche de champ de type texte:
| <form action="/nom/page" method="post" enctype="multipart/form-data"> day: <input type=text name="_anniversaire_day~="> month: <input type=text name="_anniversaire_month~="> year: <input type=text name="_anniversaire_year~="> </form> |
Si vous contrôlez vous-même votre requête en utilisant le balise "loop", la commande "get" ou dans une URL, ce second type de requête est plus simple:
| Date==1.3.2000,20:15 |
baseportal est assez malin pour reconnaître les différentes parties. Voici quelques exemples:
| Date | Month | Day | Year | Hour | Minute | Second |
|---|---|---|---|---|---|---|
| 1 juin 2002, 23:45.09 | 6 (June) | 1 | 2002 | 23 | 45 | 09 |
| 1 décembre 2002, 23:45 | 12 (décembre) | 1 | 2002 | 23 | 45 | |
| 06.01.02, 1:00 | 6 (juin) | 1 | 2002 | 01 | 00 | |
| Mar.5.2000 | 3 (mars) | 5 | 2000 | |||
| Mars 2.01 | 3 (mars) | 2 | 2001 | |||
| 12:57 | 12 | 57 | ||||
| AOÛT.2005 | 8 (août) | 2005 | ||||
| 3.7 | 3 (mars) | 7 | ||||
| nov. | 11 (novembre) | |||||
| 10 | 10 |
La ponctuation entre les différentes composantes est très importante: la période "." (qui sépare le jour, le mois et l'année, ainsi que les minutes et les secondes), la virgule "," (qui sépare la date et l'heure), et le deux point ":" (qui sépare l'heure et les minutes).
Les opérateurs ~= et == ont la même signification.
Si le signe < fonctionne de la façon que nous imaginons, le signe > a une toute autre signification que celle que nous pourrions imaginer de prime abord: la requête...
| Date>2000 |
...ne signifie PAS que tous les enregistrements à partir de l'année 2001 (et celle-ci incluse) seraient sélectionnés, mais plutôt et uniquement ceux à partir de la première seconde de l'an 2000. Pour obtenir tous les enregistrements à partir de l'année 2001 (et celle-ci incluse), vous devrez effectuer la requête suivante:
| Date>=2001 |
Avec le mot "maintenant", vous pourrez vous référer à la date actuelle.
| Date>maintenant |
Trouve tous les enregistrements avec une date dans le futur.
En commancant par la date actuelle, vous pouvez chercher des points passés ou futurs:
| Date>-14 |
Trouve tous les enregistrements ayant au plus 14 ans d'âge.
| Date<+24:00 |
Trouve tous les enregistrements situés au plus à 24 heures dans le futur.
Ici aussi, baseportal reconnaît une série de codes différents:
| Request | Description |
|---|---|
| -7,3:13.11 | 7 jours, 3 heures, 12 minutes, et 11 secondes dans le passé |
| +100 | 100 jours dans le futur |
| -14:00 | 14 heures dans le passé |
| +.3153600 | 31536000 secondes dans le futur (=365 jours) |
Encore une fois, les symboles séparant les différentes composantes sont importants: la période "." (sépare minutes et secondes) la virgule "," (sépare date et heures) et le douple point ":" (sépare heures et minutes).
Attention: si vous effectuez une telle requête via une URL en utilisant un "+", il doit être remplacé par %2b, étant donné qu'un "+" dans une URL représente un espace. Une requête complète via URL aura la forme suivante:
| http://fr.baseportal.com/baseportal/nom/page&date>-10&date<%2b10 |
Une requête sur une composante au milieu d'une date n'est pas possible, parce que la date est toujours traitée de haut en bas. Cet ordre se présente ainsi:
| Année.Mois.Jour,Heure:Minute.Seconde Year.Month.Day,Hour:Minute.Second |
En d'autres termes, l'on ne peut pas simplement effectuer une requête sur un mois tel que "juin", et recevoir toutes les données comportant "juin" dans leur date quelle que soit l'année. Une requête comme...
| Date~=June |
... est possible mais résultera uniquement dans les données ayant trait à juin de l'année en cours.
Ces limitiations peuvent être évitées consciamment en définissant des formats individuels.
Un format individuel peut être utilisé pour la définition d'un champ de type date. Vous pouvez utiliser les codes suivants:
| Code | Description |
|---|---|
| Jour | Jours du mois (1 à 31) |
| Mois | Mois en tant que nombre (1 à 12) |
| MoisNom | Nom du Mois (janvier à décembre) |
| MoisNomAbbrege | Nom du Mois, abbrégé (Jan à Déc) |
| Annee | Année affichée avec 4 chiffres (1920 à 2019) |
| Annee2 | Année abbrégée à 2 chiffres (00 à 19) |
| Heure | Heure (00 à 23) |
| Minute | Minute (00 à 59) |
| Seconde | Second (00 à 59) |
Tous les autres caractères sont affichés tels quels. Le format...
| Jour / MoisNom |
... mène aux deux menus réroulants suivants quand vous saisissez vos données ou quand plus tard vous désirez effectuer une recherche:
Mais il y a une autre interprétation: vu que l'année n'est pas prévue dans le format de saisie, elle ne sera pas enregistrée, et une requête sur les mois pourra être effectuée indépendamment de l'année:
| anniversaire~=avril |
vous fournit tous les enregistrements dont la date d'anniversaire se situe au mois d'avril.
|
Comme pour la saisie, il est possible de définir des formats individuels d'affichage pour le champ date.
Les codes suivants sont possibles:
| Code | Résultat |
|---|---|
| JourSemaine | Jour de la semaine (Lundi à Dimanche) |
| JourSemaineAbbrege | Jour de la semaine abbrégé (Lun à Dim) |
| WeekSemaineNombre | Jour de la semaine en nombre (1 à 7) |
| Jour | Jour du mois (1 à 31) |
| Jour0 | Jour précédé par un zéro (01 à 31) |
| Mois | Mois en tant que nombre (1 à 12) |
| Mois0 | Mois précédé par un zéro (01 à 12) |
| MoisNom | Nom du mois (Janvier à Décembre) |
| MoisNomAbbrege | Nom du mois abbrégé (Jan à Déc) |
| Annee | Année affichée avec 4 chiffres (1920 à 2019) |
| Annee2 | Année abbrégée à 2 chiffres (00 à 19) |
| Heure | Heure (00 à 23) |
| Heure1 | Heure sans zèro (0 à 23) |
| Heure12 | Heure "analogue" (1 à 12) |
| Heure012 | Heure "analogue" avec zéro (01 à 12) |
| Minute | Minute (00 à 59) |
| Minute1 | Minute sans zéro (0 à 59) |
| Seconde | Seconde (00 à 59) |
| Seconde1 | Seconde sans zéro (0 à 59) |
Tous les autres caractères seront affichés tels quels. Le format...
| MoisNom Jour0, Annee (JourSemaine) |
... produira l'affichage suivant:
| Décembre 06, 2000 (Mercredi) |
Sauvegarder des enregistrements comprenant une date se fait de manière similaire que lors d'une requête. Vous pouvez saisir des composantes individuelles de la date:
| put ["_date_Annee", "2000", "_date_Mois", "août"]; |
Ce type de code est principalement utilisé pour rendre possible la saisie de la date dans un formulaire:
| <form action="/baseportal/htx=/name?page&cmd=add" method="post" enctype="multipart/form-data"> <select name="_anniversaire_Annee:="> <option>1960<option>1961<option>1962<option>1963...etc.</select> <select name="_anniversaire_Mois:="> <option>1<option>2<option>3<option>4...etc.</select> <select name="_anniversaire_Jour:="> <option>1<option>2<option>3<option>4...etc.</select> </form> |
Ou bien toute la date en un coup:
| put "Date:=2002-07-01"; |
Pour saisir la date actuelle, vous devez utiliser l'attribut spécial "maintenant"
| put "Date:=maintenant"; |
Vous pouvez également utiliser les différents formats de date dans du code de programmation. baseportal met à disposition la fonction date:
| date (moment_donné, format); |
Le moment_donné peut être,
a) défini comme lors d'une requête dans le champ date,
b) peut être affiché en secondes depuis le 1.1.1970 (nombre > 1000000),
c) "maintenant" pour la date et l'heure actuelle, ou
d) une valeur d'une base de données.
Le format coïncide avec la définition de format individuel d'affichage. Le code...
| out date("2000-02-01", "JourSemaine, Jour MoisNom Annee."); |
...affiche ceci:
| Mardi, 1 Février 2000. |
Quelques formats communs peuvent être adressés sous un nom unique:
| Affichage | format |
|---|---|
| pas de spécification | Day.Month.Year, Hour:Minute |
| long | Weekday, Day.MonthName.Year, Hour:Minute |
| bref | Day.Month.Year2, Hour:Minute |
| interne | Year.Month0.Day0,Hour:Minute.Second#WeekdayNumber |
Ici vous pourrez également utiliser "maintenant" pour le moment actuel...
| out date("maintenant", "long"); |
...affiche le résultat suivant
| Vendredi, 8. Décembre.2000, 17:03 |
On peut même utliser des valeurs relatives:
| out date ("+10"); |
...affiche la date dans 10 jours sous format par défaut Day.Month.Year, Hour:Minute.
Si vous voulez afficher la date d'une base de données dans un format différent, ajustez la variable contenant la date au moment_donné:
| out date($Date, "bref"); |
Dans cet exemple la date provient du champ "Date" de la base de données. L'affichage se présentera ainsi: Jour.Mois.Annee2, Heure:Minute
Si vous voulez comparer une date de la base de données avec la date actuelle, vous pourrez utiliser la commande:
| if($Date lt date ("maintenant", "interne")) { ... } |
La date provient du champ Date et devra être antérieure à la date actuelle. Le champ Date n'est pas formaté (donc en format interne par défaut). Si vous lisez ce champ avec la commande get, vous devrez également convertir la date actuelle en format interne.
Vous ne pourrez comparer des dates qu'en utilisant des comparaisons de texte.
La comparaison pourra également être faite en utilisant une boucle Perl de type while.... Etant donné que loop convertit automatiquement la $Date dans le bon format, le "hash" %_raw devra être utilisé pour rendre une comparaison possible.
| <loop code=perl> if($_raw(date) lt date ("maintenant", "interne")) { ... } </loop> |
| Divers | ^ |
Dans toute langue de programmation certains caractères ont une fonction spécifique. Dans cette documentation vous avez déjà fait connaissance avec $ - qui se trouve en tête de variables.
Mais que faire si au lieu d'afficher le contenu de la variable test vous voulez afficher $test, c.-à-d.: un $ suivi de test? Vous devrez pour cela masquer le $, afin qu'il s'affiche normallement. Comme dans Perl vous pourrez faire ce masquage avec le caractère \, la barre oblique inversée encore connue sous le nom de backslash ou escape:
| Valeur de \$test: $test |
Supposons que la variable $test contienne le texte "Hello", vous aurez l'affichage suivant:
| Valeur de $test: Hello |
Parfois un caractère aura un sens inattendu comme p.ex. l'espace " ". En utilisant la balise...
| <do action=all Nom~=a listfields=Nom,Rue> |
...l'espace est utilisé pour séparer les paramètres. Si vous voulez utiliser un champ dont le nom comprend des espaces, vous devrez utiliser \ pour les masquer:
| <do action=all Nom\ ou\ firme~=a listfields=Nom\ ou\ firme,Rue> |
Les variables sont des "conteneurs de valeurs" et sont utilisées dans beaucoup de languages de programmation. Les variables simples ou classiques commencent par le caractère $ et continuent par une lettre, suivie d'autres lettres, de chiffres ou de traits bas (Exemples: $texte, $mon_nom, $urx_123). Le contenu de variables peut être arbitrairement long, et consiste en chiffres, lettres, ou tout autre caractère.
Les paramètres transmis via URL ou une balise spécifique à baseportal sont automatiquement rendus accessibles comme variables.
Exemples:
| <perl> out "Compteur: $cnt<p>"; $cnt++; out '<a href="baseportal/compteur&cnt='.$cnt.'">continuer</a>'; </perl> |
Ce code fonctionne comme un compteur. Chaque clic sur continuer augmente le nombre d'une unité. Ceci est dû à la variable $cnt, dont la valeur est transmise par le paramètre via URL et par là rendue accessible à la page d'affichage.
Il est malin d'utiliser des variables pour adapter individuellement des passages de texte ou de code:
| <font face="arial,helvetica" color="red" size="4"><b>$texte</b></font> |
La variable $texte est à présent substituée avec sa valeur actuelle. En supposant que les lignes ci-haut soient enregistrées comme page d'affichage titre, alors l'inclusion de cette page dans une autre avec...
| <include src=titre texte=Introduction> |
...mène à l'affichage suivant:
| Introduction |
baseportal met à disposition une série de variables spéciales avec des valeurs spécifiques. Celles-ci commencent toujours par un trait bas _. Même si cela est possible, nous vous prions d'éviter de définir de propres variables commencant par un trait bas.
Requête auprès d'une base de données
| Nom | Description |
|---|---|
| $_db | Nom de la dernière base de données utilisée |
| $_range | Début d'une série à afficher |
| $_range_length | Quantité de la série à afficher |
| $_amount | Nombre d'enregistrements ayant été obtenus lors de la dernière requête |
| $_amount_query | Nombre d'enregistrements qui auraient été obtenus lors de la dernière requête sans range |
| $_amount_all | Nombre total d'enregistrements contenus dans la dernière base de données utilisée. |
Paramètres et valeurs d'affichage
| Nom | Description |
|---|---|
| %_cgi | Valeurs transmises par CGI (GET ou POST) utilisant "=" (p.ex. Couleur=rouge) |
| %_get | Valeurs placées dans une balise, transmises par CGI ou utilisées lors d'une requête (p.ex. Couleur=rouge) |
| %_sel | Valeurs d'une requête (p.ex. Nom==a) |
| %_put | Valeurs devant être enregistrées (p.ex. Nom:=Henri) |
Avec les séries associatives ("hashes") %_cgi et %_get vous pouvez accéder à des paramètres non-accessibles avec des variables normales, parce qu'elles contiennent des caratères invalides (p.ex. espaces, caractères spéciaux, etc.) ou parce qu'ils ont été remplacés par d'autres variables. Exemples: $_get{"mon nom"}; $cgi{"12345"};
Mise en forme:
| Paramètres | Description | Valeur par défaut |
|---|---|---|
| border=<nombre> | Epaisseur de l'encadrement d'un tableau | 0 |
| gridcolor=<color>/- | Couleur du quadrillage d'un tableau | f0f0f0 (utiliser - pour éliminer la valeur par défaut) |
| padding=<nombre> | Distance entre le contenu et le bord du tableau | 4 |
| spacing=<nombre> | Epaisseur du quadrillage du tableau | 2 |
| dataface=<font> | Police de texte du contenu des champs | |
| datacolor=<color> | Couleur de texte du contenu des champs | |
| datasize=<nombre> | Taille de texte du contenu des champs | |
| databack=<color> | Couleur de fond des champs | d0d0d0 (utiliser - pour éliminer la valeur par défaut) |
| dataalign=left/middle/right | Alignement du contenu des champs | |
| headface=<font> | Police de texte du nom du champ | (Défaut = Valeur de dataface) |
| headcolor=<color> | Couleur de texte du nom du champ | (Défaut = Valeur de datacolor) |
| headsize=<nombre> | Taille de texte du nom du champ | (Défaut = Valeur de datasize) |
| headback=<color> | Couleur de fond du nom du champ | d0d0f0 (utiliser - pour éliminer la valeur par défaut) |
| headalign=left/middle/right | Alignement de texte du nom du champ |
sort et range:
| Paramètres | Description |
|---|---|
| <champ>==* | Tri selon le contenu du champ |
| sort=- | Ordre de tri inversé |
| sort=<(-)champ1,(-)champ2,...> | Tri d'abord selon le champ1, puis champ2... (- = ordre inversé) |
| showsort=<champ1,champ2,.../*> | Noms des champs devant présenter un lien permettant de trier d'après leur contenu (*=tous les champs qui sont triés) |
| range=(-)<start>(,<quantité>) | A partir de start (lorsqu'on utilise - il commence par la fin), Quantité (s'il n'est pas mentionné → jusqu'à la fin) |
Feuilleter (Browse):
| Paramètres | Description |
|---|---|
| showamount=no/all/sel/all,sel | Quantité d'enregistrements correspondants à afficher: Aucun affichage / Affichage selon le total, pas selon une sélection / Selon une sélection, pas selon le total / Affichage selon sélection et total |
| selectbrowse=no/top/bottom | (All, New, Detail, ...) Ne pas montrer / En haut / En bas / En haut et en bas |
| buttonbrowse=no/top/bottom | (>, >>...) Ne pas montrer / En haut / En bas / En haut et en bas |
| pagebrowse=no/(0)top/bottom/top,bottom | (1, 21, etc.) avec la barre de menu / (0 au début=commence la barre de menu avec 0), Barre de menu en haut, Barre de menu en bas / Barre de menu en haut et en bas |
| indexfield=<champ> | Pas de barre de menu pour les champs / En dépendance de la définition du champ (s'il s'agit d'un champ option, alors prenez ces valeurs, sinon: a,b,c,...z) |
| indexbrowse=no/top/bottom | Ne pas montrer / En haut / En bas |
Affichage (output):
| Paramètres | Description |
|---|---|
| listfields=<(-)champ1,champ2,champ3..>/#<quantité> | Champs devant apparaître dans l'ordre spécifié dans le mode d'affichage liste (ou en marquant d'un - ceux ne devant pas apparaître) #<quantité>=nombre maximal de champs |
| allfields=<(-)champ1,champ2,champ3..>/#<quantité> | Champs devant apparaître dans l'ordre spécifié dans le mode d'affichage détaillé (ou en marquant d'un - ceux ne devant pas apparaître) #<quantité>=nombre maximal de champs |
| formfields=<(-)champ1,champ2,champ3..>/#<quantité> | Champs devant apparaître dans l'ordre spécifié dans le formulaire de saisie (ou en marquant d'un - ceux ne devant pas apparaître) #<quantité>=nombre maximal de champs |
| searchfields=<(-)champ1,champ2,champ3..>/#<quantité> | Champs devant apparaître dans l'ordre spécifié dans le formulaire de recherche (ou en marquant d'un - ceux ne devant pas apparaître) #<quantité>=nombre maximal de champs |
| keyfield=<champ> | Champ devant présenter un lien vers l'affichage détaillé (par défaut=premier champ) |
| listtype=list/all/add/search | Type ou mode d'affichage |
| tdparam=<html-code> | Supplément d'attributs HTML aux cellules d'un tableau <td> (p.ex. avec "nowrap" - pas de retour à la ligne) |
| detail=no/link/linktop/linkbottom/top/bottom | Affichage détaillé: Pas possible/Uniquement via lien/Lien en haut/Lien en bas/En haut/En bas |
| search=no/link/linktop/linkbottom/top/bottom | Affichage du formulaire de recherche: Pas possible/Uniquement via lien/Lien en haut/Lien en bas/En haut/En bas |
| input=no/link/linktop/linkbottom/top/bottom | Affichage du formulaire de saisie: Pas possible/Uniquement via lien/Lien en haut/Lien en bas/En haut/En bas |
| maxlistlength=0/<nombre> | Longueur maximale d'un texte dans l'affichage en mode liste. Les retours à la ligne ne sont pas convertis. 0=Ne pas convertir les retours à la ligne, longueur illimitée |
| convert_br=<champ1,champ2...>/- | Champs, dans lesquels les retours à la ligne sont convertis en <br> -=pas de champ (sans valeur par défaut: tous les champs) |
| convert_html=<champ1,champ2...>/* | Champs, dans lesquels les caractères HTML sont convertis dans leurs codes de substitutions HTML *=Tous les champs |
| convert_quote=<champ1,champ2...>/* | Champs, dans lesquels ", ' et \ sont convertis *=Tous les champs |
| convert_html=<champ1,champ2...>/* | Champs convertis pour une requête via URL *=Tous les champs |
| language=fr/en/de/es/pl/it/tr/el/no/ja/ko/zh/id/sr/ca | Les messages ou commentaires de baseportal sont affichés en Français, Anglais, Allemand, Espagnol, Polonais, Italien, Turc, Grec, Norvégien, Japonais, Coréen, Chinois, Indonésien, Serbian, Catalan (Par défaut=en Français) |
Requête:
| Paramètres | Description |
|---|---|
| db=<base_de_données> | Base de données sur la quelle on veut travailler |
| htx=<page_d_affichage> | Page d'affichage que l'on veut sélectionner |
| Exemples | ^ |
Dans certains cas spécifiques, il sera nécessaire de disposer du formulaire baseportal sur la page d'accueil de votre site (p.ex. pour un systême de vote). Pour les données que vous voulez quérir, vous devrez utiliser les noms des champs définis dans la base de données. Le style suivant est de mise. Remarquez les caractères := après les noms de champ. Les "champs cachés" (hidden) sont absolument obligatoires pour permettre l'accès à tous les navigateurs.
| <form action="/baseportal/VotreNom/Dossier/page_d_affichage" method="post" enctype="multipart/form-data"> <input type="hidden" name="cmd=" value="add"> <input type="hidden" name="htx=" value="/VotreNom/Dossier/page_d_affichage"> |
Maintenant utilisez les noms de champ conformément à ceux de la base de données:
| Veuillez indiquer votre prénom: <input type="text" name="prenom:="><p> Veuillez indiquer votre nom de famille: <input type="text" name="nom:="><p> <input type="submit" value="envoyer"> </form> |
Ces données sont à présent transmises à la page d'affichage. Afin de les sauvegarder dans la base de données, vous devez utiliser...
| <do action=input> |
Exemple:
| <html> <head></head> <body> <do action=input> <p>Merci pour votre contribution...</p> </body> </html> |
Si vous voulez afficher tous les enregistrements, utilisez le code suivant:
| <html> <head></head> <body> <do action=input> <do action=list listtype=list> </body> </html> |
Si vous avez créé votre propre page d'affichage (sans <do action=all...), et si vous contrôlez la quantité d'enregistrements affichés avec range=x,y, vous aurez besoin de liens permettant l'affichage des enregistrements suivants.
Insérez ce code dans votre page d'affichage:
| <perl> my $newrange=$_range+$_range_length; my $oldrange=$_range-$_range_length; $oldrange=0 if $oldrange<0 && $oldrange>-$_range_length; out "<< <a href=\"$_link&range=$oldrange,$_range_length\">En arrière</a> " if $oldrange>=0; out "<a href=\"$_link&range=$newrange,$_range_length\">Avancer</a> >>" if $newrange<$_amount_query; </perl> |
En dépendance du nombre total d'enregistrements sélectionnés, vous verrez apparaître ceci:
Afin de présenter un meilleur aperçu de votre listing d'affichage, une bonne approche est d'alterner la couleur de fond pour chaque ligne (enregistrement). Ici, nous utilisons le compteur interne 17.
| <table cellpadding="2" border="1" cellspacing="0"> <tr><td><b>Nom</b></td><td><b>Âge</b></td></tr> <loop code=perl> if($_loop % 2==0) { out '<tr bgcolor="#a0a0a0">'; } else { out '<tr bgcolor="#e0e0e0">'; } out "<td>$nom</td><td>$age</td></tr>"; </loop> </table> |
Ce code va produire l'affichage suivant:
| Nom | Âge |
| Bill Gates | 45? |
| Madonna | Trop âgée |
| Liz Taylor | Elle ne le dira pas |
| Britney Spears | 20 |
Il est souvent important de connaître le nombre excat d'enregistrements d'une base de données. Pour ceci vous n'aurez besoin que d'une ligne de code Perl, et après vous utilisez la variable $_amount_all:
| <perl> init "nom_de_la_base_de_donnees"; </perl> Dans cette base de données il y a en tout $_amount_all enregistrements. |
Il vous suffira de remplacer nom_de_la_base_de_donnees par le nom de votre base de données.
| © fr.baseportal.com. Tous droits réservés. Conditions d'utilisation |