Go Premium for a chance to win a PS4. Enter to Win

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 197
  • Last Modified:

ISAPI (button on HTML Page)

I'm creating an ISAPI application

how can I receive the fact that a user has clicked(submit) on a butoon in a HTML PAGE ?

I've to use the TWebActionItem ?

Where I've to put my code to execute the function related to this button ?

Thanks a lot

Olivier
0
olisaac
Asked:
olisaac
  • 4
  • 3
  • 2
  • +2
1 Solution
 
EpsylonCommented:
The following html-code could be a part on a page:

<FORM method=post action="cgi-bin/button.dll/click">
<input type=submit value=Search>
......


When the button is pressed, the ISAPI gets an action '/click'

In you ISAPI app double-click on the WebModule window. In the appearing window add a new actionitem. Set its PathInfo property to '/click'. Now write the OnAction event.

Eps.
0
 
DantryCommented:
Listening...
0
 
geobulCommented:
Hi Olivier,

1. Receiving the fact of button click:
I've always named my buttons in HTML code like:
<INPUT TYPE=submit NAME="LoginBtn" VALUE="Login">

The Delphi code is:
....
if (Request.ContentFields.Values['LoginBtn'] <> '') then begin
  .....
end;
....
which means that exactly login button has been clicked. (if I have more btns on the page)

2. Using WebActionItems:
  It's recommended to have at least one Action Item with no PathInfo property (empty) and Default = True. That way all requests will be handled here.
  You can use BeforeDispatch event of the WebDispatcher also.
  For more complicated jobs you can use PathInfo after the name of your dll in different html pages to react with different Action Items depending on the PathInfo of the request. {see Epsylon's comment}

3. Where to put code:
  It depends on the answer of the question 2. If you are using different Action Items the code can be in the code of the proper item, in the default item, ih the before or after dispatch events.

Regards, Geo
0
Concerto's Cloud Advisory Services

Want to avoid the missteps to gaining all the benefits of the cloud? Learn more about the different assessment options from our Cloud Advisory team.

 
olisaacAuthor Commented:
Adjusted points from 50 to 75
0
 
olisaacAuthor Commented:
Hi,

Thanks, it works.

But I have another question (reason for the increase of the points).

When I push the button, in my Delphi code I want to make integrity tests on text box (in the html page too (TITRE In my sample code)).
If the data is not good in this text box. I would that the page HTML don't change to permit to the user to correct his mistake

I've to change the value of the handle in the beforedispatch or afterdispatch function

I don't know if my question is so clear...

Olivier

Sample of my code :

procedure TWebModule1.WebModuleBeforeDispatch(Sender: TObject;
Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
begin
  if (Request.ContentFields.Values['ADD'] <> '') then
    begin

    if length(Titre1) > 50 then
      begin
        MessageDlg('TITRE NOT CORRECT', mtInformation, [mbOk], 0);
        exit;
      end;
end;
0
 
olisaacAuthor Commented:
Hi geobul, if you answer my second question, the points are for you...
0
 
geobulCommented:
Hi,

I'm sorry for the late reply. I was on a trip for a few days.

You can NOT use any visual component in the CGI program (MessageDlg in your code).
 
In this case I send an 'error' page (plain text, no links or buttons), where I describe what kind of error it is and ask the user to press BACK button himself.

-----------
<HTML>
<HEAD><TITLE>ERROR</TITLE></HEAD>
<BODY>
<B>Error !</B> Description follows:<HR>
Bla bla<HR>
Press <STRONG>BACK</STRONG> to continue !
</BODY>
</HTML>
---------------
or you can use a button on the page above this way:
<INPUT TYPE=submit NAME="OKBtn" VALUE="OK" OnClick="history.go(-1);return true;">

Pressing the button will go back.

Delphi code can be:

procedure TWebModule1.WebModuleBeforeDispatch(Sender: TObject;
Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
var
  sError : String;
begin
  sError := ''; { Empty string }
  if (Request.ContentFields.Values['ADD'] <> '') then  begin
    if length(Titre1) > 50 then begin
        sError := 'TITRE NOT CORRECT';
    end else begin
      if .... then begin { Another check }
         sError := 'Error description';
      end;
    end;
  end;
  if sError <> '' then begin
    Response.Content := '<HTML><HEAD><TITLE>ERROR</TITLE></HEAD><BODY> <B>Error !</B> Description follows:<HR>' + sError + '<HR> Press <STRONG>BACK</STRONG> to continue ! </BODY> </HTML>';
    Handled := True;
    Response.SendResponse;
  end;
end;

Regards, Geo
0
 
olisaacAuthor Commented:
I will have some other questions for you in a few days...
0
 
geobulCommented:
I will be happy to help !
0

Featured Post

Concerto Cloud for Software Providers & ISVs

Can Concerto Cloud Services help you focus on evolving your application offerings, while delivering the best cloud experience to your customers? From DevOps to revenue models and customer support, the answer is yes!

Learn how Concerto can help you.

  • 4
  • 3
  • 2
  • +2
Tackle projects and never again get stuck behind a technical roadblock.
Join Now