免费预览已结束,剩余1页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
用VB编写留言板黑龙江省牡丹江市儿童医院内科 张建华随着网络的普及,越来越多的网站增设了各种实时交互功能,如网上调查、时事论坛、聊天室、留言板等。下面介绍一个使用VB编写CGI脚本程序的实例,使你轻松拥有自己的留言板。一、 基本概念1什么是CGICGI是Common Gate Interface(通用网关接口)的缩写,它运行在Web服务器上,提供同客户端浏览器界面的接口。通过CGI可以使Web服务器执行一些外部程序,并将外部程序所产生的结果返回给Web浏览器。CGI程序由两部分组成,一部分是超文本页面(html),就是客户端在浏览器中看到的交互式的表单(如调查表和留言板的界面);另一部分是运行在服务器上的程序(通过点击页面上的“提交”按钮激活)。其基本的交互过程如下: 1) Web浏览器在接到客户端对CGI程序的请求后,首先把要传送的数据(客户输入)进行编码,然后提交给服务器;2) 服务器调用CGI程序,对输入数据进行相关的解码处理,并把处理后的结果写入指定的输出文件;3) 服务器读取输出文件并把最终数据发送到客户端,使用户可以在浏览器中看到程序执行的结果。2数据的提交方式如果从客户端向服务器传送的数据量不是很多,即小于1024字节,则可以使用“GET”传输方式,命令的使用方法为:在客户端浏览器的交互式表单的源码中加入如下一行代码当使用这种方法时,CGI程序从环境变量QUERY_STRING中获取数据(即URL的问号“?”之后的那一部分数据)。如果要通过CGI程序传送的数据超过了1024字节(URL的最大长度限制),例如论坛中的“帖子”,则要使用“POST”的传输方法。3浏览器的编码方式Web浏览器对客户端的输入信息有统一的编码格式:1) 用“=”连接提交表单中各元素的Name和Value属性,即以“名称=值”的形式进行编码;2) 用“&”连接表单中不同的输入项目,例如:“Name王哲E”;3) 若Value属性中存放的数据含有空格,则空格被转换成“+”,如“王 哲”被转换为“王哲”;4) 对URL和Web系统的保留字符编码成十六进制数形式,即%HH。 CGI程序在使用这些数据前必须对它们进行解码,即将数据还原成用户在Web页面上输入时的形式。由于Web系统将汉字当作特殊字符对待,一个汉字被浏览器编码成四位十六进制数(例如%D5%C5),因此在CGI程序中还要对汉字进行一些特殊的解码处理。二、编制CGI程序了解了上述CGI的一些基本特征后,我们就可以着手编制自己的留言板脚本程序了。1 页面设置 首先要新建两个超文本(html)文档,可分别命名为guestbook.htm和databook.htm,其中的guestbook.htm为客户在浏览器中看到的交互式表单页面,其源代码如下:留言板请留下您的建议 您的名字:您的Email:您的主页地址: 您所在的城市: 留言内容: 在databook.htm文档中存储的是各位来宾的留言,特殊之处是在文件中要使用一个定位字符串“”将文件的开始部分和具体的客户留言部分分开。CGI程序将在“”所在的位置之后插入客户的留言。databook.htm的源文件为:看留言查看留言 这样,最新的留言出现在页面的最上端;如果要把最新的留言放在页面的下端,则只需将其中的定位字符串“”移到客户留言部分和HTML文件结尾部分之间的位置就行了。需注意的是:字符串一定要单独占一行。2 CGI程序用VB编写的CGI程序的完整代码附后。三程序调试程序编写完成后,要进行调试排错处理。CGI脚本不同于其他VB程序之处在于,CGI程序不能在个人计算机上进行测试,而要放到服务器上的特定目录下才能执行(一般放在Cgi-Bin目录下)。要实现这一点,对网络管理员来说不成什么问题(因为其具有对服务器的读写操作权限),但对于大多数个人计算机爱好者来说却是一个很大的难题。因此,要对CGI脚本进行测试,首先要在个人PC机上设置一个Web服务器的调试环境,即先在个人PC上运行Web Server软件来模拟服务器。由于Windows操作平台的局限性,可在Windows下运行的Server软件并不是很多,比较简单且易于实现的一个方法是使用Windows98光盘中自带的Server工具Personal Web Server(个人网络服务器)。1设置个人Web服务器在Windws98光盘中的“add-onepws”目录中,点击“Setup.exe”进行安装。整个安装过程比较简单,按屏幕提示操作即可。安装完成后,在其主画面左侧点击“高级”图标,在虚拟目录列表框内选择“home”目录,点击“添加”按钮,选择“浏览”,选中c:Inetpubwwwrootcgi-bin(其中的盘符视执行安装时的路径而定),在“新虚拟目录”栏内输入“cgi-bin”,然后在访问权限的设置中把“读取”、“执行”、“脚本”各项全选上,点击“确定”按钮。即成功地设置了个人Web服务器。2 测试操作首先,把我们在前面所新建的两个超文本文档guestbook.htm和databook.htm拷贝到c:Inetpubwebpub子目录内,把编译完的CGI程序guest.exe拷入c:Inetpubwwwrootcgi-bin子目录内;然后,打开浏览器,在地址栏内输入/guestbook.htm,回车;就可以对CGI脚本程序进行测试操作了。如果在回车后出现请求“拨号连接”的画面,则先点击“取消”按钮,然后在浏览器的“查看-Internet选项-连接”标签中(以IE为例),选择“通过局域网连接到Internet”一项,再点击“确定”即可。经测试确认无误后,便可以与自己放置主页站点的网络管理员联系,把编制好的留言板脚本程序上传到服务器上了。需注意一点,如果网络管理员把你的文档放在与前述目录不同的目录中,则要在脚本中做出相应的修改,并重新编译生成EXE执行文件。附:guest .bas 声明部分Declare Function GetStdHandle Lib kernel32 (ByVal nStdHandle As Long) As LongDeclare Function WriteFile Lib kernel32 (ByVal hFile As Long, ByVal lpBuffer _ As String, ByVal nNumberOfBytesToWrite As Long, lpNumberOfBytesWritten _ As Long, lpOverlapped As Any) As LongOption ExplicitPublic StrData(5) As String 用于存储表单内各项目的用户输入数据Public CGI_QueryString As String 定义环境变量Public Const STD_INPUT_HANDLE = -10&Public Const STD_OUTPUT_HANDLE = -11&Public hStdIn As Long 标准输入文件句柄Public hStdOut As Long 标准输出文件句柄Public Ent As String 主函数Sub Main() Dim UrlString As String, Databook As String Dim TempFileName As String, TempString As String Dim Number As Single, I As Integer Ent = vbCrLf hStdIn = GetStdHandle(STD_INPUT_HANDLE) hStdOut = GetStdHandle(STD_OUTPUT_HANDLE) CGI_QueryString = Environ(QUERY_STRING) 读取返回字符 TempString = TempString + CGI_QueryString + vbCrLf UrlString = UrlDecode(TempString) TempString = FenGe(UrlString) 获得一个随机数作为临时文件名 Randomize Number = Int(10000 * Rnd + 100) 随机得到100到10000之间的整数 TempFileName = YourWebSitePath1 & Number 注 取得留言簿文件名 Databook = YourWebSitePath2 databook.htm 注 Open TempFileName for Output As #1 Open Databook For Input As #2 将留言簿中字符串前面的内容写入临时文件 Do Line Input #2, TempString Print #1, TempString Loop While TempString 检查客户端用户的输入项 If StrData(1) Then Send Content-type:text/html & Ent Send 不要着急,您忘记填写名字了! Exit Sub End If If StrData(5) Then Send Content-type:text/html & Ent Send 对不起,您还没有填写留言的内容。 Exit Sub End If 向临时文件中写入客户端用户的留言 Print #1, & vbCrLf Print #1, 时间: & Date & & Time Print #1, 姓名: & StrData(1) 如果不填写以下各项则不显示该项的名称 If StrData(2) Then Print #1, E-mail: & StrData(2) & If StrData(3) http:/ Then Print #1, 主页: & StrData(3) & If StrData(4) Then Print #1, 来自: & StrData(4) 以下循环查找留言内容中的回车符,将其替换为浏览器能够 识别的换行符 Do I = InStr(StrData(5), Chr(13) If I = 0 Then Exit Do UrlString = Mid(StrData(5), 1, I - 1) StrData(5) = UrlString + + Mid(StrData(5), I + 1) Loop Print #1, 内容: & StrData(5) & vbCrLf; 将留言簿中以前的留言内容写入临时文件 Do Line Input #2, TempString Print #1, TempString Loop While Not EOF(2) 关闭打开的文件并将临时文件更名 Close #1 Close #2 Kill Databook Name TempFileName As Databook 在客户端显示处理结果 Send Content-type:text/html & Ent Send 您的建议已成功提交 Send 注 Send 点这里查看结果 End Sub 该子程序用于处理向客户端返回的数据Sub Send(s As String)Dim lBytesWritten As Long s = s & Ent WriteFile hStdOut, s, LenB(StrConv(s, vbFromUnicode), lBytesWritten, ByVal 0&End Sub 本函数用于对用户输入的数据进行解码Public Function UrlDecode(ByVal sEncoded As String) As StringDim pointer As Long, pos As Long Dim temp As String If sEncoded = Then Exit Function pointer = 1 Do 该循环对系统保留字和汉字进行处理 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 /) 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 = sEncodedEnd Function 本函数用于对输入的“Name = Value”数据对进行分解Public Function FenGe(Cstring As String) As StringDim I As Integer, j As Integer, add As Integerj =
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 公司员工打卡考勤管理制度
- 2025年上海跨学科考试试题及答案
- 厂内车辆伤害事故应急演练方案(桌面推演)
- 《网络安全法》知识考试题库(含答案)
- 高级遗体防腐师培训课程大纲及教学计划
- 水资源管理初级工作手册从入门到精通的安排
- 中级平台管理培训课程反馈与改进
- 保险经纪人客户沟通与维护策略
- 材料工程师的工作安排与工作方法
- 个人财务规划与投资理财策略-个人理财
- FZ/T 01130-2016非织造布吸油性能的检测和评价
- 巴尔麦氏与现代养猪生产
- 设备设计模板2-用于合并
- 黑布林-Peter-Pan-中英双语阅读
- 新北师大版四年级上册数学第三单元测试卷(乘法)
- 智能家居软件用户手册
- 小学一年级数学上册期中考试试卷
- 谈农业机械化发展中存在的问题与解决对策
- 事业单位-绩效评价工作方案
- 色素上皮衍生因子(PEDF)
- 全日制用工劳动合同书
评论
0/150
提交评论