• «DELPHP»
J'ai baptisé ce projet DELPHP. Son principal avantage par rapport aux composants SGBD est qu'il n'est pas nécessaire de fournir le login d'accès de la base de données dans le programme Delphi. Il n'est pas nécessaire non plus d'installer de nouveau composant dans la palette de Delphi. Toutes les sources sont disponibles gratuitement. Le principe est le même qu'un navigateur web.
Pour exécuter les scripts PHP, j'utilise le composant THttpCli d'ICS. J'ai récupéré le code de ce composant (3 unités) afin de pouvoir l'utiliser dynamiquement dans mes projets. Ainsi, cela vous évitera l'installation de toute la palette d'ICS juste pour compiler les démos.
Pour simplifier son utilisation, j'ai réalisé une Class nommée THttpPost dans l'unité DelphpUnit.pas. Cette Class permet de communiquer avec les scripts PHP. Le code suivant vous montre comment je l'utilise pour simuler le Post d'un formulaire, plus précisément, poster 3 champs de saisie texte vers le script "connect.php" de mon serveur local :
Uses DelphpUnit...;
...
Var
Form1: TForm1;
HttpPost1: THttpPost;
{----------------------------------------------------------------} Procedure TForm1.FormCreate(Sender: TObject); Begin
{ Création dynamique du composant } HttpPost1 := THttpPost.Create(self);
HttpPost1.URL := 'http://127.0.0.1/connect.php';
HttpPost1.ProxyPort := '80';
HttpPost1.MaxTimeOut := 10000; End;
{----------------------------------------------------------------} Procedure TForm1.Button1Click(Sender: TObject); Begin
{ Préparation de la requête http } HttpPost1.ResetPost;
HttpPost1.AddPost('pseudo', 'sub0');
HttpPost1.AddPost('email', '');
HttpPost1.AddPost('mdp', 'test');
{ Post de la requête http } HttpPost1.StartPost;
{ Boucle d'attente de fin de réception } Repeat Application.ProcessMessages;
Sleep(50); Until (HttpPost1.IsCompleted);
{ Affichage du résultat (message d'erreur) }
If (HttpPost1.StringError <> '') Then ShowMessage(HttpPost1.StringError)
Else
{ Affichage du résultat du formulaire }
If (HttpPost1.StringResult <> '') Then ShowMessage(HttpPost1.StringResult); End;
• Post du formulaire avec DELPHI :
La méthode ResetPost sert à effacer la liste des champs de saisie.
La méthode AddPost, à ajouter chaque champs de saisie.
Note : Vraisemblablement, la taille d'une requête Http est limitée à 8Mo maximum.
• Réception du formulaire avec PHP :
La réception des champs de saisie postés avec Delphi se fait de façon tout à fait normale avec le tableau $_POST. Sur le serveur, le script connect.php réceptionne les données comme ceci :
<?php
$pseudo=''; If(isset($_POST['pseudo'])) $pseudo=$_POST['pseudo']; $email=''; If(isset($_POST['email'])) $email=$_POST['email']; $mdp=''; If(isset($_POST['mdp'])) $mdp=$_POST['mdp'];
if(empty($pseudo))
die('Pseudo manquant!'); else
die(chr(149).chr(32).'Bonjour '.$pseudo.'!');
?>
Il est tout de même conseillé de vérifier la syntaxe des données avant de les utiliser pour contrer un éventuel piratage par injections SQL. Pour cela, vous pouvez utiliser la fonction Verifie_Syntax contenue dans le script func.php. Par exemple, le code suivant vérifie que le pseudo ne contient que des chiffres ou des lettres en minuscule :
$res=Verifie_Syntax($pseudo, $cst['nbr'].$cst['min']); if(!empty($res))
die('Votre pseudo contient un caractère interdit ('.$res.').');
• Réception des messages PHP avec DELPHI:
Pour différencier les messages d'erreurs et les messages de données, un caractère spécial (149) suivi d'un espace (32) est placé au début des données. Ainsi, lorsque le programme Delphi réceptionne le résultat du script PHP, il teste les 2 premiers caractères pour déterminer si il s'agit d'un message d'erreur ou non :
- Les messages d'erreur seront placés dans la chaîne StringError.
- Les messages de données, dans la chaîne StringResult.
|