Run this PERL script to display the environment variables and values available to a CGI script.
See the PERL script.
GET: the query string sent is placed in the environment variable QUERY_STRING
for CGI script to process.
POST: the query string is sent by a separate stream and becomes the
standard input to the CGI script.
Note: when POST is used, the environment variables are set:
CONTENT_LENGTH, CONTENT_TYPE.
<Form method=POST action="full_path_name/cgi-bin/club.cgi"> Your name: <input type="text" name="name" size="30"><br> Address: <input type="text" name="address" size="50"><br> Tel. No: <input type="text" name="tel" size="30"><br> Fax: <input type="text" name="fax" size="30"><br> Email: <input type="text" name="email" size="30"><br> Private message to host:<br> <textarea name="comm1" rows=5 cols=40></textarea><p> E-mail message to all members (also posted on bulletin board) :<br> <textarea name="comm2" rows=5 cols=40></textarea><p> Message posted on bulletin board only: <br> <textarea name="comm3" rows=5 cols=40></textarea><p> <input TYPE="submit" VALUE="Submit"><input TYPE="reset" VALUE="Erase">
In the above, you need to replace full_path_name to where the cgi-bin is actually located. The cgi program is called club.cgi and it is in cgi-bin. It looks like this:
#!/usr/local/bin/perl # The first line should be where perl resides on the local system. $company = "company-name\@cs.pitt.edu"; $webmaster = "webmaster-name\@cs.pitt.edu"; # You can have a list of e-mail addresses in the memberlist. $memberlist = "member-name\@cs.pitt.edu"; ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time); $mon = $mon + 1; if ($ENV{'REQUEST_METHOD'} eq 'POST') { # Get the input read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'}); # Split the name-value pairs @pairs = split(/&/, $buffer); # Load the FORM variables foreach $pair (@pairs) { ($name, $value) = split(/=/, $pair); $value =~ tr/+/ /; $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; $FORM{$name} = $value; } # Open the email message to send the data to webmaster if($FORM{comm1} ne "") { open (MESSAGE, "| /usr/bin/mail $webmaster "); # The mail utility is in /usr/bin/mail so you need to change that if different. # Format email header information print MESSAGE "To: $company\n"; if ($FORM{email} ne "") { print MESSAGE "Reply-To: $FORM{email}\n"; } # Write the actual email message print MESSAGE "Subject: Message from $ENV{'REMOTE_HOST'}\n\n"; print MESSAGE "Name: $FORM{name}\n"; print MESSAGE "Address: $FORM{address}\n"; print MESSAGE "Telephone: $FORM{tel}\n"; print MESSAGE "Fax: $FORM{fax}\n"; print MESSAGE "Email: $FORM{email}\n"; print MESSAGE "Message to Host: $FORM{comm1}\n"; close (MESSAGE); } # Open the email message to send the data to a list of members if($FORM{comm2} ne "") { open (MESSAGE, "| /usr/bin/mail $memberlist "); # Format email header information print MESSAGE "To: $company\n"; if ($FORM{email} ne "") { print MESSAGE "Reply-To: $FORM{email}\n"; } # Write the actual email message print MESSAGE "Subject: Message from $ENV{'REMOTE_HOST'}\n\n"; print MESSAGE "Name: $FORM{name}\n"; print MESSAGE "Address: $FORM{address}\n"; print MESSAGE "Telephone: $FORM{tel}\n"; print MESSAGE "Fax: $FORM{fax}\n"; print MESSAGE "Email: $FORM{email}\n"; print MESSAGE "Message to All: $FORM{comm2}\n"; close (MESSAGE); # Also post this message # You need to change the full_path_name. open (MESSAGE, "> /full_path_name/t1"); print MESSAGE "<p>\n"; print MESSAGE "<b> Message from $ENV{'REMOTE_HOST'}</b><br>"; print MESSAGE "<b> Name</b>: $FORM{name}<br>"; print MESSAGE "<b> Email</b>: $FORM{email}<br>"; print MESSAGE "<b> Time/Date</b>:$hour:$min:$sec / $mon-$mday-$year,<br>"; print MESSAGE "<b>Posted Message</b>: $FORM{comm2}<br>"; close (MESSAGE); # The bulletin bu.html and two temporary files t1 and t2, are in local directory. # We use local files t1 and t2 so that a new message appears at the top of bulletin. $ans=`cat /full_path_name/t1 /full_path_name/bu.html > /full_path_name/t2`; $ans=`cp /full_path_name/t2 /full_path_name/bu.html`; } # Post message to the bulletin board only if( $FORM{comm3} ne "") { open (MESSAGE, "> /full_path_name/t1"); print MESSAGE "<p>\n"; print MESSAGE "<b> Message from $ENV{'REMOTE_HOST'}</b><br>"; print MESSAGE "<b> Name</b>: $FORM{name}<br>"; print MESSAGE "<b> Email</b>: $FORM{email}<br>"; print MESSAGE "<b> Time/Date</b>:$hour:$min:$sec / $mon-$mday-$year,<br>"; print MESSAGE "<b>Posted Message</b>: $FORM{comm3}<br>"; close (MESSAGE); $ans=`cat /full_path_name/t1 /full_path_name/bu.html > /full_path_name/t2`; $ans=`cp /full_path_name/t2 /full_path_name/bu.html`; } # Thank the user and acknowledge the order &thank_you; } else { # Format an error message for the user print "Content-type: text/html\n\n"; print "<HTML>\n"; print "<HEAD>\n"; print "<TITLE>Message Form Error</TITLE>\n"; print "</HEAD>\n"; print "<BODY>\n"; print "<H1>Message Form Error</H1>\n"; print "<HR>\n"; print "<P>\n"; print "Form input was not processed. Please mail your "; print "remarks to $company\n"; print "</BODY>\n"; print "</HTML>\n"; } sub thank_you { print "Content-type: text/html\n\n"; print "<HTML>\n"; print "<HEAD>\n"; print "<TITLE>Thank You</TITLE>\n"; print "</HEAD>\n"; print "<BODY>\n"; print "<H1>Thank You</H1>\n"; print "<HR>\n"; print "<P>\n"; print "Your message have been emailed to host, or emailed to other members, or posted on the bulletin board.\n"; print "</BODY>\n"; print "</HTML>\n"; }
<Form Method = "post" action = "cgi-bin/hello.cgi"> Input your name here: <Input Type="text" Name = "your_name" size=20 value=""> <Input Type="submit" value="submit"> </Form>
#!/bin/sh -f # When the request method is POST, # read the query string from the standard input. read string echo Content-type: text/html echo "" echo query string: $string echo "<p>" echo $string | awk -F= '{print "Hello", $2, "!"}' | sed 's/+/ /'
<Form method=GET action="cgi-bin/club.cgi"> Your name: <input type="text" name="name" size="30"><br> Address: <input type="text" name="address" size="50"><br> Tel. No: <input type="text" name="tel" size="30"><br> Fax: <input type="text" name="fax" size="30"><br> Email: <input type="text" name="email" size="30"><br> <input TYPE="submit" VALUE="Submit"> <input TYPE="reset" VALUE="Erase"> <Form>
what you see in the browser is:
The CGI script ind_info.cgi looks like this:
#include <stdio.h> #include <stdlib.h> /*from cgi2env.c*/ extern void cgi2env(); extern void http_head(); main() { char *val; /* split Name-Value pairs into environment variables WWW_Name */ cgi2env(); http_head(); /* output header "Content-type: text/html\n\n" */ val = getenv("WWW_name"); printf("name = %s <br>\n", val); val = getenv("WWW_address"); printf("address= %s <br>\n", val); val = getenv("WWW_tel"); printf("telphone = %s <br>\n", val); val = getenv("WWW_fax"); printf("fax = %s <br>\n", val); val = getenv("WWW_email"); printf("email = %s <br>\n", val); }
Wrappers accept one input query and convert it into one or more queries/commands understandable by the encapsulated data source, and transform the native query results into a format understood by the mediator. The mediator thereby integrates these results and returns it to the user.
The figure below illustrates a mediator system in which data sources could be relational databases, object-oriented databases, legacy databases, web sites and so on.