Chúng là những file có chứa các mã lập trình, có thể tạo ra các trang web động, cho phép trả về cho client trang web có nội dung có thể thay đổi một cách linh động ứng với những ngữ cảnh[r]
(1)Chương 1
GIỚI THIỆU ASP
Mục tiêu
Giới thiệu ngôn ngữ ASP
Cài đặt chạy ứng dụng ASP server IIS Các cú pháp VBScript
Các đối tượng có sẵn
Thao tác với Database ASP
1.1 Giới thiệu ngôn ngữ lập trình web động ASP
Các website thuở ban đầu bao gồm trang web tĩnh dạng file HTML, tất cần hiển thị trang web người thiết kế phải tạo sẵn trang Các trang web tĩnh có htm html
Chẳng hạn muốn tạo trang web có hiển thị chữ “Hello” với màu chữ đỏ người ta viết file index.html với nội dung sau:
<html> <head>
<title>index</title> </head>
<body>
<p><font color="red">Hello</font></p> </body>
</html>
Trang web sau lưu Web Server Khi người dùng muốn xem trang web họ dùng trình duyệt gửi yêu cầu đến server cách gõ vào địa URL ví dụ : http://localhost/index.html
Lúc Web Server nhận yêu cầu tìm kho liệu trang web index.html tương ứng gửi cho client, sau trang web hiển thị trình duyệt
Đó cách hoạt động web tĩnh
Hình 1.1 Cách hoạt động web tĩnh
(2)nhiều tình mà nội dung trang web khơng phải lúc soạn thảo lưu trữ sẵn mà cần sinh cách tự động tùy thuộc vào ngữ cảnh; có xử lý phức tạp việc server đơn giản trả trang html nhận yêu cầu từ người dùng, ví dụ phải thu thập thơng tin mà người dùng gửi lên qua URL hay form, truy cập liệu database Lấy ví dụ muốn xây dựng trang web Login.htm yêu cầu người sử dụng nhập tên username, sau submit web server gửi người dùng trang web Result.html có nội dung :
Welcome username!
Dễ dàng thấy trang Result.htm khơng thể soạn thảo sẵn ứng với username mà người dùng nhập vào, trang có nội dung khác
Hình 1.2 Trang Result.html có nội dung khác tùy vào tương tác client webserver Nó khơng thể soạn thảo sẵn!
Nghĩa trang web tĩnh khơng có khả tương tác với người dùng Trong thực tế có nhiều trường hợp thường gặp giới web địi hỏi tương tác mà web tĩnh khơng thể giải (chat, forums, web mail, trang tin tức, giỏ hàng, thông tin thời tiết ngày, tỷ giá ngoại tệ hàng ngày)
(3)Một số ngơn ngữ lập trình web động phổ biến gồm ASP, PHP, Java, net ASP (Active Server Pages) ngôn ngữ lập trình web viết hãng Microsoft, phổ biến hệ điều hành Microsoft Windows Các trang web viết ngơn ngữ có phần mở rộng asp (ví dụ HelloWorld.asp) thay htm hay html Nội dung file ASP giống file Html bình thường, bao gồm cú pháp html trộn lẫn mã lập trình ASP (cịn gọi script, viết VBScript hay JavaScript) Các Script ASP thực thi server Có thể nói trang ASP kết hợp thẻ html, script ActiveX Component Script trộn lẫn thẻ html nằm cặp dấu <% %>
1.2 Web Server IIS
Thông thường người ta dùng ASP với Web Server có tên Internet Information Services (IIS) Microsoft Đây thành phần có sẵn hệ điều hành Windows 2000, XP cao
Nếu máy tính chưa cài đặt vào Control Panel =>Add/remove programs=> Add/remove Windows Components=>Internet Information Services (IIS) chọn cài đặt thành phần
1.3 Cài đặt chạy ứng dụng ASP đầu tiên
Để bắt đầu chạy website viết ngôn ngữ ASP thực bước sau:
• Cài đặt web server IIS ( phần trên) start IIS
(4)server
• Dùng trình duyệt (như Internet Explorer) client yêu cầu file ASP hiển thị kết trả
1.3.1 Cấu hình cho Website IIS
Sau start IIS mặc định web server phục vụ địa http://localhost (địa máy local, giống địa website kiểu
http://www.yahoo.com Internet)
Chúng ta tạo thư mục ảo (Virtual Directory) web server để chứa ứng dụng web, ví dụ http://localhost/test “test” gọi Alias Virtual Directory Vậy để lưu trữ trang ASP server trước hết ta tạo Virtual Directory với Alias thư mục tương ứng upload file ASP vào thư mục này, sau truy cập trang ASP thông qua địa
http://localhost/Alias
Cách tạo Virtual Directory IIS: Vào Web Server từ Control Panel=> Administrative Tools=>Internet Services Manager (hoặc Computer Management)=> Default Website (nếu thấy stop start lên) => New=> Virtual Directory (làm theo wizard, chọn tham số Alias: tên Virtual Directory ví dụ “test”,Directory: thư mục chứa Website ví dụ “C:\Web”)
(5)Sau kết thúc wizard có Virtual Directory sẵn sàng web server Hãy save trang asp vào thư mục “c:\Web” Địa truy cập vào website trường hợp là: http://localhost/test/
Một cách khác tương tự dễ thao tác nhấn chuột phải vào thư mục C:\web, chọn Properties => Web sharing => Share this folder=> Add Alias 1.3.2 Viết file ASP
Script viết cặp thẻ <% %>, bắt đầu thẻ mở <% kết thúc thẻ đóng %>
Chúng ta soạn trang ASP chương trình soạn thảo notepad, Frontpage, Dreamweaver
Ví dụ, tạo file Hello.asp để hiển thị lời chào Hello hình, save vào thư mục “c:\Web”
<html> <head>
<title>New Page 1</title> </head>
<body> <%
response.write "Hello!" ‘Hiển thị lời chào Hello %>
</body> </html>
Câu lệnh response.write cho phép hiển thị chuỗi trang web Chú thích lập trình ASP viết sau dấu nháy đơn ‘
Mã lập trình ASP <%response.write "Hello!" %> viết trộn lẫn thẻ HTML
1.3.3 Dùng trình duyệt truy cập website
Mở trình duyệt (ví dụ Internet Explorer), địa gõ địa sau để truy cập vào trang Asp ta tạo ra: http://localhost/test/Hello.asp
Lưu ý trang asp phải chạy web server open trực tiếp với browser trang html
(6)Hình 1.5 ASP engine xử lý file asp trước trả cho browser
Hình 1.6 Trang ASP sau thực thi trả cho client dạng trang web tĩnh Browser không xem mã nguồn trang ASP
Bây quay lại tốn Login Ta soạn thảo trang Login.html trang Result.asp sau:
Login.html <html> <head>
<title>New Page 1</title> </head>
<body>
<form method="POST" action="Result.asp">
<p>Username: <input type="text" name="username" ></p> <p><input type="submit" value="Submit" name="submit"></p> </form>
(7)<head>
<title>New Page 1</title> </head>
<body> <% dim x
x=request.form("username") 'biến x nhận lại giá trị username từ form login response.write "Hello "&x 'hiển thị nội dung tùy theo giá trị nhận ‘người dùng điền vào form
%> </body> </html>
Một số ví dụ khác:
Hiển thị ngày server <html>
<head>
<title>New Page 2</title> </head>
<body>
<%response.write Now%> </body>
</html>
Kết quả: 7/5/2005 12:21:57 PM Hiển thị năm tháng:
<%
response.write "Year: "&year(now) response.write "Month:"&month(now) %>
Kết quả: Year: 2005 Month:7
1.3 Tóm tắt cú pháp VBScript
Mã lệnh ASP viết VBScript JavaScript (đọc thêm tài liệu ngôn ngữ này) Các script ASP thực thi server nằm cặp dấu <% %> Bên chứa biểu thức, hàm, toán tử, lệnh hợp lệ ngơn ngữ Script tương ứng Ở tìm hiểu vắn tắt cách sử dụng ASP để lập trình web động VBScript
1.3.1 Response.write
để gửi nội dung cho trình duyệt ta dùng lệnh Response.write <%response.write “Hello World!”%>
hoặc viết ngắn gọn <%=“Hello World!”%> 1.3.2 Biến
(8)tồn trang ASP, nhiên khơng có tác dụng trang ASP khác
Ví dụ trang Hello.asp ta có biến x có giá trị 3, trang Index.asp ta dùng lệnh <%response.write x %> khơng kết qủa biến x trang Hello.asp không hiểu trang Index.asp Tương tự biến khai báo hàm, khơng có tác dụng bên ngồi hàm
Biến khai báo sử dụng bên trang asp dùng <%
Dim x ‘khai báo biến, không bắt buộc x=3
Response.write x %>
Biến không bắt buộc phải khai báo
Trong asp không khai báo kiểu biến Asp vào việc sử dụng biến mà định xem nên xử lý biến kiểu
<%Dim a, b
a=”Hello” ‘a biến kiểu chuỗi For b=1 to 10 ‘b biến kiểu số nguyên Response.write b
Next%>
Để kiểm sốt xác biến theo kiểu mong muốn, dùng hàm chuyển đổi kiểu
Để định nghĩa biến có phạm vi sử dụng nhiều trang ASP ứng dụng Web, ta dùng biến session application (xem đối tượng session application) 1.3.3 Mảng
Mảng dùng để lưu trữ liệu theo dãy phần tử <%
dim y(5) ‘khai báo mảng phần tử đánh số từ đến 5 y(0)=2
y(1)=13
response.write y(0) response.write y(1) %>
1.3.4 Ghép chuỗi
Để ghép chuỗi với ta dùng dấu & <%Dim a, b
A=”Cộng hòa xã hội chủ nghĩa Việt Nam” B=”Độc lập Tự Hạnh phúc”
Response.write a&b %>
1.3.5 Hàm có sẵn
VBScript hỗ trợ sẵn số hàm Ví dụ hàm “now”sau trả thời gian server
(9)1.3.5.1 Các hàm chuyển đổi kiểu
Các hàm cho phép chuyển đổi kiểu liệu Cdate: Chuyển sang kiểu ngày tháng
<%Dim a, b
a=”22/1/2004” ‘a hiểu chuỗi b=Cdate(a) ‘chuyển chuỗi a sang kiểu ngày tháng %>
Cint: Chuyển sang kiểu Integer <% Dim a,b
a=”3” b=cint(a) %>
Cstr: Chuyển sang kiểu string <% Dim a,b
a=3
b=Cstr(a) %>
Các hàm khác : Cbyte, Cdbl,CSng, Cbool, Ccur, 1.3.5.2 Các hàm format
Các hàm cho phép định dạng liệu FormatDateTime
FormatCurrency FormatNumber FormatPercent
1.3.5.3 Các hàm toán học: Int: lấy phần nguyên số <% Dim x=14.9
Y=Int(x) ‘kết y=14 %>
Các hàm khác : Abs, Atn, Cos, Exp, Fix, Hex, Log, Oct, Rnd, Randomize, Round, Sin, Sqr, Tan
1.3.5.4 Các hàm thao tác với chuỗi Len: Lấy chiều dài chuỗi
<%dim a,b
a=”Cộng hòa xã hội chủ nghĩa Việt Nam” b=len(a)
%>
Ucase, Lcase: Chuyển chữ hoa thành chữ thường ngược lại <%dim a,b,c,d
a=”hello”
b=Ucase(a) ‘b=”HELLO” c=”GOODBYE”
d=Lcase(c) ‘d=”goodbye” %>
Ltrim, Rtrim, Trim: cắt bỏ khoảng trắng thừa <% dim a,b,c,d,e,f
a=” Hello”
(10)c=”Hello ”
d=Rtrim(a) ‘cắt bỏ hết khoảng trắng bên phải e=” Hello world ”
f=Trim(a) ‘cắt bỏ hết khoảng trắng thừa bên giữa %>
Left, Mid, Right: Lấy chuỗi chuỗi lớn <%Dim a,b,c,d
a=”Hello World”
b=left(a,5) ‘lấy ký tự bên trái a, kết b=”Hello” c=right(a,5) ‘lấy ký tự bên phải a, kết c=”World” d=mid(a,7,1) ‘lấy ký tự a từ vị trí thứ 7, kết d=”W” %>
Các hàm khác: Space,String, StrReverse,StrComp,InStr,Replace,Split,join 1.3.5.5 Các hàm ngày tháng
Date, Time, Now: Lấy ngày, hành server <%
Response.write “Hom la ngay: ” &Date ‘Date trả ngày hành Response.write “Bay gio la”&Time ‘Time trả hành
Response.write Now ‘Now trả ngày hành %>
Các hàm khác: DateAdd, DateDiff, DatePart, Year, Month, Day, Weekday, Hour, Minute, Second
1.3.5.6 Các hàm kiểm tra:
Các hàm cho phép kiểm tra kiểu biến biểu thức Isdate: Kiểm tra có phải kiểu ngày tháng khơng? <%Dim a
a=”1/1/2004” If Isdate(a) then
Response.write “a kiểu ngày tháng ” End if
%>
IsNumeric: Kiểm tra có phải kiểu số khơng? <%Dim a
A=”13”
If IsNumeric(a) then
Response.write “a kiểu số” End if
%>
Các hàm khác: IsArray,IsEmpty,IsNull,IsObject 1.3.6 Rẽ nhánh
1.3.6.1 If
Chúng ta sử dụng if theo cú pháp ví dụ sau: <% h=hour(now)
If h >12 then
Response.write “Afternoon” else
(11)End if %> Hoặc:
<% h=hour(now)
If h >12 then Response.write "Afternoon" else Response.write "Morning" %> 1.3.6.2 Select case else End select
Cấu trúc rẽ nhánh trường hợp có nhiều lựa chọn <%
h=hour(now) Select case h Case "1"
Response.write "1 am" Case "2"
Response.write "2 am" Case else
Response.write "Other " End select
%>
1.3.7 Lặp:
1.3.7.1 For…Next
Vịng lặp có số lần lặp xác định <%Dim i
For i=1 to 10 Response.write i Next
%>
1.3.7.2 Do While…Loop
Vịng lặp có số lần lặp khơng xác định <% Dim i
i=1
Do while i<=10 Response.write i i=i+1
Loop %>
1.3.7.3 While Wend
Vịng lặp có số lần lặp khơng xác định <% Dim i
i=1
While i<=10 Response.write i i=i+1
Wend %>
1.3.7.4 Do Loop Until
(12)i=1 do
response.write i i=i+1
loop Until i>10 %>
1.3.8 Điều kiện and ,or, not <% h=hour(now)
If (h >12) and (h<18) then Response.write “Afternoon” End if
%>
1.3.9 Thủ tục hàm người dùng
Cũng ngơn ngữ lập trình khác, VBScript cho phép người dùng định nghĩa sử dụng thủ tục, hàm Nhờ chương trình chia thành module nhỏ tạo nên cấu trúc lập trình sáng sủa (phương pháp chia để trị) Chẳng hạn với toán ASP cần thực việc hiển thị liệu từ Database hình, ta xây dựng thủ tục hay hàm thực nhiệm vụ đó:
- Thủ tục KetNoi - Thủ tục HienThi - Thủ tục HuyKetNoi
Như phần chương trình sáng sủa, việc gọi thủ tục: <%
KetNoi HienThi HuyKetNoi %>
1.3.9.1 Thủ tục
Thủ tục thực nhóm câu lệnh Để viết thủ tục theo cấu trúc sau:
<%Sub TenThuTuc(Tham so) ‘ Phần thân thủ tục End Sub
%>
Ví dụ sau xây dựng chương trình đăng nhập gồm file: Form.asp (hiển thị form để người dùng nhập username password), Xulyform.asp (xử lý form, username=”test” password=”test” thơng báo đăng nhập thành cơng, khơng thông báo đăng nhập thất bại) File Xulyform.asp viết thủ tục gọi thủ tục này:
Form.asp <html> <body>
<form method="post" action="xulyform.asp"> <input type="text" name="user">
(13)<input type="submit" name="submit"> </form>
</body> </html> Xulyform.asp
<%Sub CheckUser(username,password)
if (username<>"test") or (password <> "test") then response.write "Dang nhap that bai!"
else
response.write "Dang nhap cong!" end if
End Sub %>
<% dim a, b
a=request.form("user") b=request.form("pass")
CheckUser a,b ‘gọi thủ tục %>
1.3.9.2 Hàm
Hàm khác với thủ tục trả kết Để viết hàm viết theo cấu trúc sau:
<%Function TenFunction(tham so) ‘ Phần nội dung hàm
End Function %>
Chú ý nội dung hàm phải có lệnh trả kết quả: TenFunction=
Với toán đăng nhập viết lại sau (file xulyform.asp dùng hàm)
Form.asp <html> <body>
<form method="post" action="xulyform.asp"> <input type="text" name="user">
<input type="password" name="pass"> <input type="submit" name="submit"> </form>
</body> </html> Xulyform.asp
<%Function CheckUser(username,password) if (username<>"test") or (password <> "test") then CheckUser="False"
Else
CheckUser="True" end if
(14)%> <% dim a
a=CheckUser(request.form("user"),request.form("pass")) ‘ gọi hàm if a="True" then
response.write "Dang nhap cong" else
response.write "Dang nhap that bai" end if
%>
1.3.10 Sử dụng #include
Trong trường hợp muốn trộn mã nguồn từ file asp vào file asp khác trước server thực thi nó, người ta dùng thẻ định hướng #include với cú pháp
<! #include file=”Tenfile” >
Một số ứng dụng #include người ta thường include file chứa hàm thư viện dùng chung cho ứng dụng vào đầu file Asp cần sử dụng thư viện này, insert file Header Footer cho trang web, insert thành phần sử dụng chung nhiều file asp menu,
Ví dụ ứng dụng ASP có nhiều trang cần thao tác với database, viết riêng module thao tác với database file myConnection.asp, include file vào trang asp muốn thao tác với database
<! #include file=“myConnection.asp" > <%
‘ mã nguồn %>
Lưu ý include file thực trước script chạy Vì đoạn lệnh sau khơng hợp lệ:
<% filename=”myConnection.asp”%> <! #include file=“<%=filename%>" > 1.4 Các đối tượng bản
Đối tượng nhóm hàm biến Một số đối tượng xây dựng sẵn sử dụng mà khơng cần khởi tạo: Request, Response, Session, Application, Server Một số đối tượng cần khởi tạo muốn sử dụng Dictionary, Connection, Recordset
1.4.1 Đối tượng Request
Request Response đối tượng dùng nhiều lập trình ASP, dùng trao đổi liệu trình duyệt server
Request cho phép lấy thông tin từ client Khi browser gửi yêu cầu trang web lên server ta gọi request
Chúng ta thường sử dụng lệnh request sau: 1.4.1.1 Request.QueryString
(15)Ví dụ trang home.asp đặt dòng liên kết sang trang gioithieu.asp với thẻ sau:
<a href=”gioithieu.asp?tacgia=Tran Van A”>Nhấn vào để sang trang giới thiệu</a>
biến “tacgia” có giá trị “Tran Van A” người dùng gửi tới server kèm theo URL (người dùng gõ thẳng địa “http://localhost/alias/gioithieu.asp? tacgia=Tran Van A” Address trình duyệt)
Server muốn nhận lại giá trị dùng request.QueryString trang gioithieu.asp
<%dim a
a=request.querystring(“tacgia”) ‘lúc a có gía trị “Tran Van A” response.write “Tác giả trang home.asp là: ” &a
%>
Hình 1.7
Tương tự người dùng gửi giá trị Tran Van A thông qua biến form chọn method GET
<form method=”get” action =”gioithieu.asp”>
<input type=”text” name=”tacgia” value=”Tran Van A”>
<input type=”submit” name=”submit” value=”Nhan vao day de sang trang gioi thieu”>
</form>
1.4.1.2 Request.Form
Cho phép server lấy giá trị gửi từ người dùng qua form (method POST)
Chẳng hạn file form.asp:
<form method=”POST” action =”xulyform.asp”> <input type=”text” name=”User”>
(16)gioi thieu”> </form>
File xulyform.asp làm nhiệm vụ xử lý thông tin từ Form dùng câu lệnh request.form để nhận lại thông tin người dùng gõ vào:
<%Dim x
x=Request.form(“User”) %>
response.write “Tên người dùng là: ”&x %>
1.4.2 Response
Đối tượng Response dùng để gửi đáp ứng server cho client Chúng ta thường dùng số lệnh Response sau:
1.4.2.1 Response.Write
Đưa thơng tin hình trang web
Ví dụ để đưa câu chào Hello hình ta dùng lệnh sau: <%response.write “Hello”%>
Hiển thị thời gian server hình: <%response.write now%>
hoặc <%=now%>
now hàm lấy ngày hệ thống server 1.4.2.2 Response.Redirect
Chuyển xử lý sang trang Asp khác
Ví dụ trang xulyform.asp sau kiểm tra form đăng nhập thấy người dùng khơng có quyền vào website chuyển cho file Error.asp (file hiển thị thơng báo lỗi user khơng có quyền truy cập)
<% Response.redirect “error.asp” %> 1.4.2.3 Response.End
Ngừng xử lý Script Dùng lệnh muốn dừng xử lý vị trí bỏ qua mã lệnh ASP phía sau Đây cách hay dùng số tình huống, chẳng hạn debug lỗi
1.4.3 Đối tượng Session
Session phiên làm việc người dùng web server, bắt đầu người lần truy cập tới trang web website kết thúc người rời khỏi website không tương tác với website khoảng thời gian định (time out) Như thời điểm website có người truy cập có nhiêu phiên ứng với người, phiên độc lập Để lưu thông tin tác dụng 1phiên, người ta dùng đối tượng Session, ví dụ user bắt đầu session với việc login vào hệ thống, user login cần hệ thống ghi nhớ toàn phiên làm việc (nhằm tránh việc người dùng phải đăng nhập lại đưa request) Giá trị biến kiểu session có phạm vi tất trang ASP ứng dụng, khơng có tác dụng phiên làm việc khác
Ví dụ, sử dụng biến session sau đếm số lần người truy cập vào trang web: Home.asp
(17)session(“x”) đại diện cho số lần mà user truy cập vào trang home.asp Với người dùng khác giá trị session(“x”) lại khác
Thật , A truy cập 10 lần (session(“x”) =10) B truy cập lần thơi (session(“x”) =2)
Server kết thúc hủy bỏ đối tượng session khi:
- Người dùng không triệu gọi trang ứng dụng cập nhật làm (refresh) lại thông tin trang thời gian định Khi session hết thời gian hiệu lực xem hết hạn sử dụng, tất biến lưu session thân session bị hủy bỏ Có thể kiểm tra tăng giảm thời gian Timeout Session tính giây sau:
<%
Session.Timeout = 500 %>
- Trang ASP gọi đến phương thức Abandon Session <%
Session.Abandon %>
Việc khởi tạo kết thúc biến session viết hàm kiện Session_OnStart Session_OnEnd định nghĩa file global.asa
1.4.4 Đối tượng Application
Application đại diện cho toàn ứng dụng, bao gồm tất trang web website Để lưu trữ thơng tin có tác dụng tồn ứng dụng, tức có giá trị tất trang asp tất phiên, người ta dùng đối tượng Application
Điểm khác biến application so với biến session session có tác dụng phiên, cịn biến application có tác dụng với phiên Ví dụ, để đếm xem có người truy cập vào website, dùng biến Application Mỗi người dùng truy cập vào website ta tăng biến lên đơn vị để có thêm người truy cập
<% application(“x”)=application(“x”)+1 %>
Trang home.asp muốn hiển thị số người truy cập cần in giá trị biến <% response.write “Số người truy cập vào website là:”&application(“x”) %>
Với phiên khác giá trị application(“x”) Thật , A B truy cập vào trang home.asp thấy: “Số người truy cập vào website 3” (trong trường hợp application(“x”) =3)
Việc khởi tạo kết thúc biến application viết hàm kiện Application_onStart Application_onEnd định nghĩa file global.asa Khóa Application:
(18)1.4.5 File Global.asa
File file tùy chọn chứa khai báo đối tượng, biến có phạm vi tồn ứng dụng Mã lệnh viết dạng Script Mỗi ứng dụng phép có nhiều file Global.asa, nằm thư mục gốc ứng dụng Người ta thường dùng global.asa trường hợp muốn có xử lý session bắt đầu hay kết thúc, application bắt đầu hay kết thúc, thông qua hàm kiện :
Application_Onstart : hàm kiện xảy ứng dụng asp bắt đầu hoạt động, tức người dùng truy cập tới trang web ứng dụng hoạt động
Session_Onstart: hàm kiện xảy có người dùng truy cập vào ứng dụng (bắt đầu session)
Session_OnEnd: hàm kiện xảy người dùng kết thúc session họ
Application_OnEnd: hàm kiện xảy ứng dụng dừng. File Global.asa có cấu trúc sau:
<script language="vbscript" runat="server"> Sub Application_OnStart
‘ End sub
Sub Application_OnEnd ‘
End Sub
Sub Session_OnStart ‘
Application("x")=Application("x")+1 End sub
Sub Session_OnEnd ‘
End Sub </script> 20 ASP
Ví dụ sau đếm số người dùng truy cập website Số người dùng lưu trữ biến Application(“songuoi”) Ở đâu ứng dụng muốn hiển thị số người dùng việc chèn lệnh hiển thị nó:
<%=Application(“songuoi”)%>
Ngồi ứng dụng cho phép đếm số lần người truy cập website phiên làm việc họ Số lần lưu trữ biến Session(“solan”)
Global.asa
<script language="vbscript" runat="server"> Sub Application_OnStart
Application("songuoi")=0 End Sub
Sub Session_OnStart Application.Lock
(19)Application.UnLock Session(“solan”)=0 End Sub
Sub Session_OnEnd Application.Lock
Application("songuoi")=Application("songuoi")-1 Application.UnLock
End Sub
Sub Application_OnEnd End Sub
</script> Home.asp <html> <body> <p>
Có <%response.write(Application("songuoi"))%> người truy cập website
</p>
<%session(“solan”)= session(“solan”)+1 %> <p>
Bạn truy cập trang <%response.write(session("solan"))%> lần!
</p> </body> </html>
1.4.6 Đối tượng Dictionary
Đối tượng Dictionary lưu trữ thông tin theo cặp khóa/ giá trị Nó giống với mảng có khả xử lý linh hoạt cặp liệu có quan hệ kiểu từ điển (cặp khóa/ giá trị ví dụ : mã Sinh viên/ tên Sinh viên), khóa xem từ cần tra giá trị nội dung từ tra từ điển
Muốn sử dụng đối tượng Dictionary phải khởi tạo nó: <%set d=server.createObject("Scripting.Dictionary")
d.add "work","Lam viec"
d.add "learn","Hoc tap" ‘tương tự mảng phần tử cặp khóa/giá trị
response.write "work nghĩa tiếng Việt là: "&d.item("work") response.write "learn nghĩa tiếng Việt là: "&d.item("learn") set d=nothing
%>
Một số ứng dụng đối tượng dùng mô giỏ hàng chứa hàng hóa(shopping cart) với cặp khóa/giá trị :ProductID/Quantity (xem chương 2), sổ địa với cặp khóa/giá trị là: CustomerName/Address
(20)Đối tượng Server dùng để truy cập thuộc tính phương thức server Ta thường dùng lệnh sau
1.4.7.1 Server.CreateObject Khởi tạo đối tượng
Ví dụ:
Tạo đối tượng Connection:
<%Set conn=Server.CreateObject(“ADODB.Connection”)%> Tạo đối tượng Dictionary:
<%set d=server.createObject("Scripting.Dictionary")%> 1.4.7.2 Server.Mappath
Biến đường dẫn tương đối thành tuyệt đối Ví dụ:
<%str= server.mappath("nhanvien.mdb") Response.write str%>
Sẽ cho kết quả: “C:\WEB\nhanvien.mdb” trường hợp file nhanvien.mdb nằm thư mục C:\WEB
Ta thường áp dụng server.mappath trường hợp xử lý đường dẫn tương đối, ví dụ chuỗi kết nối vào database
connstr="provider=microsoft.jet.oledb.4.0; data source="&server.mappath("nhanvien.mdb")&";" 1.5 Sử dụng Database với ASP
Hầu hết ứng dụng Web động lưu trữ liệu Database Vì thao tác kết nối vào Database, xem, thêm, sửa, xóa liệu bảng phần quan trọng ngơn ngữ lập trình web ASP
Chúng ta học kỹ thuật sử dụng Asp để thao tác với liệu Database thông qua kiến trúc ADO
1.5.1 Các cú pháp để truy xuất liệu từ DB
Để thao tác với liệu bảng DB, có thao tác với câu lệnh SQL tương ứng sau:
(Lấy ví dụ với Database cụ thể Quanlyhocvien.mdb, có bảng HosoHocVien (MaHV:text, Ten: text)
1.5.1.1 Lựa chọn
Lấy tất ghi bảng: “Select * from HosoHocVien” Nếu lựa chọn có điều kiện:
“Select * from HosoHocVien where MaHV=’10’ “ Nếu lựa chọn số trường bảng:
“Select Ten from HosoHocVien where MaHV=’10’ ” 1.5.1.2 Thêm liệu vào bảng
“Insert into HosoHocVien values (‘001’,’Tran Van A’) “ 1.5.1.3 Sửa liệu
“Update HosoHocVien set Ten=’Tran Van B’ where MaHV=’001’ “ 1.5.1.3 Xoá liệu
(21)Chúng ta sử dụng lệnh SQL phức tạp để có kết mong muốn sử dụng lệnh join, order by, group by, having
1.5.2 Đối tượng Connection
Đối tượng Connection cho phép tạo kết nối đến DB Các bước sử dụng Connection:
- Khai báo đối tượng Connection - Khởi tạo
- Tạo chuỗi kết nối
- Mở Connection với chuỗi kết nối - Sử dụng Connection
- Đóng Hủy Connection
Ví dụ sau kết nối đến database Access QuanlyHocvien.mdb (database nằm thư mục với file Asp)
<%
dim conn ‘khai báo
set conn=server.createObject("ADODB.connection") ‘khởi tạo stringconn="provider=microsoft.jet.OLEDB.4.0;data
source="&server.mappath("QuanlyHocVien.mdb")&";" ‘chuỗi kết nối conn.open stringconn ‘mở connection
‘ thao tác với DB sử dụng connection này ‘
‘conn.close ‘đóng connection Set conn=nothing ‘hủy connection %>
(chuỗi “stringconn=…” viết dịng, đó: “… data source = …”chú ý có dấu cách “data” “source”, chuỗi với Access)
1.5.3 Đối tượng Recordset
Đối tượng Recordset thường dùng để xem, thêm, sửa, xóa ghi bảng liệu Database Nó trỏ đến tập hợp ghi kết trả từ câu lệnh select
Các bước sử dụng đối tượng Recordset : - Khai báo đối tượng Recorset
- Khởi tạo - Tạo sql query
- Mở Recordset với chuỗi sql query connection mở - Sử dụng Recordset
- Đóng Hủy Recordset
Ví dụ sau cho phép lấy ghi bảng hiển thị trang web <% Dim rs ‘ khai báo Recordset
set rs=server.createObject("ADODB.Recordset") ‘Khởi tạo SQLstring="select * from HosoHocVien" ‘SQL query rs.open SQLstring ,conn ‘Mở Recordset
‘ dùng vịng lặp để hiển thị tồn ghi hình do while not rs.EOF
(22)response.write RS(“Ten”) response.write “<BR>”
rs.movenext ‘dịch trỏ rs tới ghi tiếp theo loop
rs.close ‘đóng recordset set rs=nothing ‘hủy recordset %>
Chúng ta kết hợp script thẻ html để liệu hiển thị trang web với giao diện theo ý muốn :
<table border="1"> <tr>
<td>MA HOC VIEN</td> <td>TEN</td>
</tr>
<%do while not rs.eof%> <tr>
<td ><%=rs("MaHV")%></td> <td ><%=rs("Ten")%></td> </tr>
<%rs.movenext loop
rs.close %> </table>
Sau ví dụ hồn chỉnh liệt kê user bảng tblUser trang web: Connection.asp
<% dim conn
Sub openConn()
set conn=server.createobject("adodb.connection") connstr="provider=microsoft.jet.oledb.4.0; data source="&server.mappath("myDB.mdb")&";" conn.open connstr
End Sub
Sub destroyConn() conn.close
set conn=nothing End Sub
%>
ListUser.asp
<! #include file ="Connection.asp" > <%openConn
set rs = server.createobject("ADODB.Recordset") rs.open "select * from tblUser", conn%>
(23)<tr><td>ID</td><td>Username</td><td>Address</td> <% while not rs.EOF
<tr>
<td><%=rs("id")%></td>
<td><%=rs("username")%></td> <td><%=rs("address")%></td> </tr>
<% rs.movenext loop
rs.close
destroyConn%> </table>
1.5.4 Thêm sửa xóa liệu DB:
Với connection mở dùng để thực thi câu lệnh SQL dạng insert, update, delete:
Thêm liệu:
<%Conn.execute “Insert into HosoHocvien values(‘001’,’Tran Van A’)”%> Sửa liệu:
<%Conn.execute “Update HosoHocVien set Ten=’Tran Van B’ where MaHV=’001’ “%>
Xoá liệu:
<%Conn.execute “Delete from HosoHocVien where MaHV=’001’ “ %>
Ngồi dùng Recordset để thêm, sửa, xóa liệu database cách duyệt qua tập hợp ghi bảng
Thêm liệu: <%Dim RS
set rs=server.createObject("ADODB.recordset") SQLstring="select * from HosoHocVien"
rs.open SQLstring ,conn,3,2
‘rs.open SQLstring ,conn,adOpenStatic,adLockPessimistic rs.addnew ‘Thêm ghi
rs(“MaHV”)=”001” ‘ gán giá trị cho trường ghi rs(“Ten”)=”Tran Van A”
rs.update ‘ Xác nhận thêm xong rs.close ‘đóng recordset
%> Sửa:
<% set rs=server.createObject("ADODB.recordset") ‘Khởi tạo SQLString="select * from HosoHocVien where ma=’001’ " ‘ lấy ghi cần sửa
rs.open SQLString ,conn,3,2
rs(“Ten”)=”Tran Van B” ‘sửa lại giá trị trường “Ten” rs.update ‘ xác nhận sửa xong
(24)Xóa:
<% set rs=server.createObject("ADODB.recordset") ‘Khởi tạo
SQLString="select * from HosoHocVien where MaHV=’001’ " ‘Câu lệnh SQL lấy ra ghi cần xóa
rs.open SQLString ,conn,3,2 rs.delete ‘xóa ghi này rs.close ‘đóng recordset %>
1.5.4 Phân trang
Trong nhiều trường hợp kết câu lệnh “select ” trả nhiều ghi, hiển thị tất trang web bất tiện việc đọc chúng, người ta tiến hành phân để hiển thị thành nhiều trang, gọi kỹ thuật phân trang So với cách đọc hiển thị liệu thơng thường, phân trang địi hỏi phải thiết lập thêm số thuộc tính:
- Số ghi cần hiển thị trang RS.PageSize - Trang hiển thị: RS.AbsolutePage,
- Khi mở Recordset đòi hỏi phải thêm tham số CursorType LockType :rs.open SQLstring ,conn,3,3
- Vòng lặp hiển thị liệu cần có chế đảm bảo chạy số ghi trang (rs.pagesize) phải khỏi vịng lặp
Ví dụ để hiển thị bảng HosoHocVien với yêu cầu hiển thị ghi/1 trang: Home.asp
<%
dim x ‘biến dùng để xác định xem cần hiển thị trang nào
x=request.querystring(“PageNumber”) ‘nhận lại PageNumber người dùng nhấn vào nút “Trước” “Tiếp”
if x=”” then ‘đầu tiên hiển thị trang 1 x=1
end if dim conn
set conn=server.createObject("ADODB.connection") stringconn="provider=microsoft.jet.OLEDB.4.0;data source="&server.mappath("QuanlyHocVien.mdb")&";" conn.open stringconn
Dim RS
set rs=server.createObject("ADODB.recordset") SQLstring="select * from HosoHocVien"
rs.pagesize= ‘chỉ hiển thị ghi/1 trang rs.open SQLstring ,conn,3,3
rs.AbsolutePage=x ‘trang cần hiển thị
dem=0 ‘biến để đảm bảo vòng lặp thực tối đa lần lặp do while not rs.EOF and dem<rs.pagesize
(25)dem=dem+1 rs.movenext loop
%>
<% ‘Hiển thị nút “Trước” if x>1 then %>
<a href=”home.asp?pageNumber=<%=x-1%>”>Trước</a> <%end if%>
<% ‘Hiển thị nút “Tiếp” if not RS.EOF then %>
<a href=”home.asp?pageNumber=<%=x+1%>”>Tiếp</a> Chương 1: Giới thiệu ASP 27
<%end if
rs.close ‘đóng recordset %>
1.5.5 Tìm kiếm liệu database
Để tìm kiếm liệu bảng Database dựa vào câu lệnh SQL: “select * from Tenbang where Tencot like ‘%giatri%’ “
Ví dụ đoạn chương trình sau cho phép hiển thị Sinh Viên bảng “HosoHV” DB “Sinhvien.mdb” có tên tìm kiếm từ khố “Anh” (Ví dụ : Tuấn Anh, Vân Anh, Việt Anh )
<%
set conn=server.createobject("adodb.connection") connstring="provider=microsoft.jet.oledb.4.0;data source="&server.mappath("sinhvien.mdb")&";" conn.open connstring
set rs=server.createobject("adodb.recordset")
rs.open "select * from HosoSV where ten like '%Anh%' ",conn do while not rs.eof
response.write rs("MaSV") response.write " "
response.write rs("Ten") response.write " " response.write rs("Lop") response.write "<BR>" rs.movenext
loop rs.close %>
Thông thường người sử dụng nhập từ khố cần tìm kiếm vào trường form ta việc dùng lệnh request.form để lấy lại từ khố cần tìm kiếm đưa vào câu lệnh SQL Chẳng hạn người sử dụng nhập từ khố cần tìm vào trường “Ten” form mở bảng câu lệnh SQL sau:
(26)rs.open "select * from HosoSV where Ten like '%”&ten&”%' ",conn ‘ %>
Nếu khơng tìm thấy ghi giá trị rs.EOF true <%
(27)Chương 2
Một số tiện ích ASP
Mục tiêu
Tìm hiểu số tiện ích: Registration Login Logout Quản lý User Quản lý Product Shopping cart
Sử dụng tiếng Việt ASP 2.1 Registration
Registration module cho phép khách vãng lai đăng ký làm thành viên website Module gồm form đăng ký thành viên, file asp xử lý form này, insert liệu vào database Ở database có table tblUser chứa danh sách thành viên website
Hình 2.1
RegistrationForm.htm: trang chứa form cho phép người dùng đăng ký
RegistrationProcess.asp: trang xử lý liệu từ form trên, hợp lệ insert liệu vào database
Ngoài ra, để kết nối vào database viết file connection.asp chứa hàm open destroy connection include file vào file có nhu cầu truy cập database
Trong Database chứa table : tblUser
Trang RegistrationForm.htm <html>
<head>
(28)</head> <body>
<form method="POST" action="RegistrationProcess.asp"> <p> Username: <input type="text" name="username“ ></p>
<p> Password: <input type=“password" name="password“ ></p>
<p> Confirm Password: <input type=“password"
name="ConfirmPassword“></p>
<p> Address: <input type="text" name="address"></p>
<p><input type="submit" value="Submit" name=“submit"></p> </form>
</body> </html>
Trang Connection.asp <%
dim conn
Sub openConn() ‘hàm mở connection tới DB set conn=server.createobject("adodb.connection") connstr="provider=microsoft.jet.oledb.4.0; datasource="&server.mappath("myDB.mdb")&";" conn.open connstr
End Sub
Sub destroyConn() ‘hàm đóng hủy connection conn.close
set conn=nothing End Sub
%>
Trang RegistrationProcess.asp <! #include file ="Connection.asp" > <%
username=request.form("username") password=request.form("password")
confirmPassword=request.form("confirmPassword") address=request.form("address")
‘ validate some information retrieved from submitted form openConn
sql="insert into tblUser([username],[password],[address]) values('"&username&"','"&password&"','"&address&"')" conn.execute sql
destroyConn
response.write "Successful Registration!" %>
2.2 Login Logout
(29)đăng nhập vào website (login), thành viên login sau (logout)
Việc ghi nhớ thành viên login lưu biến kiểu session Khi thành viên logout việc xóa biến session
Module gồm form login, file xử lý form login, file xử lý logout, database table tblUser mô tả module Registration
Hình 2.3 LoginForm.htm: Form login
LoginProcess.asp: xử lý form login, login thành công thi redirect tới trang Index.asp,nếu khơng quay lại form login
Index.asp: Trang chủ dành cho member login cách kiểm tra biến session, biến rỗng (chưa login) từ chối truy cập redirect đến form login
Logout.asp: Trang xử lý logout cách hủy session Trang LoginForm.html
<html> <head>
<title>Login</title> </head>
<body>
<form method="POST" action="LoginProcess.asp">
<p> Username: <input type="text" name="username"></p> <p> Password: <input type="password" name="password"></p> <p><input type="submit" value="Submit" name=“submit"></p> </form>
</body> </html>
Trang LoginProcess.asp
<! #include file ="Connection.asp" > <%
(30)sql="select * from tblUser where username='"&username&"' and password='"&password&"'"
set rs=server.createobject("adodb.recordset") rs.open sql,conn
if not rs.eof then ‘login thành công session("username")=rs("username") rs.close
destroyConn
response.redirect "index.asp" else ‘login thất bại
session("username")="" rs.close
destroyConn
response.redirect "LoginForm.html" end if
%>
Trang Index.asp <html>
<head>
<title>Home page for Member only</title> </head>
<body> <%
if session("username")="" then ‘kiểm tra người dùng login chưa? response.redirect "LoginForm.html"
end if%>
Welcome to <%=session("username")%> This page is for Member only! <a href="Logout.asp"> Logout</a>
</body> </html>
Trang Logout.asp
<%session.abandon ‘hủy session 'session("username")="“ %>
<a href="LoginForm.html">Login</a> 2.3 Quản lý User
Quản lý user bao gồm: - Liệt kê danh sách user - Thêm user
- Sửa user - Xóa user
(31)Hình 2.4 Các phần cịn lại gồm trang sau:
ListMember.asp: Liệt kê danh sách thành viên, với thành viên có liên kết cho phép sửa xóa thành viên
EditMemberForm.asp: form sửa thành viên, hiển thị thông tin thành viên để người dùng sửa
EditMemberProcess.asp: xử lý form sửa thành viên, update lại thành viên vào DB DeleteMember.asp: xóa thành viên
Trang ListMember.asp
<! #include file ="Connection.asp" >
<%'if session("username")="" then response.redirect "LoginForm.html"%> <% openConn
set rs = server.createobject("ADODB.Recordset") rs.open "select * from tblUser", conn%>
<table border="1" width="200">
<tr><td>ID</td><td>Username</td><td>Address</td><td>Edit</ td><td>Delete</td></tr>
<% while not rs.EOF
link1 = "EditMemberForm.asp?id=" & rs("id") link2 = "DeleteMember.asp?id=" & rs("id")%> <tr>
<td><%=rs("id")%></td>
(32)<td><a href="<%=link1%>">Edit</a></td> <td><a href="<%=link2%>">Delete</a></td> </tr>
<% rs.movenext loop
rs.close
destroyConn%> </table>
Trang EditMemberForm.asp
<! #include file ="Connection.asp" >
<%'if session("username")="" then response.redirect "LoginForm.html"%> <%id=request.queryString("id")
'validate id openConn
set rs = server.createobject("ADODB.Recordset") rs.open "select * from tblUser where id="&id,conn%> <form method="POST" action="EditMemberProcess.asp"> <p>UserName <input type="text" name="username" value="<%=rs("username")%>"></p>
<p>Password <input type="password" name="password"></p> <p>Confirm Password <input type="password"
name="confirmPassword"></p>
<p>Address <input type="text" name="address" value="<%=rs("address")%>"></p>
<input type="hidden" name="id" value="<%=id%>"> <p><input type="submit" value="Submit" name="B1"></p> </form>
<% rs.close destroyConn%>
Trang EditMemberProcess.asp <! #include file ="Connection.asp" >
<%'if session("username")="" then response.redirect "LoginForm.html"%> <%id=request.form("id")
username=request.form("username") password=request.form("password")
confirmPassword=request.form("confirmPassword") address=request.form("address")
'validate if username is exist in the tblUsers?,password and confirmPassword are ‘matched?, address
openConn
sql="UPDATE tblUser SET [username]='" &username&
"',[password]='"&password&"',[address]='"&address& "' WHERE id ="&id conn.execute sql
destroyConn%>
(33)Trang DeleteMember.asp
<! #include file ="Connection.asp" >
<%'if session("username")="" then response.redirect "LoginForm.html"%> <%
openConn
id=request.queryString("id") 'validate id
conn.execute "Delete from tblUser where id="&id destroyConn
%>
User has been Deleted!
Hình 2.5 2.4 Quản lý Product
Quản lý Product bao gồm:
- Liệt kê, thêm sửa xóa loại sản phẩm (Category) - Liệt kê, thêm, sửa xóa sản phẩm (Product)
Phần quản lý Category tương tự quản lý User
(34)Hình 2.6
Hình 2.7
Sau xem qua cách làm phần thêm sản phẩm Các phần khác làm tương tự
Trang AddProductForm.asp
<! #include file ="Connection.asp" >
<%'if session("username")="" then response.redirect "LoginForm.html"%> <%
openConn
(35)%>
<form method="POST" action="AddProductProcess.asp">
<p>ProductName <input type="text" name="ProductName"></p> <p>Product Category
<select size="1" name="CategoryID"> <%do while not rs.eof%>
<option value="<%=rs("CategoryID")%>"> <%=rs("CategoryName")%>
</option> <%rs.movenext loop%>
</select></p>
<p>Price <input type="text" name="price"></p>
<p>Description <input type="text" name="description"></p> <p><input type="submit" value="Submit" name="B1"><input type="reset" value="Reset" name="B2"></p>
</form> <% rs.close destroyConn%>
Trang AddProductProcess.asp <! #include file ="Connection.asp" > <%
CategoryID=request.form("CategoryID") ProductName=request.form("ProductName") Price=request.form("Price")
Description=request.form("Description") 'validate
openConn
sql="insert into Product([ProductName],[CategoryID],[Price],[Description]) values('"&ProductName&"',"&CategoryID&","&Price&",'"&Description&"')" conn.execute sql
destroyConn
(36)Hình 2.8 2.5 Shopping cart
Trong website shopping online, ta thường dùng cấu trúc liệu để lưu trữ hàng hóa mà người dùng chọn mua phiên họ, gọi giỏ hàng (tương tự giỏ hàng mua hàng siêu thị) Về liệu, giỏ hàng lưu trữ danh sách hàng hóa người dùng chọn mua bao gồm thông tin ProductID, ProductName, ProductCategory, Quantity, Price, … (những thơng tin có bảng Product Category DB)
Để mô giỏ hàng, ta dùng số cấu trúc Dictionary mảng chiều
Giỏ hàng lưu biến kiểu session để theo dõi trình khách hàng mua hàng phiên
Hình 2.9
(37)lưu theo kiểu biến session để có tác dụng toàn phiên người dùng Ta cần thêm biến Count để đếm số sản phẩm có giỏ hàng Biến có kiểu session
Các hàm thao tác:
AddProductToCart(ProductID): Thêm sản phẩm vào giỏ hàng, sản phẩm có tăng số lượng thêm UpdateQuantity(ProductID,Quantity): Cập nhật số lượng sản phẩm giỏ hàng RemoveProductFromCart(ProductID): Xóa sản phẩm khỏi giỏ hàng
RemoveAll: Xóa rỗng giỏ hàng
ListProduct: Liệt kê mặt hàng giỏ hàng File Global.asa
<Script language=VBScript RUNAT=Server> SUB Session_OnStart
ReDim arrProduct(6,15) ‘mảng chiều mô giỏ hàng Session("arrProduct")=arrProduct ‘giỏ hàng chứa session Session("Count")=0 ‘số sản phẩm có giỏ
END SUB </Script>
ShoppingCart.asp <%
'thêm sản phẩm vào giỏ hàng, có tăng số lượng lên 1 Sub AddProductToCart(ProductID)
arrProduct=Session("ArrProduct") Count=Session("Count")
ProductExist=false ‘biến dùng đánh dấu xem hàng có trong giỏ chưa
For i=1 to Count
if arrProduct(1,i)=ProductID then ProductExist=true ‘hàng có giỏ
arrProduct(4,i)=arrProduct(4,i)+1 ‘tăng số lượng lên 1 exit For
End if Next
If not ProductExist then If Count<15 then
Count=Count+1
‘dùng Recordset lấy thông tin ProductName, CategoryName, ‘ Price từ DB
‘…
arrProduct(1,Count)=ProductID arrProduct(2,Count)=ProductName arrProduct(3,Count)=CategoryName arrProduct(4,Count)=1
(38)End if
session("ArrProduct")=arrProduct session("Count")=Count
end sub
Sub RemoveProductFromCart(ProductID) 'xoa san pham gio hang ArrProduct=Session("ArrProduct")
Count=Session("Count") ProductExist=false For i=1 to Count
if arrProduct(1,i)=ProductID then ‘tìm thấy hàng cần xóa vị trí i
ProductExist=true exit For
End if Next
If ProductExist then Count=Count-1
For x=1 to ‘xóa rỗng mặt hàng i arrProduct(x,i)=""
Next n=i 40 ASP
while n<15 ‘dồn mặt hàng i+1 i mặt hàng i đến cuối giỏ
For x=1 to 6
arrProduct(x,n)=ArrProduct(x,n+1) arrProduct(x,n+1)=""
Next n=n+1 Wend End if
Session("ArrProduct")=ArrProduct Session("Count")=Count
end Sub
Sub RemoveAll 'xoa tat ca cac mat hang gio hang session("ArrProduct")=""
session("ArrCount")="" end Sub
Sub UpdateQuantity(ProductID,Quantity) ‘cap nhat lai so luong san pham da co gio hang
ArrProduct=Session("ArrProduct") Count=Session("Count")
For i=1 to Count
(39)exit For End if Next
Session("ArrProduct")=ArrProduct Session("Count")=Count
end Sub %>
2.6 Sử dụng tiếng Việt ASP 2.6.1 Bảng mã Unicode
Về máy tính xử lý liệu dạng số Mỗi ký tự (character) máy tính lưu trữ xử lý cách ánh xạ chúng thành chữ số (còn gọi mã - code) Ví dụ thơng thường chữ ‘A’ có mã 65, ‘a’ mã 97…Bảng ánh xạ ký tự thành mã dạng số gọi bảng mã (character code)
Bảng mã byte: Trong bảng mã byte ASCII, ký tự biểu diễn byte Chúng biểu diến tối đa 256 ký tự (kể ký tự hiển thị ký tự điều khiển) Bảng mã byte thích hợp với ngơn ngữ tiếng Anh Đối với ngôn ngữ phức tạp tiếng Hoa, tiếng Nhật, tiếng Việt bảng mã khơng đủ lớn để biểu diễn hết số ký tự cần thiết Vì vậy, người ta phải thực nhiều giải pháp để khắc phục thiếu sót này, dẫn đến tình trạng có nhiều bảng mã khác tồn tại, chí ngơn ngữ có nhiều bảng mã, gây nên thiếu thống
Unicode bảng mã byte, đời nhằm mục đích xây dựng mã chuẩn vạn năng, thống nhất, dùng chung cho tất ngôn ngữ giới Bộ mã Unicode gồm 16 bit cho ký tự, biểu diễn 65536 ký tự
Unicode biểu diễn đầy đủ ký tự Tiếng Việt 2.6.2 Mã hóa UTF-8
Mỗi ký tự mã Unicode mã hóa (encoding) dạng: UTF-8 (8 bit), UTF-16 (16 bit) UTF-32 (32 bit) Trong UTF-8 (Unicode Transfomation Format -8) sử dụng phổ biến Mỗi ký tự Unicode mã hóa UTF-8 biểu diễn đến byte tùy thuộc vào giá trị mã ký tự
Ví dụ: bảng mã Unicode chữ a có mã 97 (hexa U+0061) => UTF 32: 0x00000061, UTF-16: 0x0061, UTF-8: 0x61
UTF-8 sử dụng phổ biến để biểu diễn tiếng Việt theo mã Unicode 2.6.3 CodePage Charset
Trong lập trình ASP, để biểu diễn tiếng Việt theo encoding UTF-8, cần lưu ý điểm:
- Hiển thị font UTF-8 client (browser) cách sử dụng thẻ <meta http-equiv="Content-Type" content="text/html;
charset=utf-8"> ( charset giúp browser hiển thị (decode) dạng liệu encode)
- Xử lý UTF-8 server cách đặt thuộc tính Codepage = 65001 (code page giúp server xử lý liệu encoding)
(40)Session.codepage có thiết lập codepage cho tồn phiên Cịn Response.codepage thiết lập codepage cho lần response
Thông thường sử dụng Session.codepage tồn session có chung codepage thống
2.6.4 Lập trình tiếng Việt với ASP: Chúng ta tuân theo nguyên tắc sau:
Sử dụng UTF-8 charset cho trang web Sử dụng thẻ <%session.codepage=65001%>
Sử dụng kiểu gõ Unicode gõ (VietKey, Unikey)
Hình 2.10
Ví dụ sau minh họa việc thêm vào hiển thị liệu từ database hình với Tiếng Việt:
Trang RegistrationVNmeseForm.html <html><head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> </head>
<body>
<form method="POST" action="RegistrationVNmeseProcess.asp"> <p> Username: <input type="text" name="username"></p> <p> Password:<input type="text" name="password"></p>
<p> Confirm Password:<input type="text" name="ConfirmPassword"> </p>
<p> Address:<input type="text" name="address"></p> <p><input type="submit" value="Submit" name="B1"></p> </form>
</body></html>
Trang RegistrationVNmeseProcess.asp <%session.codepage=65001%>
(41)<html><head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> </head>
<body>
<%username=request.form("username") password=request.form("password")
confirmPassword=request.form("confirmPassword") address=request.form("address")
‘ validate some information retrieved from submitted form openConn
sql="insert into tblUser([username],[password],[address]) Chương 2: Một số tiện ích ASP 43
values('"&username&"','"&password&"','"&address&"')" conn.execute sql
destroyConn
response.write "Successfull Registration!"%> </body></html>
Trang ListMemberVNmese.asp <! #include file ="Connection.asp" >
<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"></head>
<%'if session("username")="" then response.redirect "LoginForm.html"%> <%openConn
set rs = server.createobject("ADODB.Recordset") rs.open "select * from tblUser", conn%>
<table border="1" width="200">
<tr><td>ID</td><td>Username</td><td>Address</td><td>Edit</td><t d>Delete</td></tr>
<% while not rs.EOF
link1 = "EditMemberForm.asp?id=" & rs("id") link2 = "DeleteMember.asp?id=" & rs("id")%>
<tr><td><%=rs("id")%></td><td><%=rs("username")%></td><td><% =rs("address")%></td><td><a
href="<%=link1%>">Edit</a></td><td><a href="<%=link2%>">Delete</a></td> </tr>
<% rs.movenext loop
rs.close
http://localhost/test