1 #!/usr/bin/perl -w
  2 # File: html_form.pl
  3 # Author: Tom Large - tlarge@thelug.org
  4 # Location: http://www.thelug.org/docs/
  5 # Description: A simple perl based web form.  It loops
  6 # in itself, and allows error checking.
  7 
  8 use CGI qw(:standard :html3 :param);
  9 
 10 my $null = ();
 11 my $state = 0;
 12 my $good = 0;
 13 my $bad = 0;
 14 my $page = new CGI;
 15 my $other_host = "host.name.domain";
 16 my $other_date = "01-JAN-1970";
 17 my $date = param('date');
 18 my $host = param('host');
 19 my $ip = param('ip');
 20 my $correct = param('correct');
 21 
 22 #######################################################################
 23 # Determine State.  This script loops itself with state counters.
 24 # The states are:
 25 # 0-New, get info.
 26 # 1-Got info, it is good.
 27 # 11-Errors with user input.
 28 #######################################################################
 29 if ($host eq $other_host)
 30   {
 31   $em = $null;
 32   if ($date eq $date)
 33     {
 34     $good++;
 35     }
 36   else
 37     {
 38     $em = $em . "<LI>Date ($date) was bad.</LI>";
 39     $bad++;
 40     }
 41   if ($host eq $other_host)
 42     {
 43     $good++;
 44     }
 45   else {
 46     $em = $em . "<LI>Host ($host) was bad.</LI>";
 47     $bad++;
 48     }
 49   if ($bad > 0) {
 50     $state = 11;}
 51   if (($bad < 1) && ($good > 0)) {
 52     $state =1;}}
 53 else
 54   {
 55   $state = 0;
 56   }
 57 if ($correct ne $null)
 58   {
 59   if ($correct eq "yes")
 60     {
 61     $state = 2;
 62     }
 63   else
 64     {
 65     $state = 0;
 66     }
 67   }
 68 
 69 #######################################################################
 70 # State 0: New, Get Info
 71 #######################################################################
 72 if ($state == 0)
 73   {
 74 print $page->header();
 75 print <<END_OF_TEXT;
 76 <HTML><HEAD><TITLE>"Some Form"</TITLE></HEAD><BODY>
 77 <H1 ALIGN=CENTER>Some Form Page</H1>
 78 <form action="/cgi-bin/html_form.pl" method="post">
 79 
 80 <TABLE WIDTH=400>
 81 <tr>
 82 <td width=200>Date (e.g. DD-MON-YYYY)</td>
 83 <td width=200><INPUT TYPE='text' NAME='date' SIZE='11' MAXLENGTH='11'></td>
 84 </tr>
 85 <td width=200>Host (e.g. host.domain.tld)</td>
 86 <td width=200><INPUT TYPE='text' NAME='host' SIZE='11' MAXLENGTH='11'></td>
 87 </tr>
 88 </TABLE>
 89 <input type="reset" value="Clear Form">&nbsp;&nbsp;&nbsp;&nbsp;
 90 <input type="submit" value="Submit Request">
 91 <BR><BR></BODY></HTML>
 92 END_OF_TEXT
 93   }
 94 
 95 
 96 #######################################################################
 97 # State 1: Got info, it is good.
 98 #######################################################################
 99 if ($state == 1)
100   {
101 print $page->header();
102 print <<END_OF_TEXT;
103 <HTML><HEAD><TITLE>"Some Form"</TITLE></HEAD><BODY>
104 <H1 ALIGN=CENTER>Some Form Page</H1>
105 <TABLE WIDTH="400">
106 <tr>
107 <td WIDTH="200"><B>Date:</B></td>
108 <td WIDTH="200">$date</td>
109 </tr>
110 <tr>
111 <td WIDTH="200"><B>Host:</B></td>
112 <td WIDTH="200">$host</td>
113 </tr>
114 </TABLE>
115 <BR><BR></BODY></HTML>
116 END_OF_TEXT
117   }
118 
119 #######################################################################
120 # State 11: Errors with user input.
121 #######################################################################
122 if ($state == 11)
123   {
124 print $page->header();
125 print <<END_OF_TEXT;
126 <HTML><HEAD><TITLE>"Some Form"</TITLE></HEAD><BODY>
127 <H1 ALIGN=CENTER>Some Form Page</H1>
128 <form action="/cgi-bin/html_form.pl" method="post">
129 
130 <input type="hidden" name="date" value="$date">
131 <input type="hidden" name="host" value="$host">
132 
133 <BR>
134 There were errors in your date.<BR>
135 <BR>
136 <UL>$em</UL>
137 <BR>
138 <form action="/cgi-bin/blockform.cgi" method="post">
139 <input type="hidden" name="date" value="$nc_date">
140 <input type="hidden" name="host" value="$nc_host">
141 <input type="submit" value="New Form">
142 <BR><BR></BODY></HTML>
143 END_OF_TEXT
144   }


syntax highlighted by Code2HTML, v. 0.9.1