La communauté ALL HTML c'est 59577 membres à ce jour dont 0 inscrits aujourd'hui et 15 depuis une semaine.

Stocker et manipuler des variables en les enregistrant dans la base de donnée

Photo de FabHacker Article publié le samedi 02 septembre 2006 par FabHacker.
Cet article est classé dans les catégories « PHP, SQL »

Il peut être utile de travailler avec des variables de tout type en les enregistrant dans la base de donnée, et cela pour plusieurs raisons.

Introduction


Je vous fourni dans cet article des ressources qui vous permettront de gérer des variables en les enregistrant dans la base de donnée, et ce, quelque soit leur type. Cela peut-être utile pour plusieurs raison:
  • Si vous ne désirez pas employer un config.php situé sur votre serveur. En général ce genre de fichier contient une multitude de variable fixe utilisées par la plupart des pages du site. Ce fichier est situé sur le FTP du site, est inclus dans les pages et peut être la cible d'éventuels hackers. En conservant vos variables sensibles (et autres) dans la base de donnée, vous limitez les risques de perte d'informations confidentielles.
  • Si vous programmez, par exemple, un panel administration pour un utilisteur qui n'a aucune connaissance en développement web. Vous ne désirez donc que l'utilisateur puisse gérer son site web sans avoir à manipuler un fichier config.php évoqué précédemment. Une erreur de syntaxe de la part de l'utilisateur, et le site serait inutilisable. De plus, l'utilisateur novice ne sait peut-être pas comment accéder à un FTP...!
  • Et bien entendu d'autres utilisations diverses et variées.



La table SQL


Pas question d'enregistrer des données dans une BDD sans tables!
Voici la table SQL que je vous propose pour stocker vos données.

table.sql
CREATE TABLE `variables` ( `varid` INT NOT NULL AUTO_INCREMENT PRIMARY KEY, `nom` VARCHAR(64) NOT NULL, `type` VARCHAR(8) NOT NULL, `tinyint` TINYINT NOT NULL, `smallint` SMALLINT NOT NULL, `mediumint` MEDIUMINT NOT NULL, `int` INT NOT NULL, `bigint` BIGINT NOT NULL, `float` FLOAT NOT NULL, `double` DOUBLE NOT NULL, `date` DATE NOT NULL, `varchar` VARCHAR(255) NOT NULL, `tinytxt` TINYTEXT NOT NULL, `text` TEXT NOT NULL, `mediumtext` MEDIUMTEXT NOT NULL, `longtext` LONGTEXT NOT NULL, UNIQUE (`nom`) );

Note 1: Je n'ai pas mis tous les types de variable, mais les plus couramment utilisé. Vous pouvez bien entendu étendre la table pour supporter tous les types de variables.
Note 2: J'ai nommé cette table variables. Vous verrez par la suite que j'utilise ce nom dans les fonctions qui servent à gérer les variables. Pensez à changer ce nom dans les fonctions si vous utilisez un autre nom pour la table!
Note 3: Le champs varid à été ajouté par 'convention' mais ne servira pas par la suite.
Note 4: Le champs nom contient le nom de la variable. Il m'a semblé suffisant de laisser 64 caractères, mais vous pouvez étendre à 255 si vous le désirez.
Note 5: Le champs type contient le type de la variable. Vous devrez spécifier 'int' si vous désirez que votre variable soit un nombre, ou alors 'varchar' pour une chaine par exemple. Cela sera détaillé par la suite.

Les trois premiers champs de la table servent à l'identification de la variable, et les suivant au stockage des valeurs. Une variable peut ainsi contenir plusieurs valeur pour un même nom, mais les valeurs sont différenciées par leur type.
Voyons maintenant les fonctions qui servent à gérer les variables.



Les fonctions


Il y en a trois seulement: la première sert à vérifier l'existence d'une variable, la seconde à acquérir une variable, la dernière à modifier la valeur. Plus de détails dans les commentaires ci-dessous.

fct_variables.php
<?php // Fonction booléenne indiquant si la variable $var_nom existe. function existe_var($var_nom) { // Recherche dans la base de donnée $sql = "SELECT varid FROM variables WHERE `nom` = '$var_nom'"; $resultat = mysql_query($sql); if(!mysql_num_rows($resultat)) return false; else return true; } // Retourne la valeur de la variable $var_nom de type $var_type. // Si elle n'existe pas, cette fonction retourne false. function aquerir_var($var_nom,$var_type) { // Recherche dans la base de donnée $sql = "SELECT `$var_type` FROM variables WHERE nom = '$var_nom'"; $resultat = mysql_query($sql); if(!mysql_num_rows($resultat)) return false; // Retour de la valeur $variable = mysql_fetch_array($resultat); return $variable[$var_type]; } // Attribue une valeur pour une variable. // Si la variable existe déjà, la valeur sera mise à jour. // La fonction retourne $var_valeur function definir_var($var_nom,$var_type,$var_valeur) { // Si la variable n'existe pas, on ajoute une ligne vide if( !existe_var($var_nom) ) { $sql = "INSERT INTO `variables` VALUES ('','$var_nom','$var_type','','','','','','','','','','','','','')"; $resultat = mysql_query($sql); } // Mise à jour de la valeur $sql = "UPDATE `variables` SET `$var_type` = '$var_valeur' WHERE `nom` = '$var_nom'"; $resultat = mysql_query($sql); // Renvoi de la valeur return $var_valeur; } ?>

Rappel: Toutes les requêtes SQL utilise le nom de table variables. Changez le si nécessaire!

Maintenant un bon exemple pour voir comment cela fonctionne.



Exemple d'utilisation


Maintenant, c'est très simple!
Voici un exemple simple mais complet pour bien manipuler le système de gestion de variable.

exemple.php
<?php include('bdd.php'); include('fct_variables.php'); // Définition d'un nombre entier definir_var('nombre','int', 3105 ); // Aquisition et affichage du nombre $nombre = aquerir_var('nombre','int'); print('<br />Nous avont ajouté <b>nombre</b> avec la valeur <b>' . $nombre . '</b>'); // Nouvelle valeur pour 'nombre' $nombre = definir_var('nombre','int', 6756 ); print('<br />Désormais <b>nombre</b> vaut <b>' . $nombre . '</b>'); // On vérifie maintenant si une variable est dans la base. // Si elle existe, on l'affiche, sinon on l'ajoute. // Ce test est à titre EDUCATIF, il est inutile car definir_var() ajoute les variables automatiquement si elle ne sont pas attribuées. // On donne un nom de variable dynamique $test = 'entier_' . rand(1,5); print('<br /><br />Notre variable dynamique est <b>' . $test . '</b>'); if( existe_var($test,'int') ) { // La variable existe, l'afficher $temp = aquerir_var($test,'int'); print('<br />La variable <b>' . $test . '</b> a pour valeur <b>' . $temp . '</b>'); } else { // Sinon, on l'ajoute avec une valeur aléatoire $valeur = rand(1,999); $temp = definir_var($test,'int', $valeur ); print('<br />La variable <b>' . $test . '</b> à été ajoutée avec la valeur <b>' . $temp . '</b>'); } ?>

Je pense que vous avez maintenant tout compris !
J'espère que ces ressources vous faciliteront le dévellopement de vos sites webs.

VOS COMMENTAIRES ...

Commenter cette publication

Photo de Biboops Commentaire publié le mardi 12 septembre 2006 à 08 h 42 par Biboops
Sympa, mais où et comment sont stockés les paramètres de connection à la base de données
Photo de FabHacker Commentaire publié le samedi 16 septembre 2006 à 20 h 10 par FabHacker
Ce sont les seules données qui ne peuvent pas être stocées dans la base de donnée.
En effet, étant donné que les fonctions utilisent des requêtes SQL pour aller chercher les informations dans la base de donnée, il faut une connection au préalable. Dans l'exemple, la connection à la base de donnée est effectuée par la ligne de commande suivant:

include('bdd.php');
Photo de FabHacker Commentaire publié le samedi 30 septembre 2006 à 13 h 31 par FabHacker
MODIFICATIONS ET OPTIMISATIONS APPORTEES SUR LE SCRIPT

Bonjour, j'ai pris le soin de modifier certaines choses qui n'allaient pas dans le script, et j'ai également pris le soin d'ajouter deux fonctions.

Tout d'abord, j'ai enlevé le fait que l'on puisse enregistrer deux valeurs pour une même variable, car cela n'est pas utile.
La fonction aquerir_var() n'a donc plus comme argument le type, ce qui allège considérablement l'écriture.

Deuxièmement j'ai ajouté la fonction type_var() qui retourne le type d'une variable, cela peut-être utile dans certaines utilisation.

Dernière chose, j'ai mis la ligne suivant en en-tête:
define( _TABLE_VARIABLES , 'variables' );
Cela permet de paramètrer le nom de la table contenant les variables une bonne fois pour toute. Ainsi les fonctions iront chercher les informations dans la table ayant pour nom la constante _TABLE_VARIABLES.

Plus quelques corrections et optimisations, mais la structure de la table reste la même.
Voici ci-dessous les 5 fonctions de gestion des variables version finale:

FONCTIONS VERSION FINALE
<?php // ------------------------------------ // FONCTIONS DE GESTION DES VARIABLES // v1.0 // par FabHacker // ------------------------------------ // LISTE DES FONCTIONS // existe_var( $var_nom ) - Vérifie qu'une variable est enregistrée ou non. // type_var( $var_nom ) - Retourne le type d'une variable. // aquerir_var( $var_nom ) - Retourne la valeur d'une variable. // definir_var( $var_nom , $var_type , $var_valeur ) - Enregistre une variable. // supprimer_var( $var_nom ) - Supprime une variable. // Nom de la table contenant les variables define( _TABLE_VARIABLES , 'variables' ); // Fonction booléenne indiquant si la variable $var_nom existe. function existe_var($var_nom) { // Recherche dans la base de donnée $sql = "SELECT varid FROM " . _TABLE_VARIABLES . " WHERE `nom` = '$var_nom'"; $resultat = mysql_query($sql); if(!mysql_num_rows($resultat)) return false; else return true; } // Retourne le type de la variable, ou retourne false en cas d'échec. function type_var($var_nom) { // Recherche du type dans la base de donnée $sql = "SELECT type FROM " . _TABLE_VARIABLES . " WHERE nom = '$var_nom'"; $resultat = mysql_query($sql); if(!mysql_num_rows($resultat)) return false; // On récupère le type de la variable et on le retourne $variable = mysql_fetch_object($resultat); return $variable->type; } // Retourne la valeur de la variable $var_nom. // Si la variable n'existe pas, cette fonction retourne false. function aquerir_var($var_nom) { // On récupère le type, on retourne false en cas d'échec if(!( $var_type = type_var($var_nom) )) return false; // Recherche de la valeur selon le type $sql = "SELECT `$var_type` FROM " . _TABLE_VARIABLES . " WHERE nom = '$var_nom'"; $resultat = mysql_query($sql); // Retour de la valeur $variable = mysql_fetch_array($resultat); return $variable[$var_type]; } // Attribue une valeur pour une variable. // Si la variable existe déjà, la valeur sera mise à jour. // La fonction retourne $var_valeur function definir_var($var_nom,$var_type,$var_valeur) { // Si la variable n'existe pas, on ajoute une ligne vide if( !existe_var($var_nom) ) { $sql = "INSERT INTO " . _TABLE_VARIABLES . " VALUES ('','$var_nom','$var_type','','','','','','','','','','','','','')"; $resultat = mysql_query($sql); } // Mise à jour de la valeur $sql = "UPDATE " . _TABLE_VARIABLES . " SET `$var_type` = '$var_valeur' WHERE `nom` = '$var_nom'"; $resultat = mysql_query($sql); // Renvoi de la valeur return $var_valeur; } // Supprime la variable de nom $var_nom. // Retourne false en cas d'échec, sinon true. function supprimer_var($var_nom) { // Si la variable n'existe pas, on retourne false if( !existe_var($var_nom) ) return false; // Mise à jour de la valeur $sql = "DELETE FROM " . _TABLE_VARIABLES . " WHERE nom = '$var_nom'"; $resultat = mysql_query($sql); // Renvoi de true si l'opération est effectuée return true; } ?>
En espérant vous aider dans le dévelloppement de vos sites et applications web :-)
Photo de allprog Commentaire publié le vendredi 10 novembre 2006 à 16 h 47 par allprog
J'arrive pas a comprends le but du système car si un hacker arrive a récupérér le fichier bdd.php il aura accès a la base de données donc aux variables. Et si on veut simplifier l'utilisation pour un webmaster qui ne connait pas php autant lui faire un script qui écrit les informations dans le config.php. Car on rajoute beaucoup d'accès a la base de données pour très peu de sécurité.

Commenter cette publication

Vous devez obligatoirement vous identifier en tant que membre pour participer à cette discussion.

Forums de discussions associés

Discutez et échangez sur ce thème dans nos forums PHP - SQL, PHP - SQL, ASP - SQL.

Liens sponsorisés

ACCÉS COMMUNAUTÉ

Rejoignez ALL HTML

Publiez vos articles, actualités, communiqués ... Donnez votre avis, partagez votre réseau, rencontrez d'autres membres et participez à la vie de la communauté.