Internetowe zastosowania Delphi cz. 4
brodny
Internetowe zastosowania Delphi cz. 4
Artykuł powstał na podstawie rozdziału 30. książki Delphi 4. Vademecum profesjonalisty (tom II). Zachowano także oryginalne fragmenty kodu źródłowego przykładowej aplikacji. W czwartej części artykułu skupimy się na wprowadzaniu danych za pomocą formularzy HTML.Wspomniane formularze są obecne w języku HTML dla wygody użytkowników Internetu/Intranetu. Umożliwiają one wprowadzanie informacji przeznaczonych dla aplikacji.
Zakładam, że tworzenie formularzy jest znane Czytelnikowi. Jeśli nie, odsyłam do kursów HTML.
Oto definicja przykładowego formularza:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
<html>
<head>
<title>Księga gości Delphi</title>
</head>
<body bgcolor="A4D5FF">
<form method="POST" action="http://localhost/isapi/guestbk.dll/form">
|
</td>
<font color="4682B4">
<font size="+4"><font color="Red">K</font></font>sięga <font size="+4"><font color="Red">G</font></font>ości <font size="+4"><font color="Red">D</font></font>elpi
</font></td>
</td>
</td>
</td>
</td>
</td>
<font color="Red">Dziękujemy za odwiedziny. Prosimy o wpis i ewentualne komentarze.</font>
</td>
</td>
</td>
Twoja pełna nazwa </td>
<input size="34" name="fullnameText" maxlength="4096" value=""></td>
Adres e-mail</td>
<input size="34" name="emailText" maxlength="4096" value=""></td>
Skąd jesteś?</td>
<input size="34" name="wherefromText" maxlength="4096" value=""></td>
<
<input type="CHECKBOX" name="firstVisitCheck">Czy odwiedzasz nas po raz pierwszy?</td>
Uwagi</td>
<textarea wrap="LOGICAL" name="commentsTextArea" rows="6" cols="60" value="This is a test" swansea.="Swansea." il="IL"></textarea></td>
</td>
</td>
</td>
</td>
</td>
</td>
<input type="SUBMIT" name="pushbutton" value="Wyślij"></th><
<input type="RESET" name="resetButton" value="Wyczyść"></th>
</td>
<
</td>
</table>
</form>
</body>
</html>
```
</td></tr></table>
Następująca deklaracja formularza HTML:
`<form method="POST" action="http://localhost/isapi/guestbk.dll/form">`</td></tr></table>
określa sposób przekazania wprowadzonych danych w nagłówku żadania HTML (POST) oraz odpowiednią akcję (http://localhost/isapi/guestbk.dll/form).
Dane przekazywane za pomocą metody POST dostępne są w procedurze zdarzeniowej OnAction pod właściwością
Request.ContentFields
w postaci listy łańcuchów tekstowych.
Oto przykładowy kod powodujący zapisanie informacji z przykładowego formularza do bazy danych (w module sieciowym umieszczono komponent klasy TTable nazwany GBTable):
```delphi
procedure TWebModule1.WebModule1Actions0Action(Sender: TObject;
Request: TWebRequest; Response: TWebResponse;
var Handled: Boolean);
var
MyPage: TStringList;
ParamsList: TParamsList;
begin
// pobranie zawartości formularza
ParamsList := TParamsList.Create;
try
try
ParamsList.AddParameters(Request.ContentFields);
GBTable.Open;
GBTable.Append;
GBTable.FieldByName('Name').Value := ParamsList['fullnameText'];
GBTable.FieldByName('EMail').Value := ParamsList['emailText'];
GBTable.FieldByName('WhereFrom').Value := ParamsList['wherefromText'];
GBTable.FieldByName('Comments').Value := ParamsList['commentsTextArea'];
GBTable.FieldByName('FirstTime').Value := (CompareStr(ParamsList['firstVisitCheck'], 'on') = 0);
GBTable.FieldByName('DateTime').Value := Now;
GBTable.Post;
except
Response.Content := 'Błąd podczas przetwarzania danych.';
Handled := True;
end;
finally
ParamsList.Free;
GBTable.Close
end;
// wyświetlenie potwierdzenia
MyPage := TStringList.Create;
try
ParamsList := TParamsList.Create;
try
with MyPage do
begin
Add('<HTML>');
Add('<HEAD><TITLE>Księga gości Delphi 4</TITLE></HEAD>');
Add('<BODY>');
Add('<H2>Zostań użytkownikiem Delphi 4</H2><HR>');
ParamsList.AddParameters(Request.ContentFields);
Add('<H3>Witaj <FONT COLOR="RED">' +
ParamsList['fullnameText'] + '</FONT> z' +
ParamsList['wherefromText'] + '!</H3><P>');
Add('Dziękujemy za odwiedziny i prosimy o wpis do księgi.<P>');
Add('Gdy będziemy chcieli wysłać do Ciebie pocztę, użyjemy ' +
'adresu -- <B>' + ParamsList['emailText'] + '</B>');
Add('<HR></BODY>');
Add('</HTML>');
end;
PageProducer1.HtmlDoc := MyPage;
finally
ParamsList.Free;
end;
finally
MyPage.Free;
end;
end;
</td></tr></table>
Nie wiem czy powyższy kod będzie działał w nowszych wersjach Delphi. U mnie (kiedyś) na Delphi 6 nie chciał się skompilować. Ale może w starszych chodzi. Jeśli ktoś ma jakąś nowszą wersję tego kodu, to serdecznie proszę o podesłanie. Zaktualizuję wtedy artykuł. Oczywiście sam w wolnym czasie też się za to wezmę :)