Want to win a PS4? Go Premium and enter to win our High-Tech Treats giveaway. Enter to Win

x
?
Solved

Require fields over several cgi scripts

Posted on 2004-04-02
17
Medium Priority
?
231 Views
Last Modified: 2013-12-25
I have several web form scripts, each one calling the next one in sequence. I need to make some variables into required fields such as:

print_error("You must enter your email address") unless $email;

For example, I would need to make "Email" a required field in the first form.

I am using hidden fields in the "here-doc" code to carry the values over to subsequent forms but this code doesn't work here.  What can I do? Your help would be greatly appreciated.

I am a novice so a easy-to-understand answer is necessary :-)

######################### FIRST SCRIPT #######################

#!/usr/bin/perl
use strict;
use CGI;
use CGI::Carp qw(fatalsToBrowser);

my $q = new CGI;


print $q->header;
print <<HTMLCODE;
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Test</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<body bgcolor="#FFFFFF" background="" text="#000000" link="#000000" vlink="#000000" alink="#000000">
<FORM ACTION="http://demo.com/cgi-bin/test/form2.cgi" METHOD="POST">


<TABLE>
 
  <TR>
    <TD>Name: <INPUT name=name></TD></TR>
  <TR>
    <TD>Email: <INPUT name=email></TD></TR>
  <TR>
    <TD><INPUT type=submit value=Submit>
  <INPUT type=reset value=Reset></TD></TR></TABLE></P>
</BODY>
</HTML>


HTMLCODE

sub print_error {
        my $message = shift;

        print $q->header;

        print <<ERRORCODE;

<html>
<head><title>$message</title></head>
<body>

<p align="center"><font color="#000000" face="Arial"><big><strong>Processing Error</strong></big></font></p>

<p align="left"><font face="Arial" color="#000080"><strong>$message</strong></font></p>

<p align="left"><font face="Arial" color="#000080"><strong>Please click your browser's Back button and try again.</strong></font></p>


</body>
</html>

ERRORCODE

        exit;
}

############################## SECOND SCRIPT #####################

#!/usr/bin/perl
use strict;
use CGI;
use CGI::Carp qw(fatalsToBrowser);

my $q = new CGI;
my $name = $q->escapeHTML($q->param('name'));
my $email = $q->escapeHTML($q->param('email'));


print $q->header;
print <<HTMLCODE;
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Test</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<body bgcolor="#FFFFFF" background="" text="#000000" link="#000000" vlink="#000000" alink="#000000">
<FORM ACTION="http://demo.com/cgi-bin/test/form3.cgi" METHOD="POST">
<input type="hidden" name="name" value="$name" />
<input type="hidden" name="email" value="$email" />


<TABLE>
 
  <TR>
    <TD>Age: <INPUT name=age></TD></TR>
  <TR>
    <TD>Country: <INPUT name=country></TD></TR>
  <TR>
    <TD><INPUT type=submit value=Submit>
  <INPUT type=reset value=Reset></TD></TR></TABLE></P>
</BODY>
</HTML>


HTMLCODE

sub print_error {
        my $message = shift;

        print $q->header;

        print <<ERRORCODE;

<html>
<head><title>$message</title></head>
<body>

<p align="center"><font color="#000000" face="Arial"><big><strong>Processing Error</strong></big></font></p>

<p align="left"><font face="Arial" color="#000080"><strong>$message</strong></font></p>

<p align="left"><font face="Arial" color="#000080"><strong>Please click your browser's Back button and try again.</strong></font></p>


</body>
</html>

ERRORCODE

        exit;
}

0
Comment
Question by:rincewind666
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 8
  • 5
  • 3
  • +1
17 Comments
 
LVL 51

Accepted Solution

by:
ahoffmann earned 2000 total points
ID: 10748791
in your 2'nd script add something like (after getting $email):

if ("$emal" ~= /^\s*$/) {
  print $q->header;
  print $q->redirect('http://demo.com/form1-page.html');
  exit(0);
}
0
 

Author Comment

by:rincewind666
ID: 10749535
I am getting the following error:

Software error:
syntax error at form2.cgi line 39, near ""$email" ~"
syntax error at form2.cgi line 43, near "}"
Execution of form2.cgi aborted due to compilation errors.

This is the amended script:

#!/usr/bin/perl
use strict;
use CGI;
use CGI::Carp qw(fatalsToBrowser);

my $q = new CGI;
my $name = $q->escapeHTML($q->param('name'));
my $email = $q->escapeHTML($q->param('email'));


print $q->header;
print <<HTMLCODE;
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Test</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<body bgcolor="#FFFFFF" background="" text="#000000" link="#000000" vlink="#000000" alink="#000000">
<FORM ACTION="http://demo.com/cgi-bin/test/form3.cgi" METHOD="POST">
<input type="hidden" name="name" value="$name" />
<input type="hidden" name="email" value="$email" />


<TABLE>
 
  <TR>
    <TD>Age: <INPUT name=age></TD></TR>
  <TR>
    <TD>Country: <INPUT name=country></TD></TR>
  <TR>
    <TD><INPUT type=submit value=Submit>
  <INPUT type=reset value=Reset></TD></TR></TABLE></P>
</BODY>
</HTML>


HTMLCODE

################ AMENDED HERE

if ("$email" ~= /^\s*$/) {
  print $q->header;
  print $q->redirect('http://demo.com/form1-page.html');
  exit(0);
}

###############

sub print_error {
        my $message = shift;

        print $q->header;

        print <<ERRORCODE;

<html>
<head><title>$message</title></head>
<body>

<p align="center"><font color="#000000" face="Arial"><big><strong>Processing Error</strong></big></font></p>

<p align="left"><font face="Arial" color="#000080"><strong>$message</strong></font></p>

<p align="left"><font face="Arial" color="#000080"><strong>Please click your browser's Back button and try again.</strong></font></p>


</body>
</html>

ERRORCODE

        exit;
}

0
 
LVL 84

Expert Comment

by:ozo
ID: 10749559
~= should be =~
0
Tech or Treat!

Submit an article about your scariest tech experience—and the solution—and you’ll be automatically entered to win one of 4 fantastic tech gadgets.

 
LVL 51

Expert Comment

by:ahoffmann
ID: 10749665
thanks for correting my typos, ozo
0
 

Author Comment

by:rincewind666
ID: 10751104
It is not being redirected. The next form is displayed with this message on the bottom:

Content-Type: text/html; charset=ISO-8859-1 Status: 302 Moved Location: http://demo.com/form1-page.html 
0
 
LVL 51

Expert Comment

by:ahoffmann
ID: 10751143
damn, had a lazy day ... sorry.
Please remove in the if
  print $q->header;
0
 

Author Comment

by:rincewind666
ID: 10751193
I've changed this to:

if ("$email" =~ /^\s*$/) {
  print $q->redirect('http://demo.com/form1-page.html');
  exit(0);
}

Now the next form is still being displayed with this message on the bottom:
Status: 302 Moved Location: http://demo.com/form1-page.html 
0
 
LVL 51

Expert Comment

by:ahoffmann
ID: 10751332
do you have another
  print $q->header;
right before the if?
If so, move it behind the if
0
 

Author Comment

by:rincewind666
ID: 10751641
No.  Still getting the same error. Here is the current code:

#!/usr/bin/perl
use strict;
use CGI;
use CGI::Carp qw(fatalsToBrowser);

my $q = new CGI;
my $name = $q->escapeHTML($q->param('name'));
my $email = $q->escapeHTML($q->param('email'));

#print $q->header;
print <<HTMLCODE;
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Test</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<body bgcolor="#FFFFFF" background="" text="#000000" link="#000000" vlink="#000000" alink="#000000">
<FORM ACTION="http://demo.com/cgi-bin/test/form3.cgi" METHOD="POST">
<input type="hidden" name="name" value="$name" />
<input type="hidden" name="email" value="$email" />

<TABLE>
 
  <TR>
    <TD>Age: <INPUT name=age></TD></TR>
  <TR>
    <TD>Country: <INPUT name=country></TD></TR>
  <TR>
    <TD><INPUT type=submit value=Submit>
  <INPUT type=reset value=Reset></TD></TR></TABLE></P>
</BODY>
</HTML>

HTMLCODE

if ("$email" =~ /^\s*$/) {
  print $q->redirect('http://demo.com/form1-page.html');
  exit(0);
}
print $q->header;

sub print_error {
        my $message = shift;

        print $q->header;

        print <<ERRORCODE;

<html>
<head><title>$message</title></head>
<body>

<p align="center"><font color="#0000000" face="Arial"><big><strong>Processing Error</strong></big></font></p>

<p align="left"><font face="Arial" color="#000080"><strong>$message</strong></font></p>

<p align="left"><font face="Arial" color="#000080"><strong>Please click your browser's Back button and try again.</strong></font></p>


</body>
</html>

ERRORCODE

        exit;
}
0
 
LVL 51

Expert Comment

by:ahoffmann
ID: 10752171
no, no, please read my comments!

...
   my $email = $q->escapeHTML($q->param('email'));
   if ("$email" =~ /^\s*$/) {
     print $q->redirect('http://demo.com/form1-page.html');
     exit(0);
   }
   print $q->header;
   print <<HTMLCODE;
...

and always exit your cgi with
  exit( 0 );
otherwise you get a server 500 error ..
0
 
LVL 48

Expert Comment

by:Tintin
ID: 10753447
ahoffman.

Please explain your rationale behind:

and always exit your cgi with
 exit( 0 );

0
 
LVL 51

Expert Comment

by:ahoffmann
ID: 10753526
Tintin, the CGI defines that each called cgi must return 0 on success, otherwise the web-server should/must return a server 500 error.
A perl script returns 0 by default, of the last command right before the final return/exit was successful, so it can be omitted.
Writing exit(0) is clean programing, beside you never know what happens on the system ..
0
 
LVL 48

Expert Comment

by:Tintin
ID: 10753623
A lot of people (myself included) would argue that adding a exit(0) in a Perl (or shell script) for that matter at the end of the script is totally redundant and unless your last command has any error checking, it could mean a misleading result.
0
 

Author Comment

by:rincewind666
ID: 10755708
Thanks for your help.  Much appreciated.
0
 
LVL 51

Expert Comment

by:ahoffmann
ID: 10757181
it might be redundant, but it's bad, very bad, programming style to leave it all to the interpreter's (perl) implementation
and in case of errors, you don't know what happend.
Think secure ;-)
0
 
LVL 48

Expert Comment

by:Tintin
ID: 10761629
ahoffman.

I'll agree to disagree on this one.

Here's an example of it giving misleading results:

#!/bin/sh
sdf
exit 0
0
 
LVL 51

Expert Comment

by:ahoffmann
ID: 10763501
.. or this one:
#!/bin/sh
/bin/false
exit 0

;-)

rincewind666, hope you got a valuable solution beside some off-topic chat ..
0

Featured Post

Free Tool: IP Lookup

Get more info about an IP address or domain name, such as organization, abuse contacts and geolocation.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Making a simple AJAX shopping cart Couple years ago I made my first shopping cart, I used iframe and JavaScript, it was very good at that time, there were no sessions or AJAX, I used cookies on clients machine. Today we have more advanced techno…
In threads here at EE, each comment has a unique Identifier (ID). It is easy to get the full path for an ID via the right-click context menu. However, we often want to post a short link within a thread rather than the full link. This article shows a…
Learn the basics of lists in Python. Lists, as their name suggests, are a means for ordering and storing values. : Lists are declared using brackets; for example: t = [1, 2, 3]: Lists may contain a mix of data types; for example: t = ['string', 1, T…
In this fourth video of the Xpdf series, we discuss and demonstrate the PDFinfo utility, which retrieves the contents of a PDF's Info Dictionary, as well as some other information, including the page count. We show how to isolate the page count in a…
Suggested Courses

610 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question