PDA

View Full Version : THIẾT KẾ TRANG WEB DÙNG ASP VÀ CSDL ACCESS


lsb_ha son
19-07-2003, 09:46
Dùng cơ sở dữ liệu kết hợp với web, giúp cho việc cung cấp thông tin thêm thuận tiện, chúng ta chỉ cần thiết kế định dạng một trang web làm mẫu, thông tin sẽ lất từ cơ sở dữ liệu. Ví dụ như trang chủ của trang vnexpress.net, chúng ta thấy khuôn dạng của trang không thay đổi, nhưng thông tin thay đổi hằng ngày, bài biết này sẽ hướng dẩn bạn thiết kế một trang web tưng tự như vậy với ASp và CSDL Access. Trước tiên bạn phải thiết lập web server, nếu dùng Windows 2000 hay Windows XP thì không vấn đề gì, còn nếu dùng win98 thì phải cài thêmPersonal Web Server, phần mếm này có trong Cd Windows 98 , Thư mục add-ons\pws, bạn chạy file setup.exe và làm theo hướng dẩn để hoàn tất hoá trình cài đặt .
Tiếp theo dùm MS Access, tạo file CSDL, đặt tên là data.mdb và table tên là data, có cấu trúc như sau:
QUOTE
$$^^$$^^$$^^$$^^$$^^$$^^$$^^$$^^$$^^$$^^

Tên field Kiểu dữ liệu (đata type)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Stt Autonumber
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Tieu_de Memo
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
noi_dung Memo
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ngay_update Date
QUOTE
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Sau hki tạo xong file SCDL, bạn tạo các trang web như sau:
1.TRANG CHỦ INDEX.ASP
Trang này gồm một table có ba ô, ô trên cùng là tiêu đề trang, ô bên tái hiện thị các liên kết đến bài viết, ô bên phải hiện thị nội dung liên kết tương ứng khi bạn nhấn chuột vào ô liên kết bên trái.
* Mã nguồn trang index.asp
QUOTE
<html>
<head>
<meta http-equiv=”Content-Type”
content=”text/html; charset=utf-
8">
<title>My home page</title>
</head>
<body>
<table border=”1" width=”100%”>
<tr>
<td width=”100%” colspan=”2">
<p align=”center”>Tiêu đề trang</
td>
</tr>
<tr>
<td width=”30%” valign=”top”>
<!— #include file=listlinks.asp—>
</td>
<td width=”70%” valign=”top”>
<!— #include
file=showmessage.asp—>
</td>
</tr>
</table>
</body>
</html>
2. TRANG LISTLINKS.ASP
Hiện danh sách các bài viết, xắp theo tứ tự: bài mới được cập nhật hiện trên cùng bài càng cũ hiện cúoi cùng.
* Mã nguồn trang listlinks.asp
QUOTE
<!— #include file=connection.asp—>
<%
'Khai báo các biến
Dim sttf
Dim lCurrenrtPage
Dim lPageCount
'Lấy số trang hiện tại được truyền từ chính trang này khi người xem
'nhấp chuốt vào liên kết “Trang
trước" hay "Trang tiếp theo"
lCurrentPage =
CLng(Request(“Page”))
'Mở CSDL, sắp xếp theo thứ tạ bài mới nhất ở trên
sqlStr=”SELECT * FROM data ORDER BY
stt desc”
rs.Open sqlStr, Conn, 1
‘Đặt số bài liệt kê trong 1
trang, ở đây, tôi đặt là 5.
rs.PageSize = 5
‘Lấy số thứ tự của bài mới nhất để trang
showmessage.asp hiển thị nội dung.
sttf=rs(“stt”)
IF lCurrentPage < 1 Then
lCurrentPage = 1
End If
‘Lấy tổng số trang trang (phụ thuộc vào
PageSize)
lPageCount = rs.PageCount
End If
‘Nếu số trang hiện tại lớn hơn tổng số trang thì đặt số trang hiện tại bằng tổng số trang
If lCurrentPage > lPageCount Then
lCurrentPage = lPageCount
End If
If Not rs.Eof Then
rs.AbsolutePage = lCurrentPage
End If
‘Nếu trang hiện tại là trang hai trở đi thì cập nhật lại stt của bài viết là stt
‘của bài đầu tiên của trang đó để
trang showmessage.asp hiển thị
If lCurrentPage > 1 then
sttf=rs(“stt”)
End if
‘Vòn glặp tạo liên kết đến các bài viết
‘Các liện kết sẽ gồm tiêu đề và ngày cập nhật bài viết
‘Mỗi liên kết có hai tham sô đi kèm là số thứ tự và số trang của bài viết.
‘2 thông số này sẽ được trang
showmessage.asp đọc để hiển thị nội dung của bài viết
‘khi người xem bấm vào liên kết
Do while not rs.Eof And
rs.AbsolutePage = lCurrentPage
%>
<br><b><font color=”#0000FF”
face=”Verdana” size=”1">
<a href=”Index.asp?stt=
<%=rs(“stt”)%>&Page=<%=lCurrentPage%>
“ > <%=rs(“tieu_de”)%></a></
font></b>
<font size=”1" color=”#000080"
face=”Verdana”>(<%=rs(“ngay_update”)%>)
</font> <br>
<%
rs.movenext
Loop
%>
<!—form được thực thi khi người xem bấm chuột vào liên kết
“Trang trước” hoặc “Trang tiếp
theo”—>
<form name=”viewFrm” >
<input type=hidden name=page>
</form>
<script language=javascript>
function setValue(page)
{
viewFrm.page.value= page;
viewFrm.submit();
}
</script>
<!—Nếu trang hiện tại lớn hơn 1 thì hiển thị liên kết đến trang trước—>
<% If lCurrentPage > 1 then%>
<font face=”Tahoma” size=”2">
<a href=”javascript:setValue(‘<%=
lCurrentPage - 1%>’);”>Trang
trûúác</a>
<% End If %>
<!—Nếu số trang hiện tại nhỏ hơn tổng số trang thì hiển thị liên kết đến trang tiếp theo—>
<% If lCurrentPage < lPageCount
Then %>
<a href=”javascript:setValue(‘<%=
lCurrentPage + 1%>’);”>Trang tiếp
theo</a>
</font></font>
<% End If
rs.Close
%>
3. TRANG SHOWMESSAGE.ASP
Có nihệm vụ hiển thị nội dung của bài viết khi người xem nhấn chuột vào liên kết của bài viết tran gnày được trang index.asp gọi.
* Mã nguồn trang showmessage.asp:
QUOTE
<%
dim stt
'Lấy stt từ trang listlinks.asp của liên kết
stt = Request.QueryString("stt")
"Nếu stt = 0 thì lấy số thứ tự của bài đầu tiên của trang.
' Biến sttf được khai báo và gán giá trị trong trang listkinks.asp.
if stt = 0 then
stt= sttf & “”
end if
‘Mở CSDL, = dọc bài viết có số thứ tự =
stt
sqlStr=”SELECT * FROM data WHERE
stt LIKE ‘“+stt+”’”
rs.Open sqlStr, Conn
%>
<p align=”center”><b><font
color=”#000080" face=”Arial”>
<!—Hiển thị tiêu đề của bài viết—>
<%=rs(“tieu_de”)%>
</font></b></p>
<font color=”#000000"
face=”Verdana” size=”2">
<!—Hiển thị nội dung của bài viết—>
<%=rs(“noi_dung”)%>
<!—Àoáng CSDL—>
<%rs.Close%>
</font>
4. TRANG ADDNEW.ASP
Là trang để bạn nhập bài viết mới vào CSDL trên server.
* Mã nguồn trang addnew.asp
QUOTE
<html>
<head>
<meta http-equiv=”Content-Type”
content=”text/html; charset=utf-
8">
<title>Cập nhật bài viết mới </
title>
</head>
<body>
<form method=”POST”
action=”new.asp”>
Tiêu đề bài viết:
<input type=”text” name=”Subject”
size=”94" font=”Verdana”
style=”font-family: Verdana”></
p>
p>Nội dung bài viết:
<textarea rows=”16" name=”Body”
cols=”94" font=”Verdana”
style=”font-family: Verdana”></
textarea></p>
<p><input type=”submit” value=”Gửi bài” name=”B1" font=”Verdana”
style=”font-family: Verdana”>
<input type=”reset” value=”Xóa màng hình” name=”B2"
font=”Verdana” style=”fontfamily:
Verdana”></p>
</form>
</body>
</html>
5. TRANG NEW.ASP
Có nhiệm vụ lấy dữ liệu bạn hập vào addnew.asp rồi cập nhất vào CSDL. Trang này được trang addnew.asp gọi.
* Mã nguồn trang new.asp
QUOTE
<!— #include file=connection.asp—>
<%
‘Khai báo các biến
Dim Update_Date
Dim Subject
Dim Body
‘Múã CSDL
sqlStr=”SELECT * FROM data”
rs.Open sqlStr, Conn
'Ngày cập nhật là ngày hiện tại
Update_Date = date()
Update_Date = Update_Date & “”
‘Lấy nội dung và tiêu đề của bài viết được gửi từ trang
Addnew.asp
‘Thay thế kí tự nháy đơn ( ‘ )
nếu có thành hai kí tự nháy đơn(
‘’ ) để câu lệnh SQL không bị lổi.
Subject = Request.Form(“Subject”)
Subject =
Replace(Subject,”’”,”’’”)
Body = Request.Form(“Body”)
Body = Replace(Body,”’”,”’’”)
‘Thay thế các kí tự xuống dòng khi bạn enter trong nội dung của bài viết
' Thành mã html xuống dòng là <br>
Body = eplace(Body,CHR(13),”<br>”)
Response.Write(“<font
face=””Verdana”” size=””2"”>”)
‘Kiểm tra khi bạn chưa nhập dữ liệu vào tiêu đề hoặc nội dung trong trang
‘addnew.asp thì thông báo yêu cầu nhập lại
If Len(Subject) = 0 Or Len(Body) = 0
Then
‘Hiển thị thông báo lổi
Response.Write(“Tiêu đề hoặc nội dung trống hãy nhập lại!")
Else
‘Nếu đã nhập tiêu đề vào nội dung của bài viết thì cập nhất vào
conn.Execute (“INSERT INTO
data(tieu_de, noi_dung,
ngay_update)
VALUES(‘“+Subject+”’,’”+Body+”’,� �”+
Update_Date+”’)”)
rs.Close
Response.Write(“Cập nhất thành công!")
End If
'Hiển thị liên kết trang
addnew.asp
response.write (“<p><a
href=””addnew.asp””>Trở về trang truớc
Response.Write(“</font>”)
%>
6. FILE CONNECTION.ASP
Khai báo kết nối CSDL
• Mã nguồn :
QUOTE
<%
‘Kết nối với CSDL Access
Set Conn =
Server.CreateObject(“ADODB.Connection”)
Conn.Open
“provider=microsoft.jet.oledb.4.0;data
source=” &
Server.Mappath(“data.mdb”)
set rs =
server.createObject(“ADODB.recordset”)
rs.ActiveConnection = Conn
%>
Đây là tất cả "trời ơi mệt quá",bạn chép tất cả các file này vào chung một thư mục , khi muốn cập nhất bài viết mới hãy gọi trang addnew.asp.
Trong khi nhập nội dung bài viết có thể dùng các tag HTML để trình bài.
Bài này mình đã làm thử nghiệm rồi và kết quả tương đối.