#########  Sub0 - Developpez.com - 23/09/06

ADMINISTRATION AVEC DELPHP

Cette dernière partie de l'article montrera comment j'utilise la connection aux scripts PHP pour effectuer des requêtes SQL précises et récupérer le résultat avec Delphi. En particulier, lister les tables de la base de données, afficher la structure et les données d'une table et supprimer un ou plusieurs enregistrements dans une table. Ces commandes sont contenues dans le script admin.php et protégées par l'espace membre Delphp. Vous devez donc d'abord vous identifier avant de pouvoir les utiliser.

Il serait tout à fait possible de poster la requête SQL complète pour permettre au programme Delphi de pouvoir effectuer n'importe quelle requête, mais je préfère définir les requêtes avec PHP, le programme Delphi fournissant juste les paramètres de ces requêtes. Je trouve cette méthode plus sécurisante.

Il serait également possible d'utiliser le format XML ou CSV ou un autre format perso pour récupérer et afficher les données des tables... Bref, il appartient au développeur de choisir la manière dont il communiquera avec la base de données. Pour ma part, côté PHP, je sérialise les données séparées par le caractère nul #0, puis côté Delphi, j'utilise la fonction StrExplode pour obtenir le tableau de données (TStrings).

#########
 

LISTER LA BASE

Le programme Delphi poste la commande "
act=getbase" avec la méthode StartPost. Le résultat de cette requête est la liste des tables de la base sérialisée dans la variable HttpPost1.StringResult. La fonction StrExplode scinde cette chaîne pour obtenir la liste déroulante finale des tables :

HttpPost1.ResetPost;
HttpPost1.AddPost(
'act', 'getbase');
If (LogForm.MyHttpPost(True, True) = False) Then Exit;
StrExplode(HttpPost1.StringResult,
#0, ComboBox1.Items);
ComboBox1.ItemIndex := 0;
 

STRUCTURE DE LA TABLE

Avec la commande "
act=gettable" et le nom de la table en paramètre, le script PHP retourne la structure de la table (le nom et le type de chaque colonne). Comme pour obtenir la liste des tables, StrExplode scinde le résultat dans une variable de type TStrings nommée "structure" :

Var Structure: TStrings;
 

DONNEES DE LA TABLE

De la même manière, avec la commande "
act=getdata", le programme récupère les données et les stocke dans la variable de type TStrings nommée "Donnees". La structure de la table récupérée auparavant permettra de démultiplexer ces données. Dans cette commande sont prévus en tout 5 paramètres pour définir la requête SELECT. Les paramètres porder et pdesc permettront d'effectuer le tri des données par colonne.

Var
  ptable,                       
{ Nom de la table pour la requête SQL }
  pbegin, pcount,               
{ Paramètres LIMIT pour la requête SQL }
  porder, pdesc: ShortString;   
{ Paramètres ORDER BY pour la requête SQL }

...

HttpPost1.AddPost(
'act', 'getdata');
HttpPost1.AddPost(
'table', ptable);
HttpPost1.AddPost(
'begin', pbegin);
HttpPost1.AddPost(
'count', pcount);
HttpPost1.AddPost(
'order', porder);
HttpPost1.AddPost(
'desc', pdesc);
 

ACCEDER A UN ENREGISTREMENT

Ce code est destiné à vous montrer comment j'utilise les données téléchargées pour reconstituer le paramètre
WHERE d'un enregistrement pour y accéder avec une requête SELECT, DELETE ou UPDATE... Vous remarquerez l'utilisation de la fonction AddSlashes pour échapper les caractères spéciaux qui pourraient se trouver dans les données. Dans le code suivant, Y représente le numéro de la ligne de la grille où se trouve l'enregistrement :

Var pwhere: String;
    x, index: Integer;
...

  pwhere :=
'';
  
For x := 1 To (Structure.Count Div 2) Do Begin
    If (pwhere <> '') Then pwhere := pwhere + ' AND ';
    pwhere := pwhere + Structure[(x - 1) * 2];
    index := ((Y - 1) * (Structure.Count Div 2)) + (x - 1);
    pwhere := pwhere +
'=''' + AddSlashes(Donnees[index]) + '''';
  
End;
  pwhere :=
'WHERE (' + pwhere + ')';
 

SOURCES

Télécharger le code du programme d'administration :
admindemo.zip  
• Installer les scripts php sur votre serveur
• Définir l'url du script "admin.php" dans la propriété URL de l'objet HttpPost1
 

REMERCIEMENTS

Si vous avez des remarques et suggestions intéressantes pour améliorer le code ou des questions concernant cet article, je suis à votre disposition sur le forum. N'oubliez pas que vous disposez de la FAQ et du forum PHP de Developpez.com pour toutes questions concernant la programmation dans ce language.

Merci à François Piette et les membres du forum web et Delphi de Developpez.com pour leur participation (pardon si j'en oublie) : Archibal29, chaours, ero-sennin, giloutho, Giovanny Temgoua, Laurent Dardenne, mussara, pedro, rezuss, [Silk], sjrd, Yogui et wilco.

à+ #########