Pourquoi faire appel à une base de données pour extraire systématiquement des paramètres qui changent peu ou pas ? En dehors d'une gestion de cache, il est très simple de concevoir une interface gérant un fichier inc.config.php, inclu en toutes pages.
Considérant que l'adresse email est nécessaire au formulaire d'un site, ou encore les paramètres d'une base de données, voici le fichier qui sera inclu dans toutes les pages (où il est nécessaire) automatiquement généré :
<? // Paramètres générés par /config-modif.php // Source Pierre Pesty http://dev.ppan.net $ladate = time(); $lapage = basename($_SERVER['PHP_SELF']); $adminpwd = "piRBQ5eEvddRQ"; $username = "pierre"; $usermail = "abuse@wanadoo.fr"; define("DBHOST", "localhost"); define("DBNAME", "pierre"); define("DBUSER", "root"); define("DBPASSWD", ""); ?>
Voici maintenant le fichier config.php qui permet d'éditer ses variables (avec sa feuille de styles) :
<? // récupération des variables include('inc.config.php'); // traitement d'une erreur éventuelle (via config-modif.php) // ajouter autant de traitements que de variables requises switch($_GET['msg']) { case 1: $errmsg = "Mots de passe admin différents"; break; case 3: $errmsg = "Aucun nom d'utilisateur"; break; case 4: $errmsg = "Email invalide ou vide"; break; case 7: $errmsg = "Problème d'écriture du fichier inc.config.php"; break; case 8: $errmsg = "Fichier inc.config.php modifié !"; break; } ?> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>Gestion config</title> <meta name="author" content="Pierre Pesty"> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> <link href="webdev_form.css" type="text/css" rel="stylesheet"> </head> <body> <form method="post" action="config-modif.php"> <!-- ancien mot de passe (crypté) par défaut --> <input type="hidden" name="f_oldpwd" value="<?= $adminpwd?>"> <? // si erreur if(isset($errmsg)) echo "<p><label> </label>$errmsg</p>\n"; ?> <p> <label for="username">Nom</label> <input id="username" name="username" value="<?= $username?>"></p> <p> <label for="pass1">Mot de passe (si modifié)</label> <input type="password" id="pass1" name="f_pass1"></p> <p> <label for="pass2">Répéter</label> <input type="password" id="pass2" name="f_pass2"></p> <p> <label for="email">Email</label> <input id="email" name="email" value="<?= $email?>"></p> <p> <label for="host">Hôte MySQL</label> <input id="host" name="DBHOST" value="<?= DBHOST?>"></p> <p> <label for="dbname">Nom de la base</label> <input id="dbname" name="DBNAME" value="<?= DBNAME?>"></p> <p> <label for="dbuser">Nom utilisateur base</label> <input id="dbuser" name="DBUSER" value="<?= DBUSER?>"></p> <p> <label for="dbpass">Mot de passe base</label> <input type="password" id="dbpass" name="DBPASSWD" value="<?= DBPASSWD?>"></p> <p> <label> </label> <input id="submit" type="submit" value="Submit"></p> </form> </body> </html>
Reste à modifier le fichier inc.config.php avec les instructions qui vont bien :
<? // fonction de vérification d'email function checkmail($email) { if(!preg_match('`^[[:alnum:]]([-_.]?[[:alnum:]])*@[[:alnum:]]([-_.]?[[:alnum:]])*\.([a-z]{2,4})$`',$email)) Return false; Return true; } $msg = 0; // mots de passe admin différents if($_POST['f_pass1'] != $_POST['f_pass2']) $msg = 1; // nom admin vide if(empty($_POST['username'])) $msg = 3; // email invalide if(empty($_POST['email']) || !checkmail($_POST['email'])) $msg = 4; if($msg) { // $msg > 0 donc on revient à l'édition header("Location: config.php?msg=$msg"); exit; } if(empty($_POST['f_pass1'])) // mot de passe non modifié en l'état $new_pwd = $_POST['f_oldpwd']; else // ou nouveau mot de passe crypté $new_pwd = crypt($_POST['f_pass1'],$_POST['username']); // ouverture en écriture du fichier inc.config.php if(!$fichier = @fopen('inc.config.php', 'w')) { // si erreur on revient vers l'édition header("Location: config.php?msg=7"); exit; } // en-tête du fichier fwrite($fichier, "<?\n// Paramètres générés par ".$_SERVER['PHP_SELF']."\n"); fwrite($fichier, "// Source Pierre Pesty http://dev.ppan.net\n"); // écriture de variables fixes fwrite($fichier, "\$ladate = time();\n"); fwrite($fichier, "\$lapage = basename(\$_SERVER['PHP_SELF']);\n"); fwrite($fichier, "\$adminpwd = \"$new_pwd\";\n"); // écriture des variables du formulaire foreach($_POST as $key=>$val) { // passer certaines entrées de formulaire (préfixées par 'f_') if(strstr($key,"f_")) continue; // traitement des constantes (en majuscule) elseif(strstr($key,"DB")) fwrite($fichier, "define(\"$key\", \"$val\");\n"); // traitement des variables numériques ou booléennes en valeur elseif(is_numeric($val) || preg_match("/true|false/",$val)) fwrite($fichier, "\$$key = $val;\n"); // sinon entre guillemets elseif(!empty($val)) fwrite($fichier, "\$$key = \"".preg_replace("/[\n|\r|\r\n]+/", " ", trim($val))."\";\n"); } // tag PHP fwrite($fichier, "?>\n"); // fermeture du fichier fclose($fichier); // retour à l'édition header("Location: config.php?msg=8"); ?>
http://dev.ppan.net