荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: pas (流星), 信区: Visual
标  题: 用VB编写标准CGI程序(9)
发信站: 荔园晨风BBS站 (Fri May 11 14:15:10 2001), 转信

  End If

  '获取唯一的临时文件名和留言簿文件并打开它们

  tempFileName = TempFile("c:\windows\temp", "gbk")

  guestbook = "e:\netscape\server\docs\guests.html"

  Open tempFileName For Output As #1

  Open guestbook For Input As #2

  Do '本循环体用于将留言簿中字符串"<! ENDHEAD >"前面的内容写入临时文件


  Line Input #2, tempstring

  Print #1, tempstring

  Loop While tempstring <> "<! ENDHEAD >" And Not EOF(2)

  '向临时文件中插入客户端用户的留言

  Print #1, "<hr>" & vbCrLf

  Print #1, "<ul>" & vbCrLf

  Print #1, "<li><b>留言时间</b> " & Date$ & " " & Time$ & vbCrLf

  Print #1, "<li><b>姓名: </b>" & sName & vbCrLf

  If Len(sEmail) <> 0 Then

   Print #1, "<li><b>E-mail: </b><a href=""mailto:" & sEmail & """
>" & sEmail & "</a>" & vbCrLf

  End If

  If Len(sURL) <> 0 Then

   Print #1, "<li><b>我的主页: </b> <a href=""" & sURL & """ >" & sURL
 & "</a>" & vbCrLf

  End If

  If Len(sfrom) <> 0 Then

   Print #1, "<li><b>我来自: </b>" & sfrom & vbCrLf

  End If

  Print #1, "<li><b>我的建议: </b>" & vbCrLf

  Print #1, sComment & vbCrLf

  Print #1, "</ul>" & vbCrLf

  Do '本循环体用于将留言簿剩馀的东西写入留言簿

   Line Input #2, tempstring

   Print #1, tempstring

   Loop While Not EOF(2)

  Close #1

  Close #2

  Kill guestbook '删除旧的留言簿

  Name tempFileName As guestbook '将临时文件改成新的留言簿

  OutPut "<P>非常感谢您的留言!" & chinesetail

  OutPut "<P>欢迎您经常光顾本主页 " & chinesetail

  OutPut "</FONT>"

  End Sub



  Sub OutPut(s As String) ' 本子程序用于向标准输出写信息

  Dim lBytesWritten As Long

  s = s & vbCrLf

  WriteFile hStdOut, s, Len(s), lBytesWritten, ByVal 0&

  End Sub



  Public Function GetCgiValue(cgiName As String) As String

  ' 本子程序可以获取表单上某一元素的数据

  Dim delim2 As Long ' position of "="

  Dim delim1 As Long ' position of "&"

  Dim n As Integer

  Dim pointer1 As Long pointer2 As Long length As Long length1 As
Long

  Dim tmpstring1 As String tmpstring2 As String

  pointer1 = 1

  pointer2 = 1

  delim2 = InStr(pointer2, sFormData, "=")

  pointer2 = delim2 + 1

  Do

   length = delim2 - pointer1

   tmpstring1 = Mid(sFormData, pointer1, length)

   delim1 = InStr(pointer1, sFormData, "&")

   pointer1 = delim1 + 1

   length1 = delim1 - pointer2

   If delim1 = 0 Then length1 = lContentLength + 1 - pointer2

   If tmpstring1 = cgiName Then

   tmpstring2 = Mid$(sFormData, pointer2, length1)

   GetCgiValue = UrlDecode(tmpstring2)

   Exit Do

   End If

   If delim1 = 0 Then

   Exit Do

   End If

   delim2 = InStr(pointer2, sFormData, "=")

   pointer2 = delim2 + 1

   Loop

  End Function



  Public Function UrlDecode(ByVal sEncoded As String) As String

  ' 本函数可以对用户输入的数据进行URL解码

  Dim pointer As Long ' sEncoded position pointer

  Dim pos As Long ' position of InStr target

  Dim temp As String

  If sEncoded = "" Then Exit Function

  pointer = 1

  Do '本循环体用于将"+"转换成空格

   pos = InStr(pointer, sEncoded, "+")

   If pos = 0 Then Exit Do

   Mid$(sEncoded, pos, 1) = " "

   pointer = pos + 1

   Loop

   pointer = 1

   Do

  '本循环体用于将%XX转换成字符。对於两个连续的%XX 如果第一个%XX不是某
些特指的Web系统保留字符 将把它们转换成汉字

   pos = InStr(pointer, sEncoded, "%")

   If pos = 0 Then Exit Do

   temp = Chr$("&H" & (Mid$(sEncoded, pos + 1, 2)))

   If Mid(sEncoded, pos + 3, 1) = "%" And (temp <> ":") And (temp <>
"/") _

   And (temp <> "(") And (temp <> ")") And (temp <> ".") And (temp
<> ",") _

   And (temp <> ";") And (temp <> "%") Then

   Mid$(sEncoded, pos, 2) = Chr$("&H" & (Mid$(sEncoded, pos + 1, 2)) _


   & (Mid$(sEncoded, pos + 4, 2)))

   sEncoded = Left$(sEncoded, pos) & Mid$(sEncoded, pos + 6)

   pointer = pos + 1

   Else

   Mid$(sEncoded, pos, 1) = temp

   sEncoded = Left$(sEncoded, pos) & Mid$(sEncoded, pos + 3)

   pointer = pos + 1

   End If

   Loop

   UrlDecode = sEncoded

   Exit Function

  End Function



  Public Function TempFile(sPath As String, sPrefix As String) As
String

   '本函数可以获得一个唯一的临时文件名

   Dim x As Long rc As Long

   TempFile = String(127, Chr$(0))

   rc = GetTempFileName(sPath, sPrefix, ByVal 0&, TempFile)

   x = InStr(TempFile, Chr$(0))

   If x > 0 Then TempFile = Left$(TempFile, x - 1)

  End Function



  CGI程序guestbook.bas所要处理的表单如下所示

  <html><head><title>贵宾留言簿</title></head>

  <body>

  <h3>贵宾留言簿测试</h3>

  <form action="/cgi-bin/guest.exe" method="post">

  您的姓名: <input type="text" name="name"><br>

  您的Email信箱: <input type="text" name="email"><br>

  您的主页的URL: <input type="text" name="URL"><br>

  您的建议:<br> <textarea name="URL_Comment" rows=4
cols=30></textarea><br>

  您来自: <input type="text" name="from"><br>

  <input type="submit" value=" 留言 ">

  </form>

  </body></html>

  虽然目前已经有很多可以取代CGI且其性能较CGI要高的技术(例如ASP
ISAPI NSAPI等) 但使用它们时 要用到专门的知识和工具 并且利用这些技术
所编制的程序只适用于特定的Web服务器或系统平台。考虑到CGI编程具有易用易学
性 跨服务器平台特性等优点 因此 CGI程序还将在WWW上占有一席之地。


--
※ 来源:·荔园晨风BBS站 bbs.szu.edu.cn·[FROM: 192.168.52.78]


[回到开始] [上一篇][下一篇]

荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店