Hermes le Messager Breton Quiétiste | !! IMPORTANT !!
[Edit]Fini !! Phase de test et optimisation du code.
Téléchargement : http://tousleschats.free.fr/hermes/bdd.zip
- Il ne s'agit pas de remplacer mySQL ou une autre BDD existante.
- Comme tout est en PHP4 (sans extension XML en plus), n'espérez pas gérer des millions d'enregistrements, vous mettrez à genou le serveur, vous êtes prévenu.
- Ce script est livré sans aucune garantie. Je ne suis responsable de rien en cas de perte de données, de serveur qui pête etc...
- On peut :
* Créer une table.
* Effacer une table.
* Insérer des données dans une table.
* Sélectionner (récupérer) des données dans une table. (avec conditions, ordre et limites)
* Détruire des données dans une table.
* Updater des données dans une table.
Pourquoi avoir entrepris ce projet - Avantages
- La base ainsi créée est complêtement portable (>= PHP 4)
- La base est embarquée dans chacun de vos sites, ce qui fait que si vous sauvegardez votre site, la base est également sauvegardée.
- Au niveau sécurité, les gens peuvent toujours s'amuser à essayer les injections SQL. Il faut savoir que 98% des hacks de sites s'appuient sur des failles sessions et/ou mySQL.
- Pas de limites de requêtes puisque pas d'utilisation de mySQL.
Dans quels cas ce script peut-il être utilisé
- Si vous comptez sur cette BDD pour créer un forum ou une base de données énorme de produits par exemple, oubliez ça tout de suite. Cette base ne peut pas être utilisée pour ça. Elle gère sans problème des centaines/milliers d'enregistrements, mais pas des centaines de milliers ni des millions. - Elle peut parfaitement convenir pour par exemple un blog, un CMS (sans forum), une gallerie photo etc... - Elle peut aussi être pratique pour conserver des préférences graphiques d'un site par exemple...
Particularités - Utilisation
Comme il fallait produire un script le moins lourd possible, j'ai opté pour l'utilisation de tableaux + une fonction unique d'appel. Comme cela se passe-t-il concrêtement ?
Exemple d'une requête de création de table :
Code :
- // Création de la table
- $tbl_champs[0] = 'id NBR AUTO';
- $tbl_champs[1] = 'nom TXT NUL';
- $tbl_champs[2] = 'prenom TXT NUL';
- $tbl_champs[3] = 'numero NBR NUL';
- $tbl_champs[4] = 'rue TXT NUL';
- $tbl_champs[5] = 'code-postal NBR NUL';
- $tbl_champs[6] = 'ville TXT NUL';
- $tbl_champs[7] = 'anniversaire TS NUL';
- $tbl_champs[8] = 'date-inscription TS AUTO';
- bdd('c', 'liste-amis', $tbl_champs);
|
On utile donc un tableau qu'on envoie via la fonction bdd.
'c' veut dire création.
'liste-amis' est le nom de la table. (lettres permises : a-zA-Z0-9-_)
$tbl_champs est le tableau qu'on envoie.
Dans les données envoyées, il faut 3 paramètres :
Le nom du champ (lettres permises : a-zA-Z0-9-_), son type et sa valeur par défaut.
A l'heure actuelle, 3 types sont supportés :
NBR = nombre (virgule ou non).
TXT = texte (sans limite de longueur).
TS = TimeStamp (entier)
Pour la valeur par défaut :
- Si le champ est un nombre :
* AUTO
* NUL (équivaut à 0)
* Une valeur par défaut qui est forcément un nombre.
- Si le champ est un texte :
* NUL (équivaut à "" )
* Une valeur par défaut qui est forcément une chaine de caractères entourée par "".
- Si le champ est un TS (Timestamp) :
* AUTO (inscrit le Timestamp du serveur au moment de la requête).
* NUL (= 0)
* Une valeur par défaut (qui est forcément un timestamp).
Exemple d'une requête de destruction d'une table :
Très simple :
Code :
- bdd('e', 'liste-amis');
|
Où 'e' signifie 'effacement' et 'liste-amis' est le nom de la table à effacer.
Exemple d'une requête d'insertion de données dans une table :
Code :
- // Insertion dans la base de données
- $tbl_champs[0]['nom'] = 'LOURD';
- $tbl_champs[0]['prenom'] = 'Daniel';
- $tbl_champs[0]['numero'] = '3';
- $tbl_champs[0]['rue'] = 'rue du Porche';
- $tbl_champs[0]['code-postal'] = '13000';
- $tbl_champs[0]['ville'] = 'Marseille';
- $tbl_champs[0]['anniversaire'] = mktime(0, 0, 0, 12, 1, 1970);
- $tbl_champs[1]['nom'] = 'BERTRAND';
- $tbl_champs[1]['prenom'] = 'David';
- $tbl_champs[1]['numero'] = '18';
- $tbl_champs[1]['rue'] = 'rue du 28 Mai';
- $tbl_champs[1]['code-postal'] = '75000';
- $tbl_champs[1]['ville'] = 'Paris';
- $tbl_champs[1]['anniversaire'] = mktime(0, 0, 0, 12, 31, 1969);
- $tbl_champs[2]['nom'] = 'COLOMB';
- $tbl_champs[2]['prenom'] = 'Christophe';
- $tbl_champs[2]['numero'] = '1';
- $tbl_champs[2]['rue'] = 'rue du Sable';
- $tbl_champs[2]['code-postal'] = '33000';
- $tbl_champs[2]['ville'] = 'Bordeaux';
- $tbl_champs[2]['anniversaire'] = mktime(0, 0, 0, 10, 28, 1980);
- $tbl_champs[3]['nom'] = 'DUCOMPTE';
- $tbl_champs[3]['prenom'] = 'Isabelle';
- $tbl_champs[3]['numero'] = '5';
- $tbl_champs[3]['rue'] = 'Place colombine';
- $tbl_champs[3]['code-postal'] = '13000';
- $tbl_champs[3]['ville'] = 'Marseille';
- $tbl_champs[3]['anniversaire'] = mktime(0, 0, 0, 10, 29, 1979);
- $tbl_champs[4]['nom'] = 'FLIPPER';
- $tbl_champs[4]['prenom'] = 'Dauphin';
- $tbl_champs[4]['numero'] = '1';
- $tbl_champs[4]['rue'] = 'rue du grand bassin';
- $tbl_champs[4]['code-postal'] = '13000';
- $tbl_champs[4]['ville'] = 'Marseille';
- $tbl_champs[4]['anniversaire'] = mktime(0, 0, 0, 12, 1, 1970);
- $tbl_champs[5]['nom'] = 'MAHLER';
- $tbl_champs[5]['prenom'] = 'Gustav';
- $tbl_champs[5]['numero'] = '6';
- $tbl_champs[5]['rue'] = 'rue du cimetière';
- $tbl_champs[5]['code-postal'] = '75000';
- $tbl_champs[5]['ville'] = 'Paris';
- $tbl_champs[5]['anniversaire'] = mktime(0, 0, 0, 8, 10, 1989);
- bdd('i', 'liste-amis', $tbl_champs);
|
Comme vous pouvez le constater, on utilise un tableau à deux dimensions pour une raison simple : On transmet l'ensemble des données à inscrire d'un seul coup sans écrire plusieurs fois sur le serveur. Exemple d'une requête de sélection des données dans une table :
Code :
- // Sélection dans la base de données
- // Tableau de champs sélectionnés
- $resultats = array();
- $tbl_champs[0] = "id";
- $tbl_champs[1] = "nom";
- $tbl_champs[2] = "prenom";
- $tbl_champs[3] = "numero";
- $tbl_champs[4] = "rue";
- $tbl_champs[5] = "code-postal";
- $tbl_champs[6] = "ville";
- $tbl_champs[7] = "anniversaire";
- $tbl_champs[8] = "date-inscription";
- // Condition(s) (Opérateurs possibles : < > <= >= == !=)
- $tbl_conditions = array();
- $tbl_conditions[0] = 'anniversaire >= '.mktime(0, 0, 0, 12, 1, 1970);
- $tbl_conditions[1] = 'numero > 0';
- // Tri(s) (Valeurs possibles : ASC ou DESC)
- $tbl_ordres = array();
- $tbl_ordres[0] = 'anniversaire ASC';
- $tbl_ordres[1] = 'prenom DESC';
- // Récupération des données
- $resultats = bdd('s', 'liste-amis', $tbl_champs, $tbl_conditions, $tbl_ordres, 0, 6);
- $i = 0;
- while (isset($resultats['id'][$i]))
- {
- echo $resultats['id'][$i]." | ";
- echo $resultats['nom'][$i]." | ";
- echo $resultats['prenom'][$i]." | ";
- echo $resultats['numero'][$i]." | ";
- echo $resultats['rue'][$i]." | ";
- echo $resultats['code-postal'][$i]." | ";
- echo $resultats['ville'][$i]." | ";
- echo date("d-M-Y", $resultats['anniversaire'][$i])." | ";
- echo date("d-M-Y", $resultats['date-inscription'][$i])."<br />";
- $i++;
- }
|
$tbl_champs contient l'ensemble des champs que l'on veut récupérer.
$tbl_conditions contient l'ensemble des conditions : syntaxe : champ opérateur (Les opérateurs supportées sont '< > <= >= == !=') valeur
- Si 0 est écrit à la place de $tbl_conditions lors de l'appel à la fonction bdd, il n'y a pas de conditions requises.
- Si le type du champ est TXT, il faut obligatoirement des "".
Il n'y a pas de OR ou de XOR et il n'y en aura surement pas.
$tbl_ordre contient l'ensemble des tris.
syntaxe : champ paramètre (qui peut être soit ASC soit DESC).
- Si 0 est écrit à la place de $tbl_ordre lors de l'appel à la fonction bdd, il n'y a pas de tris requis.
- Si le type du champ est TXT, il faut obligatoirement des "".
les deux derniers paramètres (limite1, limite2) concernent LIMIT, ces deux paramètres sont obligatoirement des entiers.
S'il n'y a que le premier paramètre de précisé, celui-ci veut dire : nombre d'enregistrements renvoyés en partant de l'index 0, sinon, les enregistrements de limite1 à limite2 seront renvoyés.
Exemple d'une destruction dans la table (DELETE)
Code :
- // Condition(s) (Opérateurs possibles : < > <= >= == !=)
- $tbl_conditions = array();
- $tbl_conditions[0] = 'prenom == "Dauphin"';
- bdd('d', 'liste-amis', $tbl_conditions);
|
Où 'd' signifie "destruction" ou "DELETE", 'liste-amis' est la table sur laquelle on travaille, et $tbl_conditions est l'ensemble des conditions déclenchant le DELETE des données.
Exemple d'update des données dans une table
Code :
- $tbl_champs = array();
- $tbl_champs['nom'] = 'HEHE';
- $tbl_champs['prenom'] = 'Hohoho';
- $tbl_champs['numero'] = '0';
- $tbl_champs['rue'] = 'rue du Test';
- $tbl_champs['code-postal'] = '33000';
- $tbl_champs['ville'] = 'Bordeaux';
- $tbl_champs['anniversaire'] = mktime(0, 0, 0, 12, 31, 1981);
- // Condition(s) (Opérateurs possibles : < > <= >= == !=)
- $tbl_conditions = array();
- $tbl_conditions[0] = 'nom == "HEHE"';
- bdd('u', 'liste-amis', $tbl_champs, $tbl_conditions);
|
Où 'u' signifie "update", 'liste-amis' est la table sur laquelle on travaille, $tbl_champs est l'ensemble des champs à modifier et $tbl_conditions est l'ensemble des conditions déclenchant le UPDATE des données.
Si vous voulez vous amuser à tester ou si vous êtes intéressés par ce projet, ce topic est là pour en parler.
Vous pouvez télécharger ce fichier pour tester (zip à décompresser) : http://tousleschats.free.fr/hermes/bdd.zip
Notes complémentaires :
- A l'heure actuelle, lorsque vous sélectionnez des données et que vous ne voulez pas de condition ni d'ordre, mettez 0. Vous pouvez également ne mettre que les 3 premiers paramètres (l'instruction 's', le nom de la table et les champs appelés).
- Si vous utilisez une condition ou un ordre, cela doit concerner obligatoirement un champ appelé et non simplement un champ présent dans la table. Merci donc de ne pas rapporter d'erreur à ce sujet.
- Pour utiliser ce script dans vos projet, il y a deux choses à savoir :
1) Chemin et inclusion :
Avant de faire appel à bdd(), il faut écrire :
Code :
- define("ADR", "../" );
- include(ADR."bdd/fonctions-bdd.php" );
|
Où ADR est une constante représentant le chemin du script de base de données.
2) Pour gérer les permissions, c'est très simple : Editez fonctions-bdd.php et à la ligne 7, vous avez la constante DROITS_BDD qui vous le permet (valeur standard octale). Par défaut, puisque qu'il sagit de tester, j'ai mis 777, mais il est évident que dans le cas d'une utilisation de ce script sur internet, il ne faut pas conserver cette valeur.
Voilà... Message édité par Hermes le Messager le 22-06-2006 à 10:15:34
|