Perl Chapter 9

30
Perl Chapter 9 CGI Programming with Perl

description

Perl Chapter 9. CGI Programming with Perl. Assume familiar with Web and HTML Hypertext Markup Language: describes layout of documents Web browsers (clients) Web servers: run on computer connected to Internet; provides documents to browsers Documents accessed by URL - PowerPoint PPT Presentation

Transcript of Perl Chapter 9

Page 1: Perl Chapter 9

Perl Chapter 9

CGI Programming with Perl

Page 2: Perl Chapter 9

• Assume familiar with Web and HTML– Hypertext Markup Language: describes layout of

documents– Web browsers (clients)– Web servers: run on computer connected to

Internet; provides documents to browsers– Documents accessed by URL– Need computation? Write programs in a

programming language like Java, php, Perl

Page 3: Perl Chapter 9

Common Gateway Interface (CGI)

• provides a standard way a browser can call, pass data to and receive response from programs on server

• CGI: interface between server program and other software

• HTML results from program returned to server using CGI

• Way to dynamically create web pages

Page 4: Perl Chapter 9

Necessary tasks

• decode text values (text manip)• CGI program needs access to ENV (servers use

ENV variables to pass info to CGI)• access to other software and utilities (Unix shell

command)

• Perl fulfills these requirements• Usually Perl CGI programs in specific place on

server - folder called cgi-bin

Page 5: Perl Chapter 9

Simple Linkage to CGI Programs

• Simple – no data from web page; produces only text string as output

• <A HREF = http://cs.mwsu.edu/~stringfe/cgi-bin/hello.pl> call hello </A>

• call hello is the link, the path is where the CGI program hello.pl is at

Page 6: Perl Chapter 9

• CGI program hello.pl must create HTML version of communication

• Connection to client is through STDOUT server client … SO USE print

• First line of HTML output must specify content type of output (most text/html).

print “Content-type:text/html\n\n”;

– must be a blank line!!!

Page 7: Perl Chapter 9

Demos

• show hello.htm; view source• show hello.pl– NOTE: #!/usr/bin/perl

• show SSH client• show SSH FTP

• show simple Unix commands

Page 8: Perl Chapter 9

Handling Forms

• Way to get information from browser• Need forms: collection of widgets to solicit

responses• MUST INCLUDE a submit button• When clicked, it sends a string representation

of values of widgets to server

• string widget_name=widget_value pairs

Page 9: Perl Chapter 9

• 2 means of communicating values in form to CGI program

– Get (default)• data string sent through environment variables

– Post• sent through standard input so CGI program can read it• use tag METHOD=“POST”

Page 10: Perl Chapter 9

• To create HTML form, need a <FORM> tag– attribute is ACTION: specifies URL of CGI program

that process values of widget

<FORM ACTION=http://.../prog.pl METHOD=“POST”>

Page 11: Perl Chapter 9

Kinds of widgets

• all begin with <INPUT> tag TYPE is an attribute

• text widget• <INPUT TYPE=“text” NAME=“name” SIZE=30>– user can type text, default size is 20

• multiline, use <TEXTAREA> tag … will give you a scroll bar

Page 12: Perl Chapter 9

• checkbox widget – toggle switch<INPUT TYPE=“checkbox” NAME=“AutoRemember”>

– www.amazon.com checkbox gift card

• radio widget – collection of closely related buttons– buttons have same name, but different values<INPUT TYPE=“radio” NAME=“payment” VALUE=“visa” CHECKED> Visa <BR>

<INPUT TYPE=“radio” NAME=“payment” VALUE=“mc” CHECKED> Mastercard <BR>

Page 13: Perl Chapter 9

• menu widget – scrolled list– <SELECT> caluse– SIZE attribute number of items visible– <OPTION> tag – specifies items of a menu

<SELECT name=state id=“sel_state” SIZE=1 class=content-sm>

<option value=“”>All other destinations </option>

<option value=“TN-Tennessee”>TN</option>

– http://travelocity.com/Hotels

• widgets often aligned by placing in tables.– <TABLE> <TR> <TH> and <TD> tags.

• View sources of web pages to learn more

Page 14: Perl Chapter 9

• form must have submit button and a reset button– two buttons with type “submit” and “reset”– values are labels (text showing on button)

• submit cause 2 actions– value of form sent to server– CGI program executed

• reset erases values of all widgets

Page 15: Perl Chapter 9

Examples

• web pages – view source– round.htm– nutsales.htm– survey.htm

Page 16: Perl Chapter 9

Value string of form

• value string of form has names and values of all widgets

• names and values separated by = • adjacent pairs separated by &• special chars coded %HH (2 hex digis)– space is %20 in hex, tilda is %7E

Page 17: Perl Chapter 9

• query string of form is transmitted to CGI program by either GET or POST

• radio button collection called fruit

name=Max%20Marks&fruit=apples%21

Page 18: Perl Chapter 9

Get

• query string attached to URL (of CGI program) with ? between URL?query_string – attached at submit

• server removes query string and assigns it to env’t variable QUERY_STRING, accessible to CGI program

• Disadv: some browsers/servers imose limit on length of URL and truncate

Page 19: Perl Chapter 9

Post

• query string is read by CGI program as STDIN• length of query string is available in

CONTENTLENGTH environment variable• Advantage: No length limit• (Doesn’t seem to work with CGI.pm)

Page 20: Perl Chapter 9

Converting form input to useful format

1. put query string in $string_var– 2 ways determined by Get or Post

2. split $string_var on & to set array of strings

@name_value_pairs=split(/&/, $query_string);

3. split each element of array on =

($name, $value)=split(/=/, $name_value);

Page 21: Perl Chapter 9

1. plus signs in values translated to blanks with tr operator $value =~ tr /+/ /;

2. convert coded special char into ordinary chars using substitute op s

$value =~ s/%([\dA-Fa-f][\dA-Fa-f])/pack(“C”, hex($1))/eg;

• find pattern starting with % followed by 2 hex digits• [ ] indicates optional• ( ) saved in $1 by matching op• hex function - $1 as parameter, does replacement part• pack into a byte using “C” as first parameter• use global option – more than one occurrence

Page 22: Perl Chapter 9

• See nuts.pl• nutsales2.htm

Page 23: Perl Chapter 9

Basics of CGI.pm

• many repeatable parts in a CGI program• CGI.pm is a Perl module containing functions

to do common things• gives you short cuts• available by including use statement• import parts by categories or collection• most useful in general are standard and html3

use CGI qw(:standard :html);

Page 24: Perl Chapter 9

Some common thingsprint header( );

print start_html(‘Sebesta’s Home Page’);

print end_html();

same as

print “Content-type: text/html\n\n”;

print “<HEAD> \n”;

print “<TITLE> Sebesta’s Home Page </TITLE> \n”;

print “</HEAD> \n”;

print “<BODY> \n”;

print “</BODY> </HTML> \n”;

Page 25: Perl Chapter 9

• getting parameter values can be done in single step using param function

my $name=param(“name”);

my ($name, $fruit)=(param(“name”), param(“fruit”));

• See nuts2.pl

Page 26: Perl Chapter 9

Reading/Writing Files

• WHEN THEY COULD BE ACCESSED by 2 or MORE executions of CGI program

$lock=2;

$unlock=8;

open (INFILE, …)

flock (INFILE, $lock);

flock(INFILE, $unlock);

close(INFILE);

• can open file, read, close it, open file, write, close it, …– that’s okay if it is a small file

Page 27: Perl Chapter 9

• can open file, read, close it, open file, write, close it, …– that’s okay if it is a small file

Page 28: Perl Chapter 9

Tables• Can display perl program results in table• tedious to generate without CGI.pmprint table ({-border => undef}, #standard default border

caption(“Caption”),

Tr(

[th([“Col1”, “Col2”, “Col3”]),

th(“row1”).td ([“val1”,”val2”]),

th(“rown”).td ([“val1”,”val2”])

]

)

);

• Notes: tr is a pattern matching function• Using scalar strings

Page 29: Perl Chapter 9

Using arrays for each row of data

• @row1, @row2, …@rown• use unshift to put titles of row categories into

first position of row arrays unshift(@row1, “row1”);

• make headings array @headings=(“ mon”, “tue”, …”sun”);

Page 30: Perl Chapter 9

• put headings and rows into table@rows=th(\@headings);

push(@rows, td(\@row1), … td(\@rown));

• so rows contain addresses of arrays

print table ({-border=undef},caption(“Caption”),

Tr (\@rows)

);