IV. Gestion dynamique des données : répondre à une entrée de l'utilisateur▲
Les entrées d'un utilisateur se font par des formulaires <form>. Il existe deux méthodes pour passer des paramètres par un formulaire : GET ou POST.
- La principale différence réside dans le fait qu'avec la méthode GET, tous les paramètres seront affichés dans l'adresse HTTP envoyée au serveur : « http://mydomain/MyIsapi.dll/ShowName?firstname=Ornella&Lastname=Muti ». Ceci est un exemple, (Ornella Muti donc ;-) que nous allons utiliser, par le plus grand des hasards, par la suite.
D'autre part, la taille de la ligne des paramètres sera limitée à 255 caractères.
Le paramètre renvoyé à la DLL par le serveur HTTP sera du type QueryFields. - La méthode POST entraînera une adresse HTTP sans paramètre affiché : http://mydomain/MyIsapi.dll/ShowName. Le paramètre sera lui du type ContentFields. Le serveur Web ne renvoie tout d'abord que 48 K. Si vous avez un Contenfield plus long,regardez ici.
Le formulaire comporte deux paramètres principaux : une méthode et une action. La méthode est soit POST soit GET. L'action est l'appel à la procédure qui sera traitée par notre ISAPI. La formulation HTML est la suivante :
<FORM
method
=
"GET"
action
=
"/scripts/myisapi.dll/searchname"
>
Notre formulaire contiendra des champs. Ce sont les valeurs de ces champs, entrées par l'utilisateur, qui seront récupérées et traitées par notre DLL. La formulation HTML :
<INPUT
type
=
"text"
name
=
"NOM"
value
=
""
>
Ici p.ex., c'est le paramètre name qui sera transmis à la DLL. Nous allons donc essayer de passer ce formulaire à une nouvelle action de notre DLL que l'on nommera searchname avec la méthode POST. Le code de notre nouvelle page HTML :
<html>
<body>
<form
method
=
"POST"
action
=
"/scripts/myisapi.dll/searchname"
>
<p>
Prénom: <input
type
=
"text"
name
=
"FIRSTNAME"
value
=
""
><br>
Nom : <input
type
=
"text"
name
=
"LASTNAME"
value
=
""
>
<input
type
=
"submit"
value
=
"Envoyer"
>
</p>
</form>
</body>
</html>
Notre DLL devra maintenant traiter cette requête Web. Les paramètres passés par la requête seront récupérés par Request.ContentFields.Values['FIRSTNAME'] (Ornella) et Request.ContentFields.Values['LASTNAME'] (Muti).
Avec la méthode GET, comme vu plus haut, nous aurions récupéré ces paramètres par Request.QueryFields.Values['FIRSTNAME']…
Nous allons donc créer cette nouvelle action SearchName :
Vous remarquerez que cette nouvelle action ne possède pas de « Producer », car nous allons créer notre page HTML dynamiquement. Voici le code de cette nouvelle action
procedure
TWebM.WebMSearchNameAction(Sender: TObject; Request: TWebRequest; Response: TWebResponse; var
Handled: Boolean
);
Var
S:TStringList;
begin
S:=TStringList.Create;
Try
S.Add('<HTML><BODY>'
);
Adresses.connected:=True
;
Query1.SQL.Clear;
Query1.SQL.Add('Select Nom, Prenom, Lieu from NOM where prenom='
);
Query1.SQL.Add(QuotedStr(Request.Contentfields.Values['FIRSTNAME'
]));
Query1.SQL.Add(' and nom='
);
Query.SQL.Add(QuotedStr(Request.ContentFields.Values['LASTNAME'
]));
Query1.SQL.Add(' order by Nom, Prenom);
Query1.Open;
If
Query1.RecordCount=0
then
S.Add('Enregistrement introuvable...'
)
Else
Begin
While
not
Query1.Eof do
Begin
S.Add(Query1.FieldByName('Nom'
).AsString+' '
);
S.Add(Query1.FieldByName('Prenom'
).AsString+' '
);
S.Add(Query1.FieldByName('Lieu'
).AsString);
//Retour à la ligne
S.Add('<BR>'
);
Query1.Next;
end
;
end
;
Query1.Close;
S.Add('</HTML></BODY>'
);
Adresses.Connected:=False
;
Handled:=True
;
Finally
//On renvoie la page HTML construite (S)
Response.Content:=S.Text;
S.Free;
end
;
end
;