65.9K
CodeProject 正在变化。 阅读更多。
Home

简单的 ASP 留言簿

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.05/5 (8投票s)

2004 年 7 月 12 日

2分钟阅读

viewsIcon

332544

使用 ASP 和 MS Access 的简单留言簿。

Sample Image - asp-guestbook.gif

简介 - 具有基于 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")
%>

ASP Guestbook Login

登录使用会话变量来存储登录信息,因此要注销,我们只需放弃会话。 重定向将日期附加到 URL,以避免在注销后看到“缓存”的登录页面。 这不是安全问题,只是为了方便。

<%
session.abandon 
response.redirect("post.asp?d=" & date)
%>

现在,主要代码是 post.asp 页面,无论您是以管理员身份登录还是只是访问该页面的访客,此页面都是相同的。 如果您已登录,您会看到与访客相同的数据,只是您有更多选项可用,您可以删除帖子、恢复已删除的帖子或清空“回收站”(已删除的帖子存储在其中,直到您清除它们)。

ASP Guestbook

正如您从下面的代码中看到的,我们从一开始就检查了 loggedin 会话,
然后我们可以在整个脚本中使用它,根据您作为管理员或访客的身份来显示数据。

<% option explicit %>
<head>
<!-- #INCLUDE FILE="settings.asp" -->
<%
LoggedIn = Session("loginID")

登录后,您会看到更多可用的选项。

ASP Guestbook

该文件被分成“部分”,具体取决于传递的查询字符串。

下面的部分检查您是否已登录,然后检查是否
您尝试从数据库中清空“已删除”的项目。

'============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)。

尽情享用!

© . All rights reserved.