




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、用VB开发标准CGI程序三.CGI编程实例本节将用 VB 编写一个处理主页客户留言簿的 CGI 程序。除了本文前面所 介绍的 Win32API 函数,程序中还调用了 Win32API 函数 GetTempFileName() 以获得一个唯一的临时文件名。程序中的函数UrlDecode ()用来对客户端的输入进行URL译码,函数GetCgiValue ()则用来分解字符串,根据表单元素的 NAME属性获取其VALUE值,并调用UrlDecode ()函数对其进行URL译码。本程序要求在留言簿文件 guests.html中使用一个定位串“ ! ENDHEAD” 以将文件的开始部分和具体的客户留言部
2、分分开, CGI 程序将在“ ”所在的位置插入客户新的留言。guests.html应具有如下的形式:DHTMLZone这种形式将保证最后的留言出现在留言簿的最前面。如果要想使最后的留 言出现在留言簿的最后面, 只需将留言簿文件中的定位字符串 “” 移到留言簿文件中客户留言部分和 HTML 文件结尾部分之间的位置就行了。整 个程序的完整代码如下所示:guestbook.basDeclareFunctionGetStdHandleLibkernel32( ByValnStdHandleAsLong) AsLongDeclareFunctionReadFileLibkernel32( ByValhF
3、ileAsLong , lpBufferAsAny ,ByValnNumberOfBytesToReadAsLong, lpNumberOfBytesReadAsLong,lpOverlappedAsAny)AsLongDeclareFunctionWriteFileLibkernel32 ( ByValhFileAsLong ,_ ByVallpBufferAsString ,ByValnNumberOfBytesToWriteAsLong ,_ lpNumberOfBytesWrittenAsLong ,lpOverlappedAsAny)AsLong DeclareFunctionGet
4、TempFileNameLibkernel32AliasGetTempFileNameA_ ( ByVallpszPathAsString,ByVallpPrefixStringAsString ,_ ByValwUniqueAsLong ,ByVallpTempFileNameAsString)AsLong PublicConstSTD_INPUT_HANDLE=-10& PublicConstSTD_OUTPUT_HANDLE=-11&PublicConstFILE_BEGIN=0&PublichStdl nAsLo ng标准输入文件句柄PublichStdOutAsL on g标准输出文
5、件句柄PublicsFormDataAsString用于存储没有经过URL译码的用户输入数据PubliclContentLengthAsLongPublicCGl_RequestMethodAsStringSubMain()DimCGl_ContentLengthAsString,CGl_QueryStringAsString,sBuffAsString, chinesetailAsStringDimlBytesReadAsLong,rcAsLong,lAsLongDimsEmailAsString ,sNameAsString,sURLAsString,sfromAsString, temp
6、stringAsStringDimsCommentAsString,tempFileNameAsString,guestbookAsStringCGl 程序的初始化工作hStdln=GetStdHandle(STD_lNPUT_HANDLE ) hStdOut=GetStdHandle(STD_OUTPUT_HANDLE )CGl_RequestMethod=Environ(REQUEST_METHOD ) CGl_QueryString=Environ(QUERY_STRlNG ) CGl_ContentLength=Environ(CONTENT_LENGTH ) lContentLeng
7、th=Val(CGl_ContentLength)sBuff=String (lContentLength, Chr$( 0)OutPutContent-type: text/html&vbCrLf 输出 MIME 类型 OutPutIfCGI_RequestMethod=POSTThen sBuff=String (lContentLength, Chr$( 0) rc=ReadFile(hStdIn,ByValsBuff,lContentLength,lBytesRead,ByVal0& ) sFormData=Left$( sBuff ,lBytesRead)ElseIfCGI_Requ
8、estMethod=GETThen sFormData=CGI_QueryStringElseOutPutUnknowFormMethod !EndIfchinesetail=String(400, )为了在页面上正确显示中文生成一个空格串获 取客户端用户的输入sName=GetCgiValue(name) sEmail=GetCgiValue( email ) sURL=GetCgiValue(URL ) sfrom=GetCgiValue(from ) sComment=GetCgiValue( URL_Comment ) 对客户端用户的输入进行检查IfLen (sName)=0ThenO
9、utPut非常抱歉!您还没有填写姓名!&chi nesetailExitSubEndIfIfLen (sComment)=0ThenOutPut非常抱歉!您还没有提出建议!&chi nesetailExitSubEndIf获取唯一的临时文件名和留言簿文件并打开它们tempFileName=TempFile(c:windowstemp ,gbk ) guestbook=e: netscapeserverdocsguests.html OpentempFileNameForOutputAs#1OpenguestbookForInputAs#2Do本循环体用于将留言簿中字符串前面的内容写入临时 文件
10、LineInput#2 ,tempstringPrint#1,tempstringLoopWhiletempstringAndNotEOF (2) 向临时文件中插入客户端用户的留言Print#1,&vbCrLfPrint#1,&vbCrLfPrint#1, 留言时间 :&Date$&Time$&vbCrLfPrint#1, 姓名: &sName&vbCrLfIfLen (sEmail)0ThenPrint#1,E-mail :&sEmail&vbCrLfEndIfIfLen (sURL ) 0ThenPrint#1, 我的主页:&sURL&vbCrLfEndIfIfLen ( sfrom) 0
11、ThenPrint#1, 我来自: &sfrom&vbCrLfEndIfPrint#1, 我的建议: &vbCrLfPrint#1,sComment&vbCrLfPrint#1,&vbCrLfDo本循环体用于将留言簿剩余的东西写入留言簿LineInput#2 ,tempstringPrint#1,tempstringLoopWhileNotEOF (2)Close#1Close#2Killguestbook删除旧的留言簿NametempFileNameAsguestbool将临时文件改成新的留言簿OutPut非常感谢您的留言!&chi nesetailOutPut欢迎您经常光顾本主页!&chi
12、 nesetailOutPutEndSubSubOutPut(sAsString) 本子程序用于向标准输出写信息DimlBytesWrittenAsLongs=s&vbCrLfWriteFilehStdOut,s,Len(s), lBytesWritten,ByVal0&EndSubPublicFunctionGetCgiValue(cgiNameAsString)AsString本子程序可以获取表单上某一元素的数据Dimdelim2AsLongpositionof=Dimdelim1AsLongpositionof&DimnAsIntegerDimpointer1AsLong ,pointe
13、r2AsLong,lengthAsLong,length1AsLongDimtmpstring1AsString ,tmpstring2AsStringpointer1=1pointer2=1delim2=InStr( pointer2,sFormData,= )pointer2=delim2+1Dolength=delim2-pointer1tmpstring1=Mid (sFormData,pointer1,length)delim1=InStr( pointer1,sFormData,& ) pointer1=delim1+1length1=delim1-pointer2Ifdelim1
14、=0Thenlength1=lContentLength+1-pointer2Iftmpstring1=cgiNameThentmpstring2=Mid$ ( sFormData,pointer2, length1)GetCgiValue=UrlDecode( tmpstring2)ExitDoEndIfIfdelim1=0ThenExitDoEndIfdelim2=InStr( pointer2,sFormData,= )pointer2=delim2+1LoopEndFunctionPublicFunctionUrlDecode(ByValsEncodedAsString) AsStri
15、ng 本函数可以对用户输入的数据进行 URL 解码DimpointerAsLongsEncodedpositionpointerDimposAsLongpositionofInStrtargetDimtempAsStringIfsEncoded=ThenExitFunctionpointer=1Do本循环体用于将“ +”转换成空格pos=InStr(pointer,sEncoded,+)Ifpos=0ThenExitDoMid$ (sEncoded,pos,1)=pointer=pos+1Looppointer=1Do本循环体用于将XX转换成字符。对于两个连续的XX,如果第一 个%XX不是某些
16、特指的 WEB 系统保留字符,将把它们转换成汉字 pos=InStr(pointer, sEncoded, % )Ifpos=0ThenExitDotemp=Chr$( &H& (Mid$ (sEncoded, pos+1, 2)IfMid ( sEncoded, pos+3, 1)=%And (temp:)And(temp/ )_ And(temp()And(temp)And(temp.)And(temp, )_And(temp;)And(temp%)ThenMid$(sEncoded, pos, 2)=Chr$(&H& (Mid$ (sEncoded, pos+1, 2)& ( Mid$
17、( sEncoded, pos+4, 2) sEncoded=Left$(sEncoded, pos) &Mid$ (sEncoded, pos+6) pointer=pos+1ElseMid$ (sEncoded, pos, 1)=temp sEncoded=Left$(sEncoded, pos) &Mid$ (sEncoded, pos+3) pointer=pos+1EndIfLoopUrlDecode=sEncoded ExitFunctionEndFunctionPublicFunctionTempFile( sPathAsString, sPrefixAsString)AsString 本函数可以获得一个唯一的临时文
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年电动客车融资租赁行业当前发展现状及增长策略研究报告
- 2025年应用软件行业当前发展趋势与投资机遇洞察报告
- 2024年基金从业资格基金法律法规、职业道德与业务规范综合知识考试题库(附含答案与解析)
- 2025年(美甲师护理、修饰等)服务技能资格基础知识考试题与答案
- 2025年社区工作者招聘考试题库及答案解析
- 2024年高级焊工技能及安全知识考试题(附含答案)
- (2025)公务员结构化面试万能模板
- 2025年安徽省淮南市考研专业综合预测试题含答案
- 2025至2030年中国银杏叶茶行业投资分析及发展战略研究咨询报告
- 摄影灯箱基础知识培训课件
- 中科曙光公司在线测评题
- 2024年高中语文议论文思维方法解析19:归谬
- 胸腔闭式引流护理TCNAS25-2023
- ECMO操作规范与流程
- (正式版)HG∕T 20644-2024 弹簧支吊架选用标准
- 人教版小学英语单词表(完整版)
- 2023年临沧市市级单位遴选(选调)考试真题
- 《口腔基础医学概要》课件-第二章2乳牙形态与应用
- 国网农电工考试题库(精华版)
- 康复诊疗指南与规范
- 北京客运从业资格证考试
评论
0/150
提交评论