Tải bản đầy đủ (.pdf) (55 trang)

Đưa một cửa hàng lên mạng Internet

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (562.3 KB, 55 trang )


Đưa một cửa hàng lên mạng Internet

2


Luận văn
Đưa một cửa hàng
lên mạng Internet

a mt ca hng lờn mng Internet

3
Chơng I
Đa một cửa hàng lên mạng Internet

1. GIớI THIệU Về THƯƠNG MạI ĐIệN Tử
1.1. THƯƠNG MạI ĐIệN Tử Là Gì ?
Thng mi in t cú ngun gc t Electronic Data Interchange (EDI).
EDI l mt phng phỏp truyn thụng tin t mỏy ny sang mỏy khỏc. EDI c
phỏt trin cho phộp cỏc doanh nghip t ng hoỏ tin trỡnh truyn ti cỏc ti liu
kinh doanh nh hoỏ n v cỏc mt hng. EDI cng cú th s dng truyn ti
nhng loi thụng tin khỏc. Vớ d cỏc trng i hc dựng EDI truyn hc b
ca cỏc sinh viờn, cỏc trung tõm y t dựng EDI truyn h s bnh ỏn.
Thng mi in t bao gm 3 loi giao dch kinh doanh: Th nht, giao
dch cú th din ra gia doanh nghip vi ngi tiờu dựng. Th hai, giao dch
gia cỏc doanh nghip vi nhau. Th ba, giao dch gia ngi tiờu dựng vi
ngi tiờu dựng.
Cỏc giao dch bng th tớn dng dng nh l mt yu t cn thit trong
thng mi in t. Thng mi in t cú th ch bao gm nhng bc dn n
hot ng mua bỏn ch khụng phi quyt nh mua cui cựng.


Thng mi in t cp n quỏ trỡnh mua hoc bỏn mt sn phm
hoc dch v qua mt mng in t. Mụi trng ph bin nht thc hin
thng mi in t ú chớnh l Internet.
1.2. Những công nghệ của Microsoft đợc dùng cho
thơng mại điện tử
Microsoft a ra hai Web Server: Personal Web Server v Internet Infor-
mation Server. Microsoft Personal Web Server hot ng vi Win9X hoc
Windows NT Workstation. Personal Web Server c to ra vi hai mc ớch:
dựng ng ti mt Website cú lu lng thp v th nghim mt Website,
khụng phi l mt Web Server thớch hp cho vic ng ti mt site thc trờn
Internet. Internet Information Server cú th phc v hng trm hoc thm chớ
hng ngn ngi s dng cựng mt lỳc. Internet Information Server tng thớch
vi Windows NT Server hoc Windows 2000 Server. Nú c cung cp nh mt
thnh phn ca hai h iu hnh ny.
to mt Website thng mi ta cn mt c s d liu lu tr thụng
tin v sn phm v nhng thụng tin khỏc. Microsoft Access l h qun tr c s
d liu dnh cho mỏy bn nờn ch s dng trong vic th nghim Website
hoc Website cú lu lng thp. SQL Server l h qun tr Client/ Server nờn cú
th h tr cho hng ngn ngi s dng cựng mt lỳc.

Đưa một cửa hàng lên mạng Internet

4
Chuyên đề thương mại điện tử em sử dụng công nghệ Active Server Pages
và cơ sở dữ lệu Access. Một trang ASP là một file bất kỳ định vị trên Server có
phần mở rộng là .asp, sử dụng ngôn ngữ kịch bản nên các script ASP chạy trong
cùng một tiến trình với Web Server và chúng hoạt động trong cơ chế đa luồng
(multithread) điều này cho phép trang ASP hỗ trợ hiệu quả cho nhiều người dùng
một lúc. Trang ASP được xử lý trên trang Web Server nên trang ASP sẽ tương
thích với tất cả các trình duyệt Web.

ActiveX Data Object cho phép truy xuất cơ sở dữ liệu từ một trang ASP
có thể sử dụng với bất kỳ cơ sở dữ liệu nào tương thích Open Databe Connec-
tivity (ODBC) như Access, SQL Server hoặc OLEDB, trong những cơ sở dữ liệu
đó có Oracle, Sybase, Informix, DB2, Ingres.
2. t¬ng t¸c víi kh¸ch hµng
2.1. lµm viÖc víi ®èi tîng RESPONSE
Một trang ASP là một trang HTML chuẩn có chứa script vì thế có thể sử
dụng các script để gửi nội dung động đến trình duyệt. Trong khi điều hành một
Website thương mại có nhiều tình huống mà ta phải gửi nội dung động đến khách
hàng. Chẳng hạn như khi khách hàng chọn một vài sản phẩm trong cửa hàng, ta
phải tạo động một biên nhận kèm những thông tin đặt hàng của khách hàng.
Response.Write để gửi dữ liệu đến trình duyệt của khách hàng và
Response.End để kết thúc sự thực thi của một script.
2.2. Lµm viÖc víi ®èi tîng request
Trong khi đối tượng Response đại diện tất cả nội dung được gửi từ Web
Server đến trình duyệt Web thì đối tượng Request đại diện mọi thông tin được
gửi từ trình duyệt Web đến Web Server, có 4 tập hợp rất hữu dụng:
Tập hợp QueryString Đại diện các biến chuỗi nghi vấn.
Tập hợp Form Đại diện các trường trong form HTML.
Tập hợp Server Variable

Đại diện các tiêu đề trình duyệt và các biến Server.
Tập hợp Cookies Đại diện các cookies của trình duyệt.
Sử dụng các chuỗi truy vấn là phần URL xuất hiện sau một dấu chấm hỏi.
Ví dụ: chuỗi truy
vấn có tên là p có giá trị “Active Server Pages”. Nếu nhập chuỗi này vào thanh
địa chỉ của trình duyệt Web thì tất cả các danh sách từ Yahoo! Có liên quan đến
Active Server Pages sẽ được trả về. Thông thường không cần nhận trực tiếp một
chuỗi truy vấn vào thanh địa chỉ của trình duyệt mà tạo liên kết trong một trang
có chứa chuỗi truy vấn.

Sử dụng tập hợp form: Để cho phép khác hàng đăng ký tại Website, hoàn
thành một form tiếp thị, hoặc nhập số thẻ tín dụng ta phải sử dụng một Form
HTML. Để gọi ra thông tin mà khách hàng nhập vào form của đối tượng

a mt ca hng lờn mng Internet

5
Request. iu quan trng l kim tra xem cỏc trng cú rng hay khụng, ta cú
th so sỏnh giỏ tr ca trng vi mt chui di zero, hoc ta cú th t iu
kin nu chui nhp vo rng thỡ gỏn cho chui mt vi ký t c bit. Ngoi ra,
cũn phi hin th li cỏc trng trong form khi khỏch hng nhp sai ni dung
trong form no ú, õy l tớnh khoan dung. lm c iu ny cn phi truyn
tt cc d liu v form ban u.
Gi ra cỏc bin form v chui truy vn, cú mt vi tỡnh hung no ú m
ta cn gi ra mt bin nu nú c truyn trong mt chui truy vn hoc mt
bin form, cú th tỡm kim tt c cỏc tp hp cha trong i tng Request bng
cỏch khụng ch nh mt tp hp c th no.
<head><title>Form v chui truy vn</title></head>
<body>
<a href="page.asp?myvar=hello">Click here</a>
<p>
<FORM method="post" ACTION="page.asp">
<INPUT name="myvar" size="10">
<INPUT type="submit" value="OK">
</FORM>
</body>

<head><title>Gi mt bin form hoc mt bin chui </title></head>
<body>
<%

myvar=Request("myvar")
Response. Write myvar
%>
</body>
2.3. Làm việc với các biến Server
Tp hp ny cha cỏc bin i din cho cỏc tiờu ca trỡnh duyt v cỏc
thuc tớnh ca Server, vi bin Server ta cú th bit c trang hin thi, trang
cui cựng m mt khỏch hng truy cp, a ch Internet liờn h vi khỏch hng,
loi trỡnh duyt m khỏch hng s dng.
3. Xây dựng danh mục sản phẩm
3.1. Tạo cơ sở dữ liệu cho cửa hàng
Bc u tiờn trong vic to ca hng trc tuyn l to c s d liu
lu gi tt c cỏc thụng tin v cỏc sn phm. Microsoft Access l c s d liu
thớch hp to Website th nghim hoc mt Website cú lu lng thp, tuy
nhiờn ta cú th nõng cp c s d liu Access lờn c s d liu SQL Server bng
cỏch s dng Microsoft Upsizing Tools. Cụng c ny c cung cp kốm theo
Microsoft Access 2000.
To bng products:
Product_id AutoNumber

Cha s duy nht dnh cho sn phm trong
bng ny.

Đưa một cửa hàng lên mạng Internet

6
Product_name Text Chứa tên của sản phẩm trong bảng.
Product_price Currency Chứa giá hiện thời của sản phẩm.
Product_picture Text Chứa đường dẫn đến hình ảnh của sản phẩm.
Product_category Text Chứa loại của sản phẩm.

Product_briefdesc

Memo Chứa mô tả ngắn về sản phẩm.
Product_fulldesc Memo Chứa mô tả đầy đủ về sản phẩm, cột này có
thể là 1 trang đầy thông tin.
Product_status Number Chứa thông tin về tình trạng hiện thời sản
phẩm.
Kết nối cơ sở dữ liệu
Hai loại DSN khác nhau có thể được tạo ra. Nếu tạo một file DSN, thông
tin về kết nối cơ sở dữ liệu được lưu trong một file. Nếu tạo một System DSN thì
thông tin kết nối cơ sở dữ liệu được lưu trong registry của máy tính. Một kết nối
cơ sở dữ liệu được đại diện trong một trang ASP bởi đối tượng Connection của
ADO.
Mở một kết nối cơ sở dữ liệu (Data Source Name: accessDSN)
<%
Set Con=Server.CreateObject("ADODB.Connection")
Con.Open "accessDSN"
%>
Việc mở một kết nối cơ sở dữ liệu giống như mở một kết nối điện thoại.
Sau khi kết nối được mở, các thông điệp có thể được truyền qua lại giữa script
ASP và cơ sở dữ liệu.
3.2. T¹o form addproducts
Trang addProducts.asp chứa một form HTML cho phép nhập vào thông
tin sản phẩm, trang manageProducts.asp – khi đệ trình form được chứa trong
addProducts.asp thì trang này sẽ thực sự thêm thông tin sản phẩm mới vào trong
cơ sở dữ liệu. Trang addProducts.asp chứa một form HTML chuẩn với các
trường tương ứng với các cột của bảng Products.
<html>
<head><title>Add Product</title></head>
<body bgcolor="gray">

<form method="post" action="manageproducts.asp">
<center>
<table width="600" border="0" bgcolor="#F5B278" cellpadding="4">
<tr>
<td colspan="2" bgcolor="#F6892B">
<font face="Arial" size="4">Add Product</font></td></tr>
<tr>
<td>
<b>Product Name:</b></td>
<td>

Đưa một cửa hàng lên mạng Internet

7
<input name="productName" size="50" maxlength="50"></td></tr>
<tr>
<td>
<b>Product Price:</b></td>
<td>
<input name="productPrice" size="20"></td></tr>
<tr>
<td>
<b>Product Picture:</b></td>
<td>
<input name="productPicture" size="50" maxlength="50"></td></tr>
<tr>
<td>
<b>Product Category:</b></td>
<td>
<input name="productCategory" size="50" maxlength="50"></td></tr>

<tr>
<td>
<b>Product Brief Desc:</b></td>
<td>
<textarea name="productBriefDesc" cols="50" rows="2"
wrap="virtual"></textarea></td></tr>
<tr>
<td>
<b>Product Full Desc:</b></td>
<td>
<textarea name="productFullDesc" cols="50" rows="10"
wrap="virtual"></textarea></td></tr>
<tr>
<td>
<b>Product Status:</b></td>
<td>
<select name="productStatus">
<option value="0">INACTIVE
<option value="1">ACTIVE
</select></td></tr>
<tr>
<td colspan="2" align="right">
<input type="submit" value="Add Product"></td></tr>
</table>
</center>
<input name="addProduct" type="1" value="1">
</form>
</body>
</html>
Mục đích duy nhất là thu thập thông tin về sản phẩm thông qua một form

HTML. Thông tin sản phẩm không được thêm vào cơ sở dữ liệu cho đến khi
form này được đệ trình và trang thứ hai – manageProducts.asp được yêu cầu.
<%
FUNCTION fixQuotes (theString)
fixQuotes=REPLACE(theString,"'","''")
END FUNCTION
' Get the form Variables
addProduct = TRIM (Request("addProduct"))
updateProduct = TRIM (Request("updateProduct"))

Đưa một cửa hàng lên mạng Internet

8
productID = TRIM (Request("productID"))
productName = TRIM (Request("productName"))
productPrice = TRIM (Request("productPrice"))
productPicture = TRIM (Request("productPicture"))
productCategory = TRIM (Request("productCategory"))
productBriefDesc = TRIM (Request("productBriefDesc"))
productFullDesc = TRIM (Request("productFullDesc"))
productStatus = TRIM (Request("productStatus"))
' Assign Default Variables
IF productName="" THEN
productName="?????" END IF
IF productPrice="" THEN
productPrice=0 END IF
IF productPicture="" THEN
productPicture="?????" END IF
IF productCategory="" THEN
productCategory="?????" END IF

IF productBriefDesc="" THEN
productBriefDesc="?????" END IF
IF productFullDesc="" THEN
productFullDesc="?????" END IF
' Open the Database Connection
Set Con=Server.CreateObject( "ADODB.Connection" )
Con.Open "accessDSN"
%>
<html>
<head><title>Manage Products</title></head>
<body bgcolor="gray">
<%
' Add new product
IF addProduct <> "" THEN
sqlString="INSERT INTO PRODUCTS (product_name, product_price,
product_picture, product_category, product_briefdesc,
product_fulldesc, product_status)" VALUES ('"&productName&"',
'"&productPrice&"', '"&productPicture&"', '"&productCategory&"',
'"&productBriefDesc&"', '"&productFullDesc&"', '"&productStatus&"')"
Con.Execute sqlString
%>
<center>
<table width="600" cellpadding="4" bgcolor="lightyellow">
<tr>
<td>
<%=productName%> was added to the database</td></tr>
</table>
</center>
<p>
<% END IF

' Update product
IF updateProduct <> "" THEN
sqlString="UPDATE products SET "&_
"product_name='"&fixQuotes(productName)&"',"&_
"product_price='"&productPrice&"',"&_
"product_picture='"&fixQuotes(productPicture)&"',"&_
"product_category='"&fixQuotes(productCategory)&"',"&_
"product_briefdesc='"&fixQuotes(productBriefdesc)&"',"&_
"product_fulldesc='"&fixQuotes(productFulldesc)&"',"&_
"product_status='"&productStatus&"' WHERE product_id='"&productID&"'"

Đưa một cửa hàng lên mạng Internet

9
Con.Execute sqlString
%>
<center>
<table width="600" cellpadding="4" bgcolor="lightyellow">
<tr>
<td>
<%=productName%> was update in the database</td></tr>
</table>
</center>
<p>
<%END IF%>
<center>
<table width="600" cellpadding="4" bgcolor="lightyellow">
<tr>
<td bgcolor="yellow">
<font face="Arial" size="3"><b>Manage Products</b></font></td></tr>

<tr>
<td align="center">
<table border="1" size="400" cellpadding="3" bgcolor="white">
<%
sqlString="SELECT product_id,product_name FROM products"
SET RS=Con.Execute(sqlString)
WHILE NOT RS.EOF
%>
<tr>
<td width="400">
<a href="updateproduct.asp?pid=<%=RS("product_id")%>">
<%=RS("product_name")%></a>
<%
RS.MoveNext
WEND
%>
</td></tr>
</table>
</td></tr>
<tr>
<td>
<a href="addproduct.asp">Add Product</a></td></tr>
</table>
</center>
</body>
</html>
Khi muốn thay đổi thông tin về sản phẩm chẳng hạn như giá cả ta cần
thêm trang updateProducts.asp.
<%
' Get the Product ID

productID=request("pid")
' Open the Database Connection
Set Con=Server.CreateObject ( "ADODB.Connection" )
Con.Open "accessDSN"
' Open the Recordset
Set RS=Server.CreateObject ( "ADODB.Recordset" )
RS.ActiveConnection=Con
RS.CursorType=3
RS.Open "SELECT * FROM products WHERE product_id ="&productID

Đưa một cửa hàng lên mạng Internet

10

IF NOT RS.EOF THEN
productName = RS("product_name")
productPrice = RS("product_price")
productPicture = RS("product_picture")
productCategory = RS("product_category")
productBriefDesc = RS("product_briefDesc")
productFullDesc = RS("product_FullDesc")
productStatus = RS("product_status")
END IF
' Close the Recordset
RS.Close
FUNCTION SELECTED ( firstVal, secondVal )
IF cSTR( firstVal)=cSTR (secondVal) THEN
SELECTED="SELECTED"
END IF
END FUNCTION

%>
<html>
<head><title>Update Product</title></head>
<body bgcolor="gray">
<form method ="post" action="manageproducts.asp">
<center>
<table width="600" border=1 bgcolor="lightyellow" cellpadding="4" >
<tr>
<td colspan="2" bgcolor="yellow" height="19">
<font face="Arial" size="3">
<b>Update Product</b></font></td></tr>
<tr>
<td height="23">
<b>Product Name:</b></td>
<td height="23">
<input name="productName" size="50" maxlength="50"
value="<%=Server.HTMLEncode(productName)%>"></td></tr>
<tr>
<td height="23">
<b>Product Price:</b></td>
<td height="23">
<input name="productPrice" size="10"
values="<%=productPrice%>"></td></tr>
<tr>
<td height="23">
<b>Product Picture:</b></td>
<td height="23">
<input name="productPicture" size="50" maxlength="50"
value="<%=Server.HTMLEncode(productPicture)%>"></td></tr>
<tr>

<td height="23">
<b>Product Category:</b></td>
<td height="23">
<input name="productCategory" size="50" maxlength="50"
value="<%=Server.HTMLEncode(productCategory)%>"></td></tr>
<tr>
<td height="60">
<b>Product Brief Desc:</b></td>
<td height="60">
<textarea name="productBriefDesc" cols="50" rows="2"
wrap="virtual" ><%=Server.HTMLEncode(productBriefDesc)%>

Đưa một cửa hàng lên mạng Internet

11

</textarea></td></tr>
<tr>
<td height="212">
<b>Product Full Desc:</b></td>
<td height="212">
<textarea name="productFullDesc" cols="50" rows="10"
wrap="virtual" ><%=Server.HTMLEncode(productFullDesc)%>
</textarea></td></tr>
<tr>
<td height="23">
<b>Product Status:</b></td>
<td height="23">
<select name="productStatus">
<option value="0" <%=SELECTED( "0", productStatus )%>> INACTIVE

<option value="1" <%=SELECTED( "1", productStatus )%>> ACTIVE
</select></td></tr>
<tr>
<td colspan="2" align="right" height="25">
<input type="submit" value="Update product"></td></tr>
</table>
</center>
<input name="productID" type="hidden" value "<%=productID%>">
<input name="updateProduct" type="hidden" value="1">
</form>
</body>
</html>
4. hiÓn thÞ c¸c s¶n phÈm trong cöa hµng
4.1. Sö dông c¸c Recordset
Đối tượng Recordset đại diện một tập hợp các mẩu tin được gọi ra từ một
cơ sở dữ liệu. Bất cứ khi nào ta sử dụng một Recordset để hiển thị các mẩu tin cơ
sở dữ liệu bên trong một trang ASP thì ta tuân thủ theo những bước sau:
1. Mở một kết nối cơ sở dữ liệu với đối tượng Connection.
2. Mở một Recordset bằng cách sử dụng câu lệnh SELECT của SQL.
3. Hiển thị các mẩu tin trong Recordset bằng cách duyệt qua Recordset.
Ví dụ: Ta hiển thị tên của tất cả các sản phẩm trong bảng Products.
<%
' Open Database connection
Set Con=Server.CreateObject("ABODB.Connection")
Con.Open "accessDSN"
' Open Recordset
Set RS=Server.CreateObject("ABOBD.Recordset")
RS.ActiveConnection=Con
RS.Open "SELECT * FROM products"
' Loop through Recordset

WHILE NOT RS.EOF
Response.Write RS("product_name")
RS.MoveNext
WEND
%>

Đưa một cửa hàng lên mạng Internet

12

Ta có thể xem một Recordset như một file văn bản. Mỗi dòng trong một
Recordset giống như một dòng riêng biệt trong file văn bản. Bất cứ khi nào ta gọi
phương thức MoveNext, ta được chuyển đến dòng kế tiếp. Khi đến cuối tập tin
(cuối Recordset) thì thuộc tính EOF (End of File) có giá trị là True.
Sử dụng câu lệnh Select của SQL
Ta mở một Recordset bằng cách sử dụng câu lệnh SELECT của SQL. Để
chọn tất cả các cột và tất cả các hàng trong một bảng sử dụng câu lệnh sau:
SELECT * FROM table_name
Tuy nhiên, việc gọi ra tất cả các cột từ một bảng là một ý kiến không hay.
Ta không nên đặt gánh nặng lên vai server bằng việc gọi ra những dữ liệu không
thực sự cần. Nếu dự định chỉ thị những cột nào đó trong một bảng thì ta nên giới
hạn các cột được gọi ra bằng cách liệt kê các cột:
SELECT column1, column2 FROM table_name
Ta cũng có thể sử dụng câu lệnh SELECT để gọi ra chỉ những hàng nào
đó trong một cơ sở dữ liệu. Ví dụ, chọn chỉ những dòng trong bảng Products
trong đó cột product_category có giá trị là Chocolates:
SELECT product_name FROM Products
WHERE product_category="Chocolates"
Sử dụng biểu thức toán học và logic bên trong mệnh đề WHERE để gọi ra
các mẩu tin đáp ứng đúng các điều kiện. Ví dụ, gọi ra chỉ những sản phẩm có giá

từ $20.00 đến $30.00:
SELECT product_name FROM Products
WHERE product_price > 20.00 AND product_price < 30.00
Hơn thế, ta có thể mở rộng câu lệnh SELECT xa hơn bằng cách sử dụng
mệnh đề ORDER BY – cho phép gọi ra các mẩu tin từ một bảng theo một thứ tự
nào đó. Ví dụ, gọi ra các sản phẩm loại Chocolates với tên các sản phẩm được
xếp theo thứ tự abc:
SELECT product_name FROM Products
WHERE Product_category="chocolates"
ORDER BY product_name
Cuối cùng, ta có thể sử dụng câu lệnh SELECT để gọi chỉ những mẩu tin
riêng biệt trong một bảng. Ví dụ, liệt kê tất cả các loại sản phẩm riêng biệt trong
bảng Products:
SELECT DISTINCT product_category
FROM Products
Các loại con trỏ của Recordset
Khi một Recordset được mở với một kiểu con trỏ nào đó. Ta có thể mở
một Recordset với bất kỳ con trỏ nào trong bốn loại con trỏ sau: forward-only,
static, keyset và dynamic. Loại con trỏ của một Recordset quyết định các phương
thức và thuộc tính mà Recordset sẽ hỗ trợ. Theo mặc định, khi một Recordset

Đưa một cửa hàng lên mạng Internet

13

được mở, nó được mở với một con trỏ forward-only. Tuy nhiên, con trỏ forward-
only là loại con trỏ bị hạn chế nhất. Ví dụ, sử dụng thuộc tính RecorCount của
đối tượng Recordset, ta có thể xác định số lượng các mẩu tin được chứa trong
một Recordset với con trỏ forward-only. Để sử dụng thuộc tính RecordCount, ta
phải mở Recordset với một con trỏ linh hoạt hơn.

4.2. HiÓn thÞ c¸c s¶n phÈm
Tạo giao diện cho cửa hàng trực tuyến cho phép khách hàng duyệt qua
danh sách các sản phẩm ta cần tạo 4 file:
CatList.asp File này chứa một script hiển thị từng loại sản phẩm. Các
khách hàng có thể nhấp vào một loại sản phẩm cụ thể để xem
danh sách các sản phẩm trong loại này.
ProductList.asp File này chứa một script liệt kê tất cả các sản phẩm trong một
loại cụ thể.
Default.asp File này là trang ASP chính của cửa hàng, hiển thị danh sách
các sản phẩm.
Product.asp File này hiển thị chi tiết về một sản phẩm cụ thể. Khi một
khách hàng nhấp vào tên của một sản phẩm bên trong trang
Default.asp thì các chi tiết của sản phẩm được hiển thị trong
trang này.
Chọn các loại sản phẩm
Khi thêm các sản phẩm vào cửa hàng trực tuyến, có một trường dành cho
loại sản phẩm (product_category) khi khách hàng duyệt qua cửa hàng họ có thể
chọn một loại sản phẩm cụ thể và chỉ xem các sản phẩm trong loại này.
<%
Set Con=Server.CreateObject("ADODB.Connection")
Con.Open "accessDSN"
Set catRS=Server.CreateObject("ADODB.Recordset")
catRS.ActiveConnection=Con
sqlString="SELECT DISTINCT product_category FROM products"
sqlString=sqlString & "WHERE product_status=1"
sqlString=sqlString & "ORDER BY product_category"
catRS.Open sqlString
%>
<% IF cat="Home" THEN %>
<font color="red"><b>Home</b></font>

<UL>
<% ELSE %>
<a href="default.asp?cat=home">Home</a>
<UL>
<% END IF %>
<% WHILE NOT catRS.EOF %>
<% IF catRS ("product_category")=cat THEN %>
<li><font color="red"><b>
<%= catRS ("product_cateegory") %>
</b></font>

Đưa một cửa hàng lên mạng Internet

14

<% ELSE %>
<li><a href="default.asp?cat=<%=Server.URLEncode(catRS(
"product_category"))%>">
<%=catRS("product_category")%></a>
<% END IF %>
<%
catRS.MoveNext
WEND
%>
</UL>
<% catRS.Close %>
Script này tạo ra một thực thể của đối tượng Recordset tên là catRS. Sau
khi catRS được mở ra, các loại sản phẩm được hiển thị từng cái một bằng cách
duyệt qua Recordset, nếu một loại sản phẩm không là loại hiện thời thì nó được
hiển thị như một liên kết siêu văn bản. Nếu một loại không phải là loại hiện thời

thì nó được hiển thị như một liên kết siêu văn bản. Mỗi liên kết truyền một biến
chuỗi truy vấn tên là cat. Biến chuỗi truy vấn này chứa tên của loại sản phẩm
được mã hoá URL.
Hiển thị danh sách các sản phẩm
Khi khách hàng nhấp vào một loại, tên của loại này được truyền bên trong
biến chuỗi truy vấn cat. Script productList.asp sử dụng biến cat để chọn chỉ
những sản phẩm nào thuộc loại hiện thời được chọn.
<%
Set Con=Server.CreateObject("ADODB.Connection")
Con.Open "accessDSN"
Set prodRS=Server.CreateObject("ADODB.Recordset")
prodRS.ActiveConnection=Con
sqlString="SELECT product_id, product_picture, product_name,
product_briefDesc" FROM Products WHERE product_category='"&cat&"'
AND product_status=1 ORDER BY product_name "
prodRS.Open sqlString
%>
<table width="350" border="0" cellpadding="4" cellspacing="0">
<% WHILE NOT prodRS.EOF %>
<tr>
<td>
<% IF prodRS ( "product_picture" ) <> "?????" THEN %>
<IMG SCR="<%= prodRS("product_picture") %>">
<% END IF %></td>
<td>
<a href="product.asp?pid=<%= prodRS("product_id") %>">
<b><%= prodRS("product_name") %></b></a>
<b><%= prodRS("product_briefDesc") %></b>
<a href="product.asp?pid=<%= prodRS("product_id") %>">
get more information </a></td></tr>

<%
prodRS.MoveNext
WEND
%>
</table>

Đưa một cửa hàng lên mạng Internet

15

Script này tạo một thực thể của đối tượng Recordset có tên là prodRS.
Recordset prodRS chứa tất cả các sản phẩm thuộc một loại nào đó. Một mô tả về
mỗi sản phẩm được hiển thị từng cái một, nếu một sản phẩm có một hình ảnh thì
hình ảnh này được hiển thị trong ô bên trái tên sản phẩm và phần mô tả ngắn gọn
được hiển thị trong ô bên phải, tên của các sản phẩm được hiển thị như các liên
kết siêu văn bản đến trang Product.asp. Nếu một khách hàng nhấp vào một sản
phẩm thì họ sẽ được mang đến trang Product.asp để xem chi tiết về sản phẩm.
Mỗi liên kết đến trang Product.asp chứa một biến chuối truy vấn tên là pid. Biến
này được truyền đến trang Product.asp khi liên kết được nhấp. Trang Product.asp
sử dụng biến này để hiển thị thông tin của đúng sản phẩm.
Tạo trang chủ của cửa hàng
Trang Default.asp là trang ASP chính của cửa hàng trực tuyến, các khách
hàng duyệt qua các sản phẩm của cửa hàng bằng cách yêu cầu trang này, script
CatList.asp và ProductList.asp kết hợp với nhau trong Default.asp
<! #INCLUDE FILE="adovbs.inc" >
<%
Cat=TRIM(Request("Cat"))
IF Cat="" THEN Cat="Home"
Set Con=Server.CreateObject("ADODB.Connection")
Con.Open "accessDSN"

%>
<html>
<head><title>Viet Khanh's Candies and Gifts</title></head>
<body link="ff4040" text="lightred">
<center>
<table width="640" border="0" cellspacing="0" cellpadding="0">
<tr>
<td>
<IMG SRC="images/logo.gif"></td>
<td align="right" valign="bottom">
<a href="cart.asp">shopping cart</a>
<a href="acount.asp">acount</a></td></tr>
<tr>
<td colspan="2">
<hr width="640"></td></tr>
</table>
<table width="640" border="0" cellspacing="0" cellpadding="0">
<tr>
<td valign="top">
<table cellpadding="0" cellspacing="0" border="0">
<tr>
<td valign="bottom" bgcolor="pink" >
<IMG SRC="images/search.gif" border="0"></td></tr>
<tr>
<td>
<table width="200" cellpadding="4" cellspacing="0"
bgcolor="lightyellow" border="1">
<tr>
<td>
<form method="post" action="search.asp">

<input name="searchfor" size="15">
<input type="submit" value="Search">

Đưa một cửa hàng lên mạng Internet

16

</form></td></tr>
</table>
</td>
</tr>
<tr>
<td>
<table valign="bottom">
<tr>
<td>
<IMG SRC="Category.gif"></td></tr>
<tr>
<td>
<table width="200" bgcolor="lightyellow">
<tr>
<td>
<! #INCLUDE FILE="CatList.asp" ></td></tr>
</table></td></tr>
</table>
</td>
<td valign="top">
<% IF cat="Home" THEN %>
<% ELSE%>
<! INCLUDE FILE="ProductList.asp" >

<% END IF %>
</td></tr>
</table>
</td></tr>
</table>
<hr width="640">
Copyright &copy; 2000 the Viet Khanh Gift Company
</center>
</body>
</html>
Hiển thị chi tiết về sản phẩm
Khi một khách hàng nhấp vào tên của một sản phẩm, hoặc nhấp vào Get
more Information, họ sẽ được mang đến trang Product.asp trang này trình bày
thông tin chi tiết hơn về một sản phẩm. Khách hàng cũng có thể sử dụng trang
này để thêm một sản phẩm vào giỏ đi chợ của mình.
<%
' Get the productID
productID=TRIM(Request("pid"))
' Open the Database Connection
Set Con=Server.CreateObject("ADODB.Connection")
Con.Open "accessDSN"
' Get the product information
sqlString="SELECT* FROM Products"
sqlString=sqlString & "WHERE product_id=&productID"
Set RS=Server.CreateObject("ADODB.Recordset")
RS.ActiveConnection=Con
RS.Open sqlString
' Get Current Category
cat=RS("product_category")
%>

<html>
<head><title>Vietkhanh's Candies and Gifts</title></head>

Đưa một cửa hàng lên mạng Internet

17

<body link="#ff4040" vtext="lightred">
<center>
<table width="640" border="0" cellpadding="0" cellspacing="0">
<tr>
<td>
<IMG SRC="images/logo.gif"></td>
<td align="right" valign="bottom">
<a href="cart.asp">shopping cart</a>
<a href="account.asp">account</a></td></tr>
<tr>
<td colspan="2">
<hr width="640"></td></tr>
</table>

<table width="640" border="0" cellpadding="0" cellspacing="0">
<tr>
<td valign="top">
<table cellpadding="0" cellspacing="0" border="0">
<tr>
<td valign="bottom" bgcolor="pink">
<IMG SRC="search.gif" border="0"></td></tr>
<tr>
<td>

<table width="200" cellpadding="4" cellspacing="0"
bgcolor="lightyellow" border="1">
<tr>
<td>
<form method="post" action="search.asp">
<input name="searchfor" size="15">
<input type="submit" value="Search">
</form></td></tr>
</table></td></tr>
<tr>
<td valign="bottom">
<IMG SRC="categories.gif" border="0"></td></tr>
<tr>
<td>
<table width="200" cellpadding="4" bgcolor="lightyellow">
<tr>
<td>
<! #INCLUDE FILE="CatList.asp" ></td></tr>
</table></td>
<td valign="top">
<table cellpadding="10" cellspacing="0" border="0">
<tr>
<td>
<% IF RS ("product_picture")<>"?????" THEN %>
<IMG SRC="<%= RS("product_picture") %>">
<% END IF %>
<p>
<font size="3" face="Arial">
<b><%=RS( "product_name" )%></b></font>
<p>

<%=RS( "product_briefDesc" )%>
<form method="post" action="Cart.asp">
<input name="pid" type="hidden"
value=" <%=RS( "product_id" )%> ">
<input type="submit" value="Add To Cart">

a mt ca hng lờn mng Internet

18

</form>
<%=RS( "product_fullDesc" )%>
<form method="post" action="Cart.asp">
<input name="pid" type="hidden"
value=" <%=RS( "product_id" )%> ">
<input type="submit" value="Add To Cart">
</form></td></tr>
</table></td></tr>
</table></td></tr>
</table>
<hr width="640">
Copyright &copy; 2000 the Johnson Gift Company
</center>
</body>
</html>
Phõn trang Recordset
Nu ta lit kờ mt s lng sn phm thuc mt loi duy nht thỡ ta cú th
khụng mun tt c cỏc sn phm c hin th trờn ch mt trang, iu ú lm
cho ca hng cú kh nng m rng hn na vic kt ni v gi ra cỏc mu tin t
mt c s d liu. Chng hn ta mun khụng quỏ 5 mụ t v sn phm c lit

kờ trờn mt trang.
i tng Recordset cú 3 thuc tớnh cho phộp ta cỏc kt qu t mt truy
vn c s d liu ra nhiu trang:
AbsolutePage Thit lp hoc tr v trang cha cỏc mu tin hin thi
PageCount Tr v s trang trong mt Recordset
PageSize Thit lp hoc tr v s lng mu tin c cha trong mt
trang (mc nh l 10)
4.3. Làm cho cửa hàng có khả năng mở rộng hơn nữa
Vic kt ni v gi ra cỏc mu tin t mt c s d liu chim rt nhiu ti
nguyờn mỏy tớnh. Nu ta mun to mt Website cú kh nng m rng h tr
hng trm ngi dựng ng thi thỡ ta nờn trỏnh vic chn cỏc mu tin t mt c
s d liu bt c khi no cú th.
Chc chn, cỏc loi sn phm s khụng thay i thng xuyờn. Mt cỏch
trỏnh gi ra cỏc loi sn phm t c s d liu l ch cn lit kờ cỏc loi sn
phm di dng cỏc liờn kt HTML tnh. Núi mt cỏch khỏc ta cú th bin file
CartList.asp thnh mt trang HTML tnh, nhng khuyt im ca gii phỏp ny
l phi nhp li file CartList.asp bt c khi no thờm mt sn phm thuc loi
mi hoc xoỏ b hoc ngng hot ng i vi tt c cỏc sn phm trong mt
loi. Vic bo trỡ Website cng cú nhng chi phớ ỏng quan tõm. Tht may mn
l cú mt gii phỏp tt hn. Thay vỡ gi ra danh sỏch cỏc loi sn phm bt c
khi no hin th mt trang, ta cú th gi ra cỏc loi sn phm mt ln v lu
chỳng trong b nh. Nh vy ta trỏnh c vic truy xut c s d liu bt c
khi no cỏc loi sn phm c hin th. Thun li ca gii phỏp ny l nú lm

Đưa một cửa hàng lên mạng Internet

19

cho cửa hàng trực tuyến có khả năng mở rộng nhiều hơn trong khi không làm cho
việc bảo trì khó khăn hơn. Danh sách các loại sản phẩm vẫn được tạo ra tự động

từ cơ sở dữ liệu. Tuy nhiên, danh sách này không được tạo ra mỗi lần một trang
được yêu cầu.
Để lưu trữ danh sách các loại sản phẩm trong bộ nhớ, ta sẽ sử dụng biến
Application, nó sẽ chứa một mảng trong đó mỗi phần tử chứa tên của một loại
sản phẩm. Bởi vì danh sách các loại sản phẩm được lưu trữ trong bộ nhớ nên nó
sẽ không được cập nhật tự động nếu thay đổi một sản phẩm trong cơ sở dữ liệu.
Các loại sản phẩm sẽ được tái nạp chỉ khi máy tính khởi động lại hoặc dịch vụ
Web bị ngưng và khởi động lại. Nếu buộc danh sách các loại sản phẩm phải được
nạp lại ta dùng script reset, script này chỉ đơn giản là thiết lập biến Application
tên là productcategories để nó có giá trị là một chuỗi rỗng. Điều này xoá mảng
khỏi biến Application làm cho danh sách các loại sản phẩm được gọi ra từ cơ sở
dữ liệu lần kế tiếp một trang được gọi
<%
Application.Lock
Application("productCategories")=""
Application.Unlock
%>
Product Categories have been reset !
5. t×m kiÕm c¸c s¶n phÈm
5.1. hiÓn thÞ mét danh s¸ch c¸c s¶n phÈm
Chọn danh sách các sản phẩm nổi bật
Đầu tiên, ta cần thêm một trường phụ vào bảng Products. Để cho phép
chọn những sản phẩm mà muốn liệt kê để làm nổi bật ta sẽ thay đổi file
updateProduct.asp lẫn file managerProducts.asp.
Trang updateProduct.asp (phần Open the Recordset) gán giá trị của cột
product_featured cho biến cục bộ productFeatured, khi product_featured là
NULL thì biến productFeatured được gán giá trị 0.
ProductFeatured = RS("product_featured")
IF isNULL(productFeatured) THEN productFeatured = 0
Kế đến, thêm đoạn mã sau vào trong form HTML cho phép chọn một sản

phẩm làm sản phẩm nổi bật:
<tr>
<td>
<b>Product Featured:</b></td>
<td>
<SELECT name="productFeatured">
<option value="0"<%= SELECTED("0",productFeatured)%>>Nomal
<option value="1"<%= SELECTED("1",productFeatured)%>>Featured
</SELECT></td></tr>

Đưa một cửa hàng lên mạng Internet

20

Cuối cùng, thay đổi file manageProduct.asp để cập nhật cơ sở dữ liệu với
thông tin về việc một sản phẩm có được chọn làm sản phẩm nổi bật hay không,
thêm vào Get the form Variables:
ProductFeatured=TRIM(Request("productFeatured"))
Thêm product_featured='"&productfeatured&"' vào cuối chuỗi SQL được tạo
trong phần Update Product.
Gọi ra danh sách các sản phẩm nổi bật
Ta đã chọn các sản phẩm nổi bật cho cửa hàng trực tuyến, ta sẽ cần một
phương pháp để hiển thị các sản phẩm nổi bật trên trang chủ. Hiển thị danh sách
cá sản phẩm nổi bật với sự giúp đỡ của một file dùng chung tên là Featured.asp,
nó được hiển thị khi không có loại nào được chọn. Nó được chứa trong phần cuối
của default.asp:
<% IF cat="Home" THEN %>
<! #include file="Featured.asp" >
<% ELSE %>
<! #include file="ProductList.asp" >

<% END IF %>
Featured.asp hiển thị các sản phẩm nổi bật
<%
Radomize
CONST numFeatured products
sqlString="SELECT product_id,product_picture,product_name,product_briefDesc
FROM products WHERE product_featured=1 AND product_status=1
ORDER BY product_name"
SET Featured=Con.Execute(sqlString)
IF NOT Featured.EOF THEN
FeaturedArray=Featured.GetRows()
Featured.Close
END IF
' Display Featured products
topFeatured=UBOUND(featuredArray, 2) + 1
skip=topFeatured/numFeatured
IF topFeatured <= numFeatured THEN skip=1
%>
<table width="350" border="0" cellpadding="5" cellspacing="0">
<%
FOR i=0 TO topFeatured - 1 STEP skip
offset=RND * (skip - 1)
productID=featuredArray(0, i + offset)
productPicture=featuredArray(1, i + offset)
productName=featuredArray(2, i + offset)
productBriefDesc=featuredArray(3, i + offset)
%>
<tr>
<td>
<% IF productPicture <> "?????" THEN %>

<IMG SRC="<%=productPicture%>" HSPACE="4" VSPACE="4" align="center">
<% END IF %></td>
<td>
<a href="Product.asp?pid=<%=productID%>">

Đưa một cửa hàng lên mạng Internet

21

get more information</a></td></tr>
<% NEXT %>
</table>
<% END IF %>
Hiển thị một số lượng sản phẩm nổi bật được xác định trước trong bảng
Products. Hằng số numfeatured chỉ định số lượng các sản phẩm nổi bật cần hiển
thị và có thể thay đổi giá trị hằng số khi nào ta muốn. Biến topFeatured chứa số
chỉ mục của phần tử đầu tiên của mảng Featured. Biến skip được sử dụng để chỉ
thị số lượng phần tử cần bỏ qua trong mảng này khi hiển thị các sản phẩm nổi
bật. Còn biến offset được sử dụng để ngẫu nhiên chọn một sản phẩm nổi bật để
hiển thị mỗi lần script này được thực thi.
5.2. T¹o mét trang t×m kiÕm
Các khách hàng nhập vào các mục cần tìm vào trong hộp tìm kiếm xuất
hiện trong trang chủ của cửa hàng và gọi ra một danh sách các sản phẩm khớp
với mục cần tìm. Để tạo trang tìm kiếm ta cần sử dụng toán tử LIKE của SQL
thực hiện việc so khớp bao gồm các ký tự đại diện.
SELECT * FROM Products
WHERE product_name LIKE 'c%'
Câu lệnh SQL này gọi ra tất cả các dòng trong bảng Products có trường
product_name bắt đầu với ký tự c. Nó không phân biệt kiểu chữ.
Tìm kiếm các sản phẩm

<! #include file="adovbs.inc" >
<%
' Get Current Category
cat = TRIM(Request("cat"))
IF cat = "" THEN cat = "Home"
' Get Search Phrase
searchFor = TRIM(Request("searchFor"))
' Open Database connection
Set Con = Server.CreateObject("ADODB.Connection")
Con.Open "accessDSN"
%>
<html>
<head><title>VietKhanh's Candies and Gift - Search</title></head>
<body link="#FF4040" vtext="lightred" bgcolor="#FFFFFF">
<center>
<table width="640" cellpadding="0" cellspacing="0">
<tr>
<td>
<IMG SRC = "logo.gif"></td>
<td align="right" valign="bottom">
<a href = "cart.asp">shopping cart</a>
<a href = "account.asp">account</a></td></tr>
<tr>
<td colspan="2">
<hr width="640"></td></tr>
</table>
<table width="640" cellpadding="0" cellspacing="0">
<tr>

Đưa một cửa hàng lên mạng Internet


22

<td valign="top">
<table>
<tr>
<td valign="bottom" bgcolor="pink">
<IMG SRC="search.gif" vspace="0"></td></tr>
<tr>
<td>
<table width="200" cellpadding="4" bgcolor="lightyellow">
<tr>
<td>
<form method="post" action="search.asp">
<input name="searchfor" size="15">
<input type="submit" value="search">
</form>
</td></tr>
</table></td></tr>
<tr>
<td valign="bottom">
<IMG SRC = "Categories.gif"></td></tr>
<tr>
<td>
<table width="200" cellppading="4" bgcolor="lightyellow">
<tr>
<td>
<! #INCLUDE FILE="CartList.asp" ></td></tr>
</table></td></tr>
</table></td>

<td valign="top">
<%
sqlString="SELECT product_id,product_picture,product_name,
product_briefDesc FROM products WHERE product_status=1
AND (product_name LIKE '%"&searchFor&"&'
OR product_briefDesc LIKE '%"&searchFor&"&')
ORDER BY product_name"
Set RS = Con.Execute(sqlString)
IF NOT RS.EOF AND searchFor <> "" THEN
%>
<table width="350" cellpadding="5">
<tr>
<td colspan="2">
<font color="darkblue" size="3"><b>
Search Results:</b></font></td></tr>
<% WHITE NOT RS.EOF %>
<tr>
<td>
<% IF RS("product_picture")<>"?????" THEN %>
<IMG SRC="<%= RS("product_picture")%> align="center">
<% END IF %></td>
<td>
<a href="product.asp?Pid=<%= RS("Product_ID")%>">
<b><%= RS("product_name") %></b></a><br>
<%= RS("product_briefDesc") %><br>
<a href="product.asp?Pid=<%= RS("product_ID")%>">
Get more information</a><td></tr>
<%
RS.MoveNext
WEND

%>

Đưa một cửa hàng lên mạng Internet

23

</table>
<% ELSE %>
<table width="350" cellpadding="5">
<tr>
<td>
<font face="Arial" color="darkblue"><b>
No products matched your search terms.</b></font></td></tr>
</table>
<% END IF %>
</td></tr></table>
<hr width="640">
Copyright &copy; 2002 the VietKhanh's Gift Company
</center>
</body>
</html>
Những cụm từ tìm kiếm mà người dùng nhập vào hộp tìm kiếm trong
trang chủ được gọi ra và được gán cho một biến tên là searchFor. Phần việc thực
sự trong script xảy ra là nơi chuỗi SQL được tạo ra. Chuỗi này được xây dựng sử
dụng biến searchFor để gọi ra tất cả các sản phẩm có chứa giá trị của searchFor
trong tên hoặc phần mô tả ngắn của chúng. Nếu không có sản phẩm nào khớp với
mục được gọi ra, một thông điệp được hiển thị để báo cáo về sự thật này. Ngược
lại, các sản phẩm khớp với mục tìm sẽ được hiển thị.
Tối ưu hoá trang tìm kiếm
Việc sử dụng toán tử LIKE để so khớp các mục cần tìm là khó khăn đối

với cơ sở dữ liệu. Nếu có quá nhiều người cố gắng thực hiện những cuộc tìm
kiếm cùng một thời điểm hoặc có hàng ngàn sản phẩm để tìm kiếm thì ta nên đầu
tư một phương pháp tìm kiếm khác cho phép những người dùng tìm các sản
phẩm tại Website này. Microsoft có hai sản phẩm có thể sử dụng để thêm một
trang tìm kiếm qua các file tĩnh. Ta có thể sử dụng Microsoft Index Server được
cung cấp với NT Option Pack. Nó có thể được sử dụng để thực hiện các cuộc tìm
kiếm trên các file tĩnh trong đĩa cứng nhưng nó không thể được sử dụng để tìm
kiếm trên các bảng trong cơ sở dữ liệu. Nếu ta cần thực hiện các cuộc tìm kiếm
đối với các bảng trong cơ sở dữ liệu thì ta có thể sử dụng Microsoft Full-text
Search Service được đính kèm với Microsoft SQL Server, cho phép thực hiện các
cuộc tìm kiếm trên các bảng cơ sở dữ liệu của SQL Server. Ta có thể sử dụng nó
để thực hiện các cuộc tìm kiếm đơn giản hoặc những câu truy vấn Boolean phức
tạp. Để sử dụng Full-text Search Server thì phải mua Microsoft SQL Server 7.0
5.3. T¹o c¸c trang web cã kh¶ n¨ng chØ môc
Việc đưa các trang Web vào trong các cơ cấu tìm kiếm trên Internet như
Alta Vista, Lycos, Inktomi và Google là rất quan trọng nếu muốn thu hút các
khách hàng. Nếu không tạo chỉ mục cho các trang Web của mình thì hầu hết mọi
người sẽ không bao giờ tìm thấy cửa hàng này để mua các sản phẩm.
Các cơ cấu tìm kiếm trên Internet gặp phải các vấn đề với việc tạo chỉ mục
các trang được tạo từ một cơ sở dữ liệu. Nếu một trang hiển thị nội dung khác
nhau tuỳ thuộc vào giá trị của các biến chuỗi truy vấn được truyền đến cho nó thì

Đưa một cửa hàng lên mạng Internet

24

một cơ cấu tìm kiếm trên Internet sẽ không thể tạo chỉ mục đúng nội dung của
trang. Có một cách giải quyết vấn đề này. Thủ thuật ở đây là làm cho cơ cấu tìm
kiếm tin rằng nó đang nhận một trang tĩnh trong khi trên thực tế nó đang gọi ra
một trang được tạo từ cơ sở dữ liệu. Một cách thức dễ dàng để thực hiện điều này

là tận dụng đặc tính Custom Errors của Internet Information Server.
Đầu tiên, ta cần tạo một thư mục đặc biệt tên là Products như một thư mục
con của thư mục gốc Website của ta (c:\ inetpub\wwwroot\products). Trong
Properties của Products chọn tab Custom Errors và tạo một số lỗi tuỳ biến đối
với lỗi 404 File Not Found. Đối với Message Type chọn URL. Trong hộp văn
bản có nhãn là URL nhập vào /Product.asp. Những thư mục này sẽ định hướng
lại đến trang ASP tên là Product.asp khi một file không được tìm thấy trong thư
mục Products.
Bất cứ khi nào một khách hàng nào đó yêu cầu một trang từ thư mục
Products họ sẽ được định hướng tự động đến trang Product.asp. Ví dụ, khi khách
hàng yêu cầu trang này từ địa chỉ http://domain/Products/Product12.htm thì trang
này sẽ được trả về thay thế. Ta cần thay đổi trang Product.asp, thêm đoạn mã sau
vào bên dưới phần Get the Product ID của trang Product.asp.
IF productID="" THEN
WorkString=Request.QueryString
WorkString=RIGHT.(workString,LEN(workString)–INSTRrev(workString,"/"))
FOR i=1 TO Len(workString)
IF isNumeric(MID(workString,i,1)) THEN
ProductID=productID & MID (workString,i,1)
END IF
NEXT
END IF
Khi khách hàng yêu cầu một trang từ thư mục Products thì họ được định
hướng tự động đến trang Product.asp. Tuy nhiên, chuỗi truy vấn sẽ bao gồm
đường dẫn của trang được yêu cầu đầu tiên. Nó gọi ra chuỗi truy vấn này bằng
cách sử dụng Request.QueryString và gán nó cho một biến tên là workString. Kế
tiếp, workString được cắt bỏ bớt tất cả nội dụng không phải là số. Những gì còn
lại chính là mã số sản phẩm.
6. T¹o mét form ph¶n håi ý kiÕn cña kh¸ch hµng
Các khách hàng có thể sử dụng form này bất cứ khi nào họ cần để lại một

thông điệp cho người quản trị cửa hàng. Ví dụ form này có thể được sử dụng bởi
một khách hàng yêu cầu sự hỗ trợ hoặc báo cáo các lỗi tại Website của ta. Khi
một khách hàng để lại ý kiến phản hồi, ý kiến phản hồi của họ sẽ được lưu trong
một bảng của cơ sở dữ liệu. Để tạo form phản hồi ý kiến ta cần tạo một bảng mới
trong cơ sở dữ liệu và thêm hai trang ASP. Bảng mới có tên là feedback nó chứa
bốn trường như sau:
Feedback_id Autonumber Chỉ định duy nhất mỗi dòng trong bảng
Feedback_email Text Chứa địa chỉ email của khách hàng.

Đưa một cửa hàng lên mạng Internet

25

Feedback_comment Memo Chứa nội dung ý kiến phản hồi của khách
hàng.
Feedback_entrydate Date/Time Tự động chứa ngày tháng mà ý kiến phản
hồi được nhập vào.
Feedback.asp
<html>
<head><title>Customer Feedback</title></head>
<body>
Thank you for leaving customer feedback on our Website.
<br>Please enter your feedback information in the form below:
<form method="post" action="savefeedback.asp">
<p><b>Your Email Address:</b><br>
<input name="email" size="50" maxlength="255">
<p><b>Your Feedback:</b><br>
<textarea name="comment" cols="50" rows="4" swap="virtual"></textarea>
<p><input type="submit" value="Submit Feedback">
</form>

</body>
</html>
Form phản hồi ý kiến của khách hàng gồm có một form HTML chuẩn, Nó
có một trường Email và một trường Comment. Khi một khách hàng đệ trình form
này, dữ liệu được đệ trình đến trang savefeedback.asp
Savefeedback.asp
<%
FUNCTION fixQoutes(theString)
fixQuotes=REPLACE(theString,"'","''")
END FUNCTION
email=TRIM(Request("email"))
comment=TRIM(Request("comment"))
IF email <> "" AND comment <> "" THEN
Set Con = Server.CreateObject("ADODB.Connection")
Con.Open "accessDSN"
sqlString="INSERT INTO feedback(feedback_email, feedback_comment)
VALUES('"&fixquotes(email)&"','"&fixquotes(comment)&"')"
Con.Execute sqlString
END IF
%>
<html>
<head><title>Save Feedback</title></head>
<body>
<b>Thank you for submitting your feedback !</b>
</body>
</html>
Trang này lưu trữ thông tin mà khách hàng nhập vào trong form phản hồi
ý kiến vào bảng feedback trong cơ sở dữ liệu.





a mt ca hng lờn mng Internet

26

Chơng II
TạO MộT WEBSITE ĐĂNG Ký

1. XÂY DựNG CƠ Sở Dữ LIệU GIAO DịCH
1.1 CáC BảNG TRONG CƠ Sở Dữ LIệU GIAO DịCH
Trc khi i vo chi tit v cỏch x lý cỏc n t hng ca khỏch hng,
ta cú mt cỏi nhỡn tng quan v cỏc bng m chỳng ta s to hon thnh ca
hng trc tuyn, ngoi bng Products lu tr thụng tin v sn phm, ta cn to
thờm cỏc bng sau:
Bng Users Lu tr thụng tin v ngi dựng, chng hn nh username v
password, thụng tin v a ch v thụng tin v th tớn dng.
Bng Cart Lu tr gi i ch ca khỏch hng. Khi cỏc khỏch hng thờm
nhng mc hng vo gi i ch o ca h trong khi tham quan ca
hng thỡ cỏc mc hng s c thờm vo trong bng ny.
Bng Order Khi mt khỏch hng thanh toỏn v hon thnh mt n t hng
thỡ tt c nhng sn phm trong gi i ch ca khỏch hng s c
chuyn n bng ny. Bng Orders s cha thụng tin v tt c sn
phm c t hng bờn cnh thụng tin v tỡnh trng ca mt n
t hng.
Khi cỏc khỏch hng thờm nhng mc hng vo trong gi i ch ca h thỡ
mt trang ng ký s xut hin yờu cu khỏch hng ng nhp. Nu õy l ln
u tiờn mt khỏch hng s dng ca hng thỡ h c yờu cu nhp vo thụng
tin ng ký trong ú cú username v password ca h. Sau khi cỏc khỏch hng ó
ng ký mt ln h cú th truy xut gi i ch ca h trong thi gian ti ch bng

cỏch nhp vo username v password hoc t ng nu trỡnh duyt cú h tr
cookie.
Sau khi mt ngi dựng ng nhp vo, mc hng c khỏch hng chn
thờm vo trong gi i ch s c thờm vo trong bng Cart. Cỏc mc hng s
c duy trỡ thng trc trong gi i ch.
Cui cựng, khi cỏc khỏch hng ó sn sng hon thnh n t hng ca
h, h cú th nhp vo nỳt Checkout (thanh toỏn) trong gi i ch ca h. Khi
khỏch hng nhp vo nỳt Checkout, tt c cỏc mc hng s c chuyn t bng
Cart n bng Orders v cỏc mc hng trong bng Cart ca ngi khỏch ny s
b xoỏ. Cỏc bng Users, Cart, Orders s c s dng tun t.
To bng Users
User_id Autonumber Nú cha mt con s duy nht (unique) c
to t ng cho mi khỏch hng.
User_username Text Cha tờn m khỏch hng s dng ng
nhp vo ca hng trc tuyn. Mi ngi

×