Tài liệu Lập trình ASP - Chương 2: Một số tiện ích trong ASP

Chương 2  
Một số tiện ích trong ASP  
Mục tiêu  
Tìm hiểu một số tiện ích:  
¾ Registration  
¾ Login và Logout  
¾ Quản lý User  
¾ Quản lý Product  
¾ Shopping cart  
¾ Sử dụng tiếng Việt trong ASP  
2.1 Registration  
Registration là module cho phép một khách vãng lai đăng ký làm thành viên  
của website. Module này gồm một form đăng ký thành viên, 1 file asp xử lý  
form này, insert dữ liệu vào database. Ở database có một table tblUser chứa  
danh sách các thành viên của website  
Hình 2.1  
RegistrationForm.htm: trang này chứa form cho phép người dùng đăng ký.  
RegistrationProcess.asp: trang này xử lý dữ liệu từ form trên, nếu hợp lệ thì  
insert dữ liệu vào database  
Ngoài ra, để kết nối vào database chúng ta viết 1 file connection.asp chứa  
các hàm open và destroy connection rồi include file này vào các file có nhu  
cầu truy cập database.  
Trong Database chứa table : tblUser  
28  
ASP  
Trang RegistrationForm.htm  
<html>  
<head>  
<title>Registration</title>  
</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;  
source="&server.mappath("myDB.mdb")&";"  
conn.open connstr  
data  
End Sub  
Sub destroyConn()  
conn.close  
‘hàm đóng và hủy connection  
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  
Chương 2: Một số tiện ích trong ASP  
29  
destroyConn  
response.write "Successful Registration!"  
%>  
2.2 Login và Logout  
Trong website có thể có những nơi chỉ dành cho các thành viên đã đăng ký  
mà không dành cho khách vãng lai, để truy cập những nơi này buộc thành  
viên phải đăng nhập vào website (login), các thành viên đã login sau đó có  
thể thoát (logout) .  
Việc ghi nhớ một thành viên đã login được lưu trong một biến kiểu session.  
Khi thành viên này logout chúng ta chỉ việc xóa biến session này.  
Module này gồm form login, file xử lý form login, file xử lý logout, database  
là table tblUser đã mô tả trong module Registration.  
Hình 2.3  
LoginForm.htm: Form login  
LoginProcess.asp: xử lý form login, nếu login thành công thi redirect tới trang  
Index.asp,nếu không thì quay lại form login.  
Index.asp: Trang chủ chỉ dành cho member đã login bằng cách kiểm tra biến  
session, nếu biến này rỗng (chưa login) thì từ chối truy cập và redirect đến  
form login  
Logout.asp: Trang xử lý logout bằng cách hủy session  
Trang LoginForm.html  
<html>  
30  
ASP  
<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"-->  
<%  
username=request.form("username")  
password=request.form("password")  
openConn  
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>  
Chương 2: Một số tiện ích trong ASP  
31  
</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  
Phần thêm user cũng tương tự như module Registration  
Hình 2.4  
Các phần còn lại gồm các trang sau:  
ListMember.asp: Liệt kê danh sách thành viên, với mỗi thành viên có các liên  
kết cho phép sửa và xóa thành viên đó.  
32  
ASP  
EditMemberForm.asp: form sửa thành viên, hiển thị các thông tin hiện tại của  
thành viên để người dùng có thể 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>  
<% do  
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  
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  
value="<%=rs("username")%>"></p>  
<p>Password <input type="password" name="password"></p>  
<input  
type="text"  
name="username"  
<p>Confirm  
name="confirmPassword"></p>  
<p>Address <input  
Password  
<input  
type="password"  
type="text"  
name="address"  
value="<%=rs("address")%>"></p>  
Chương 2: Một số tiện ích trong ASP  
33  
<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%>  
User <%=username%> has been Edited!  
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!  
34  
ASP  
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 cũng tương tự như quản lý User  
Riêng phần quản lý Product cần lưu ý mỗi product thuộc 1 category nào đó.  
Hình 2.6  
Chương 2: Một số tiện ích trong ASP  
35  
Hình 2.7  
Sau đây chúng ta 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  
set rs = server.createobject("ADODB.Recordset")  
rs.open "select * from Category" ,conn  
%>  
<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%>  
36  
ASP  
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  
response.write "Successfull Add Product!"  
%>  
Hình 2.8  
2.5 Shopping cart  
Trong các website shopping online, ta thường dùng một cấu trúc dữ liệu để  
lưu trữ những hàng hóa mà người dùng chọn mua trong phiên của họ, gọi là  
giỏ hàng (tương tự như giỏ hàng khi chúng ta đi mua hàng trong siêu thị). Về  
dữ liệu, giỏ hàng lưu trữ danh sách những hàng hóa người dùng chọn mua  
bao gồm những thông tin như ProductID, ProductName, ProductCategory,  
Quantity, Price, …(những thông tin này có trong bảng Product và Category  
trong DB)  
Để mô phỏng giỏ hàng, ta có thể dùng 1 số cấu trúc như Dictionary hoặc  
mảng 2 chiều.  
Chương 2: Một số tiện ích trong ASP  
37  
Giỏ hàng được lưu trong 1 biến kiểu session để theo dõi quá trình khách hàng  
mua hàng trong phiên  
Hình 2.9  
Sau đây chúng ta xem qua cách xây dựng một giỏ hàng bằng mảng 2 chiều.  
Giả thiết thông tin về Product bao gồm (ProductID, ProductName,  
ProductCategory, Quantity, Price, TotalPrice), và giỏ hàng chứa được tối đa  
15 sản phẩm. Vậy ta có thể dùng mảng 2 chiều kích thước (6,15) để mô  
phỏng giỏ hàng. Mảng này được lưu theo kiểu biến session để có tác dụng  
trong toàn phiên của người dùng. Ta cần thêm 1 biến Count để đếm số sản  
phẩm hiện có trong giỏ hàng. Biến này cũng có kiểu session.  
Các hàm thao tác:  
AddProductToCart(ProductID): Thêm 1 sản phẩm vào giỏ hàng, nếu sản  
phẩm đã có thì tăng số lượng thêm 1  
UpdateQuantity(ProductID,Quantity): Cập nhật số lượng của 1 sản phẩm  
trong giỏ hàng  
RemoveProductFromCart(ProductID): Xóa 1 sản phẩm khỏi giỏ hàng  
RemoveAll: Xóa rỗng giỏ hàng  
ListProduct: Liệt kê các mặt hàng trong giỏ hàng  
File Global.asa  
<Script language=VBScript RUNAT=Server>  
SUB Session_OnStart  
ReDim arrProduct(6,15)  
Session("arrProduct")=arrProduct  
Session("Count")=0  
‘mảng 2 chiều mô phỏng giỏ hàng  
‘giỏ hàng chứa trong session  
‘số sản phẩm hiện có trong giỏ  
END SUB  
</Script>  
ShoppingCart.asp  
<%  
'thêm sản phẩm vào giỏ hàng, nếu đã có thì tăng số lượng lên 1  
38  
ASP  
Sub AddProductToCart(ProductID)  
arrProduct=Session("ArrProduct")  
Count=Session("Count")  
ProductExist=false  
trong giỏ chưa  
‘biến này dùng đánh dấu xem hàng đã có  
For i=1 to Count  
if arrProduct(1,i)=ProductID then  
ProductExist=true  
‘hàng đã có trong giỏ  
‘tăng số lượng lên 1  
arrProduct(4,i)=arrProduct(4,i)+1  
exit For  
End if  
Next  
If not ProductExist then  
If Count<15 then  
Count=Count+1  
‘dùng Recordset lấy các thông tin ProductName, CategoryName,  
‘ Price từ DB  
‘…  
arrProduct(1,Count)=ProductID  
arrProduct(2,Count)=ProductName  
arrProduct(3,Count)=CategoryName  
arrProduct(4,Count)=1  
arrProduct(5,Count)=CLng(Price)  
arrProduct(6,Count)=0  
End if  
session("ArrProduct")=arrProduct  
session("Count")=Count  
end sub  
Sub RemoveProductFromCart(ProductID) 'xoa san pham trong 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 6  
arrProduct(x,i)=""  
Next  
‘xóa rỗng mặt hàng i  
n=i  
Chương 2: Một số tiện ích trong ASP  
39  
while n<15  
giỏ  
‘dồn mặt hàng i+1 về i bắt đầu từ mặt hàng i đến cuối  
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 trong gio hang  
session("ArrProduct")=""  
session("ArrCount")=""  
end Sub  
Sub UpdateQuantity(ProductID,Quantity) ‘cap nhat lai so luong 1 san pham  
da co trong gio hang  
ArrProduct=Session("ArrProduct")  
Count=Session("Count")  
For i=1 to Count  
if arrProduct(1,i)=ProductID then  
arrProduct(4,i)=Quantity  
exit For  
End if  
Next  
Session("ArrProduct")=ArrProduct  
Session("Count")=Count  
end Sub  
%>  
2.6 Sử dụng tiếng Việt trong ASP  
2.6.1 Bảng mã Unicode  
Về cơ bản máy tính chỉ xử lý được dữ liệu dạng số. Mỗi ký tự (character)  
được máy tính lưu trữ và xử lý bằng cách ánh xạ chúng thành một chữ số  
(còn gọi là mã - code). Ví dụ thông thường chữ ‘A’ có mã 65, ‘a’ mã 97…Bảng  
ánh xạ các ký tự thành các mã dưới dạng số được gọi là bảng mã (character  
code).  
Bảng mã 1 byte: Trong các bảng mã 1 byte như ASCII, mỗi ký tự được biểu  
diễn bằng 1 byte. Chúng có thể biểu diến tối đa 256 ký tự (kể cả các ký tự  
hiển thị được và ký tự điều khiển). Bảng mã 1 byte chỉ thích hợp với những  
ngôn ngữ như tiếng Anh. Đối với các ngôn ngữ phức tạp như tiếng Hoa, tiếng  
40  
ASP  
Nhật, tiếng Việt thì bảng mã này không đủ lớn để có thể biểu diễn hết số ký  
tự cần thiết. Vì vậy, người ta phải thực hiện 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 nhau cùng tồn tại,  
thậm chí 1 ngôn ngữ cũng có nhiều bảng mã, gây nên sự thiếu thống nhất.  
Unicode là bảng mã 2 byte, ra đời nhằm mục đích xây dựng một bộ mã  
chuẩn vạn năng, thống nhất, dùng chung cho tất cả các ngôn ngữ trên thế  
giới. Bộ mã Unicode gồm 16 bit cho mỗi ký tự, biểu diễn được 65536 ký tự.  
Unicode có thể biểu diễn được đầy đủ các ký tự Tiếng Việt.  
2.6.2 Mã hóa UTF-8  
Mỗi ký tự trong bộ mã Unicode được mã hóa (encoding) dưới 1 trong 3 dạng:  
UTF-8 (8 bit), UTF-16 (16 bit) và UTF-32 (32 bit). Trong đó UTF-8 (Unicode  
Transfomation Format -8) được sử dụng phổ biến. Mỗi ký tự Unicode được  
mã hóa UTF-8 sẽ được biểu diễn bằng 1 đến 4 byte tùy thuộc vào giá trị mã  
của ký tự đó.  
Ví dụ: trong bảng mã Unicode chữ a có mã là 97 (hexa là U+0061) => UTF  
32: 0x00000061, UTF-16: 0x0061, UTF-8: 0x61.  
UTF-8 được sử dụng phổ biến để biểu diễn tiếng Việt theo mã Unicode  
2.6.3 CodePage và Charset  
Trong lập trình ASP, để biểu diễn tiếng Việt đúng theo encoding UTF-8,  
chúng ta cần lưu ý 2 điểm:  
-
Hiển thị đúng font UTF-8 trên client (browser) bằng 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) đúng  
dạng dữ liệu được encode)  
-
Xử lý đúng UTF-8 trên server bằng cách đặt thuộc tính Codepage  
= 65001. (code page giúp server xử lý dữ liệu đúng encoding)  
<%Response.codepage=65001%> hoặc  
<%Session.codepage=65001%>  
Session.codepage có thiết lập codepage cho toàn phiên. Còn  
Response.codepage thiết lập codepage cho 1 lần response thôi.  
Thông thường chúng ta sử dụng Session.codepage vì như vậy toàn bộ  
session sẽ có chung 1 codepage thống nhất.  
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 các trang web  
Sử dụng thẻ <%session.codepage=65001%>  
Sử dụng kiểu gõ Unicode trong các bộ gõ (VietKey, Unikey)  
Chương 2: Một số tiện ích trong ASP  
41  
Hình 2.10  
Ví dụ sau minh họa việc thêm vào và hiển thị dữ liệu từ database ra màn  
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%>  
<!--#include file ="Connection.asp"-->  
<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])  
42  
ASP  
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>  
<% do  
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  
destroyConn%>  
</table>  
Chương 2: Một số tiện ích trong ASP  
43  
pdf 16 trang baolam 21380 Free
Bạn đang xem tài liệu "Tài liệu Lập trình ASP - Chương 2: Một số tiện ích trong ASP", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

File đính kèm:

  • pdftai_lieu_lap_trinh_asp_chuong_2_mot_so_tien_ich_trong_asp.pdf