hướng dẫn tạo lập forum đơn giản trên website tài liệu, giáo án, bài giảng , luận văn, luận án, đồ án, bài tập lớn về tấ...
Trang 1Hướng dẫn tạo lập forum đơn giản trên website
Yêu cầu: Cần phải biết một chút về các vấn đề sau:
- HTML
- JavaScript
- VbScript
- ASP
- Cơ sở dữ liệu Access
- IIS (Internet Infromation Service)
Nội dung tổng quát:
- Tạo folder làm việc
- Tạo cơ sở dữ liệu
- Kết nối cơ sở dữ liệu Access với ASP
- Viết các chương trình
- Chia sẻ / share thư mục thành web
- Chạy và kiểm duyệt, chỉnh sửa form nếu cần
I Tạo cơ sở dữ liệu bằng Access
- Có thể dùng Access 2000, 2002, hoặc 97 đều được
- Tạo 1 foleder riêng cho ứng dụng Forum, ví dụ ForumDiscussion chẳng hạn
- Tạo 1 cơ sở dữ liệu Access, chẳng hạn lấy tên CSDL là Forum.MDB, chú ý cần đặt chính xác vào thư mục tạo ở trên Vì sau này đường dẫn sẽ dùng cho lập trình
- Trong CSDL này tạo một bảng (chẳng hạn lấy tên là: Forum_Message), bảng này có cấu trúc như sau:
Fielde Name Data Type Data Length, Format Description
(không bắt buộc) Các yêu cầu khác
(nếu có)
ParentMessage Number Long Integer Số thứ tự tin nhắn chính
ThreadParent Number Long Integer Số thứ tự tin nhắn phụ
AuthorName Text 100 Tác giả đưa tin
AuthorEmail Text 100 Hòm thư tác giả đưa tin
Comments Memo Nội dung tin nhắn
Topic Text 200 Chủ đề tin nhắn
ReplyCount Number Long Integer Số lần tin nhắn được thảo luận
LastThreadPost Date/Time Default: now() Lần xem gần đây nhất
DatePosted Date/Time Default: now() Ngày đưa tin nhắn lên
ID AutoNumber Long Integer Chỉ số tin nhắn Không trùng nhau
Tên các trường sẽ được dùng trong lập trình Tốt nhất người lập trình cần phải ghi chú những tên trường này ra giấy để sử dụng cho lập trình thuận tiện
Tạo xong, nhập thử vào một vài bản ghi
II Tiến hành lập trình
Trước tiên cần chú ý rằng toàn bộ code phải đặt trong thư mục DiscussionForum tạo ở trên
1 Thiết kế file Database.inc
- Nhiệm vụ của file này là mở cơ sở dữ liệu Access ra và khai báo biến dữ liệu dùng cho chương trình Cần quan tâm đến biến bản ghi rs và cmd Trong đó rs là biến bản ghi, biến cmd biến thực hiện 1 câu lệnh trong CSDL
Trang 2- Có thể dùng trình NodePad để soạn thảo nội dung file này Nội dung file này không phải là fileWEB mà chỉ là 1 đoạn ASP dùng cho việc chạy kèm 1 file web khác mà thôi.
<%
sFile = request.ServerVariables("PATH_TRANSLATED")
sSplit = split(sFile, "\")
for iCtr = 0 to uBound(sSplit) - 1
sDir = sDir & sSplit(ictr) & "\"
next
sConnString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & sDir & "forum.mdb"
set conn = Server.CreateObject("ADODB.Connection")
2 Thiết kế file foot.inc
- Mỗi file web trong Forum thường có ở dưới đáy một lời nhắc HyperLink mà bấm vào đó để quay về diễn đàn chính Do vậy để có thể dùng kèm các lệnh này ở các file khác nhau thì phải thiết kế 1 file riêng Làm cho Web sáng sủa hơn, ngắn gọn và dễ đọc hơn
- Nội dung của file này chỉ 1 dòng duy nhất như sau:
<P><B><A HREF = 'default.asp'>Quay lai Dien Dan chinh</A>
3 Thiết kế file database_cleanup.inc
- Nhiệm vụ của file này là đóng dữ liệu đã mở lại Tức là làm sạch các biến dữ liệu đã mở ra trước đó như biến rs, cmd
- Nội dung của file này bao gồm các lệnh như sau:
4 Thiết kế file default.asp
- Đây là file mặc định sẽ sử dụng khi forum bắt đầu làm việc Đầu file sẽ kích hoạt việc mở dữ liệu, cuối cùng sẽ đóng dữ liệu
- Trong chương trình sẽ có việc phân trang hiện thông tin, mỗi trang chỉ có 20 dòng Nếu số lượng tin giao dịch trong toàn bộ sẽ được phân thành các trang
- Việc lọc ra thông tin của một loại chủ đề nào đó chỉ cần đưa tên loại chủ đề ở đầu form và bấnEnter
Trang 3<! #include file = "database.inc" >
<TITLE>Dien Dan Tin hoc DONGDO</TITLE>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
</HEAD>
<body bgcolor="#FFFFFF">
<CENTER><FORM ACTION = 'forum_search.asp'><b>Chon Forum:</b>
<input type="text" name="search" size="25">
<input type="submit" value="Chon" name="searchbutton">
iTotalPages = int(lTotalRecords / iPageSize)
if lTotalRecords MOD iPageSize <> 0 then iTotalPages = iTotalPages + 1
Trang 4if lTotalRecords <= iPageSize then
lPageStart = ((iPage - 1) * iPageSize) + 1
lPageEnd = lPageStart + (iPageSize - 1)
if lPageEnd >= lTotalRecords Then
if not bNoRecords then
response.write "<P><B>Trang " & iPage & " / " & iTotalPages & "</B><P>"
end if
%>
<TABLE WIDTH = 100%>
<TR>
<TD><B><FONT COLOR = "RED">Chu de</FONT></B></TD>
<TD><B><FONT COLOR = "RED">Nguoi Gui/Hoi </FONT></B></TD>
<TD ALIGN = CENTER><B><FONT COLOR = "RED">Dap tra lai</FONT></B></TD>
<TD><B><FONT COLOR = "RED">Thoi gian</FONT></B></TD></TR>
Trang 5response.write "<TD><A HREF='ShowMessage.asp?ID=" & rs("ID") & "'>" & rs("Topic") &
"</A></FONT></TD>"
response.write " <TD>"
response.write "<A HREF = 'mailto:" & rs("AuthorEmail") & "'>" & rs("AuthorName") & "</A>" response.write "</FONT></TD>"
response.write "</TD><TD ALIGN = CENTER>" & rs("ReplyCount") & "</FONT></TD>"
response.write "</TD><TD>" & rs("LastThreadPost") & "</FONT></TD></TR>"
rs.movenext
Next
end if
response.write "</TABLE>"
if bOnePage = false and bNoRecords = false then
response.write "<TABLE WIDTH = '100%'><TR><TD> </TD></TR><TR><TD WIDTH
= '10%'> </TD><TD WIDTH = '60%'>"
if iPage > 1 then
sPrevQuery = "Page=" & iPage - 1
response.write "<A HREF = 'default.asp?" & sPrevQuery & "'><B><< Trang truoc</B></A>"else
response.write " "
end if
response.write "</TD><TD VALIGN = TOP NOWRAP>"
if bLastPage = false then
sNextQuery = "Page=" & iPage + 1
response.write "<A HREF = 'default.asp?" & sNextQuery & "'><B>Trang tiep >></B></A>"else
response.write " "
end if
response.write "<TD WIDTH = '10%'> </TD>"
response.write "</TD></TR></TABLE>"
response.write "<P><CENTER><FONT SIZE =-1>"
for iCtr = 1 to iTotalPages
sPageQuery = "Page=" & iCtr & sQuery
if iCtr <> iPage then
response.write "<A HREF = 'default.asp?" & sPageQuery & "'>"
Trang 6if iCtr < iTotalPages then response.write " | "
-5 Thiết kế file new_post.asp
- Nhiệm vụ của file này là sẽ tạo ra 1 form giao diện người dùng, để người dùng đưa tin lên diễnđàn
- Code của file này được đề xuất viết như sau:
Trang 7<HTML>
<HEAD>
<! #include file = "Validate.inc" >
<TITLE>FORUM THAO LUAN DONGDO: GUI TIN MOI LEN DIEN DAN</TITLE>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
<INPUT TYPE = "Hidden" NAME = "MessageType" VALUE = "NEW">
<TR><TD><B>Ten :</B></TD><TD><INPUT TYPE = "TEXT" NAME="Name" SIZE="50 MAXLENGTH = "100"></TD></TR>
<TR><TD><B>Email:</B></TD><TD><INPUT TYPE = "TEXT" NAME="Email" SIZE="50 MAXLENGTH = "100"></TD></TR>
<TR><TD><B>Chu de:</B></TD>
<TD><INPUT TYPE = TEXT SIZE=50 MAXLENGTH="100" NAME = "Topic"></INPUT></TD></TR>
<TR><TD VALIGN = TOP><B>Noi dung:</B></TD>
<TD VALIGN = TOP><TEXTAREA ROWS = 8 COLS = 50 NAME = "MESSAGE"></TEXTAREA></TD></TR>
Trang 8//check to see that at least one char in author is non-blank
var bOK = false
var bAmp = false
var bPeriod = false
Trang 9if(bOK == false || bAmp == false || bPeriod == false) {
alert("The e-mail address you entered is not valid")
Trang 10sAns = replace(sInput, " ", " ")
sAns = replace(sAns, chr(34), """)
sAns = replace(sAns, "<! ", "<! ")
sAns = replace(sAns, " >", " >")
ReplaceComments = sAns
end function
function HTMLFormat(sInput)
dim sAns
sAns = replace(sInput, " ", " ")
sAns = replace(sAns, chr(34), """)
sAns = replace(sAns, ">", ">")
sAns = replace(sAns, "<", "<")
sAns = replace(sAns, vbcrlf, "<BR>")
HTMLFormat = sAns
Trang 11end function
if Request("SubmitMessage") <> "" then bNew = true
if request("SubmitReply") <> "" or request("Reply") <> "" then bReply = true
if request("ApplyMessage") <> "" then bApply = true
bValid = bNew or bReply or bApply
sTopic = prepStringForSQL(Request("Topic")) & ","
sName = prepStringForSQL(sName) & ","
sEmail= prepStringForSQL(sEmail) & ","
sName = prepStringForSQL(sName) & ","
sEmail= prepStringForSQL(sEmail) & ","
sTopic = prepStringForSQL(Request("Topic")) & ","
sComments = prepStringForSQL(Request("Message"))
if iThread = 0 then iThread = iParent
sSQL = "INSERT INTO FORUM_MESSAGES
(PARENTMESSAGE,THREADPARENT,AUTHORNAME,AUTHOREMAIL,TOPIC,COMMENTS) VALUES (" & iParent & "," & iThread & "," & sName & sEmail & sTopic & sComments & ")"
conn.execute sSQL
cmd.CommandText = "LASTMESSAGE"
cmd.CommandType = 4
set rs = cmd.Execute
Trang 12sID = rs("ID")
rs.close
sSQL = "UPDATE FORUM_MESSAGES SET REPLYCOUNT = REPLYCOUNT + 1, LASTTHREADPOST
= NOW() WHERE ID = " & iThread
<TITLE>DISCUSSON FORUM: PREVIEW MESSAGE</TITLE>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
</HEAD>
<BODY BGCOLOR = "#FFFFFF">
<%
if not bValid then
response.write "You cannot navigate to this page without entering a forum message Please "response.write "return to the <A HREF = 'default.asp'>forum index</A> and try again."
Please review your post If everything is OK, click Submit below Otherwise,
click the Back button on your browser to make corrections.<P>
<FORM ACTION = "PreviewMessage.asp" METHOD = "POST">
<% if bReply Then %>
<INPUT TYPE="HIDDEN" NAME="ParentID" VALUE="<%= ParentID %>">
<INPUT TYPE="HIDDEN" NAME="ThreadID" VALUE="<%= ThreadID %>">
<INPUT TYPE="HIDDEN" NAME="OrigAuthor" VALUE="<%= sOrigAuthor %>">
Trang 13<% end if %>
<INPUT TYPE="HIDDEN" NAME="Topic" VALUE="<%= sTopic %>">
<INPUT TYPE="HIDDEN" NAME="Message" VALUE="<%= sOrigMessage %>">
<INPUT TYPE="HIDDEN" NAME="AuthorName" VALUE="<%= Request("Name") %>">
<INPUT TYPE="HIDDEN" NAME="AuthorEmail" VALUE="<%= Request("Email") %>">
<INPUT TYPE = "HIDDEN" NAME = "MessageType"
<CENTER><INPUT TYPE="Submit" NAME = "ApplyMessage" VALUE = "Submit"></CENTER>
<! #include file = "footer.inc" >
</FORM>
<%
if bIllegal then %>
<FONT COLOR = "RED" SIZE = = -1>Your message was altered to delete the ASP delimiters
<<%= chr(37) %> and <%= chr(37) %>>
</FONT><P>
<% end if %>
<! #include file = "database_cleanup.inc" >
</HTML>
6 Xem tin nhắn trong diễn đàn File ShowMessage.asp
File này sẽ được gọi thực hiện khi đang ở mục danh mục diễn đàn, người dùng bấm vào tên chủ
để Thì nội dung của chủ đề sẽ được thực hiện và hiện lên như trên Tại đây người dùng sẽ có hai lựa chọn Nếu nhấn nút DapLai tức là người dùng bấm vào khu vực trả lời và thảo luận vấn
đề trên Nếu nhấn nút Quay lai Dien Dan chinh thì người dùng đã quay lại diễn đàn trước đó Code của file này được đề nghị như sau:
Trang 14<! #include file = "database.inc" >
<%
sCaption = request.QueryString("Caption")
function HTMLFormat(sInput)
dim sAns
sAns = replace(sInput, " ", " ")
sAns = replace(sAns, chr(34), """)
sAns = replace(sAns, "<! ", "<! ")
sAns = replace(sAns, " >", " >")
HTMLFormat = sAns
end function
Function MessageChildren(ID, IndentLevel, iCurrentMessage)
dim oRs, oCmd, sSQL, sAns
'FIRST GET MESSAGE, TEXT, CLOSE
dim oParam
set oCmd = Server.CreateObject("ADODB.Command")
set oCmd.ActiveConnection = conn
set oRs = oCmd.execute
set oParam = nothing
iIndent = IndentLevel
set oRs = oCmd.execute
if oRs.eof then
oRs.close
set oRs = Nothing
set oCmd = nothing
if oRs("ID") <> cLng(iCurrentMessage) then
sAns = sAns & "<A HREF='ShowMessage.asp?ID=" & oRs("ID") & "'>" 'response.write "CurMsg=" & iCurrentMessage & " ID = " & oRs("ID") sAns = sAns & oRs("Topic") & "</A>"
Trang 15sAns = sAns & "<TD>" _
& oRs("AuthorName") & "</TD></TR>"
oRs.close
sSQL = "SELECT ID FROM FORUM_MESSAGES WHERE PARENTMESSAGE = " & IDoCmd.CommandText = sSQL
oCmd.CommandType = 1
set oRs = oCmd.execute
if ors.eof and iIndent = 0 then
sAns = ""
else
do while not oRs.eof
sAns = sAns & MessageChildren(oRs("ID"), iIndent + 1, iCurrentMessage)
oRs.MoveNext
Loop
end if
oRs.Close
set oRs = nothing
set oCmd = nothing
Trang 16set Param = cmd.CreateParameter("MESSAGEID", 3, 1)
<TITLE>FORUM THAO LUAN DONG DO></TITLE>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
</HEAD>
<BODY BGCOLOR = "#FFFFFF">
<CENTER><H2>Dien dan DONGDO </H2></CENTER>
<%
if not bValid then
response.write "You cannot navigate to this page without selecting a forum message Please "response.write "return to the <A HREF = 'default.asp'>forum index</A> and try again."
Trang 17<INPUT TYPE="HIDDEN" NAME="MessageID" VALUE="<%= iMessageID %>">
<INPUT TYPE="HIDDEN" NAME="ThreadID" VALUE="<%= iThreadParent %>">
<INPUT TYPE="HIDDEN" NAME="Topic" VALUE="<%= rs("Topic") %>">
<INPUT TYPE="HIDDEN" NAME="OrigAuthor" VALUE="<%= rs("AuthorName") %>">
response.write "<HR HEIGHT = 1 NOSHADE><CENTER><B>Entire Thread</B><P>"
response.write "<TABLE WIDTH = '100%'>"
response.write "<TR><TD><B><FONT COLOR = 'RED'>Chu de</FONT></TD>"
response.write "<TD><B><FONT COLOR = 'RED'>Ngay gui len</FONT></B></TD>"
response.write "<TD><B><FONT COLOR = 'RED'>Viet boi</FONT></B></TD></TR>"
response.write sThread
end if
%>
</TABLE>
<! #include file = "footer.inc" >
<! #include file = "database_cleanup.inc" >
</body>
</HTML>
7 Gửi tin nhắn thảo luận một chủ đề đã có trong diễn đàn File reply.asp
- File này sẽ được kích hoạt khi người dùng xem 1 tin nhắn, một loại chủ đề nào đó trong diễn đàn và nhấn vào nút reply người dùng cũng cần phải điền đủ các thông tin như tên đăng nhập,hòm thư đầy đủ, riêng phần chủ đề là có sẵn: RE:……
Trong xử lý CSDL Giả sử một trang màn hình cho hiện 20 kết quả Khi số lượng bản ghi tìm được nhiều hơn 20 kết quả thì việc phân trang được đặt ra
Kỹ thuật này được minh hoạ trong file default.asp, mình muốn mọi người vọc file này thành một thuật toán (giả lệnh), sau đó post lên để các thành viên chúng ta tìm hiểu nhé?!
Ví dụ bắt đầu như sau:
Một số các biến: