• Thứ Năm, 18/12/2003 15:51 (GMT+7)

    Thiết kế trang web cung cấp tin dùng ASP và CSDL Access

    Dùng cơ sở dữ liệu kết hợp với web giúp 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ấy từ cơ sở dữ liệu. Ví dụ như trang chủ của web site vnexpress.net, chúng ta thấy khuôn dạng của trang không thay đổi nhưng thông tin thì thay đổi hàng ngày. Bài viế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 hoặc Windows XP, bạn không phải làm gì cả vì trong hệ điều hành đã có sẵn. Nếu dùng Windows 98 thì bạn phải cài thêm Personal Web Server, phần mềm này thường có trong CD Windows 98, thư mục add-ons\pws, bạn chạy file setup.exe và làm theo các chỉ dẫn để cài đặt.

    Tiếp theo bạn dùng MS Access, tạo file CSDL đặt tên là data.mdb và table tên là data, cấu trúc như sau:

    Sau khi tạo xong file CSDL, bạn tạo các trang web như sau:

     

    1. Trang Chủ Index.Asp

    Trang này gồm 1 table có 3 ô, ô trên cùng là tiêu đề trang, ô bên trái hiển thị các liên kết (tiêu đề) đến các bài viết, ô bên phải hiển thị nội dung của bài viế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:

    <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 thứ tự: bài mới được cập nhật hiện trên cùng bài càng cũ hiện cuối cùng.

    • Mã nguồn trang listlinks.asp:

    <!— #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ấn 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 được liệt kê trong 1 trang, ở đây, tôi đặt là 5.

    rs.PageSize = 5

    ‘Lấy stt 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 (phụ thuộc vào PageSize)

    lPageCount = rs.PageCount

    If lPageCount < 1 Then

    lPageCount = 1

    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 thị là trang 2 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òng lặ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ó 2 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 nhấn 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 nhấn 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 số 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ó nhiệ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 (tiêu đề) của bài viết. Trang này được trang index.asp gọi.

    • Mã nguồn trang showmessage.asp:

    <%

    Dim stt

    ‘Lấy stt từ trang listlink.asp của liên kết

    stt = Request.QueryString(“stt”)

    ‘Nếu stt = 0 thì lấy stt của bài đầu tiên của trang.

    ‘Biến sttf được khai báo và gán giá trị trong trang listlinks.asp.

    if stt = 0 then

    stt= sttf & “”

    end if

    ‘Mở CSDL, đọ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”)%>

    <!—Đóng CSDL—>

    <%rs.Close%>

    </font>

     

    4. Trang addnew.asp

    Là trang để bạn nhập bài viết mới rồi cập nhật vào CSDL trên server.

    • Mã nguồn trang addnew.asp:

    <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àn hình” name=”B2" font=”Verdana” style=”font-family: Verdana”></p>

    </form>

    </body>

    </html>

     

    5. Trang new.asp

    Có nhiệm vụ lấy dữ liệu bạn nhập vào trang 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

    <!— #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 tiêu đề và nội dung của bài viết được gửi từ trang Addnew.asp

    ‘Thay thế các ký tự nháy đơn ( ‘ ) nếu có thành 2 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 nhấ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 nếu 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ị câu 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à nội dung của bài viết thì cập nhật vào CSDL.

    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 đến trang addnew.asp

    response.write (“<p><a href=””addnew.asp””>Trở về trang trước</a></p>”)

    Response.Write(“</font>”)

    %>

     

    6. File connection.asp

    Khai báo kết nối CSDL

    • Mã nguồn:

    <%

    ‘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

    %>

     

    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, bạn hãy gọi trang addnew.asp.

    Trong khi nhập nội dung bài viết, bạn có thể dùng các tag HTML để trình bày.

    Hy vọng các bạn sẽ thành công trong việc tạo trang cung cấp thông tin của riêng mình.

     

    Vũ Lương Bằng

    vuluongbang@hcm.vnn.vn

    ID: A0212_88