begin process at 2012 05 27 20:20:53
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Base de données

 > SIMPLIFIER LES PARAMÉTRAGES DE VOTRE SITE

SIMPLIFIER LES PARAMÉTRAGES DE VOTRE SITE


 Description

Bonjour!

Cette source me sert à simplifier mes bases de données (et par la même occasion mes requêtes) en enregistrant tous mes paramètres dans une seule variable.
Pour être plus clair, un exemple:
J'ai une structure de configuration comme ca:
$configuration['envoi_mail']='oui' ou 'non';
$configuration['ouvrir_sur']= 'index', 'forum', 'news' ou 'chat';
$configuration['presentation']= 'style_1', 'style_2', ...;
Par exemple, 47 donnera $config['envoi_mail']='oui', $config['ouvrir_sur']='forum' et $config['presentation']='style_3'...

Les deux fonctions (creer_config() et recupconfig()) vous permettent de créer le nombre qui correspond à la config choisie, grace à une chaine binaire. Un bouleen sera donc 0 ou 1, un choix entre 4 possibilité sera 00,01,10 ou 11. Mais en automatique.
La première fonction crée le nombre associé à la config passée en paramètre, la seconde récupère la config en fonction du nombre en paramètre, dans un tableau.

Un exemple concrêt est dans après le code.

Source

  • //Les fonctions:
  • function recup_config($nombre,$structure,$nb_total_bits)
  • {
  • //On convertit la valeur en binaire
  • $bin = base_convert($nombre,10,2);
  • //index est la position des bits à lire. Le premier est inutilisé mais sert à conserver une chaine de longueur fixe
  • $index = 1;
  • foreach($structure as $cle=>$val)
  • {//Pour chacune des propriétés
  • if (!isset($val['max']))
  • {//Le maximum n'est pas défini, on le calcule donc
  • $nb_possibilites = count($val)-1;//-1 à cause du ['nom']
  • $nb_bits = strlen(base_convert($nb_possibilites-1,10,2));//-1 car le premier index est 0
  • }
  • else
  • {//Le maximum est défini, on le récupère alors
  • $nb_bits = strlen(base_convert($val['max']-1,10,2));//-1 car le premier index est 0
  • }
  • //Dans $bin, on récupère les $nb_bits caractères à partir de $index
  • $valeur = substr($bin,$index,$nb_bits);
  • //On attribue la valeur lue dans le tableau $val à l'indice $valeur (converti en base 10) au champs de même nom du tableau de sortie
  • $conf[$val['nom']] = $val[base_convert($valeur,2,10)];
  • //On avance l'index $index de $nb_bits
  • $index = $index + $nb_bits;
  • }
  • //On retourne $conf
  • return $conf;
  • }
  • function creer_config($config,$structure_configuration)
  • {
  • $indice = 0; //Indice dans $structure_configuration
  • $retour = '1'; //On insère un 1 en début de chaine pour éviter tout problème avec une éventuelle valeur 0 ou 01 pour le premier paramètre, ce qui décallerait tout
  • foreach($config as $cle=>$val)
  • {//On parcourt $config, la config à enregistrer
  • if (!isset($structure_configuration[$indice]['max']))
  • {//Le maximum n'est pas défini, on le calcule donc
  • $nb_possibilites = count($structure_configuration[$indice])-1;//-1 à cause du ['nom']
  • $nb_bits = strlen(base_convert($nb_possibilites-1,10,2));//-1 car le premier index est 0
  • }
  • else
  • {//Le maximum est défini, on le récupère alors
  • $nb_bits = strlen(base_convert($structure_configuration[$indice]['max']-1,10,2));//-1 car le premier index est 0
  • }
  • //On recherche $val, la valeur de la propriété à enregistrer, dans $structure_configuration[$indice]
  • $lacle = array_search($val,$structure_configuration[$indice]);
  • //On convertit la clé en valeur binaire
  • $ajout = base_convert($lacle,10,2);
  • //On rajoute les éventuels 0 en début de chaine
  • $ajout = str_pad($ajout, $nb_bits, "0", STR_PAD_LEFT);
  • //On concatène
  • $retour .= $ajout;
  • //On passe à l'indice suivant
  • $indice++;
  • }
  • //On renvoie la valeur en base 10
  • return base_convert($retour,2,10);
  • }
  • // EXEMPLE D'UTILISATION:
  • On crée la structure de toutes les paramètres possibles
  • $structure_configuration[0]['nom'] = 'envoi_mail'; //Le nom de la variable 0
  • $structure_configuration[0][0] = 'oui'; //Première possibilité pour 0
  • $structure_configuration[0][1] = 'non'; // Deuxième possibilité pour 0
  • $structure_configuration[1]['nom'] = 'ouvrir_sur'; //Le nom de la variable 1
  • $structure_configuration[1][0] = 'index'; //...
  • $structure_configuration[1][1] = 'forum';
  • $structure_configuration[1][2] = 'news';
  • $structure_configuration[1][3] = 'chat';
  • $structure_configuration[2]['nom'] = 'presentation';
  • $structure_configuration[2][0] = 'style_1';
  • $structure_configuration[2][1] = 'style_2';
  • $structure_configuration[2][2] = 'style_3';
  • $structure_configuration[2][3] = 'style_4';
  • $structure_configuration[2]['max'] = 8; //On prévoit la possibilité d'inserer jusqu'à 8 styles
  • $nombre = 114; //Nombre récupéré dans mysql (par exemple) qui définit comment interagit le site pouyr une personne en particulier
  • echo '<b>Envoi: '.$nombre.'</b><br />'."\n";
  • $config = recup_config($nombre,$structure_configuration,$max);
  • echo 'Détail de la config: ';
  • print_r($config);
  • echo '<br />'."\n";
  • $num_enregistre = creer_config($config,$structure_configuration);
  • echo '<b>Retour: '.$num_enregistre.'</b><br>'."\n";
//Les fonctions:
function recup_config($nombre,$structure,$nb_total_bits)
	{
	//On convertit la valeur en binaire
	$bin		= base_convert($nombre,10,2);
	//index est la position des bits à lire. Le premier est inutilisé mais sert à conserver une chaine de longueur fixe
	$index	= 1;
	foreach($structure as $cle=>$val)
		{//Pour chacune des propriétés
		if (!isset($val['max']))
			{//Le maximum n'est pas défini, on le calcule donc
			$nb_possibilites = count($val)-1;//-1 à cause du ['nom']
			$nb_bits = strlen(base_convert($nb_possibilites-1,10,2));//-1 car le premier index est 0
			}
			else
			{//Le maximum est défini, on le récupère alors
			$nb_bits = strlen(base_convert($val['max']-1,10,2));//-1 car le premier index est 0
			}
		//Dans $bin, on récupère les $nb_bits caractères à partir de $index
		$valeur = substr($bin,$index,$nb_bits);
		//On attribue la valeur lue dans le tableau $val à l'indice $valeur (converti en base 10) au champs de même nom du tableau de sortie
		$conf[$val['nom']] = $val[base_convert($valeur,2,10)];
		//On avance l'index $index de $nb_bits
		$index = $index + $nb_bits;
		}
	//On retourne $conf
	return $conf;
	}
function creer_config($config,$structure_configuration)
	{
	$indice	= 0;	//Indice dans $structure_configuration
	$retour	= '1';	//On insère un 1 en début de chaine pour éviter tout problème avec une éventuelle valeur 0 ou 01 pour le premier paramètre, ce qui décallerait tout
	foreach($config as $cle=>$val)
		{//On parcourt $config, la config à enregistrer
		if (!isset($structure_configuration[$indice]['max']))
			{//Le maximum n'est pas défini, on le calcule donc
			$nb_possibilites = count($structure_configuration[$indice])-1;//-1 à cause du ['nom']
			$nb_bits = strlen(base_convert($nb_possibilites-1,10,2));//-1 car le premier index est 0
			}
			else
			{//Le maximum est défini, on le récupère alors
			$nb_bits = strlen(base_convert($structure_configuration[$indice]['max']-1,10,2));//-1 car le premier index est 0
			}
		//On recherche $val, la valeur de la propriété à enregistrer, dans $structure_configuration[$indice]
		$lacle	= array_search($val,$structure_configuration[$indice]);
		//On convertit la clé en valeur binaire
		$ajout 	= base_convert($lacle,10,2);
		//On rajoute les éventuels 0 en début de chaine
		$ajout	= str_pad($ajout, $nb_bits, "0", STR_PAD_LEFT);
		//On concatène
		$retour	.= $ajout;
		//On passe à l'indice suivant
		$indice++;
		}
	//On renvoie la valeur en base 10
	return base_convert($retour,2,10);
	}

// EXEMPLE D'UTILISATION:
On crée la structure de toutes les paramètres possibles
$structure_configuration[0]['nom']	= 'envoi_mail'; 	//Le nom de la variable 0
$structure_configuration[0][0]		= 'oui'; 		//Première possibilité pour 0
$structure_configuration[0][1]		= 'non'; 		// Deuxième possibilité pour 0
$structure_configuration[1]['nom']	= 'ouvrir_sur'; 	//Le nom de la variable 1
$structure_configuration[1][0]		= 'index'; 		//...
$structure_configuration[1][1]		= 'forum';
$structure_configuration[1][2]		= 'news';
$structure_configuration[1][3]		= 'chat';
$structure_configuration[2]['nom']	= 'presentation';
$structure_configuration[2][0]		= 'style_1';
$structure_configuration[2][1]		= 'style_2';
$structure_configuration[2][2]		= 'style_3';
$structure_configuration[2][3]		= 'style_4';
$structure_configuration[2]['max']		= 8;			//On prévoit la possibilité d'inserer jusqu'à 8 styles
$nombre 	= 114;	//Nombre récupéré dans mysql (par exemple) qui définit comment interagit le site pouyr une personne en particulier
echo '<b>Envoi: '.$nombre.'</b><br />'."\n";
$config = recup_config($nombre,$structure_configuration,$max);
echo 'Détail de la config: ';
print_r($config);
echo '<br />'."\n";
$num_enregistre	= creer_config($config,$structure_configuration);
echo '<b>Retour: '.$num_enregistre.'</b><br>'."\n";

 Conclusion

Voila!
Une fois créé le tableau $structure_configuration, il est très simple de mettre en place un formulaire de configuration, dont les données seront insérées dans $config, pour enregistrer la configuration, par exemple dans mysql.


 Sources du même auteur

Source avec Zip PHP5 - ARBORESCENCE SERVEUR + SUIVI PROJET
CLASSE SIMPLE DE CRÉATION DE FICHIER XML

 Sources de la même categorie

Source avec Zip ORM : DAO, ACTIVERECORD ET DBLIST par Reldan
Source avec une capture CET EXTRAIT PERMET D'AJOUTER DANS UN TABLEAU UNE AGRÉGATION ... par Denis007
EXPORT DE BASE AU FORMAT CSV par remib74
Source avec Zip RECHERCHE DES DOUBLONS DANS UNE TABLE MYSQL EN SÉLECTIONNANT... par aladec2007
[CRON] INSERT ON DUPLICATE KEY UPDATE par pierreSabatier

 Sources en rapport avec celle ci

CLASSE PHP4 DE CONNEXION À UN SGBD par gr43
MOTEUR DE RECHERCHE DANS BDD II par coockiesch
PAGINATION TRÈS SIMPLE SANS TABLEAU par rakizm
CLASSE PHP5 POUR SE CONNECTER À MYSQL AVEC GESTION D'ERREURS par hpph
Source avec Zip EXTRAIRE UNE PIÈCE JOINTE APRÈS RÉCEPTION D'EMAIL par raven44

Commentaires et avis

Commentaire de Metaldark le 22/06/2006 15:13:04

Il y a de l'idée :)
Je vais regarder ca ;)

Commentaire de pastis51forever le 22/06/2006 15:15:17

Oui, y'a certainement des choses à améliorer (comme par exemple en faire une classe...)
N'hésitez pas à critiquer (utilement toutefois)

Commentaire de garfield90 le 22/06/2006 16:14:28

just for fun

base_convert($retour,2,10) => bindec($retour)
base_convert($retour,10,2) => decbin($retour)

ca me semble tout de meme assez/trop complexe pour pas grand chose

tu charges en mémoire des informations dont tu n'auras pas/jamais besoin

autant se servir d'un fichier type .ini (utilisé avec parse_ini_file ) ainsi qu'un systeme permettant de réécrire ce fichier

bien entendu pour des raisons de sécurité, on évite de rendre ce fichier accessible via le web (.htaccess, ou fichier en dehors du repertoire web)

Commentaire de pastis51forever le 22/06/2006 18:02:15

En fait je pense que tu n'as pas compris le but... Ou alors j'ai pas compris ta réflexion, c'est possible aussi...
Le but: Si sur ton site, tu as un acces id/mdp, et que chacun peut configurer par exemple l'affichage auto du mail dans les posts du forum, le css utilisé, etc..., alors tu as besoin de l'enregistrer quelque part. Ici, dans une seule variable, plutot que 20 champs binaires ou enum dans mysql.
Et ces infos, tu en auras besoin à chaque affichge de page pour la plupart (si ton site est dynamique, c'est qu'il varie d'une personne à l'autre. Ici sont stockées tes variables)
En tout cas merci pour t'être penché dessus
Pour ce qui est de
base_convert($retour,2,10) => bindec($retour)
base_convert($retour,10,2) => decbin($retour)
tu as entièrement raison, et j'y ai pas mal réfléchi en développant ca, mais je me suis dit que ca serait mieux, pour apprendre des fonctions moins utilisées et aussi rapides. (en fait, c'est la même fonction qui est utilisée, à ce que j'ai compris, quand tu appelles bindec, ca appelle base_convert.)

Commentaire de kankrelune le 22/06/2006 21:34:40

Pareil je vois pas l'interet... mais peut être ne l'ais je pas compris... .. .

Autant utiliser un tableau associatif dans un fichier config ou tout simplement un base de données... quand au préférence utilisateur pareil => base de données avec éventuellement un peu de session et de cookies en plus... .. .

@ tchaOo°

Commentaire de malalam le 22/06/2006 23:55:34 administrateur CS

z'allez dire que je me répète...mais, au grand étonnement de tous j'en suis sûr, j'utilise fréquemment le XML pour ce genre de configurations.
C'est nettement plus simple à utiliser tant pour le codeur, que pour un utilisateur néophyte. Et c'est très facile à entretenir.
ceci dit, je suis d'accord avec le 1er commentaire : il y a de l'idée. Mais aussi avec les suivants : c'est trop complexe pour ce que ça fait. Et j'ose même pas imaginer la gueule du tableau pour un gros site avec tout plein d'options personnalisables. Et en effet, gros défaut, tu trimballes en permanence des options dont tu n'as pas besoin tout le temps.
Mais y a de l'idée...:-)
De toutes évidences, tu aimes te torturer l'esprit...

Commentaire de pastis51forever le 23/06/2006 11:02:42

Je comprends bien vos arguments...
C'est vrai que si c'est utilisé sur des variables qui ne servent qu'une fois, ca n'a pas grand interet, ou du moins les conserver n'a pas grand interet, il suffit alors d'unsetter les variables qui ne serviront plus.
Enfin, j'avoue que je ne sais pas encore quand/si ce code me servira, je l'ai fait pour utiliser de nouvelles fonctions (pour moi), et un peu, justement, pour me torturer l'esprit (Malalam->Ca m'arrive de me le torturer 10 fois plus, tu devrais voir ca).
Je l'ai partagé autant pour permettre d'apprendre quelques fonctions à ceux qui sont encore plus débutants que moi, que pour recevoir des critiques (ca au moins ca a marché).
Par contre, (au risque de me faire frapper par malalam) je ne me suis encore jamais interessé au xml, mais je n'arrive pas à comprendre comment tu l'utiliserais... Un fichier par personne ou un enorme fichier qui contiendrait les 50 paramètres des 500 membres du site?

En tout cas merci d'avoir pris le temps de poster...

Commentaire de malalam le 23/06/2006 11:25:24 administrateur CS

Un fichier par personne (ou par "client", ça dépend du site).
Ca devient simple : tu lis le fichier via DOM (rapide) (en prenant évidemmnt en compte que ton fichier s'appelle un truc du genre : user_id.xml, tu accèdes directement à la propriété (ou les propriétés) qui t'intéresse (via XPath), et basta.
Ouvrir et fermer un fichier, PHP fait ça sans arrêt quand vous utilisez les sessions...on ne peut pas dire que ça ralentisse beaucoup, hein ? ;-)

Commentaire de pastis51forever le 23/06/2006 11:53:41

Je vais me renseigner, ca fait un moment que je me dis qu'il faudrait que je me penche dessus... Surtout que là je m'amuse avec ajax, mais vu le nom de la methode, je pense que ca doit être encore plus efficace sur du xml...

Commentaire de FhX le 24/06/2006 12:33:20

"Ouvrir et fermer un fichier, PHP fait ça sans arrêt quand vous utilisez les sessions..."
Ne parlons pas des include() et autre require() :D

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Coment enregistrer une page web en texte [ par Ken2K ] C pour savoir kommen à partir d'une page on arrive a enregistrer cette page dans n'importe quel langage mails il faut que sa marche coute ke coute San Enregistrer un binaire dans une base de données [ par astien ] astienComment fais-ton en php pour inserer un resgistre avec un objet binaire ?Quelqu'un peut m'aider ? Interdire enregistrer sous [ par must ] Salut,y'a t-il un script qui puisse interdire à k'utilisateur de faire 3enregistrer sous",d'enregistrer la page en cours qu'il visualiseSi vous avez u Enregistrer une image depuis son URL [ par MagicFrog ] Bonjour,Je souhaiterais pouvoir automatiser l'enregistrement sur mon disque d'une image dont je connais l'url.J'ai essayé plein de choses sans succes concours [ par kaki33 ] bonjour je voudrais créer un script pour un petit concours.formulaire avec nom, prénom, adresse, mail..les reponses sont des cases a cocher ou un cham Uploader un fichier à l'aide d'un lien [ par phenixoiseau ] Bonjour,Je voudrais savoir comment uploader un fichier en cliquant sur un lien et obtenir la fenêtre "enregistrer ce fichier sur disque" et pouvoir ch Enregistrer un textarea dans un fichier !! [ par Cr0w ] Bonjour, j'ai un textarea à enregistrer dans un fichier...Malheureusement je ne vois po comment faire ...J'ai essayé la méthode suivante : function Re enregistrer une page [ par Daimadoshi ] slt je voudrai savoir comment je doit faire pour enreistrer la page courante ds un endroit precis et enregitrer ses modification : je m'explique cette simplifier une chaine [ par petitstagiaire ] bonjour,je suis en train de faire un moteur de recherche et j'aimerais qu'il ne fasse pas la diférence entre 'e' et 'é' ou 'ê' ou 'è' ...existe-t-il u Télécharger un CSV et en Extraire les Infos [ par jdaviaud ] Ben voila mon problème, je cherche à faire un script qui dialogue avec E-gold.com pour ceux qui connaissent.A un moment il me propose donc de téléchar


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,530 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales