<form id="hz9zz"></form>
  • <form id="hz9zz"></form>

      <nobr id="hz9zz"></nobr>

      <form id="hz9zz"></form>

    1. 明輝手游網中心:是一個免費提供流行視頻軟件教程、在線學習分享的學習平臺!

      第3種途徑---基于XML的ASP留言板

      [摘要]坦白地說,對于ASP我一直都不怎么感興趣。如果要我寫這種服務器端程序的話, 我會選擇JSP。所以,本人一直都想在網上弄個便宜點的JSP空間;可是正如miles 前輩所說,連貴一點的都沒有,更不用說便宜的了。沒辦法,只好用ASP了, 對于用ASP寫留言板的主要途徑,只要是地球人就都知道,用得最多的無...

      坦白地說,對于ASP我一直都不怎么感興趣。如果要我寫這種服務器端程序的話,
      我會選擇JSP。所以,本人一直都想在網上弄個便宜點的JSP空間;可是正如miles
      前輩所說,連貴一點的都沒有,更不用說便宜的了。沒辦法,只好用ASP了,
      對于用ASP寫留言板的主要途徑,只要是地球人就都知道,用得最多的無外乎就
      是文件組件與數據庫組件;而大多提供ASP的服務商基于安全都禁用了文件組件,
      也有的禁用了數據庫組件。當然,就算用不了這兩個組件,也并不代表我們就不
      能用腳本來創建文件和修改文件了,我們還有第三種途徑:MSXML組件。

      以下是我用MSXML組件寫的一個留言本程序,主要文件有guest.xml、guest.asp、
      include.asp、certain.asp,另加一些圖像文件,分別為1.jpg,2.jpg,……圖像
      文件放在pic目錄下。這個腳本在ASP的各版本中均已測試通過,以下是所有的源
      代碼與講解,肯請指正。

      ----------------------------------------------------------------------
      ◆1◆ guest.xml 該文件用來保存留言的數據文件,相當于數據庫。
      ----------------------------------------------------------------------
      <?xml version="1.0" encoding="gb2312"?>
      <殷亮的留言本>
      <留言>
      <昵稱>殷亮</昵稱>
      <頭像>pic/20.jpg</頭像>
      <來自>湖北荊門</來自>
      <時間>2002-10-17 22:48:01</時間>
      <信箱>ask10@msn.com</信箱>
      <內容>這是一個基于XML的留言本</內容>
      </留言>
      <留言>
      <昵稱>黃娟</昵稱>
      <頭像>pic/7.jpg</頭像>
      <來自>湖北武漢</來自>
      <時間>2002-10-17 22:48:01</時間>
      <信箱>fengzhongluwei@hotmail.com</信箱>
      <內容>你好嗎?</內容>
      </留言>
      </殷亮的留言本>
      -------------------------------------------------------------------------
      上面的XML文件記錄了兩條留言,可以用任何文本編輯工具編輯,如果沒有語法錯誤,
      在瀏覽器中輸入該文件名即可顯示XML所獨有的樹狀頁面。因為是文本形式的,所以
      從創建到修改都比專門的數據庫要方便。而XML文檔的規則與格式也非常自由,如果
      你要創建一個新的XML文件,只需一字不改地照寫第一行“<?xml version="1.0"
      encoding="gb2312"?>”,而后面的標簽與標簽之間的text就可以很隨意,僅僅遵守
      以下規則即可:

      1.首標簽與尾標簽必須對應,可以重復,但不可以嵌套。
      2.標簽的命名規則與JAVA/C/C++等程序語言的變量命名規則相似,區分大小寫。
      3.一個文檔只能有一個根元素,如實例中的“<殷亮的留言本>”
      4.唯一的關鍵字“XML”,標簽不能以這三個字母開頭。

      如果文檔與規則有所沖突,將導制XML文檔在瀏覽器中無法正常顯示,且當ASP腳本調
      用該文檔時也會出現錯誤,所以強烈建議將寫好的XML文件先在瀏覽器中預覽,沒有
      發現錯誤時,再開始編寫ASP腳本。

      下面是關于ASP中讀寫XML文件的相關語句:(以上面的XML文件為例)

      應用組件,讀入文件:
      set guestXml = Server.CreateObject("MSXML.DOMDocument")
      guestXml.load Server.MapPath("guest.xml")

      顯示第一條留言中的“殷亮”
      <%=guestXml.documentelement.childNodes.item(0).childNodes.item(0).text%>
      可以解釋為:XML對象.XML根標簽.子標簽集合.第一條.子標簽集合.第一條.文本
      這樣,通過一級一級的訪問,最終定位到了第三級標簽上。
      當然,我們也可以先用 set root = guestXml.documentelement.childNodes
      這樣,當我們要顯示“殷亮”的時候,就可以用:
      <%=root.item(0).childNodes.item(0).text%>

      顯示第二條留言中的“湖北武漢”
      <%=guestXml.documentelement.childNodes.item(1).childNodes.item(2).text%>
      和數組類似,XML的下標也是由0開始。

      顯示一個標簽中所有子標簽的個數,如顯示留言總數:
      <%=guestXml.documentelement.childNodes.length%>

      顯示第一條留言中的項目數:
      <%=guestXml.documentelement.childNodes.item(0).childNodes.length%>

      對文件修改后,保存XML文件,使修改生效:
      <%guestXml.save%>

      在第一條留言中添加一個子標簽“<主題>a test</主題>”
      <%
      set titleTag = guestXml.createelement("主題") ''''先創建一個標簽
      titleTag.text= "a test" '''''設定標簽中的文本
      guestXml.documentelement.childNodes.item(1).appendchild titleTag
      '''''添加到指定的標簽下
      guestXml.save
      %>
      當你再次打開guest.xml文件時,你會發現添加已經成功。

      MSXML對象的相關語法不止這些,但有了這幾個關鍵的,已經足夠我們寫留言本了。

      --------------------------------------------------------------------------
      ◆2◆ guest.asp 該文件為留言本的主頁面,包括顯示留言的總數與總頁數
      --------------------------------------------------------------------------
      <%@LANGUAGE="VBSCRIPT" CODEPAGE="936"%>
      <% '使瀏覽器每次都從服務器載入網頁
      Response.Expires = -1
      Response.AddHeader "Pragma","no-cache"
      Response.AddHeader "cache-control","no-store"
      %>
      <html>
      <head>
      <meta name="GENERATOR" content="Microsoft FrontPage 5.0">
      <meta name="ProgId" content="FrontPage.Editor.Document">
      <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
      <style type="text/css">
      <!--
      A:link {text-decoration:none;color:#000000}
      A:active {TEXT-DECORATION:none;color:#CC33FF}
      A:visited {TEXT-DECORATION:none;color:#000000}
      A:hover {TEXT-DECORATION:underline overline;color:#CCCCFF}
      p, br, body, td, select, input, form, textarea, option{ font-family: 宋體; font-size: 9pt }
      .input1 { font-size: 9pt; height: 18px; border: 1px #000000 solid; background-color: #CCCCFF}
      .input2 { font-size: 9pt; height: 16px; border: 1px #000000 solid; background-color: #CCCCFF}
      --></style>
      <title>【殷亮的留言本】謹以此留言板獻給WISHES</title>
      </head>
      <body bgcolor="#cc33ff">
      <center>
      <table border="1" cellpadding="0" cellspacing="0" style="BORDER-COLLAPSE: collapse" bordercolor="#111111" width="750" id="AutoNumber3" height="45">
      <tr>
      <td width="100%" bgcolor="#9933ff" align="middle" height="21" colspan="2" style="FONT-SIZE: 9pt; FONT-FAMILY: 宋體">&nbsp;【
      殷 亮 的 留 言 本 】</td>
      </tr>
      <% '''''打開數據文件test.xml
      set guestXml = Server.CreateObject("MSXML.DOMDocument")
      guestXml.load Server.MapPath("guest.xml")
      set root = guestXml.documentelement.childNodes

      num = root.length '''''獲得留言總數
      %>
      <tr>
      <td width="77%" bgcolor="#9933ff" align="left" height="21" style="FONT-SIZE: 9pt; FONT-FAMILY: 宋體">&nbsp;&nbsp;&nbsp;&nbsp;
      <%
      for i=1 to (num-1)\5+1 '''''因為是每5條留言為1頁,所以總頁數就是(num-1)\5+1
      Response.Write("<a href=include.asp?page="& i &" target=include>")
      Response.Write(" 第 "&i&" 頁 ") '''''通過此循環便制定了一個頁間的導航。
      Response.Write("</a>") '''''相當于HTML代碼 <a href=include.asp?page=1 target=include>第1頁</a>
      next
      %>
      </td>
      <td width="23%" bgcolor="#9933ff" align="middle" height="21" style="FONT-SIZE: 9pt; FONT-FAMILY: 宋體">&nbsp;<A href="piclist.html" target="_blank">頭像列表</A>
      <label id=lab1 onclick="window.scroll(0,70)">書寫留言</label></td>
      </tr>
      </table>
      <p><iframe name="include" width="749" height="314" src="include.asp" style="BORDER-RIGHT: #000000 1px double; PADDING-RIGHT: 4px; BORDER-TOP: #000000 1px double; PADDING-LEFT: 4px; PADDING-BOTTOM: 1px; BORDER-LEFT: #000000 1px double; PADDING-TOP: 1px; BORDER-BOTTOM: #000000 1px double">
      瀏覽器不支持嵌入式框架,或被配置為不顯示嵌入式框架。</iframe></p>
      <table border="1" cellpadding="0" cellspacing="0" bgcolor="#9933ff" style="BORDER-COLLAPSE: collapse" bordercolor="#111111" width="750" id="AutoNumber4" height="1">
      <form method="POST" action="certain.asp">
      <tr>
      <td width="21" height="1" align="left" style="VERTICAL-ALIGN: middle; LINE-HEIGHT: 150%; LETTER-SPACING: 3pt" rowspan="3">留言贈語</td>
      <td width="96" height="25" align="middle">您的名字:</td>
      <td width="171" height="25" align="middle">
      <INPUT size="20" name="textname" class="input1">
      </td>
      <td width="88" height="25" align="middle">您在何方:</td>
      <td width="194" height="25" align="middle">
      <INPUT size="20" name="textadd" class="input1">
      </td>
      <td width="173" height="25" align="middle" colspan="2">
      <INPUT size="20" name="textmail" value="yourmail@" class="input1">
      </td>
      </tr>
      <tr>
      <td width="552" height="1" colspan="4" rowspan="2"
      align="center">
      <TEXTAREA style="border-style:double; border-width:3; WIDTH: 523px; HEIGHT: 37px; background-color:#CCCCFF; overflow:hidden" cols="72" rows="1" name="textmsg" class="input1">
      </TEXTAREA></td>
      <td width="10" height="1" rowspan="2" align="center"><img border="0" src="http://www.okasp.com/techinfo/pic/1.jpg" width="40" height="56" id=idface>
      </td>
      <td width="159" height="1" align="center">&nbsp;<SELECT name="list" class="input1" style="WIDTH: 61;height:61" onchange="document.images['idface'].src=options[selectedIndex].value;">
      <option value=http://www.okasp.com/techinfo/pic/1.jpg selected>頭像1
      <script language=vbscript>
      for i=2 to 15 '''''循環,用以設定下拉列表中的另外14個文件
      document.write("<option value=pic/"&i&".jpg>頭像"&i)
      next
      </script>
      </option>
      </SELECT>
      <INPUT style="WIDTH: 65px; HEIGHT: 19px" type="button" value="頭像列表" class="input2">
      </td>
      </tr>
      <tr>
      <td width="159" height="1" align="center"><INPUT style="WIDTH: 65px; HEIGHT: 19px" type="reset" size="25" value="清空" class="input2">
      <INPUT style="WIDTH: 65px; HEIGHT: 19px" type="submit" value="提交" class="input2"></td>
      </tr>
      </form>
      </table>
      </center>

      <% '''''在瀏覽器的狀態欄中顯示類似"當前共有8條留言,分2頁顯示,最近留言的人是陳樹"
      status = "當前共有"& num &"條留言,分"& (num-1)\5+1 &"頁顯示,最近留言的人是"& guestXml.documentelement.lastchild.firstchild.text
      Response.Write("<script>")
      Response.Write("window.status="&chr(34)& status &chr(34))
      Response.Write("</script>")
      %>

      </body>
      </html>

      ------------------------------------------------------------------------------
      ◆ 3 ◆ include.asp 該文件嵌入在主頁面中,用來顯示留言。
      ------------------------------------------------------------------------------

      <% '使瀏覽器每次都從服務器載入內容
      Response.Expires = -1
      Response.AddHeader "Pragma","no-cache"
      Response.AddHeader "cache-control","no-store"
      %>

      <html>
      <head>
      <meta http-equiv="Content-Language" content="zh-cn">
      <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
      <title>留言贈語</title>
      <style>
      <!--
      p, br, body, td, select, input, form, textarea, option{ font-family: 宋體; font-size: 9pt }
      table{border-style:double; border-width:3; padding:0; border-collapse: collapse}
      .input1 { font-size: 9pt; border: 1px #000000 solid; background-color: #CCCCFF}

      -->
      </style>
      </head>

      <body bgcolor="#CC33FF">
      <center>

      <% '''''打開留言本數據文件
      set guestXml = Server.CreateObject("MSXML.DOMDocument")
      guestXml.load(Server.MapPath("guest.xml"))
      set root = guestXml.documentelement
      num = root.childNodes.length

      page=Request.QueryString("page")
      if page=Empty then '''''如果沒有參數傳遞,即http://…/include.asp時的情況。
      thispage = (num-1)\5+1 '''''每頁顯示5條留言,用thispage表示當前頁碼,無參數傳遞時顯示最后一頁。
      if num mod 5 = 0 then
      msgTotal = 5 '''''變量 msgTotal 表示當前頁應該顯示的留言數量
      else
      msgTotal = num mod 5
      end if
      else
      thispage = page '''''類似于http://…/include.asp?page=1時的情況
      if StrComp(thispage,(num-1)\5+1,1)=0 then
      msgTotal = num mod 5
      else
      msgTotal = 5
      end if
      end if
      msgNum = (thisPage-1)*5+msgTotal ''''msgNum表示當前頁顯示的留言是總條數的第N條
      ''''因為是倒序顯示,所以第一條留言應該是(thisPage-1)*5+msgTotal
      %>

      <%for i=1 to msgTotal%>
      <%
      set xmlNode = root.childNodes.item(msgNum-1).childNodes ''定位到要讀取的留言
      name = xmlNode.item(0).text '''''name變量表示留言人的姓名.
      pic = xmlNode.item(1).text '''''pic變量表示頭像的地址。
      add = xmlNode.item(2).text '''''add變量表示留言人的地址。
      thistime = xmlNode.item(3).text '''''this變量表示留言時間。
      ''''不顯示留言人的EMAIL。
      msg = xmlNode.item(5).text ''''msg變量表示留言內容。
      %>
      <table border="1" cellpadding="0" cellspacing="0" bordercolor="#111111" width="100%" height="106" bgcolor="#FFFFFF">
      <tr>
      <td width="14%" rowspan="3" height="106" align="center">
      <img border="0"
      src=<%=pic%> width="100" height="143"></td>
      <td width="9%" height="10" align="center" bgcolor="#99CCFF">姓名</td>
      <td width="31%" height="10" align="center" bgcolor="#CCCCFF"><%=name%></td>
      <td width="10%" height="10" align="center" bgcolor="#99CCFF">來自</td>
      <td width="36%" height="10" align="center" bgcolor="#CCCCFF"><%=add%></td>
      </tr>
      <tr>
      <td width="86%" height="83" colspan="4" align="center"
      bgcolor="#9933FF"
      style="line-height: 150%; margin-left: 50; margin-right: 50">
      <TEXTAREA name="textmsg" class="input1" rows="6" cols="87" readonly><%=msg%></TEXTAREA></td>
      </tr>
      <tr>
      <td width="86%" height="11" colspan="4" align=right bgcolor="#CCCCFF">第<%=thispage%>頁 第<%=msgTotal-i+1%>條 <%=thistime%> </td>
      </tr>
      </table>
      <br>
      <%
      msgNum = msgNum-1 ''''倒序顯示,所以下一條留言的下標應是當前下標-1
      next ''''循環。
      %>
      </center>
      </body>
      </html>

      -------------------------------------------------------------------------
      ◆ 4 ◆ certain.asp 該文件用于向XML文件中添加記錄,并確認留言。
      -------------------------------------------------------------------------
      <html>

      <head>
      <meta name="GENERATOR" content="Microsoft FrontPage 5.0">
      <meta name="ProgId" content="FrontPage.Editor.Document">
      <meta http-equiv="Content-Type" content="text/html;

      charset=gb2312">
      <title>【殷亮的留言本】留言確認</title>
      </head>
      <script language=vbscript>
      sub btn1_onclick '''''當按下"查看留言"時,將網頁導至留言頁面
      window.location="guest.asp"
      end sub

      sub btn2_onclick
      window.close
      end sub
      </script>

      <body>

      <% '定義一個函數,用于檢取留言內容。
      function htmlencode(str)
      dim result
      dim l
      if isNULL(str) then
      htmlencode=""
      exit function
      end if
      l=len(str)
      result=""
      dim i
      for i = 1 to l
      select case mid(str,i,1)
      case "<"
      result=result+"&lt"
      case ">"
      result=result+"&gt"
      case else
      result=result+mid(str,i,1)
      end select
      next
      htmlencode=result
      end function

      set guestXml = Server.CreateObject("MSXML.DOMDocument")
      guestXml.load(Server.MapPath("guest.xml"))
      set root = guestXml.documentelement

      name = Request.Form("textname") '''''檢取表單的各項提交。
      pic = Request.Form("list")
      add = Request.Form("textadd")
      email = Request.Form("textmail")
      thistime = now()
      msg = Request.Form("textmsg")

      set newTag = guestXml.createelement("留言")
      root.appendchild newTag

      set currentTag = root.lastChild

      set nameTag = guestXml.createelement("姓名")
      nameTag.text=htmlencode(name)
      currentTag.appendchild nameTag

      set picTag = guestXml.createelement("頭像")
      picTag.text=pic
      currentTag.appendchild picTag

      set addTag = guestXml.createelement("來自")
      addTag.text=htmlencode(add)
      currentTag.appendchild addTag

      set timeTag = guestXml.createelement("時間")
      timeTag.text=thistime
      currentTag.appendchild timeTag

      set emailTag = guestXml.createelement("信箱")
      emailTag.text=htmlencode(email)
      currentTag.appendchild emailTag

      set msgTag = guestXml.createelement("內容")
      msgTag.text=htmlencode(msg)
      currentTag.appendchild msgTag

      guestXml.save(Server.MapPath("guest.xml"))
      %>
      <embed width="350" height="200" src="http://www.okasp.com/techinfo/pic/certain.swf" style="position: absolute; left: 214; top: 86">'''''一個FLASH文件。
      <input type="button" value="查看留言" name="btn1"
      style="position: absolute; left: 282; top: 313; border-style: solid; border-width: 1; background-color: #ABB52F">
      <input type="button" value="關閉此頁" name="btn2"
      style="position: absolute; left: 414; top: 313; border-style: solid; border-width: 1; background-color: #ABB52F">
      </body>
      </html>

      ---------------------------------------------------------------------------------
      備注:

      由于我們是用XML文件保存數據,所以在添加數據時的HTML過濾是很重要的。在基于數據庫的
      留言本中不小心留下一個HTML標簽也許不會造成什么太大的問題,但在XML中,后果是嚴重的
      隨便的一個標記,甚至隨便的一個"<"都可以讓你的留言本癱瘓。
      如“<姓名>約翰<列濃</姓名>”………………………

      上面四個文件源代碼都已經過測試,復制后便可使用。
      如果你想看示例演示,可以點擊后面的鏈接 示例

      你也可以從/article/UploadPic/2006-1/200617201115914.rar處
      下載所有腳本文件與圖像文件的壓縮包。

      旨在探討,如有錯漏,歡迎指正與討論。

      感謝站長miles這些日子來不倦的幫助,無以回報,唯有灌上此文。


      日韩精品一区二区三区高清