asp简单的ajax留言板(采用三层模式)

  好久没有写过asp了,这回写个留言板还真觉得有点难度,竞然写了整整一天,哈哈.

  就只有留言其它的都什么也没写,采用三层结构(不知道算不算,本来对三层的概念很糊涂)

  演示www.zj55.com的留言板,希望各位大哥大姐如果发现有漏洞的话请在这里告诉我,千万不要黑我的网站,在这里小弟先谢过了.

  index.asp

  <%@ codepage=65001%>

  <%

  option explicit

  %>

  <% Response.Charset="utf-8"%>

  <% Session.CodePage=65001 %>

  <!-- #include file="AccHelper.asp" -->

  <!-- #include file="Common.asp"-->

  <!-- #include file="DAL_Guest.asp" -->

  <!-- #include file="MOD_Guest.asp" -->

  <!-- #include file="BLL_Guest.asp" -->

  <%

  Dim mybll

  Dim myList

  Set mybll = new BLL_Guest

  Select Case Request("tCMD")

  Case "SAVE"

  mybll.Insert()

  Case "DEL"

  mybll.Delete()

  End Select

  myList = mybll.FindByPage()

  %>

  <h2>客户留言</h2>

  <p>

  <form name="subForm" id="subForm">

  <textarea id="con" name="con" cols="56" rows="6" wrap="VIRTUAL"></textarea>

  <input type="button" name="submit" value="提交留言" onclick="$('guest/index.asp?tCMD=SAVE&content='+escape(this.form.con.value))" />

  </form>

  </p>

  <%=myList%>

  BLL_Guest.asp

  <%

  '/// <summary>

  '/// 摘要说明。

  '/// </summary>

  Class BLL_Guest

  Private mycom,mymod,mydal

  Private LI,UL

  Private DEL

  '获取信息

  Public Sub GetGuest()

  mydal.GetGuest(Id)

  End Sub

  '新增信息

  Public Sub Insert()

  mymod.Content = Request("content")

  mymod.re = Request("Re")

  mymod.Addtime = Now()

  mymod.Ip = request.servervariables("HTTP_X_FORWARDED_FOR")

  If len(mymod.Ip)<=0 Then mymod.Ip = request.servervariables("REMOTE_ADDR")

  Call mydal.Insert(mymod)

  End Sub

  '更新信息

  Public Sub Update()

  Call mydal.Update(mymod)

  End Sub

  '删除信息

  Public Sub Delete()

  mydal.Delete(Request("Id"))

  End Sub

  '查找信息

  Public Function FindByPage()

  Dim PageSize,CurrentPage,WhereValue,OrderValue,RecordCount

  Dim objRS

  Dim tmp1,tmp2,tmp3,parms,i

  Dim tCMD

  tCMD = Request("tCMD")

  PageSize = "8"

  CurrentPage = Request("PageNo")

  If Len(CurrentPage)<=0 Then

  CurrentPage=1

  End If

  WhereValue = ""

  OrderValue = "Id"

  Set objRS = mydal.FindByPage(PageSize,CurrentPage-1,WhereValue,OrderValue)

  i = 1

  RecordCount = mydal.Count(WhereValue)

  Do While Not objRS.EOF

  If tCMD="DEL" Then

  DEL = "<a href=""?tCMD=DEL&Id="&objRS("Id")&""">删除</a>"

  Else

  DEL = ""

  End If

  parms=Array(i,objRS("content"),objRS("ip"),objRS("addtime"),DEL)

  tmp1 = tmp1 & mycom.Format(LI,parms)

  objRs.Movenext

  i = i + 1

  Loop

  tmp3 = mycom.Page(PageSize,CurrentPage,RecordCount,"guest/index.asp?tCMD=LIST")

  parms=Array(tmp1,tmp3)

  tmp2 = tmp2 & mycom.Format(UL,parms)

  FindByPage = tmp2

  End Function

  Private Sub Class_Initialize()

  LI = "<li><span>{0}</span> <span>{1}</span><br /><span>作者:{2}</span> <span>{3}</span> <span>{4}</span></li>" & vbCrLf

  UL = "<UL>{0}<li>{1}</li></UL>"

  DEL = ""

  Set mycom = new Common

  set mymod = new MOD_Guest

  set mydal = new DAL_Guest

  End Sub

  Private Sub Class_Terminate()

  Set mycom = Nothing

  Set mymod = Nothing

  set mydal = Nothing

  End Sub

  End Class

  %>

  DAL_Guest.asp

  <%

  '/// <summary>

  '/// 摘要说明。

  '/// </summary>

  Class DAL_Guest

  Private SQL_01

  Private SQL_02

  Private SQL_03

  Private SQL_04

  Private SQL_05

  Private SQL_06

  Private SQL_07

  Private mycom,myacc,mymod

  '/// <summary>

  '/// 获得信息

  '/// </summary>

  '/// <param name="Id">判断字段</param>

  '/// <returns>信息体</returns>

  Public Function GetGuest(Id)

  Dim parms,SQL,objRS

  parms = Array(Id)

  SQL  = mycom.Format(SQL_01,parms)

  Set objRS = myacc.ExecuteReader(myacc.CONN_STRING,SQL)

  If  Not objRS.EOF then

  Call mymod.SetVar(objRs("Id"),objRs("Content"),objRs("Re"),objRs("Addtime"),objRs("Ip"))

  Set GetGuest = mymod

  Else

  GetGuest = Null

  End If

  End Function

  '/// <summary>

  '/// 插入信息

  '/// </summary>

  '/// <param name="">信息体</param>

  Public Sub Insert(vmod)

  Dim parms,SQL

  parms = Array(vmod.Content,vmod.Re,vmod.Addtime,vmod.Ip)

  SQL  = mycom.Format(SQL_02,parms)

  Call myacc.ExecuteReader(myacc.CONN_STRING,SQL)

  End Sub

  '/// <summary>

  '/// 更新信息

  '/// </summary>

  '/// <param name="">信息体</param>

  Public Sub Update(vmod)

  Dim parms,SQL

  parms = Array(vmod.Id,vmod.Content,vmod.Re,vmod.Addtime,vmod.Ip)

  SQL  = mycom.Format(SQL_03,parms)

  Call myacc.ExecuteReader(myacc.CONN_STRING,SQL)

  End Sub

  '/// <summary>

  '/// 删除信息

  '/// </summary>

  '/// <param name="">信息体</param>

  Public Sub Delete(Id)

  Dim parms,SQL

  parms = Array(Id)

  SQL  = mycom.Format(SQL_04,parms)

  Call myacc.ExecuteNonQuery(myacc.CONN_STRING,SQL)

  End Sub

  '/// <summary>

  '/// 统计信息

  '/// </summary>

  '/// <param name="">信息体</param>

  Public Function Count(WhereValue)

  Dim parms,SQL,objRS

  parms = Array(WhereValue)

  SQL  = mycom.Format(SQL_07,parms)

  Set objRS = myacc.Recordset(myacc.CONN_STRING,SQL)

  Count = objRS.RecordCount

  End Function

  '/// <summary>

  '/// 根据条件列出所有信息(带有分页)

  '/// </summary>

  '/// <param name="PageSize">每页记录数</param>

  '/// <param name="CurrentPage">页码</param>

  '/// <param name="WhereValue">判断值</param>

  '/// <param name="OrderValue">排序</param>

  '/// <returns>返回objRS</returns>

  Public Function FindByPage(PageSize,CurrentPage,WhereValue,OrderValue)

  Dim parms,SQL,objRS

  Dim s1

  If CurrentPage="0" Then

  s1 =  PageSize & "|" + OrderValue & "|" & WhereValue

  parms = Split(s1,"|")

  SQL = mycom.Format(SQL_05,parms)

  Else

  s1 = PageSize & "|" & OrderValue & "|" + WhereValue & "|" & CurrentPage*PageSize

  parms = Split(s1,"|")

  SQL = mycom.Format(SQL_06,parms)

  End If

  Set objRS = myacc.ExecuteReader(myacc.CONN_STRING,SQL)

  Set FindByPage = objRS

  End Function

  Private Sub Class_Initialize()

  SQL_01 = "Select * From [Guest] Where Id = {0}"

  SQL_02 = "Insert into [Guest] ([Content],[Re],[Addtime],[Ip]) values('{0}','{1}','{2}','{3}')"

  SQL_03 = "Update [Guest] Set [Content]='{1}',[Re]='{2}',[Addtime]='{3}',[Ip]='{4}' Where Id = {0}"

  SQL_04 = "Delete From [Guest] Where Id In ({0})"

  SQL_05 = "Select Top {0} * From [Guest] Where Content Like '%{2}%' Order By {1} Desc,Id Desc"

  SQL_06 = "Select Top {0} * From [Guest] Where Content Like '%{2}%' And Id Not IN(Select Top {3} Id From [Guest] Where Content Like '%{2}%' Order By {1} Desc,Id Desc) Order By {1} Desc,Id Desc"

  SQL_07 = "Select * From [Guest] Where Content Like '%{0}%' "

  Set mycom = new Common

  Set myacc = new AccHelper

  Set mymod = new MOD_Guest

  End Sub

  Private Sub Class_Terminate()

  Set mycom = Nothing

  Set myacc = Nothing

  Set mymod = Nothing

  End Sub

  End Class

  %>

  MOD_Guest.asp

  <%

  '/// <summary>

  '/// 摘要说明。

  '/// </summary>

  Class MOD_Guest

  Public Id

  Public Content

  Public Re

  Public Addtime

  Public Ip

  Public Sub SetVar(vId,vContent,vRe,vAddtime,vIp)

  Id=vId

  Content=vContent

  Re=vContent

  Addtime=vAddtime

  Ip=vIp

  End Sub

  End Class

  %>

  Common.asp

  <%

  '/// <summary>

  '/// 摘要说明

  '/// </summary>

  Class Common

  '/// <summary>

  '/// 获得信息

  '/// </summary>

  '/// <param name="Id">需要内容</param>

  '/// <param name="Id">替换关键字</param>

  '/// <returns>格式化后内容</returns>

  Public Function Format(str,arr)

  Dim r,i

  r = str

  For i = 0 To UBound(arr)

  r = Replace(r,"{"&i&"}",arr(i))

  Next

  Format = r

  End Function

  Public Function Page(PageSize,CurrentPage,RecordCount,PageUrl)

  const C_RECORDCOUNT = "合计<STRONG><FONT color=""red"">{0}</FONT></STRONG>篇 |"

  const C_FIRSTPAGE1 = " <a href=""#"" onclick=""$('{0}&PageNo={1}')"">首页</a>"

  const C_FIRSTPAGE2 = " 首页"

  const C_PREVPAGE1 = " <a href=""#"" onclick=""$('{0}&PageNo={1}')"">上一页</a>"

  const C_PREVPAGE2 = " 上一页"

  const C_NEXTPAGE1 = " <a href=""#"" onclick=""$('{0}&PageNo={1}')"">下一页</a>"

  const C_NEXTPAGE2 = " 下一页"

  const C_LASTPAGE1 = " <a href=""#"" onclick=""$('{0}&PageNo={1}')"">尾页</a>"

  const C_LASTPAGE2 = " 尾页"

  const C_CURRENTPAGE = " 页次:<STRONG><FONT color=""red"">{0}</FONT>/{1}</STRONG>页"

  const C_PAGESIZE = " <STRONG>{0}</STRONG>篇/页  "

  const C_GOTOPAGE = " 跳转:<input type=""text"" name=""goto"" value=""{1}"" onchange=""$('{0}&PageNo='+this.value)"" style=""width:20px;border:1px""/>  "

  Dim PageCount,pages

  Dim lRecordCount,lFirstpage,lPrevpage,lNextpage,lLastpage,lCurrentpage,lPagesize,lGotopage

  Dim p,parms

  If RecordCount Mod PageSize <> 0 Then

  pages = 1

  else

  pages = 0

  End If

  PageCount=CInt(RecordCount/PageSize + pages)

  parms=Array(RecordCount)

  lRecordCount = Format(C_RECORDCOUNT,parms)

  if CInt(CurrentPage)>1 Then

  parms=Array(Pageurl,1)

  lFirstpage = Format(C_FIRSTPAGE1,parms)

  parms=Array(Pageurl,CInt(CurrentPage)-1)

  lPrevpage = Format(C_PREVPAGE1,parms)

  Else

  lFirstpage=C_FIRSTPAGE2

  lPrevpage=C_PREVPAGE2

  End If

  if CInt(CurrentPage)<PageCount Then

  parms=Array(Pageurl,CInt(CurrentPage)+1)

  lNextpage = Format(C_NEXTPAGE1,parms)

  parms=Array(Pageurl,CInt(CurrentPage)+1)

  lLastpage = Format(C_LASTPAGE1,parms)

  Else

  lNextpage=C_NEXTPAGE2

  lLastpage=C_LASTPAGE2

  End If

  parms=Array(CurrentPage,PageCount)

  lCurrentpage = Format(C_CURRENTPAGE,parms)

  parms=Array(PageSize)

  lPagesize = Format(C_PAGESIZE,parms)

  parms=Array(Pageurl,CurrentPage)

  lGotopage = Format(C_GOTOPAGE,parms)

  p=lRecordCount&lFirstpage&lPrevpage&lNextpage&lLastpage&lCurrentpage&lPagesize&lGotopage

  Page = p

  End Function

  End Class

  %>

  AccHelper.asp

  <%

  '/// <summary>

  '/// AccHelper 的摘要说明。

  '/// </summary>

  Class AccHelper

  Public CONN_STRING

  '/// <summary>

  '/// 执行ExecuteNonQuery

  '/// </summary>

  '/// <param name="connString">连接字符</param>

  '/// <param name="cmdText">sql命令</param>

  Public Function ExecuteNonQuery(connString,cmdText)

  Dim objConn

  Set objConn = Server.CreateObject("ADODB.Connection")

  objConn.Open connString

  objConn.Execute(cmdText)

  End Function

  '/// <summary>

  '/// 执行ExecuteReader

  '/// </summary>

  '/// <param name="connString">连接字符</param>

  '/// <param name="cmdText">sql命令</param>

  '/// <returns>RS</returns>

  Public Function ExecuteReader(connString,cmdText)

  Dim objConn,objRS

  Set objConn = Server.CreateObject("ADODB.Connection")

  objConn.Open connString

  Set objRS = objConn.Execute(cmdText)

  Set ExecuteReader = objRS

  End Function

  '/// <summary>

  '/// 执行Recordset

  '/// </summary>

  '/// <param name="connString">连接字符</param>

  '/// <param name="cmdText">sql命令</param>

  '/// <returns>RS</returns>

  Public Function Recordset(connString,cmdText)

  Dim objConn,objRS

  Set objConn = Server.CreateObject("ADODB.Connection")

  objConn.Open connString

  Set objRS = Server.CreateObject("ADODB.RecordSet")

  objRS.Open cmdText,objConn,1,3

  Set Recordset = objRS

  End Function

  Private Sub Class_Initialize()

  CONN_STRING = "provider = microsoft.jet.oledb.4.0;data source=" & Server.Mappath("db.mdb")

  End Sub

  End Class

  %>

  ajax.js

  

复制代码 代码如下:

  var http_request = false;

  function makeRequest(obj,url) {

  http_request = false;

  if (window.XMLHttpRequest) { // Mozilla, Safari,...

  http_request = new XMLHttpRequest();

  if (http_request.overrideMimeType) {

  http_request.overrideMimeType('text/xml');

  }

  } else if (window.ActiveXObject) { // IE

  try {

  http_request = new ActiveXObject("Msxml2.XMLHTTP");

  } catch (e) {

  try {

  http_request = new ActiveXObject("Microsoft.XMLHTTP");

  } catch (e) {}

  }

  }

  if (!http_request) {

  alert('Giving up :( Cannot create an XMLHTTP instance');

  return false;

  }

  http_request.onreadystatechange = function()

  {

  if (http_request.readyState == 4) {

  if (http_request.status == 200) {

  updateObj(obj,http_request.responseText);

  }

  else

  {

  updateObj(obj,"");

  }

  }

  }

  http_request.open('GET', url, true);

  http_request.send(null);

  }

  function updateObj(obj,data){

  obj.innerHTML = data;

  }

  function $(url){

  var obj = document.getElementById("content");

  obj.style.display='block';

  document.getElementById("container").style.margin="10px auto 0px";

  obj.innerHTML = "Loading…";

  makeRequest(obj,url);

  }

  html调用方法:

  

复制代码 代码如下:

  <a href="#" onclick="$('news.html')">新闻</a><a href="#" onclick="$('product.html')">产品</a><a href="#" onclick="$('case.html')">案例</a><a href="#" onclick="$('contact.html')">联系</a><a href="http://zj55com.cnblogs.com/" target="_blank">博客</a>