Log in

View Full Version : Form Submission to New Frame



optimumpro
07-06-2010, 09:31 PM
I'll try and explain what I'm hoping to do. Thank you in advance for your help.

I need to know how to create a form which once submitted:

1. remains in the same window
2. creates a frame set
3. the top frame is very small only enough for a top header - which will have a link back to the main site and a frame canceler
4. the bottom and larger frame shows the user's landing page (which is already created)

I've been searching all over to find a form that works. I found one but it's not showing the bottom frame.

here is the example code



#!/usr/bin/perl

###################################################################
# Variables - Change these to match your site.
###################################################################
$home = 'http://www.example.com';
$title = 'Test';
$body = 'TEXT=000000 LINK=DD8613 VLINK=DD8613 ALINK=DD8613 topmargin=0 leftmargin=0 toppadding=12';

###################################################################
# Do not touch these this part of the script.
###################################################################

if ($ENV{'REQUEST_METHOD'} eq 'GET') {
$buffer = $ENV{'QUERY_STRING'};
}
else {
read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
}



@pairs = split(/&/, $buffer);
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;
}

if ($FORM{'source'}) { $source = $FORM{'source'}; }
if ($FORM{'target'}) { $target = $FORM{'target'}; }

print "Content-type: text/html\n\n";
&ReadParse;

#####################################################################
# This is the frame part, be careful if you want to change anything.
#####################################################################

if ($in{'action'} eq '') {
$in{'action'} = "main";
} # End if

if ($in{'action'} eq 'main') {

print "<HTML><HEAD><TITLE>$title - Visiting a link</TITLE></HEAD>\n";
print "<FRAMESET rows=\"30,*\" marginwidth=0 marginheight=0 framespacing=0 frameborder=no border=0>\n";
print "<FRAME marginwidth=0 marginheight=0 src=\"$home/cgi-bin/main.cgi?action=top&source=$source&target=$target\" scrollbars=no scrolling=no framespacing=0 frameborder=no border=0>\n";
print "<FRAME marginwidth=0 marginheight=0 src=\"http://$target\" framespacing=0 frameborder=no border=0>\n";
print "</FRAMESET>\n";
print "<NOFRAMES>\n";
print "<h1 align=center>Ops!</h1>\n";
print "This document is designed to be viewed using
Frame features. If you are seeing this message, please consider
upgrading to a frames-compatible browser.";
print "</NOFRAMES></HTML>\n";
}

#####################################################################
# This is the top part, be careful if you want to change anything.
#####################################################################

elsif ($in{'action'} eq 'top') {

print "<HTML><HEAD><TITLE>$title - Visiting a link</TITLE></HEAD>\n";
print "<body $body>\n";
print "<left><a href=\"$home/$source\" target=\"_top\"><font size=2 face=\"Arial, Helvetica, sans-serif\">Return</font></a>\n";
print " | <a href=\"http://$target\" target=\"_top\"><font size=2 face=\"Arial, Helvetica, sans-serif\">Remove This Frame</font></a>\n";
print "</left>\n";
print "</body></html>\n";
}

###############################################
# READPARSE FUNCTION DO NOT TOUCH
###############################################
sub ReadParse { local (*in) = @_ if @_;
local ($i, $key, $val); if ( $ENV{'REQUEST_METHOD'} eq "GET" )
{
$in = $ENV{'QUERY_STRING'};
}
elsif ($ENV{'REQUEST_METHOD'} eq "POST")
{
read(STDIN,$in,$ENV{'CONTENT_LENGTH'});
}
else
{
# Added for command line debugging
# Supply name/value form data as a command line argument
# Format: name1=value1\&name2=value2\&...
# (need to escape & for shell)
# Find the first argument that's not a switch (-)

$in = ( grep( !/^-/, @ARGV )) [0];
$in =~ s/\\&/&/g; } @in = split(/&/,$in);

foreach $i (0 .. $#in) {
# Convert plus's to spaces

$in[$i] =~ s/\+/ /g;
# Split into key and value.
($key, $val) = split(/=/,$in[$i],2);
# splits on the first =.
# Convert %XX from hex numbers to alphanumeric
$key =~ s/%(..)/pack("c",hex($1))/ge;
$val =~ s/%(..)/pack("c",hex($1))/ge;

# Associate key and value. \0 is the multiple separator
$in{$key} .= "\0" if (defined($in{$key}));
$in{$key} .= $val; } return length($in); }



The link used to call the cgi script is below:



<a href="http://www.example.com/cgi-bin/main.cgi?source=index.html&=www.google.com">Link Text</a>


Thank you for your help!