Presentation is loading. Please wait.

Presentation is loading. Please wait.

Introduction to Programming the WWW I CMSC 10100-1 Winter 2004 Lecture 12.

Similar presentations


Presentation on theme: "Introduction to Programming the WWW I CMSC 10100-1 Winter 2004 Lecture 12."— Presentation transcript:

1 Introduction to Programming the WWW I CMSC 10100-1 Winter 2004 Lecture 12

2 2 Today’s Topics CGI module (cont’d) Matching patterns Regular expressions

3 3 Midterm Results Total points of the paper: 50 Highest grade: 47.5 Avg. grade: 42.6 10 submitted papers  9 papers with grade >= 40

4 4 Review: Using CGI.pm to generate HTML The CGI.pm module provides several functions that can be used to concisely output HTML tags For example, $mypage=‘It is a New Day’; print “ $mypage ”; can also be written as: $mypage=’It is a New Day’; print start_html(‘$mypage’);

5 5 Review: Three Basic CGI.pm Modules start_html  creates starting HTML tags Header  creates the MIME Content-type line end_html  creates ending HTML tags 1. #!/usr/local/bin/perl 2. use CGI ‘:standard’; 3. print header; 4. print start_html; 5. print ' '; 6. print 'Welcome humans to my site '; 7. print end_html;

6 6 Review: CGI.pm Basic Functions The various CGI/PM function accept 3 basic syntactic formats:  No argument format functions that can be used without any arguments  Positional argument format functions that can accept comma-separated arguments within parentheses  Name-value argument format functions that accept parameters submitted as name- and-value pairs

7 7 Review: Some Single Argument Functions CGI.pm Function Example of UseExample Output header - the MIME Content-type line print header;Content- type:text/html\n\n start_html — Tags to start an HTML document print start_html; br —output tag print br; hr —generate horizontal rule print hr; end_html —end an HTML document print end_html;

8 8 Review: Some Positional Functions CGI.pm Functions Example of UseExample Output start_html() — tags needed to start an HTML document. start_html(‘My Page’); My Page h1() —header level 1 tags. (also h2(), h3(), h4() ) print h1(‘Hello There’); Hello There strong() – output argument in strong. print strong('Now'); Now p() —creates a paragraph. print p(‘Time to move’); Time to move b() —prints the argument in bold. print b('Exit'); Exit i() —prints the argument in italics. Print i('Quick'); Quick

9 9 Review: Some name/value functions CGI.pm Function Example UsageExample Output start_html start HTML document print start_html({ -title=>‘my title’, –bgcolor=>’red’ }); my title img —inserts an image print img({- src=>'myfile.gif', -alt=>’picture’}); a —establishes links print a({ -href => 'http://www.mysite.com'}, 'Click Here'); Click Here font() — creates … tags print font( { -color=>‘BLUE’,–size=> ’4’}, ‘Lean, and mean.’); Lean, and mean.

10 10 Review: How Web Applications Work with CGI

11 11 Review: HTLM Forms HTML Forms are used to select different kinds of user input, defined with tag Form contains form elements to allow the user to enter information  text fields  textarea fields  drop-down menus  radio buttons  checkboxes, etc

12 12 Review: Tag Attributes action attribute  Gives the URL of the program(CGI) to receive and process the form’s data method attribute  Sets the HTTP method by which the browser sends the form data to the program, value can be GET or POST  Avoid GET method in favor of POST for security reasons

13 13 Review: Tag To define any one of a number of common form “controls”  Text fields (including password, hidden fields)  multiple-choice lists  Clickable images  Submission buttons Only type and name attribute required No ending tag (no )

14 14 Review: Text Fields single line of text  Set type to password to mask text like a password Set type to hidden to create a hidden field  size and maxlength attributes  value attributes to give default text

15 15 Review: Multi-line Text Area The tag Attributes  cols  rows  wrap Values: Off,virtual(default),physical

16 16 Review: Check Boxes Check boxes for “check all that apply” questions   Make sure name identical among a group of checkboxes  checked attribute When form is submitted, names and values of those checked boxes are sent

17 17 Review: Radio Buttons Similar as checkboxes, but only one in the group may be selected 

18 18 Review: Multiple Choice Elements The tag creates either pull-down menus or scrolling lists The tag defines each item within a tag tag attributes  size attribute Number of rows visible at the same time  multiple attribute If set, allow multiple selections  name attribute

19 19 Review: Action Buttons What are they?  Submit buttons  Reset buttons  Regular buttons  image buttons (will send form content as submit button)  *File buttons (need to deal with enctyple attribute)

20 20 Using CGI.pm with HTML forms CGI.pm Function Example UsageExample Output start_form start HTML form element print start_form({ -method=>‘post’,–action=> ‘http://people.cs.uchicago.edu/~w freis/cgi-bin/reflector.pl’}); textfield, password_field —inserts a text field or password field print textfield(- name=>'textfield1', -size=>'50', -maxlength=>'50'); scrolling_list —insert a multiple list print scrolling_list(-name=>'list1', -values=> ['eenie', 'minie', 'moe'], -default=> ['eenie','moe'], -size=>5, -multiple=>'true'); eenie minie moe textarea — inserts a text area print textarea(-name=> 'large_field_name', -rows=> 10, -columns=>50);

21 21 Using CGI.pm with HTML forms (cont’d) CGI.pm Function Example UsageExample Output checkbox_group – insert checkbox print checkbox_group(-name=> 'color', -values=>['red ','orange ','yellow '], -default=>['red ']); red orange yellow raidio-group — inserts a text field print radio_group(-name=>'color blind', -values=>['Yes','No'], - default=>'No'); Yes No submit,reset —insert a submit or reset button print submit('submit', 'Submit'); Print reset; endform — print end form tag print endform(); Perl CGI Reference

22 22 A CGI Form Example http://people.cs.uchicago.edu/~hai/hw4/cgiform1.cgi

23 23 Receiving HTML Form Arguments Within the CGI program call param() function  Input variables into CGI/Perl programs are called CGI variables Values received through your Web server as input from a Web browser, usually filled in a form  To use param():

24 24 Receiving HTML Form Arguments http://people.cs.uchicago.edu/~hai/hw4/cgiform1.cgi

25 25 Sending Arguments You can send arguments to your CGI program directly from the URL address of a browser http://people.cs.uchicago.edu/~hai/hw4/cgiform1 _checker.cgi?color=red

26 26 Sending Multiple Arguments Precede first argument with ? Precede next argument with & http://people.cs.uchicago.edu/~hai/hw4/cgiform1_checker.cgi?color=red&secret=nothing

27 27 Debug CGI Program in Command Line To start and send an argument to the password program can execute the following: perl cgiform1_checker.cgi color=red Enclose blank spaces or multiple arguments in quotation marks: perl cgiform1_checker.cgi ‘color=rose red’ perl cgiform1_checker.cgi 'color=red&secret=none'

28 28 Check CGI Variables Values Perl provides a simple method to test if any parameters were received or null: $var = param(‘some_cgi_variable’) ; if ($var) { statement(s) to execute when $var has a value } else { statement(s) to execute when $var has no value }

29 29 Combining Program Files Applications so far have required two separate files; one file for to generate the form, and the other to process the form  Example: cgiform1.cgi and cgiform1_checker.cgi  Can test return value on param() to combine these At least two advantages  With one file, it is easier to change arguments  It is easier to maintain one file.

30 30 Combining Program Files http://people.cs.uchicago.edu/~hai/hw4/cgiform2.cgi

31 31 Patterns in String Variables Many programming problems require matching, changing, or manipulating patterns in string variables.  An important use is verifying input fields of a form helps provide security against accidental or malicious attacks. For example, if expecting a form field to provide a telephone number as input, your program needs a way to verify that the input comprises a string of seven digits.

32 32 Four Different Constructs Will look at 4 different Perl String manipulation constructs:  The match operator enables your program to look for patterns in strings.  The substitute operator enables your program to change patterns in strings.  The split function enables your program to split strings into separate variables based on a pattern. (already covered)  Regular expressions provide a pattern matching language that can work with these operators and functions to work on string variables.

33 33 The Match Operator The match operator is used to test if a pattern appears in a string.  It is used with the binding operator (“ =~ ”) to see whether a variable contains a particular pattern.

34 34 Possible Values of $name

35 35 Other Delimiters? Slash (“/”) is most common match pattern  Others are possible, For example, both use valid match operator syntax:  if ( $name =~ m!Dave! ) {  if ( $name =~ m ) { The reverse binding operator test if pattern is NOT found: if ( $color !~ m/blue/ ) {

36 36 The Substitution Operator Similar to the match operator but also enables you to change the matched string.  Use with the binding operator (“ =~ ”) to test whether a variable contains a pattern

37 37 How It Works Substitutes the first occurrence of the search pattern for the change pattern in the string variable. For example, the following changes the first occurrence of t to T : $name = “tom turtle”; $name =~ s/t/T/; print “Name=$name”; The output of this code would be Name=Tom turtle

38 38 Changing All Occurrences You can place a g (for global substitution) at the end of the substitution expression to change all occurrences of the target pattern string in the search string. For example,  $name = “tom turtle”;  $name =~ s/t/T/g;  print “Name=$name”; The output of this code would be  Name= Tom TurTle

39 39 Using Translate A similar function is called tr (for “translate”). Useful for translating characters from uppercase to lowercase, and vice versa.  The tr function allows you to specify a range of characters to translate from and a range of characters to translate to. : $name="smokeY"; $name =~ tr/[a-z]/[A-Z]/; print "name=$name"; Would output the following Name=SMOKEY

40 40 A Full Pattern Matching Example 1. #!/usr/local/bin/perl 2. use CGI ':standard'; 3. print header, start_html('Command Search'); 4. @PartNums=( 'XX1234', 'XX1892', 'XX9510'); 5. $com=param('command'); 6. $prod=param('uprod'); 7. if ($com eq "ORDER" || $com eq "RETURN") { 8. $prod =~ s/xx/XX/g; # switch xx to XX 9. if ($prod =~ /XX/ ) { 10. foreach $item ( @PartNums ) { 11. if ( $item eq $prod ) { 12. print "VALIDATED command=$com prodnum=$prod"; 13. $found = 1; 14. } 15. } 16. if ( $found != 1 ) { 17. print br,"Sorry Prod Num=$prod NOT FOUND"; 18. } 19. } else { 20. print br, "Sorry that prod num prodnum=$prod looks wrong"; 21. } 22. } else { 23. print br, "Invalid command=$com did not receive ORDER or RETURN"; 24. } 25. print end_html;

41 41 Would Output The Following...

42 42 Using Regular Expressions regular expressions to enable programs to match patterns more completely.  They actually make up a small language of special matching operators that can be employed to enhance the Perl string pattern matching.

43 43 The Alternation Operator Alternation operator looks for alternative strings for matching within a pattern.  (That is, you use it to indicate that the program should match one pattern OR the other). The following shows a match statement using the alternation operator (left) and some possible matches based on the contents of $address (right); this pattern matches either com or edu.

44 44 Example Alternation Operator

45 45 Parenthesis For Groupings You use parentheses within regular expressions to specify groupings. For example, the following matches a $name value of Dave or David.

46 46 Special Character Classes Perl has a special set of character classes for short hand pattern matching For example consider these two statements if ( $name =~ m/ / ) { will match $name with embedded space char if ($name =~ m/\s/ ) { will match $name with embedded space, tab, newline

47 47 Special Character Classes

48 48 Special Character Classes - II

49 49 Special Character Classes - III

50 50 Setting Specific Patterns w/ Quantifiers Character quantifiers let you look for very specific patterns For example, use the dollar sign (“ $ ”) to to match if a string ends with a specified pattern. if ($ Name =~ /Jones$/ ) { Matches “John Jones” but not “Jones is here” would not. Also, “The guilty party is Jones” would matches.

51 51 Selected Perl Character Quantifiers I

52 52 Selected Perl Character Quantifiers II

53 53 Selected Perl Character Quantifiers III

54 54 Building Regular Expressions That Work Regular expressions are very powerful— but they can also be virtually unreadable.  When building one, tart with a simple regular expression and then refine it incrementally. Build a piece and then test  The following example will build a regular expression for a date checker dd/mm/yyyy format (for example, 05/05/2002 but not 5/12/01 ).

55 55 1. Determine the precise field rules. - What is valid input and what is not valid input?  E.g., For a date field, think through the valid and invalid rules for the field.  You might allow 09/09/2002 but not 9/9/2002 or Sep/9/2002.  Work through several examples as follows: Building Regular Expressions That Work

56 56 Work through several examples

57 57 Building Regular Expressions that Work 2. Get form and form-handling programs working  Build a sending form the input field  Build the receiving program that accepts the field.  For example, a first cut receiving program: $date = param(‘udate’); if ( $date =~ m/.+/ ) { print ‘Valid date=’, $date; } else { print ‘Invalid date=’, $date; } Any Sequence of characters

58 58 Building Regular Expressions that Work 3. Start with the most specific term possible.  For example, slashes must always separate two characters (for the month), followed by two more characters (for the day), followed by four characters (for the year). if ( $date =~ m{../../....} ) { Any 2 characters Any 2 characters Any 4 characters

59 59 Building Regular Expressions that Work 4. Anchor and refine. (Use ^ and $ when possible)  if ( $date =~ m{^\d\d/\d\d/\d\d\d\d$} ) { Starts with 2 digits in middle Ends with 4 digits

60 60 Building Regular Expressions that Work 5. Get more specific if possible.  The first digit of the month can be only 0, 1, 2 or 3. For example, 05/55/2002 is clearly an illegal date.  Only years from this century are allowed. Because we don’t care about dates like 05/05/1999 or 05/05/3003.

61 61 Add these rules below if ( $date =~ m{^\d\d/[0-3]\d/2\d\d\d$} ) {  Now the regular expression recognizes input like 09/99/2001 and 05/05/4000 as illegal. Year starts with a “2” Month starts with a “0-3” Building Regular Expressions that Work

62 62 Tip: Regular Expression Special Variables Perl regexs set several special scalar variables:  $& will be equal to the first matching text  $` will be the text before the match, and  $’ will be the text after the first match. $name='*****Marty'; if ( $name =~ m/\w/ ) { print "got match at=$& "; print "B4=$` after=$'"; } else { print "Not match"; } would output: got match at=M B4=***** after=arty

63 63 Full Example Program 1. #!/usr/local/bin/perl 2. use CGI ':standard'; 3. print header, start_html('Date Check'); 4. $date=param('udate'); 5. if ($date =~ m{^\d\d/[0-3]\d/2\d\d\d$}){ 6. print 'Valid date=', $date; 7. } else { 8. print 'Invalid date=', $date; 9. } 10. print end_html;

64 64 Would Output The Following...


Download ppt "Introduction to Programming the WWW I CMSC 10100-1 Winter 2004 Lecture 12."

Similar presentations


Ads by Google