4.1. Các thành phần đợc dùng trong trang ASP
File ASP là một file dới dạng Text, ta có thể sử dụng bất cứ trình soạn thảo văn bản dới dạng text only để soạn thảo ra file ASP. File ASP có phần mở rộng là .asp . Trong file ASP có thể có:
- Các mã HTML.
- Các kí hiệu phân cách Script
- Các mã Script
- Các thànhh phần ActiveX
- Các đối tợng ASP
Điểm khác biệt cơ bản giữa file ASP với file HTML là sự có mặt các dấu phân cách các mã Script với các mã HTML. Trong file ASP
nếu ta viết hớng dẫn <%<lệnh>%> thì ASP hiểu rằng lệnh bên trong hai dấu <% và %> là một lệnh Script. Nh đã nói ở trên, các lệnh Script có thể là VBScript hay Jscript
4.2. Biến trong ASP
Biến cho bằng một tên gọi nào đó (quy cách giống nh biến dùng trong Visual Basic). Khi sử dụng biến trong Script, ta không cần phải khai báo trớc mà sử dụng trực tiếp. Các biến trong ASP không có kiểu, kiểu của nó sẽ đợc xác định một cách tự động khi có lệnh gán giá trị vào biến. Nếu có khai báo biến thì cú pháp nh sau: Dim tên_biến
Ví dụ: Ta có khai báo nh sau:
<%
Dim strSQL, liCounter
strSQL="Select * from Customers" liCounter=10
%>
Khi gán giá trị cho biến hoặc khai báo, ta có thể sử dụng dấu “:” để phân cách phát huy thay vì khai báo trên hai dòng nh sau:
<%
Dim liCounter1; liCounter liCounter1=10:liCounter2=20 %>
Trong trờng hợp khai báo biến mảng, ta cũng thực hiện tơng tự nh các khai báo mảnh trong Visual Basic 6.0. Chẳng hạn, chúng ta khai báo mảng nh sau:
<%
arrDay=array("","","Mon","Tue","Web","Thu","Fri ","Sat","Sun")
%>
Nếu khai báo trớc sau đó gán giá trị, ta chỉ định số phần tử của mảng, ví dụ khai báo mảng gồm 100 phần tử nh sau:
dim arStoreName (100)
Trong trờng hợp mảng hai chiều, ta khai báo tơng tự nh sau
dim arStoreName (100,100)
Lu ý rằng, ta có thể sử dụng từ khoá ReDim để khai báo lại mảng động nh sau dim x,l x=cstr(Session.SessionID) l=len(x) Dim arrSession() ReDim arrSession(l) 4.3. Dấu gạch dới
Cũng nh trong ngôn ngữ lập trình Visual Basis 6.0 để tiếp nối câu lệch quá dài, ta sử dụng dấu gạch dới (_). Chẳng hạn, để khai báo phát biểu SQL dạng Select quá dài, ta có thể khai báo với dấu gạch d- ới nh sau:
sql="Select R.MaSV, R.Hoten, R.NgaySinh, R.MaLop, S.Tenlop "_
& "From HosoSV R, Lop S"_ & "where R.MaLop=S.Malop"
Tuy nhiên, ta cũng có thể sử dụng phép toán & hay + để kết nối chuỗi nh sau:
sql="Select R.MaSV,R.Hoten, R.NgaySinh, R.MaLop, S.Tenlop"
sql=sql & "From HosoSV R, Lop S" sql=sql & "where R.MaLop=S.Malop"
sql="Select R.MaSV,R.Hoten, R.NgaySinh, R.MaLop, S.Tenlop "&_
"From HosoSV R, Lop S"&_ & "where R.MaLop=S.Malop"
4.4. Dấu ghi chú
Cũng tơng tự nh VB, ta sử dụng dấu ' để khai báo câu ghi chú trong mã ASP.
Ví dụ: ngay=arrDay(2) ' trả về Mon
4.5. Các lệnh cơ bản của ASP4.5.1. Lệnh gán 4.5.1. Lệnh gán
Cú pháp: <%<biến>=[giá trị]%> Lệnh này sẽ nạp giá trị vào biến
Ví dụ: ngay=13
4.5.2. Lệnh đa ra màn hình giá trị của biến
Cú pháp: <%=<biến>%>
Khi xử lý lệnh này, ASP chuyển đoạn mã ngữ trên thành một văn bản với nội dung chính là lệnh gán giá trị của biến. Khi trình duyệt xử lý nó sẽ hiển thị giá trị này ra màn hình.
Ví dụ: <%=ngay%>
4.5.3. Các cấu trúc điều khiểna. Câu lệnh If...then...else... end if a. Câu lệnh If...then...else... end if
Cú pháp
- Câu lệnh điều kiện IF…THEN if <điều kiện> then
<lệnh>
- Câu lệnh IF…THEN…ELSE
if <điều kiện> then <lệnh 1>
Else <lệnh 2>
End if
- Câu lệnh IF lồng nhau:
if <điều kiện 1> then <lệnh 1>
Else if <điều kiện 2> then <lệnh 2>
Else <Các câu lệnh khác>
End if
Ví dụ 4.5.3.1. Kiểm tra thời gian để hiển thị câu “Bây giờ là buổi sáng” hay “Bây giờ là buổi chiều”
<html> <head>
<title>Cau truc if then</title> </head>
<body>
<% if time<=#12:00:00 AM# then x="Bõy giờ là buổi sỏng" else
x="Bõy giờ là buổi chiều" end if
%>
<%=x%> </body> </html>
<% Dim x,y x=Session.SessionID if x<>"" then x=x+"AAA" y="ASP 3.0 (VBScript)" %> <html> <head>
<title>Welcome to <%=y%></title> </head>
<body>
<h4>Welcome to <%=y%></h4> <hr size=2 color=red><br> <%if len(x)>10 then%>
Hitcounter <%=x%> <%end if%>
</body> </html>
Chú ý: Do cú pháp tơng tự nh cú pháp của Visual Basic 6.0, cho nên phát biểu If không có End if khi câu lệnh cùng nằm trên một hàng. Tuy nhiên nếu câu lệnh bên trong là cấu trúc HTML ta phải sử dụng phát biểu End if.
<%if len(x)>10 then%> <hr> <%end if%> b. Cấu trúc lựa chọn Select Case
Cú pháp:
Select case <biểu thức>
case <danh sách các giá trị 1> <các câu lệnh 1>
case <danh sách các giá trị 2> <các câu lệnh 2>
...
case <danh sách các giá trị n> <các câu lệnh n> case else <các câu lệnh n+1> End select Ví dụ 4.5.3.3: <html> <head>
<title>Cau truc Select Case</title> </head>
<body> <%
bien=5
select case bien case 1,2,3 Response.Write ("chon 1") case 2,3,4 Response.Write "chon 2" case else Response.write "chon 3"
end select %> </body> </html> Kết quả: Chon 3 4.5.4. Cấu trúc vòng lặp
Hầu hết các lệnh lặp trong Visual Basic đều sử dụng trong ASP. Ta có các vòng lặp sau:
a. Vòng lặp for Cú pháp:
- Câu lệnh lặp For…Next…
For <biến đếm>=<điểm đầu> To <điểm cuối>
[Step <bớc nhảy>]
<Khối lệnh>
Next
- Câu lệnh lặp For Each…Next
For Each <Phần tử> In <nhóm> <Khối lệnh>
Next Ví dụ 4.5.4.1:
<%for i=5 to 7 %>
<font size =<%=i%>>Chào bạn!<br></font> <% Next %> Ví dụ 4.5.4.2: Sử dụng lệnh for <% Dim x,l x=cstr(Session.SessionID) l=len(x)
Dim i Dim arr() ReDim arr(l) for i=0 to l-1 arr(i)=x & i next strSQL ="asasa" & _ "asasa" response.write strSQL %> <html> <head>
<title>Lenh lap for</title> </head>
<body>
<h4>Welcome to ASP 3.0</h4> <hr size=1 color=red><br>
<%for i=0 to l-1%> <%=arr(i)%><br>
<%next%>
</body> </html>
Chú ý: SessionID là số nguyên dài (Long) do Web Server cấp phát tự động cho mỗi browser khi chúng ta truy cập Web
b. Vòng lặp Do..loop
- Lặp trong khi điều kiện True Do While <điều kiện> <Khối lệnh> [Exit Do] Loop hoặc Do <Khối lệnh> [Exit Do]
Loop While <điều kiện>
- Lặp trong khi điều False Do Until <điều kiện> <Khối lệnh> [Exit Do] Loop hoặc Do <Khối lệnh> [Exit Do]
Ví dụ: <% i=1 do i=i+1 Response.Write i loop while i<=10 %>
c. Vòng lặp While .. WendCú pháp Cú pháp
While <điều kiện> <Khối lệnh>
Wend
Tơng tự nh vòng lặp Do…Loop, nhng vòng lặp While…End
không thể thoát khỏi vòng lặp bằng lệnh Exit, chỉ thoát khi điều kiện là
False.
4.6. Xây dựng các hàm và thủ tục trong ASP
Ta có thể sử dụng các ngôn ngữ Script để xây dựng các hàm và thủ tục trong file ASP. Trớc khi viết một hàm và thủ tục bằng ngôn ngữ gì ta phải thông báo cho ASP biết bằng thẻ Script nh đã biết.
Cấu trúc một hàm trong ASP có dạng sau:
<SCRIPT RUNAT =SERVER LANGUAGE=”LANGUAGENAME”> Function <FunctionName> (Biến)
Các dòng lệnh Script
End Function
‘Thủ tục:
Sub <SubName> (Biến)
Các dòng lệnh Script
End Sub </SCRIPT>
Đối với hàm thì trong thân của hàm cần có một lệnh gán giá trị tính đợc cho một biến có tên trùng với tên hàm.
Cách gọi thủ tục:
Call SubName hoặc SubName Ví dụ ta có hàm sau:
<%Function Calculate(A, B, Op) Select Case Op Case “+” Calculate = A+B Case “-” Calculate = A-B Case “*” Calculate = A*B Case “/” Calculate = A/B End Select End Function Response.write Calculate(2, 3, “+”) Response.write Calculate(2, 3, “-) %> Chú ý: Có thể sử dụng <!--#include file|virtual=”file_name”--> để sử dụng lại các hàm và thủ tục đã đợc xây dựng trong một file nào đó. 5. Sử dụng các đối tợng của ASP để trao đổi thông tin giữa
Client và Server
5.1. Giới thiệu các đối tợng chính của ASP
Đối tợng là những đoạn chơng trình có khả năng thực hiện một số công việc cơ bản nào đó. Mỗi đối tợng là một kết hợp giữa lập trình và dữ liệu, vốn có thể xử lý nh 1 đơn vị thống nhất.
Các đối tợng ASP cho phép chúng ta giao tiếp, tơng tác với cả máy chủ (Webserver) lẫn trình duyệt (browser). Trong các kịch bản, thông thờng chúng ta phải dùng vài đối tợng.
Tơng tự nh trong các ngôn ngữ lập trình hớng đối tợng, ASP cho phép ngời lập trình tạo ra các đối tợng, các lớp theo mục đích sử dụng riêng. ASP cũng cung cấp sẵn có một số đối tợng hay đợc sử dụng. Đó là 5 đối tợng sau
Application Chia sẻ thông tin giữa các ngời dùng trong một ứng dụng
Session Lu giữ các thông tin duy nhất về phiên làm việc hiện thời của một ngời sử dụng cụ thể
Server Cho phép truy cập tới máy chủ Request Lấy thông tin từ phía ngời dùng Response Gửi thông tin tới ngời dùng
Sơ đồ mối quan hệ giữa các đối tợng ASP trong ứng dụng ASP
nh sau
I. File Global.asa
Là nơi khai báo các đối tợng, biến có phạm vi phiên làm việc hay toàn bộ ứng dụng. File Global đợc kích hoạt mỗi khi một phiên làm việc mới đợc thiết lập, tuy nhiên sự kiện Application_OnStart chỉ đợc kích hoạt một lần khi webserver đợc khởi động. Mỗi một ứng dụng chỉ có thể có duy nhất một file Global.asa.
Các sự kiện của các đối tợng Application và Session đợc khai báo trong file Global.asa
<Script Language=VBScipt RUNAT=Server> Application_OnStart End Sub Application_OnEnd End Sub Session_OnStart End Sub Session_OnEnd End Sub </Script>
Ngoài ra ta có thể viết các hàm và thủ tục đặt trong file Global.asa để phục vụ cho cả ứng dụng hay cho từng phiên làm việc cụ thể, các thủ tục và các hàm này phải nằm trong các sự kiện của hai đối tợng Application và Session.
5.3. Đối tợng Request 5.3.1. ý nghĩa
Đối tợng Request dùng để nhận thông tin yêu cầu đợc gửi từ Client Side đến Server Side.
Khi một Browser liên lạc với Server thông qua giao thức HTTP, Browser gửi yêu cầu tới Server, ngoài tên của trang đợc yêu cầu thì còn rất nhiều thông tin khác đi kèm đợc gửi tới Server. Các thông tin này có thể là các biến môi trờng, các thông tin do user cung cấp dới dạng điền vào các bảng, Cookies,..Tất cả các thông tin này đợc mã hoá và truyền đi cùng với HTTP headers. ASP cho phép lấy ra các thông tin này bằng cách sử dụng đối tợng Request.
Khi sử dụng đối tợng Request ta có thể sử dụng các thành phần (Collection) và thuộc tính nh: Request.Form, Request.QueryString, Request.ServerVariables, Request.Cookies, Request.Item, Request.TotalBytes,…
Trong phần này chúng ta tập trung tìm hiểu 4 thành phần chính của đối tợng Request là Request.Form, Request.QueryString, Request.ServerVariables, Request.Cookies.
II. Request
Request.Form trả về thông tin của các field trong thẻ <form> với phơng thức (method) là POST (tham khảo trong chơng kế tiếp) khi ng- ời sử dụng đệ trình (submit) từ Client Side lên Server Side.
Để sử dụng Request. Form ta sử dụng cú pháp: Request.Form(“Fieldname”) [(element)|.count]
Trong đó,
• fieldname là tên của các thẻ HTML dạng <input>, <textarea>, <select>.
• (element) là thứ tự của field cùng tên và
• count là số lợng fieldname cùng tên.
Chẳng hạn, chúng ta khai báo trang HTML dùng để đăng nhập hệ thống ứng dụng với các field là username và password cùng với thẻ form có tên frmlogin nh ví dụ.
Ví dụ 5.3.1. Khai báo thẻ field trong thẻ form
<html> <head>
<title> form login </title> </head>
<body>
<hr size=1 color=red><br>
<!-- Khai bao thẻ mở của form -->
<form action=laygtlogin.asp method=post name=frmlogin>
<table border=0>
<tr><td>Username: </td>
<!-- Khai báo field có tên là user -->
<td><input type=text name=username></td></tr> <tr><td>Password: </td>
<td><input type=password name=password></td> </tr><tr>
<td ></td><td><input type=submit value="Login"></td>
</tr></table> </form>
<hr size=1 color=red><br> </body>
</html>
Chú ý:
• Trong HTML, nội dung khai báo trong cặp dấu <!-- và --> trở thành ghi chú, điều này có nghĩa là chuỗi đó sẽ không xuất hiện trong đó.
• Không cần khai báo thuộc tính name khi ta không có nhu cầu truy cập đến các field này trên trình khách.
• Thông tin khai báo trong thẻ mở và đóng của <body> xuất hiện trên trình duyệt ngoại trừ thông tin khai báo trong cặp thẻ <!-- -- >.
Nếu sử dụng nhập giá trị vào username và password sau đó nhấn nút login, form có tên frmlogin sẽ đợc đệ trình lên Server Side, để lấy đợc giá trị của ngời sử dụng nhập trên trang ex1.htm, chúng ta khai báo trang ASP và sử dụng Request.Form nh ví dụ:
<head>
<title> Ket qua login </title> </head>
<body>
<h4>Login authenctication</h4> <hr size=1 color=red><br>
<table border=0> <tr><td>Username: </td> <td><b><%=Request.Form("username")%></b></td> </tr><tr> <td>Password: </td> <td><b><%=Request.Form("password")%></b></td> </tr></table>
<hr size=1 color=red><br> </body>
</html>
Kết quả chạy nh sau
Chú ý:
• Ta có thể khai báo Request.Form(''fieldname'') với ký tự thờng nh:
request.form(''fieldname'').
• Tên của field không phân biệt kiểu chữ hoa hay thờng, chẳng hạn ta có thể khai báo request.form(''username'') hay
request.form(''USERNNAME'') cho dù ta khai báo tên là ''username'' trong trang login.htm.
• Thay vì khai báo Request.Form(''fieldname'') ta có thể khai báo
Request(''fieldname'').
Tuy nhiên, ta có thể khai báo biến và gán giá trị vào biến từ
Request.Form sau đó kết luận giá trị của biến đó nh ví dụ 5.3.3. Ngoài ra, ta có thể chỉ định số thứ tự tơng ứng với field khai báo trong thẻ
form nh ví dụ 5.3.4.
Ví dụ 5.3.3. Khai báo biến <% Dim u,p u= Request.Form("username") p= Request.Form("password") %> <html> <head>
<title> Ket qua Login </title> </head> <body> <h4>Login authenctication</h4> <hr size=1 color=red><br> <table border=0> <tr><td>Username: </td> Ví dụ 5.3.4.
Lấy giá trị của chỉ mục field String thẻ form.
<html> <head>
<title> Ket qua login </title> </head>
<body>
<h4>Login authenctication</h4> <hr size=1 color=red><br>
<table border=0> <tr><td>Username: </td> <td><b><%=Request.Form(1)%></b></td> </tr><tr> <td>Password: </td> <td><b><%=Request.Form(2)%></b></td> </tr></table>
<td><b><%=u %></b></td> </tr><tr> <td>Password: </td> <td><b><%=p %></b></td> </tr></table> <hr size=1 color=red><br> </body> </html> </body> </html> Chú ý: • Chỉ mục bắt đầu số 1 và chỉ mục sử dụng cho các thẻ dùng để chọn giá trị hay nhập liệu.
• Chỉ mục không có hiệu lực khi ta sử dụng đối tợng Request
không có Collection, ví dụ nh Request(1). Tơng tự nh vậy, trong trờng hợp sử dụng biến để lấy giá trị từ Request.Form ta có thể khai báo nh sau:
Dim u,p
u= Request.Form("username") p= Request.Form("password")
• Nếu chỉ mục không tồn tại, lỗi phát sinh với thông báo nh sau: Request object error 'ASP 0105: 80004005'
Index out of range
/doituongASP/ laygtlogin2.asp, line 15 An array index is out of range
Cho dù ta khai báo các cách trên, kết quả của trang
laygtlogin.asp, laygtlogin1.asp, laygtlogin2.asp sẽ đợc trình bày nh hình trên khi ngời sử dụng Submit trang login.htm
Nếu nh ta có nhiều field cùng tên, khi sử dụng đối tợng
Request.Form, mặc định là field đầu tiên. Chẳng hạn, chúng ta khai báo trang HTML có tên nhieufield.htm với nội dung nh ví dụ 5.3.5. nh sau
Ví dụ 5.3.5. Khai báo nhiều field cùng tên trong thẻ form
<html> <head>
<title> nhieu field</title> </head>
<body>
<h4>Order Details</h4> <hr size=1 color=red><br>
<!-- Khai bao thẻ mở của form --> <form action=laygtform.asp method=post name=frmlogin>
<!-- Khai bao thẻ select có tên Item thứ nhất -->
<tr><td>Item: </td><td><select name=item> <option value="A0001:
Active Server Pages 3.0">
A0001: Active Server Pages 3.0</option> <option value="B0001:
SQL Server 2000">
B0001: SQL Server 2000</option></select> </td></tr>
<!-- Khai báo thẻ input có tên qtty thứ nhất-->
<tr>
<td>Qtty:</td><td><input type=text