Programowanie w języku Delphi » Artykuły

Internetowe zastosowania Delphi cz. 4

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">
<!-- Table objects --> <FORM METHOD="POST" ACTION="http://localhost/isapi/guestbk.dll/form"> <TABLE CELLSPACING=1 CELLPADDING=0 BORDER=0> <TR> <TD ROWSPAN=4><IMG SRC="gestbk31.gif"></TD> <TD ALIGN=LEFT VALIGN=TOP COLSPAN=2> <B><FONT COLOR=4682B4><H1><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</H1></FONT></B></TD> <TR><TD></TD> <TR><TD></TD> <TR><TD></TD> <TR><TD></TD> <TR> <TD COLSPAN=3><HR SIZE=2></TD> <TR> <TD ALIGN=LEFT VALIGN=TOP COLSPAN=3><B><FONT COLOR="Red">Dziękujemy za odwiedziny. Prosimy o wpis i ewentualne komentarze.</FONT></B><P></TD> <TR><TD></TD> <TR><TD></TD> <TR> <TD ALIGN="RIGHT" VALIGN=TOP COLSPAN=2><B>Twoja pełna nazwa </B></TD> <TD><INPUT SIZE=34 NAME="fullnameText" maxLength=4096 VALUE =""></TD> <TR> <TD ALIGN="RIGHT" VALIGN=TOP COLSPAN=2><B>Adres e-mail</B></TD> <TD><INPUT SIZE=34 NAME="emailText" maxLength=4096 VALUE=""></TD> <TR> <TD ALIGN="RIGHT" VALIGN=TOP COLSPAN=2><B>Skąd jesteś?</B></TD> <TD><INPUT SIZE=34 NAME="wherefromText" maxLength=4096 VALUE=""></TD> <TR>< <TD COLSPAN=2><INPUT TYPE="CHECKBOX" NAME="firstVisitCheck"><B>Czy odwiedzasz nas po raz pierwszy?</B></TD> <TR> <TD ALIGN=LEFT VALIGN=TOP><B>Uwagi</B></TD> <TR> <TD ROWSPAN=6 COLSPAN=3><TEXTAREA WRAP=LOGICAL NAME="commentsTextArea" ROWS=6 COLS=60 VALUE="This is a test"Swansea. IL></TEXTAREA></TD> <TR><TD></TD> <TR><TD></TD> <TR><TD></TD> <TR><TD></TD> <TR><TD></TD> <TR><TD></TD> <TR> <TH><INPUT TYPE="SUBMIT" NAME="pushbutton" VALUE="Wyślij"></TH>< <TH><INPUT TYPE="RESET" NAME="resetButton" VALUE="Wyczyść"></TH> <TR><TD></TD> <TR>< <TD COLSPAN=3><HR SIZE=2></TD> </TABLE> </FORM> </BODY> </HTML>


Następująca deklaracja formularza HTML:

<FORM METHOD="POST" ACTION="http://localhost/isapi/guestbk.dll/form">


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):

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;


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ę :)