Interface de commandes SQL

Pour passer des commandes SQL à une base de données, il nous faut une interface, ce qu'on réalise simplement avec une page HTML contenant un formulaire.

Une solution plus directe serait d'utiliser PHPMyAdmin qui permet également de passer des requêtes, s'il est installé. Mais cela ne nous apprend rien sur l'emploi de SQL. Car en effet ce modèle d'interface de base pourra être développé progressivement par la suite pour créer une interface d'administration de base de donnée complète.

Formulaire d'interface

Un champ de texte et un bouton d'envoi à un script PHP forment l'essentiel de l'interface:

<form id="sql" name="sql" method="post" action="sql.php">
<textarea name="query" cols="80" rows="4"></textarea>
<input type="submit" name="Submit" value="Envoyer" />
</form>

Le script PHP récupère le contenu de la variable query:

if(!isset($_POST)) die("Acces direct interdit");

include("config.php");

$requete = $_POST['commande']; 

$results = mysqli_query($DB_ID, $requete)
or die("$commande<br>".mysql_error());

En cinq lignes le script...

  1. Interdit l'accès direct.
  2. Charge le fichier de configuration contenant les noms et mots de passe (on le verra en détail plus loin).
  3. Récupère la commande envoyée par le formulaire.
  4. Effectue la requête.
  5. En cas d'échec, affiche l'erreur.

Code secret

Pour interdire l'accès à notre base de données aux visiteurs indélicats, il sera protégé par un code secret. On peut utiliser le mot de passe de la base de donnée ou créer un code spécial.
Cette seconde option nous permet de le coder par MD5, le meilleur choix.

Créer le code

La fonction md5 de PHP génère un code crypté à partir d'un mot de passe ou d'une phrase de longueur quelconque.

$md5code = "code";
echo md5($x);

Le code entré avec le formulaire sera ensuite testé de la même façon:

$code = $_POST['code']; 
if(md5($code) != $md5code)
      die("Code incorrect");

Un script PHP, buildmd5.php, est inclut dans l'archive pour créer le code crypté et éviter de le recopier. Modifier ce script pour assigner votre code secret à la variable code.
Lancer le script, il génère un fichier, code.php, contenant la variable $md5code assignée avec le code crypté.
Inclure cette ligne dans le script command.php qui traite la requête SQL.

Le script buildmd5.php s'utilise évidemment localement et ne doit pas être mis en ligne avec le formulaire.

Afficher le résultat

Le type de résultat dépend de la commande.

Si la requête interroge la base de données, la fonction mysql_fetch_array retourne les colonnes et les valeurs d'une table. Et on la met dans une boucle pour afficher chaque ligne de la table:

while($arr = mysqli_fetch_array($results))   // chaque tableau correspond à une ligne de la table
{
foreach($arr as $k => $v)
{
if(intval($k) != 0 || $k == '0') continue;
echo "$k : $v <br>\n";
}
echo "<br>";
}

Le fichier de configuration

En prenant pour exemple la base de donnée de Wordpress, le fichier de configuration aura les lignes suivantes avec des valeurs propres à chaque installation:

define('DB_NAME', 'mabase');
define('DB_USER', 'utilisateur');
define('DB_PASSWORD', '12345');
define('DB_HOST', 'localhost');
define('DB_CHARSET', 'utf8');

A partir de cette configuration on peut ouvrir un accès à un hôte et sélectionner une base de donnée, ce qui est requis avant toute requête:

include("wp-config.php");

$DB_ID = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME)
or die("MySQL database '".DB_NAME."' not accessible.<br>\n"); mysqli_select_db($DB_ID, DB_NAME)
or die("Enable to select '".DB_NAME."' database<br>\n");

Ce code est placé dans le script command.php.

A partir de là on dispose d'une interface simple et directe à la base de données de son site ou son blog, une fois mise en ligne la page interface.php et le script command.php extraits de l'archive.

Exemple de requête

Afficher les 5 derniers billets ajoutés dans Worpdress:

SELECT * FROM wp_posts WHERE (post_type = 'post') ORDER BY post_date DESC LIMIT 5

La table posts est propre à Wordpress. Le préfixe wp_ peut être éventuellement remplace par la valeur assignée à la variable $table_prefix dans wp-config.php.

Cette requête affiche le contenu des derniers billets avec images et vidéos éventuellement.

Télécharger l'archive