简单的 ASP 留言簿






4.05/5 (8投票s)
2004 年 7 月 12 日
2分钟阅读

332544
使用 ASP 和 MS Access 的简单留言簿。
- ASP 留言簿完整源代码下载 (站外下载 - GPL 协议)
简介 - 具有基于 Web 的管理的简易 ASP 留言簿
这里我们从一个简单的“设置”文件开始,命名为 settings.asp。 此文件将包含在每个页面上,并将包含此留言簿的基本设置。
由于密码 (logincode) 不在数据库中,您可以将数据库留在 webroot 中,并使用 mappath 语句来简化安装。 但是,数据库的最佳位置是在您的 webroot 之外,在这种情况下,您需要将 database_path 字符串更改为您的完整路径(例如“C:\inetpub\database\post.mdb”)
还有一个重要的设置是允许 HTML,或者不允许。 很多时候,人们会用链接和其他垃圾信息来滥用留言簿。 不允许使用 HTML 会是一个好主意,除非您真的需要它。
语言设置只是一组变量,用于系统中使用的文本,对于每种语言,都使用不同的文本。 将“新”语言添加到系统中非常容易。
详细说明
登录是一个简单的登录检查页面,它检查表单上输入的登录代码
与 settings.asp 文件中存储的代码进行比较。
'title of your guestbook.
pagetitle = "Demo"
'language
'english = en, german = ger, french = fr
lang = "en"
'admin password
logincode = "1234"
'number of entries to show.
show_posts = "25"
'minimum length of post to be allowed.
minimum_length = 4
'set to "no" for no html, set to "yes" to allow html (not recommended!)
allow_html = "no"
'leave as is, unless you want to move your database.
database_path = Server.MapPath("post.mdb")
<%Option Explicit%>
<!-- #INCLUDE FILE="settings.asp" -->
<%
if Request.Form("mynumber") = "" then
response.redirect("login.asp?l=password_blank")
End If
'set variables from form
FormPwd = Request.Form("mynumber")
FormPwd = replace(FormPwd,"'","''")
'run login or return to login page
if formpwd = logincode then
Session("LoginID") = formpwd
else
response.redirect("login.asp?l=incorrect_login_or_password")
End if
'final redirect
response.redirect("post.asp")
%>
登录使用会话变量来存储登录信息,因此要注销,我们只需放弃会话。 重定向将日期附加到 URL,以避免在注销后看到“缓存”的登录页面。 这不是安全问题,只是为了方便。
<%
session.abandon
response.redirect("post.asp?d=" & date)
%>
现在,主要代码是 post.asp 页面,无论您是以管理员身份登录还是只是访问该页面的访客,此页面都是相同的。 如果您已登录,您会看到与访客相同的数据,只是您有更多选项可用,您可以删除帖子、恢复已删除的帖子或清空“回收站”(已删除的帖子存储在其中,直到您清除它们)。
正如您从下面的代码中看到的,我们从一开始就检查了 loggedin 会话,
然后我们可以在整个脚本中使用它,根据您作为管理员或访客的身份来显示数据。
<% option explicit %>
<head>
<!-- #INCLUDE FILE="settings.asp" -->
<%
LoggedIn = Session("loginID")
登录后,您会看到更多可用的选项。
该文件被分成“部分”,具体取决于传递的查询字符串。
下面的部分检查您是否已登录,然后检查是否
您尝试从数据库中清空“已删除”的项目。
'============Empty Deleted Items from the database============
If LoggedIn <> "" Then
if request.querystring("del") = 1 then
Set dConn = Server.CreateObject("ADODB.Connection")
dConn.Open "PROVIDER=MICROSOFT.JET.OLEDB.4.0;DATA SOURCE=" & _
database_path
mySQL = "DELETE FROM tblpost where active = 2;"
dConn.execute(mySQL)
dconn.close
set dconn = nothing
response.redirect("post.asp")
end if
end if
正如您从主“post”代码的其余部分中看到的,不同的项目会根据是否登录来显示或执行操作,如果是,则根据您传递给页面的查询字符串值来执行。
'============set based on delete or undelete============
If LoggedIn <> "" Then
showdeleted = request.querystring("showdeleted")
if showdeleted = 1 then
active = 2
removetype = 1
delete_text = undelete_text
delimage = "undelete.gif"
else
active = 1
removetype = 2
delete_text = delete_text
delimage = "delete.gif"
end if
else
active = 1
end if
'============Delete/Undelete Items from the guestbook display============
remove = request.querystring("remove")
if remove = 1 then
Set dConn = Server.CreateObject("ADODB.Connection")
dConn.Open "PROVIDER=MICROSOFT.JET.OLEDB.4.0;DATA SOURCE="
& database_path
removetype = request.querystring("removetype")
mySQL = "UPDATE tblPost SET Active = " & removetype & " WHERE ID = " & _
ID & ";"
response.write "updating"
dConn.execute(mySQL)
dConn.Close
set dConn = Nothing
response.redirect("post.asp")
end if
'============End Delete Section============
Set dataRS = Server.CreateObject("ADODB.RecordSet")
dataSQL = "Select TOP " & show_posts & " message, remote_addr, sysdate, " &_
" systime, id FROM tblPost WHERE active = " & active &_
" order by sysdate DESC, systime DESC;"
'Response.Write dataSQL
'response.end
Set dConn = Server.CreateObject("ADODB.Connection")
dConn.Open "PROVIDER=MICROSOFT.JET.OLEDB.4.0;DATA SOURCE=" & database_path
dataRS.Open dataSQL, dConn, 1, 3
recordcount = dataRS.recordcount
if recordcount > 0 then
data = dataRS.GetRows()
'Data is retrieved so close all connections
dataRS.Close
Set dataRS = Nothing
dconn.close
set dconn = nothing
'Setup for array usage
iRecFirst = LBound(data, 2)
iRecLast = UBound(data, 2)
end if
'============IF IS A POST BACK============
message = trim(request.form("message"))
if request.form("ispostback") = 1 AND (len(message) > minimum_length) then
if allow_html = "no" then
message = RemoveHTMLtags(message)
else
message = PreSubmit2(message)
end if
strSQL = "tblPost"
'Open a recordset
Set cRS2 = Server.CreateObject("ADODB.recordset")
Set dConn = Server.CreateObject("ADODB.Connection")
dConn.Open "PROVIDER=MICROSOFT.JET.OLEDB.4.0;DATA SOURCE=" &_
database_path
cRS2.Open strSQL, dConn, 1,3
cRS2.AddNew
cRS2("message") = message
cRS2("sysdate") = date()
cRS2("systime") = time()
cRS2("remote_addr") = request.ServerVariables("remote_addr")
cRS2("Active") = 1
cRS2.Update
cRS2.Close
Set cRS2 = Nothing
dConn.Close
Set dConn = Nothing
response.redirect("post.asp")
end if
'============End POSTBACK Section============
%>
<title><%=pagetitle%></title>
</head>
<P style="FONT-WEIGHT: bold"><%=pagetitle%>
<table border=2 bordercolor="silver" CELLSPACING=0 CELLPADDING=4>
<form action="post.asp" method="post" name="form1" id="form1">
<tr class='smalltext'>
<td><textarea cols="50" rows="4" name="message"
style="font-family: Arial, Helvetica, sans-serif;"
class="cssborder" title="<%=add_text%>"></textarea></td>
<td nowrap><input type="submit" value="<%=add_text%>"
style="height: 50px;" class="cssborder"></td>
</tr>
<input type="hidden" name="ispostback" value="1">
</form>
</table>
<%
if recordcount > 0 then
%>
<table border="2" cellspacing="0" cellpadding="4"
bordercolor="silver" width="500">
<tr>
<th><%= message_text %></th>
<%
If LoggedIn <> "" then
%>
<th><%= delete_text %></th>
<% end if %>
</tr>
<%
' Loop through the records (second dimension of the array)
For I = iRecFirst To iRecLast
Response.Write "<tr class='smalltext'>" & _
"<td colspan='top'>" & data(0, I) & "
[" & data(3,I) & "| " & data(2, I) & " | " & data(1, I) & "]</td>"
if LoggedIn <> "" then
response.write "<td nowrap valign='top' align='center'>"
response.write "<A href='post.asp?id=" & data(4, I)
response.write "&remove=1&removetype=" & removetype
response.write "'><IMG title='" & delete_text
response.write "' src='"%20&%20delimage%20&%20"'"
response.write " border=0></A></td>"
end if
Next ' I
%>
</table>
<%
end if
If LoggedIn <> "" Then
response.write logoutlink
else
response.write loginlink
end if
'close db just in case
on error resume next
dConn.Close
Set dConn = Nothing
on error goto 0
%>
基本上就是这样,这是一个非常简单的小型留言簿,应该很容易添加到支持 ASP 和 MS Access 数据库连接的站点(不需要 ODBC)。
尽情享用!