Presentation is loading. Please wait.

Presentation is loading. Please wait.

Mark Dixon Page 1 19 – Passing Data between pages: Forms, Sessions, & Query Strings.

Similar presentations


Presentation on theme: "Mark Dixon Page 1 19 – Passing Data between pages: Forms, Sessions, & Query Strings."— Presentation transcript:

1 Mark Dixon Page 1 19 – Passing Data between pages: Forms, Sessions, & Query Strings

2 Mark Dixon Page 2 Session Aims & Objectives Aims –To introduce the fundamental ideas involved in passing data between pages –Highlight modular design techniques, and demonstrate them in ASP Objectives, by end of this week’s sessions, you should be able to: –pass data between pages, using: Self Posting Query Strings Session Variables –use procedures, functions, parameters, and modules (shared VB script files) in ASP

3 Mark Dixon Page 3 Example: Logon v2 (design) Restrict access to home page

4 Mark Dixon Page 4 Example: Logon v2 (code) Sub Page_Load() Dim un As String Dim pw As String If Request.Form("btnLogon") > "" Then un = txtUserName.Value pw = txtPassWord.Value If un = "mark" And pw = "soft131" Then Response.Redirect("home.htm") Else msg.innerText = "Login details incorrect." End If End Sub Please logon: Logon.aspx My Home page Welcome to my home page. Home.htm

5 Mark Dixon Page 5 Example: Logon (Fixed Problem) View Source – shows client-side script: No server-side code

6 Mark Dixon Page 6 Example: Logon (Problem 2) User can type home page url (address) directly (bypassing logon page)

7 Mark Dixon Page 7 Solution Need way for: –password page to tell home page –that user logged in OK

8 Mark Dixon Page 8 Technique: Dead-Drop Variables 2 Spies wish to pass message between each other without actually meeting Arrange a dead-drop location –one spy leaves message at location –other spy visits location later to pick up message Variables used as dead-drop containers

9 Mark Dixon Page 9 Example: Logon v3 (code) Dim LogonOK As Boolean Sub Page_Load() Dim un As String Dim pw As String LogonOK = False If Request.Form("btnLogon") > "" Then un = txtUserName.Value pw = txtPassWord.Value If un = "mark" And pw = "soft131" Then LogonOK = True Response.Redirect("home3.htm") Else msg.innerText = "Login details incorrect." End If End Sub Please logon: Logon3.aspx Dim LogonOK As Boolean Sub Page_Load() If LogonOK = False Then Response.Redirect("Logon3.aspx") End If End Sub My Home page Welcome to my home page. Home3.aspx Does not work: always redirect to logon LogonOK True

10 Mark Dixon Page 10 Example: Logon v3 (Error) Variables – don't persist between pages

11 Mark Dixon Page 11 Passing Data (temporary) Session object –used to pass information between pages: –exists for current session –persist between pages –clears if user closes browser –clears after 20 mins of inactivity –no need for declaration Session("Thing") = 91 Put 91 into Thing

12 Mark Dixon Page 12 Maintaining State: Session Object Sub Page_Load() If Request.Form("btnSend") > "" Then Session("MSG") = "Meet in BGB202" ElseIf Request.Form("btnClear") > "" Then Session.Abandon() End If End Sub Display Send.aspx Session variable –all strings –no declaration Abandon method –deletes all session variables

13 Mark Dixon Page 13 Maintaining State: Session Object Sub Page_Load() parMsg.InnerText = Session("MSG") End Sub Display.aspx read session variable, and display in parMsg

14 Mark Dixon Page 14 Example: Message Using Session variable: Sub Page_Load() If Request.Form("btnSend") > "" Then Session("MSG") = "Meet in BGB202" ElseIf Request.Form("btnClear") > "" Then Session.Abandon() End If End Sub Display Send.aspx Sub Page_Load() parMsg.InnerText = Session("MSG") End Sub Display.aspx MSG Meet in BGB202

15 Mark Dixon Page 15 Questions: Session Variables Write a line of VB code to put the number 74 into a session variable called id. Write VB code that displays 'Hello' in parMsg if the session variable called id is equal to 74 Session("id") = 74 If Session("id") = 74 Then parMsg.InnerText = "Hello" End If

16 Mark Dixon Page 16 Passing Data (temporary) Query Strings –Useful for passing information between pages via links

17 Mark Dixon Page 17 Maintaining State: Query Strings Data added to end of URL (address): http://localhost/page.asp?Surname=Bob ASP code can use this data: –Request.QueryString("Surname") would return the value "Bob" Form method=get –data automatically added to query string Query String

18 Mark Dixon Page 18 Example: Date-Time What background colour do you want for you date information? Yellow Light Blue Menu.aspx > The date is. The time is. DateTime.aspx

19 Mark Dixon Page 19 Reference: Server Object Model Request object: calling web page –Form: used to get form data from page –QueryString: used to get data from address (?) Response object: web page sent back –Write: used to put text into web page –Redirect: used to navigate to other page –Clear: erases all HTML in web page Session object: store data between pages –Abandon: clears session data

20 Mark Dixon Page 20 Passing Data (persistent) Cookies (not covered in this module) –stored on users’ (client) hard drive –persists between sessions Database/file (covered in later lectures) –stored on server hard drive –persists between sessions

21 Mark Dixon Page 21 Example: Apples (analysis) SPECIFICATION User Requirements –help young children learn to count from 1 to 10 Software Requirements –Functional: –computer selects number between 1 and 10 –computer displays that number of apples –user (child) types digits –computer compares digits to number of apples –Non-functional should be easy to use and interesting

22 Mark Dixon Page 22 Example: Apples v2 (design) Functionality: computer selects number between 1 and 10 computer displays that number of apples user types digits computer compares digits to number of apples

23 Mark Dixon Page 23 Example: Apples v2 (code) Dim n As Long Sub Page_Load() Dim html As String Dim a As Long If Request.Form("btnStart") > "" Then n = 1 + Int(Rnd() * 9) html = "How many apples are there? " For a = 1 To n html = html & " " Next quest.InnerHtml = html Session("NumApples") = n msg.InnerHtml = "" txtAns.Value = "" btnStart.Disabled = True btnCheck.Disabled = False ElseIf Request.Form("btnCheck") > "" Then n = Session("NumApples") If CInt(txtAns.Value) = CInt(n) Then msg.InnerHtml = "Correct, well done!" Else msg.InnerHtml = "Sorry, please try again." End If btnStart.Disabled = False btnCheck.Disabled = True End If End Sub Apples.aspx Dim n As Long Sub Page_Load() Dim html As String Dim a As Long If Request.Form("btnStart") > "" Then n = 1 + Int(Rnd() * 9) html = "How many apples are there? " For a = 1 To n html = html & " " Next quest.InnerHtml = html Session("NumApples") = n msg.InnerHtml = "" txtAns.Value = "" btnStart.Disabled = True btnCheck.Disabled = False

24 Mark Dixon Page 24 Example: Apples v2 (code) Dim n As Long Sub Page_Load() Dim html As String Dim a As Long If Request.Form("btnStart") > "" Then n = 1 + Int(Rnd() * 9) html = "How many apples are there? " For a = 1 To n html = html & " " Next quest.InnerHtml = html Session("NumApples") = n msg.InnerHtml = "" txtAns.Value = "" btnStart.Disabled = True btnCheck.Disabled = False ElseIf Request.Form("btnCheck") > "" Then n = Session("NumApples") If CInt(txtAns.Value) = CInt(n) Then msg.InnerHtml = "Correct, well done!" Else msg.InnerHtml = "Sorry, please try again." End If btnStart.Disabled = False btnCheck.Disabled = True End If End Sub Apples.aspx ElseIf Request.Form("btnCheck") > "" Then n = Session("NumApples") If CInt(txtAns.Value) = CInt(n) Then msg.InnerHtml = "Correct, well done!" Else msg.InnerHtml = "Sorry, please try again." End If btnStart.Disabled = False btnCheck.Disabled = True End If End Sub

25 Mark Dixon Page 25 Problem Solving Strategies bottom-up –Create a detailed solution first –Then look for best solution –refactoring – process of: changing internal design of code, without altering what it does top-down –plan overall design –fill in details in practice mixed – novices favour bot-up, experts top-down

26 Mark Dixon Page 26 Example: Apples (Dependencies) Difficult to see dependencies for lines far apart Dim n As Long Sub Page_Load() Dim html As String Dim a As Long If Request.Form("btnStart") > "" Then n = 1 + Int(Rnd() * 9) html = "How many apples are there? " For a = 1 To n html = html & " " Next quest.InnerHtml = html Session("NumApples") = n msg.InnerHtml = "" txtAns.Value = "" btnStart.Disabled = True btnCheck.Disabled = False

27 Mark Dixon Page 27 Example: Apples (Dependencies) Put dependent lines close together Dim n As Long Sub Page_Load() Dim html As String Dim a As Long If Request.Form("btnStart") > "" Then n = 1 + Int(Rnd() * 9) Session("NumApples") = n html = "How many apples are there? " For a = 1 To n html = html & " " Next quest.InnerHtml = html msg.InnerHtml = "" txtAns.Value = "" btnStart.Disabled = True btnCheck.Disabled = False

28 Mark Dixon Page 28 Example: Apples v3 (design) Functionality: computer selects number between 1 and 10 computer displays that number of apples user types digits computer compares digits to number of apples and displays number of apples typed by user

29 Mark Dixon Page 29 Example: Apples v3 (code) Dim n As Long Sub Page_Load() Dim html As String Dim msg As String Dim a As Long If Request.Form("btnStart") > "" Then n = 1 + Int(Rnd() * 9) Session("NumApples") = n html = "How many apples are there? " For a = 1 To n html = html & " " Next parQuest.InnerHtml = html parMsg.InnerHtml = "" txtAns.Value = "" btnStart.Disabled = True btnCheck.Disabled = False ElseIf Request.Form("btnCheck") > "" Then n = Session("NumApples") msg = "" For a = 1 To txtAns.Value msg = msg & " " Next If CInt(txtAns.Value) = CInt(n) Then msg = msg & "Correct, well done!" Else msg = msg & "Sorry, please try again." End If parMsg.InnerHtml = msg btnStart.Disabled = False btnCheck.Disabled = True End If End Sub Apples.aspx ElseIf Request.Form("btnCheck") > "" Then n = Session("NumApples") msg = "" For a = 1 To txtAns.Value msg = msg & " " Next If CInt(txtAns.Value) = CInt(n) Then msg = msg & "Correct, well done!" Else msg = msg & "Sorry, please try again." End If parMsg.InnerHtml = msg btnStart.Disabled = False btnCheck.Disabled = True End If End Sub copy + paste

30 Mark Dixon Page 30 Modular Design What do lines do (group summary)? n = 1 + Int(Rnd() * 9) Session("NumApples") = n html = "How many apples are there? " For a = 1 To n html = html & " " Next parQuest.InnerHtml = html parMsg.InnerHtml = "" txtAns.Value = "" btnStart.Disabled = True btnCheck.Disabled = False Pick Num. of Apples Display Question Prepare for Response

31 Mark Dixon Page 31 Modular Design (top level) Top level reads like English algorithm: Dim n As Long Dim html As String Dim msg As String Dim a As Long Sub Page_Load() If Request.Form("btnStart") > "" Then PickRandomNumberOfApples DisplayApplesQuest PrepareForResponse ElseIf Request.Form("btnCheck") > "" Then n = Session("NumApples") DisplayApplesUser DisplayFeedback PrepareForQuest End If End Sub

32 Mark Dixon Page 32 Modular Design (detail) Procedures contain (hide) detail: Sub PickRandomNumberOfApples() n = 1 + Int(Rnd() * 9) Session("NumApples") = n End Sub Sub DisplayApplesQuest() Dim html As String html = "How many apples are there? " For a = 1 To n html = html & " " Next parQuest.InnerHtml = html End Sub Sub DisplayApplesUser() msg = "" For a = 1 To txtAns.Value msg = msg & " " Next End Sub Sub DisplayFeedback() If CInt(txtAns.Value) = CInt(n) Then msg = msg & "Correct, well done!" Else msg = msg & "Sorry, please try again." End If parMsg.InnerHtml = msg End Sub Sub PrepareForResponse() parMsg.InnerHtml = "" txtAns.Value = "" btnStart.Disabled = True btnCheck.Disabled = False End Sub Sub PrepareForQuest() btnStart.Disabled = False btnCheck.Disabled = True End Sub Sub DisplayApplesQuest() html = "How many apples are there? " For a = 1 To n html = html & " " Next parQuest.InnerHtml = html End Sub Sub DisplayApplesUser() msg = "" For a = 1 To txtAns.Value msg = msg & " " Next End Sub

33 Mark Dixon Page 33 Routines: Self-Contained Good design principle: –routines (functions and procedures) should be self-contained (easier to re-use in other programs) Dim u As Long u = Twice(4) Function Twice(a As Long) Return a * 2 End Function Dim u As Long Dim a As Long a = 4 u = Twice() Function Twice() Return a * 2 End Function 

34 Mark Dixon Page 34 Question: Self-Contained Routines Are the following routines self contained? Dim num1 Dim num2 Dim diff Sub Compare() diff = num1 - num2 End Sub Function Half(num As Double) As Double Return num / 2 End Function 

35 Mark Dixon Page 35 Problem Solving: 9 dots Join all 9 dots –with straight continuous lines

36 Mark Dixon Page 36 Problem Solving Process (Name Split) Problem: a variable exists called n. This contains a person's full name (forename, then surname ). It needs to be split into two separate variables. Dim n As String n = "Ruth Jones" Solution Process: –What do I do to solve this manually (on paper)? –How do I know where the forename ends and the surname begins? –The space is the key: Find the space everything before the space is the forename everything after the space is the surname

37 Mark Dixon Page 37 Tutorial Exercise: Apples LEARNING OBJECTIVE: identify dependencies between lines of code refactor code: dependent lines closer refactor code: split into routines (procedures and functions) refactor code: make routines self-contained Task 1: Get the Apples v3 example (from the lecture) working Task 2: Modify your page to keep a score. HINT: Try to identify the routines first, then fill in the code.

38 Mark Dixon Page 38 Tutorial Exercise: Message LEARNING OBJECTIVE: pass data between pages using session variables, and (form) self- posting Task 1: Get the message example working (from the lecture) Task 2: Change the send.aspx page so that when you click the buttons it gives some feedback as to what has happened. hint: add a paragraph

39 Mark Dixon Page 39 Tutorial Exercise: Apples LEARNING OBJECTIVE: pass data between pages using session variables, and (form) self- posting Task 1: Type in the code for the Apples example (from the lecture) Task 2: Modify this to use a session variable to 'remember' the random number, so that it works properly. Task 3: Change it so that it disables the buttons appropriately Task 4: Change it so that it clears the text box and feedback as a new question begins Task 5: Add a score facility. –when the page loads, the score should be 0 –when the answer is correct, the score should increase by 1 –when the score goes over 10, a congratulations message should be shown, and the score reset to 0

40 Mark Dixon Page 40 Tutorial Exercise: Logon LEARNING OBJECTIVE: pass data between pages using session variables, and (form) self- posting Task 1: Type in the code for the Logon v3 example (from the lecture) NOTE: this will not work properly (variables do not persist between pages) Task 2: Modify this to use a session variable to 'remember' whether the logon was successful. Note: It should not be possible to view the source code Note: It should not be possible to bypass the logon

41 Mark Dixon Page 41 Tutorial Exercise: Date LEARNING OBJECTIVE: pass data between pages using query strings Task 1: Get the Date-Time example (from the lecture) working Task 2: Modify your page to provide another choice of background colour.


Download ppt "Mark Dixon Page 1 19 – Passing Data between pages: Forms, Sessions, & Query Strings."

Similar presentations


Ads by Google