一 此cgi既是提交前的form,也被用来处理form的提交
来自:http://www.devdaily.com/perl/perl-cgi-example-scrolling-list-html-form
代码: (多选listbox-Multiple-choice SELECTs实例)
不带参数时即为form:http://xxxx/cgi/perl-cgi2.cgi
当点击form的submit提交时,实际上相当于:http://xxxx/cgi/perl-cgi2.cgi?languages=c&languages=html,此时为对form的处理结果
#
!/usr/bin/perl -Tw
#
# PROGRAM: scrolling_list.cgi
#
# PURPOSE: Demonstrate (1) how to create a scrolling_list form and
# (2) how to determine the value(s) selected by the user.
#
# Created by alvin alexander, devdaily.com.
#
#-----------------------------------#
# 1. Create a new Perl CGI object #
#-----------------------------------#
use CGI;
$query = new CGI;
# ----------------------------------#
# 2. Print the doctype statement #
#----------------------------------#
print $query->header;
# ----------------------------------------------------#
# 3. Start the HTML doc, and give the page a title #
#----------------------------------------------------#
print $query->start_html( ' My scrolling_list.cgi program ');
# ------------------------------------------------------------#
# 4a. If the program is called without any params, print #
# the scrolling_list form. #
#------------------------------------------------------------#
if (! $query->param) {
print $query->startform;
print $query->h3( ' Select your favorite programming language(s): ');
print $query->scrolling_list(-name=> ' languages ',
- values=>[
' Basic ',
' C ',
' C++ ',
' Cobol ',
' DHTML ',
' Fortran ',
' HTML ',
' Korn Shell (Unix) ',
' Perl ',
' Java ',
' JavaScript ',
' Python ',
' Ruby ',
' Tcl/Tk '],
-size=> 8,
-multiple=> ' true ',
-default=> ' Perl ');
# Notes:
# ------
# "-multiple=>'true'" lets the user make multiple selections
# from the scrolling_list
# "-default" is optional
# "-size" lets you specify the number of visible rows in the list
# can also use an optional "-labels" parameter to let the user
# see labels you want them to see, while you use
# different names for each parameter in your program
print $query->br;
print $query->submit(-value=> ' Submit your favorite language(s) ');
print $query->endform;
} else {
# ----------------------------------------------------------#
# 4b. If the program is called with parameters, retrieve #
# the 'languages' parameter, assign it to an array #
# named $languages, then print the array with each #
# name separated by a <BR> tag. #
#----------------------------------------------------------#
print $query->h3( ' Your favorite languages are: ');
@languages = $query->param( ' languages ');
print " <BLOCKQUOTE>\n ";
foreach $language ( @languages) {
print " $language<BR> ";
}
print " </BLOCKQUOTE>\n ";
}
# --------------------------------------------------#
# 5. After either case above, end the HTML page. #
#--------------------------------------------------#
print $query ->end_html;
#
# PROGRAM: scrolling_list.cgi
#
# PURPOSE: Demonstrate (1) how to create a scrolling_list form and
# (2) how to determine the value(s) selected by the user.
#
# Created by alvin alexander, devdaily.com.
#
#-----------------------------------#
# 1. Create a new Perl CGI object #
#-----------------------------------#
use CGI;
$query = new CGI;
# ----------------------------------#
# 2. Print the doctype statement #
#----------------------------------#
print $query->header;
# ----------------------------------------------------#
# 3. Start the HTML doc, and give the page a title #
#----------------------------------------------------#
print $query->start_html( ' My scrolling_list.cgi program ');
# ------------------------------------------------------------#
# 4a. If the program is called without any params, print #
# the scrolling_list form. #
#------------------------------------------------------------#
if (! $query->param) {
print $query->startform;
print $query->h3( ' Select your favorite programming language(s): ');
print $query->scrolling_list(-name=> ' languages ',
- values=>[
' Basic ',
' C ',
' C++ ',
' Cobol ',
' DHTML ',
' Fortran ',
' HTML ',
' Korn Shell (Unix) ',
' Perl ',
' Java ',
' JavaScript ',
' Python ',
' Ruby ',
' Tcl/Tk '],
-size=> 8,
-multiple=> ' true ',
-default=> ' Perl ');
# Notes:
# ------
# "-multiple=>'true'" lets the user make multiple selections
# from the scrolling_list
# "-default" is optional
# "-size" lets you specify the number of visible rows in the list
# can also use an optional "-labels" parameter to let the user
# see labels you want them to see, while you use
# different names for each parameter in your program
print $query->br;
print $query->submit(-value=> ' Submit your favorite language(s) ');
print $query->endform;
} else {
# ----------------------------------------------------------#
# 4b. If the program is called with parameters, retrieve #
# the 'languages' parameter, assign it to an array #
# named $languages, then print the array with each #
# name separated by a <BR> tag. #
#----------------------------------------------------------#
print $query->h3( ' Your favorite languages are: ');
@languages = $query->param( ' languages ');
print " <BLOCKQUOTE>\n ";
foreach $language ( @languages) {
print " $language<BR> ";
}
print " </BLOCKQUOTE>\n ";
}
# --------------------------------------------------#
# 5. After either case above, end the HTML page. #
#--------------------------------------------------#
print $query ->end_html;
二 也可以实现为html+perlcgi
代码:(多选checkbox实例)
#
colors.html
<html><head><title>favorite colors</title></head>
<body>
<b>Pick a Color:</b><br>
<form action= " colors.cgi " method= " POST ">
<input type= " checkbox " name= " red " value= 1> Red<br>
<input type= " checkbox " name= " green " value= 1> Green<br>
<input type= " checkbox " name= " blue " value= 1> Blue<br>
<input type= " checkbox " name= " gold " value= 1> Gold<br>
<input type= " submit ">
</form>
</body>
</html>
# colors.cgi
#!/usr/bin/perl -wT
use CGI qw(:standard);
use CGI::Carp qw(warningsToBrowser fatalsToBrowser);
print header;
print start_html;
my @colors = ( " red ", " green ", " blue ", " gold ");
foreach my $color ( @colors) {
if (param( $color)) {
print " You picked $color.<br>\n ";
}
}
print end_html;
<html><head><title>favorite colors</title></head>
<body>
<b>Pick a Color:</b><br>
<form action= " colors.cgi " method= " POST ">
<input type= " checkbox " name= " red " value= 1> Red<br>
<input type= " checkbox " name= " green " value= 1> Green<br>
<input type= " checkbox " name= " blue " value= 1> Blue<br>
<input type= " checkbox " name= " gold " value= 1> Gold<br>
<input type= " submit ">
</form>
</body>
</html>
# colors.cgi
#!/usr/bin/perl -wT
use CGI qw(:standard);
use CGI::Carp qw(warningsToBrowser fatalsToBrowser);
print header;
print start_html;
my @colors = ( " red ", " green ", " blue ", " gold ");
foreach my $color ( @colors) {
if (param( $color)) {
print " You picked $color.<br>\n ";
}
}
print end_html;
其他实例radiobox
#
radiobox.html
<html><head><title>Pick a Color</title></head>
<body>
<b>Pick a Color:</b><br>
<form action= " radiobox.cgi " method= " POST ">
<input type= " radio " name= " color " value= " red "> Red<br>
<input type= " radio " name= " color " value= " green "> Green<br>
<input type= " radio " name= " color " value= " blue "> Blue<br>
<input type= " radio " name= " color " value= " gold "> Gold<br>
<input type= " submit ">
</form>
</body></html>
# radiobox.cgi
#!/usr/bin/perl -wT
use strict;
use CGI qw(:standard);
use CGI::Carp qw(warningsToBrowser fatalsToBrowser);
my %colors = ( red => " #ff0000 ",
green => " #00ff00 ",
blue => " #0000ff ",
gold => " #cccc00 ");
print header;
my $color = param( ' color ');
# do some validation - be sure they picked a valid color
if ( exists $colors{ $color}) {
print start_html(-title=> " Results ", -bgcolor=> $color);
print " You picked $color.<br>\n ";
} else {
print start_html(-title=> " Results ");
print " You didn't pick a color! (You picked '$color') ";
}
print end_html;
<html><head><title>Pick a Color</title></head>
<body>
<b>Pick a Color:</b><br>
<form action= " radiobox.cgi " method= " POST ">
<input type= " radio " name= " color " value= " red "> Red<br>
<input type= " radio " name= " color " value= " green "> Green<br>
<input type= " radio " name= " color " value= " blue "> Blue<br>
<input type= " radio " name= " color " value= " gold "> Gold<br>
<input type= " submit ">
</form>
</body></html>
# radiobox.cgi
#!/usr/bin/perl -wT
use strict;
use CGI qw(:standard);
use CGI::Carp qw(warningsToBrowser fatalsToBrowser);
my %colors = ( red => " #ff0000 ",
green => " #00ff00 ",
blue => " #0000ff ",
gold => " #cccc00 ");
print header;
my $color = param( ' color ');
# do some validation - be sure they picked a valid color
if ( exists $colors{ $color}) {
print start_html(-title=> " Results ", -bgcolor=> $color);
print " You picked $color.<br>\n ";
} else {
print start_html(-title=> " Results ");
print " You didn't pick a color! (You picked '$color') ";
}
print end_html;
三 cgi实例2
#
!/usr/bin/perl
use strict;
use warnings;
use CGI;
use CGI::Carp qw(fatalsToBrowser);
sub output_top($);
sub output_end($);
sub display_results($);
sub output_form($);
my $q = new CGI;
print $q->header();
# Output stylesheet, heading etc
output_top( $q);
if ( $q->param()) {
# Parameters are defined, therefore the form has been submitted
display_results( $q);
} else {
# We're here for the first time, display the form
output_form( $q);
}
# Output footer and end html
output_end( $q);
exit 0;
# Outputs the start html tag, stylesheet and heading
sub output_top($) {
my ( $q) = @_;
print $q->start_html(
-title => ' A Questionaire ',
-bgcolor => ' white ',
}
# Outputs a footer line and end html tags
sub output_end($) {
my ( $q) = @_;
print $q->div( " My Web Form ");
print $q->end_html;
}
# Displays the results of the form
sub display_results($) {
my ( $q) = @_;
my $username = $q->param( ' user_name ');
print $username;
print $q->br;
# Outputs a web form
sub output_form($) {
my ( $q) = @_;
print $q->start_form(
-name => ' main ',
-method => ' POST ',
);
print $q->start_table;
print $q->Tr(
$q->td( ' Name: '),
$q->td(
$q->textfield(-name => " user_name ", -size => 50)
)
);
print $q->Tr(
$q->td( $q->submit(-value => ' Submit ')),
$q->td( ' ')
);
print $q->end_table;
print $q->end_form;
}
use strict;
use warnings;
use CGI;
use CGI::Carp qw(fatalsToBrowser);
sub output_top($);
sub output_end($);
sub display_results($);
sub output_form($);
my $q = new CGI;
print $q->header();
# Output stylesheet, heading etc
output_top( $q);
if ( $q->param()) {
# Parameters are defined, therefore the form has been submitted
display_results( $q);
} else {
# We're here for the first time, display the form
output_form( $q);
}
# Output footer and end html
output_end( $q);
exit 0;
# Outputs the start html tag, stylesheet and heading
sub output_top($) {
my ( $q) = @_;
print $q->start_html(
-title => ' A Questionaire ',
-bgcolor => ' white ',
}
# Outputs a footer line and end html tags
sub output_end($) {
my ( $q) = @_;
print $q->div( " My Web Form ");
print $q->end_html;
}
# Displays the results of the form
sub display_results($) {
my ( $q) = @_;
my $username = $q->param( ' user_name ');
print $username;
print $q->br;
# Outputs a web form
sub output_form($) {
my ( $q) = @_;
print $q->start_form(
-name => ' main ',
-method => ' POST ',
);
print $q->start_table;
print $q->Tr(
$q->td( ' Name: '),
$q->td(
$q->textfield(-name => " user_name ", -size => 50)
)
);
print $q->Tr(
$q->td( $q->submit(-value => ' Submit ')),
$q->td( ' ')
);
print $q->end_table;
print $q->end_form;
}
更多实例
http://www.cgi101.com/book/ch5/text.html
http://www.comp.leeds.ac.uk/Perl/Cgi/forms.html
完!