Link to home
Start Free TrialLog in
Avatar of cide
cide

asked on

Passing an argument through a A HREF tag.

Greetings,
      I want to run a Perl script using an A HREF tag, and be able to pass a variable along with it as well.
example:
<A href = "Smessage.pl Username" target ="Frame5">Send</a>
The script would recieve "Username" as an argument (I'm using perl and would like to use $ARGV).  If it's not possible to do this with an argument how would I do this as a get/post action?  I've seen it done on the web before.  Much like a banner advertisement sending the page owners name to the cgi script.
Thanks in Advance.
Avatar of ozo
ozo
Flag of United States of America image

<A href = "Smessage.pl?Username">
Would pass Username in $ENV{QUERY_STRING}
Avatar of cide
cide

ASKER

Yeah, I know how to do that.  I was wondering if it was possible through the $ARGV.  I don't really want to use the QUERY_STRING but maybe I'll have to.
You only have two options. The method that ozo gave uses the GET method which puts the data in the QUERY_STRING. With a form (but not with a HREF) you can use the POST method which puts the data in stdin. There is no other way.

Avatar of cide

ASKER

Ok, thanks anyways.
Try this:

<FORM NAME="msgform" ACTION="Smessage.pl" METHOD="POST" TARGET="Frame5">
<INPUT NAME="USERNAME" TYPE="HIDDEN" VALUE="">
</FORM>
<A HREF="javascript:document.msgform.USERNAME.value='username1';document.msgform.submit();">User name 1</A>

Michel
Avatar of cide

ASKER

That's not an argument.  It's still form data.
But it is not via QUERY_STRING

Last attempts:
Use a stub and call your program that needs the argv as a subroutine
ASKER CERTIFIED SOLUTION
Avatar of jaked
jaked

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
Actually, in Perl that would be $ARGV[0]
You are right sir.
Even so, I'd hesitate to recommend using $ARGV[0] rather than $ENV{QUERY_STRING}
If you ever did get an = there, you could lose the @ARGV parameters
(You'd have to use something like ?foo%3dbar&baz%3dquux in that case)
When I needed to have a program running as a cgi AND standalone, I would test the arguments passed and if empty I would look at the environment variables.

Michel
But as jaked points out, you can't rely on @ARGV being empty when running as a CGI.
Also, you omit the case of parameters being passed in STDIN.
BTW, with
 use CGI.pm;
all the arg parsing is done for you as a CGI, and you can also
pass arguments on the command line or in STDIN for stand alone testin.