荔园在线
荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀
[回到开始]
[上一篇][下一篇]
发信人: 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软件 网络书店