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ấ...
Hướ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. - 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à file WEB 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") set cmd = Server.CreateObject("ADODB.Command") set rs = Server.CreateObject("ADODB.Recordset") conn.open sConnString set cmd.activeconnection = conn %> 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: <% if rs.state <> 0 then rs.close set rs = nothing set cmd = nothing conn.close set conn = nothing %> 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ấn Enter. <! #include file = "database.inc" > <% Function isBlank(Value) if isNull(Value) then bAns = true else bAns = trim(Value) = "" end if isBlank = bAns end function Function FixNull(Value) if isNull(Value) then sAns = "" else sAns = trim(Value) end if FixNull = sAns end function %> <HTML> <HEAD> <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"> </Form></CENTER> <HR><center><b><font size="+1">Dien Dan Tin hoc DONGDO</font></b></center><p> <P> <% cmd.CommandText = "MESSAGETHREADS" cmd.CommandType = 4 iPageSize = 20 iPage = cint(Request.QueryString("Page")) if iPage = 0 then iPage = 1 rs.open cmd, , 1, 3 if not rs.Eof and not rs.bof then rs.MoveLast lTotalRecords = rs.RecordCount iTotalPages = int(lTotalRecords / iPageSize) if lTotalRecords MOD iPageSize <> 0 then iTotalPages = iTotalPages + 1 if lTotalRecords <= iPageSize then rs.MoveFirst bOnePage = true lPageEnd = lTotalRecords lPageStart = 1 iTotalPages = 1 else lPageStart = ((iPage - 1) * iPageSize) + 1 lPageEnd = lPageStart + (iPageSize - 1) if lPageEnd >= lTotalRecords Then lPageEnd = lTotalRecords bLastPage = true end if if iPage > 1 then rs.AbsolutePosition = ((iPage - 1) * iPageSize) + 1 else rs.MoveFirst end if end if else bNoRecords = true end if %> </SELECT></TD></FORM> <FORM ACTION = "new_post.asp" METHOD = "POST"> <TD> <INPUT TYPE = "SUBMIT" VALUE = "Gui tin len Dien Dan"></TD></FORM> </tr> </TABLE><P> <% 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> <% if bNoRecords then response.write "<TD COLSPAN = 4><B>There are no messages available at the present time</B></TD>" else for lCtr = lPageStart to lPageEnd response.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 & "'>" else response.write "<B>" end if response.write iCtr if iCtr <> iPage then response.write "</A>" else response.write "</B>" end if if iCtr < iTotalPages then response.write " | " Next response.write "</FONT></CENTER>" end if %> </body> <! #include file = "database_cleanup.inc" > </HTML> 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: <% Function prepStringForSQL(sValue) Dim sAns sAns = Replace(sValue, Chr(39), "''") sAns = "'" & sAns & "'" prepStringForSQL = sAns End Function sName = Session("Name") Function isBlank(Value) if isNull(Value) then bAns = true else bAns = trim(Value) = "" end if isBlank = bAns end function Function FixNull(Value) if isNull(Value) then sAns = "" else sAns = trim(Value) end if FixNull = sAns end function %> <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"> </HEAD> <P> <center><b><font color="Blue" size="+1">FORUM TIN HOC DONGDO: Gui tin moi len Dien Dan</font></b></center><p> <FORM Name = "InputForm" ACTION = "PreviewMessage.asp" onSubmit = 'return Validate()' METHOD = "POST"> <TABLE> <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> </TABLE> <P> <CENTER> <INPUT TYPE = "SUBMIT" NAME = "SubmitMessage" VALUE = "Gui Tin len Dien dan"></FORM> </CENTER> <! #include file = "footer.inc" > </body> </HTML> - Khi nhập dữ liệu vào Forum, để đảm bảo cho việc quản lý thông tin chính xác, nhất quán chương trình sẽ kiểm tra một số thông số để cho forum hoạt động. Đoạn code kiểm tra dữ liệu nhập vào được viết trong file validate.asp có nội dung như sau: <script LANGUAGE="JAVASCRIPT"> <! // function Validate() { sAuthor = document.InputForm.Name.value sEmail = document.InputForm.Email.value iEmailLen = sEmail.length iAuthorLen = sAuthor.length sTopic = document.InputForm.Topic.value iTopicLen = sTopic.length if(iAuthorLen == 0) { alert("Name is a required field") document.InputForm.Name.focus() return false } if(iEmailLen == 0) { alert("Email Address is a required field") document.InputForm.Email.focus() return false } //check to see that at least one char in author is non-blank var bOK = false for(var i = 0;i<iAuthorLen;i++) { if(sAuthor.charAt(i) != " ") { bOK = true break } } //end for if(bOK == false) { alert("Name is a required field") document.InputForm.Name.focus() return false } //check to see that at least one char in email is non-blank, @, and . bOK = false var bAmp = false var bPeriod = false for(var i = 0;i<iEmailLen;i++) { if(bOK==false){ if(sEmail.charAt(i) != " " && sEmail.charAt(i) != "." && sEmail.charAt(i) != "@") { bOK = true if(bAmp== true && bPeriod== true) break } }//end if bok==false if(sEmail.charAt(i)=="@") { bAmp = true if(bPeriod==true && bOK==true) break } if(sEmail.charAt(i)==".") { bPeriod = true if(bAmp==true && bOK==true) break } } //end for if(bOK == false || bAmp == false || bPeriod == false) { alert("The e-mail address you entered is not valid") document.InputForm.Email.focus() return false }//end if if(iTopicLen == 0) { alert("Topic is a required field") document.InputForm.Topic.focus() return false } //end if for(var i = 0;i<iTopicLen;i++) { if(sTopic.charAt(i) != " ") { return true } } //end for alert("Topic is a required field") document.InputForm.Topic.focus() return false }//end function > </script> - Khi đưa thông tin lên diễn đàn, người dùng có thể xem lại toàn bộ thông tin trước khi gửi lên 1 lần trước khi submit. Form và Code của đoạn trình này được đề nghị như sau: <! #include file = "database.inc" > <% Function isBlank(Value) if isNull(Value) then bAns = true else bAns = trim(Value) = "" end if isBlank = bAns end function Function FixNull(Value) if isNull(Value) then sAns = "" else sAns = trim(Value) end if FixNull = sAns end function Function prepStringForSQL(sValue) Dim sAns sAns = Replace(sValue, Chr(39), "''") sAns = "'" & sAns & "'" prepStringForSQL = sAns End Function function ReplaceComments(sInput) dim sAns sAns = 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), """) sIllStart = "<" & chr(37) sIllEnd = chr(37) & ">" if instr(sAns, sIllStart) > 0 or instr(sAns, sIllEnd) > 0 then sAns = replace(sAns, "<" & chr(37), "") sAns = replace(sAns, chr(37) & ">", "") bIllegal = true end if sAns = replace(sAns, ">", ">") sAns = replace(sAns, "<", "<") sAns = replace(sAns, vbcrlf, "<BR>") HTMLFormat = sAns [...]... thiết lập các thông số : bOnePage, lPageStart, iTotalPages… - Nếu số bản ghi > kích thước trang, thiết lập các thông số: lPageStart, lPageEnd - Thiết lập lại Rs trỏ đúng số bản ghi thuộc trang Dưới đây là một kỹ thuật đơn giản để lấy dữ liệu từ một bảng để đưa vào combo box, để từ đó người dùng chọn dữ liệu liên quan dễ hơn Ví dụ minh hoạ là cải tiến việc chọn Topic của diễn đàn mini đã nêu ở trên, ... khi duyệt sẽ sử dụng tag để lấy dữ liệu các bản ghi vào - Chúng ta sẽ chú ý việc đặt tên trong , value trong Việc tạo CSDL âm nhạc đơn giản có thể thực hiện bằng ACCESS + ASP + HTML có thể được thực hiện dạng đơn giản như sau: - Xây dựng bảng BaiHatViet trong CSDL Access với cấu trúc : Baihatviet(Baihat, Casy, Nhacsy, Theloai, solan) - Xây dựng file Amnhac.asp là... "DRIVER=Microsoft Access Driver (*.mdb);DBQ=" DSNStatement = DSNStatement & Server.MapPath( "Forum. mdb") Conn.Open DSNStatement Set Rs1 = Server.CreateObject("ADODB.Recordset") sql="SELECT DISTINCT topic FROM Forum_ messages" rs1.open sql,conn, 3,3 rs1.movefirst %> Chon Forum: . Hướ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 -. đượ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. . 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