小妖女 发表于 2015-1-16 22:13:00

ASP网页编程之ASP教程:制造WAP留言本

实现规模效益。与传统的用户拥有硬件软件所有权和使用权以及传统的应用服务商提供一对一的服务模式不同,ASP拥有应用系统所有权,用户拥有使用权,应用系统集中放在ASP的数据中心中,集中管理,分散使用,以一对多的租赁的形式为众多用户提供有品质保证的应用技术服务,实现规模效益。教程【测试地点】:http://wap.blueidea.com/tutorial/wapguestbook/
背景办理地点:http://wap.blueidea.com/tutorial/wapguestbook/admin.asp

请人人测试的时分不要输出不法和革命信息,不然我就只要删失落测试文件了,感谢人人的共同。

测试工具:WAP摹拟器(如Opera,M3GATE,等),撑持WAP的手机。

一向以来都有伴侣在WAP的中文变量传送下面碰到成绩,这里给出复杂的WAP留言本的制造历程,也办理了WAP的中文传送成绩。

WAP网站也和传统网站相似,一样是PC电脑来举行背景的办理。只是分歧的是一个是用手机扫瞄,一个是用电脑扫瞄。前台显现页面用手机扫瞄,背景办理页面用IE扫瞄器举行检察,办理就能够了。

假如你已能写复杂的留言本程序,那末制造WAP留言本已很复杂的事变了,只是把HTML换成WML这么复杂,至于WML的语法,看看教程就会了,比HTML还复杂,详细教程google一下。

一些WAP教程。
www.itsalon.net/wap/
www.wapease.com/class/tip2/
tech.sina.com.cn/wap/school/index.shtml
其他就本人找找吧。

留言本的程序包含:发贴,保留,显现,编纂,复兴,删除。

全部的背景办理+前台显现,也就这几个功效。

注重:以下代码,假如你是利用EditPlus编写的,请在保留的时分选择,另存为“UTF-8”编码。假如不这么做,你就会碰到WML中传送中文变量,呈现乱码的成绩了。






以ASP为例。那我们就先从发贴页面做起,add.asp

指定ASP页面所用的剧本和编码,CODEPAGE="65001"这个必定不克不及少,是暗示UTF-8编码,GB2312是CODEPAGE="936"。
%@LANGUAGE="VBSCRIPT"CODEPAGE="65001"%
先申明WML的头文件信息,如许即便你用的是假造的空间,也不必在IIS大概是Apache内里映照MIME文件范例。
<%Response.ContentType="text/vnd.wap.wml;charset=UTF-8"%>
申明WML的头文件信息,这个是划定,划定了WAP的版本和接纳的尺度,假如不分明就这么写就好了,稳定的,可是必需要加上。个中encoding也是指定编码。
<?xmlversion="1.0"encoding="UTF-8"?>
<!DOCTYPEwmlPUBLIC"-//WAPFORUM//DTDWML1.1//EN""http://www.wapforum.org/DTD/wml_1.1.xml">
接上去就是页面的显现代码了
<cardid="add"title="典范WAP留言本">
<p>
昵称:<br/>
<inputname="Name"emptyok="false"size="10"maxlength="10"/><br/>
题目:<br/>
<inputname="Title"emptyok="false"maxlength="40"/><br/>
内容:<br/>
<inputname="Content"format="false"maxlength="150"/><br/>
</p>
</card>
复杂先容一下:wml相似html标签,card代表一个卡片,这里复杂了解为一个页面就好了,注重:一切的显现的内容都要放在<p></p>标签内里,必定要注重这点,要否则就会堕落。
<metahttp-equiv="Cache-Control"content="max-age=0"/>
<metahttp-equiv="Cache-Control"content="no-cache"/>
在meta中指定不缓存页面。
<inputname="Title"emptyok="false"maxlength="40"/><br/>
emptyok不同意为空,maxlength同意输出的笔墨最年夜长度。
WML的表单提交有点分歧,<postfilename="title"value="($title:n)"/>是把input表单的值附给title变量,name="title"是变量名,value="($title:n)"是变量,即input中输出的信息,content也是一样。
注:这里($title:n)是WML变量的写法,以$标记开首,相似PHP的变量申明,WML中表单提交有:n,:e,:u,和空,四种形态,个中:n是强迫不举行URL本义;:e是本义;:u是反本义;假如为空,在有的手机上默许是不本义,有的是本义,标准不一致,平安时代,假如不本义,仍是写上:n为好。
WAP的变量提交也分两种情形,GET和POST,利用GET办法,对中文的撑持并非很好,以是有利用到表单提交的中央,都改成POST体例提交,代码格局为:

<anchor>POST体例提交
<gohref="save.asp"method="post">
<postfieldname="Name"value="$(Name:n)"/>
<postfieldname="Title"value="$(Title:n)"/>
<postfieldname="Content"value="$(Content:n)"/>
<postfieldname="Method"value="POST"/>
</go>
</anchor>
固然关于英文和数字,复杂的,利用GET体例提交会对照便利一些,代码格局为:
<Palign=left>
<ahref="save.asp?Name=$(Name:n)&Title=$(Title:n)&Content=$(Content:n)&Method=GET">GET体例提交</a>

注:毗连分歧变量字符的&标记要写为&
宣布留言页面add.asp的代码以下:
<%@LANGUAGE="VBSCRIPT"CODEPAGE="65001"%>
<%Response.ContentType="text/vnd.wap.wml;charset=UTF-8"%>
<?xmlversion="1.0"encoding="UTF-8"?><!DOCTYPEwmlPUBLIC"-//WAPFORUM//DTDWML1.1//EN""http://www.wapforum.org/DTD/wml_1.1.xml">
<wml>
<head>
<metahttp-equiv="Cache-Control"content="max-age=0"/>
<metahttp-equiv="Cache-Control"content="no-cache"/>
</head>
<cardid="add"title="典范WAP留言本">
<p>
昵称:<br/>
<inputname="Name"emptyok="false"size="10"maxlength="10"/><br/>
题目:<br/>
<inputname="Title"emptyok="false"maxlength="40"/><br/>
内容:<br/>
<inputname="Content"format="false"maxlength="150"/><br/>
<br/><anchor>POST体例提交
<gohref="save.asp"method="post">
<postfieldname="Name"value="$(Name:n)"/>
<postfieldname="Title"value="$(Title:n)"/>
<postfieldname="Content"value="$(Content:n)"/>
<postfieldname="Method"value="POST"/>
</go>
</anchor>
<br/><ahref="save.asp?Name=$(Name:n)&Title=$(Title:n)&Content=$(Content:n)&Method=GET">GET体例提交</a><br/><br/>
<ahref="index.asp">前往留言列表</a>
</p>
<p>
有任何疑问,请会见:http://www.designer5.net或<br/>
蓝色幻想论坛WAP版:http://www.blueidea.com/bbs

告白:蓝色幻想WAP网站改版了,利用手机会见http://wap.blueidea.com
http://wap.blueidea.com">http://wap.blueidea.com</a><br/>
假如您参考了此程序,有WAP站点,请做上http://wap.blueidea.com的链接。
</p>
<dotype="prev"label="前往"><prev/></do>
</card>
</wml>
接上去是保留数据。
保留页面save.asp,代码以下:
<%@LANGUAGE="VBSCRIPT"CODEPAGE="65001"%>
<!--#includefile="conn.asp"-->
<%
FunctioninWML(str)
把字符串存进数据库,单引号过滤,==Chr(39)
sTemp=Replace(str,Chr(39),"")单引号过滤
inWML=sTemp
EndFunction
IFRequest("Method")""Then
Name=inWML(Trim(Request("Name")))
Title=inWML(Trim(Request("Title")))
Content=inWML(Trim(Request("Content")))
Method=Request("Method")
Sql="INSERTINTOguestbook(Name,Title,Content,Method)values("&Name&","&Title&","&Content&","&Method&")"
Conn.ExecuteSql
EndIF
Response.Redirect("index.asp")
%>
最初是显现把留言的内容显现出来。

显现数据的时分必要注重字符的交换,由于有些字符是不克不及间接显现的,必要转换为Ascii码,在WML内里“$”标记是暗示变量,假如要显现“$”,必要写为“$$”,例:“一共有$$315元RMB”,显现为“一共有$315元RMB”。
必需要交换的字符,已写为函数,便利人人利用。
FunctionoutHTM(str)
把字符串举行HTM解码,输入字符串
DimsTemp
sTemp=str
outHTM=""
IfIsNull(sTemp)Then
ExitFunction
EndIf
sTemp=Replace(sTemp,"","")复原单引号
sTemp=Replace(sTemp,"&","&")
sTemp=Replace(sTemp,"<","<")
sTemp=Replace(sTemp,">",">")
sTemp=Replace(sTemp,"$","$$")
sTemp=Replace(sTemp,"","")
sTemp=Replace(sTemp,Chr(10),"<br/>")
outHTM=sTemp
EndFunction
显现留言的页面index.asp,代码以下:
<%@LANGUAGE="VBSCRIPT"CODEPAGE="65001"%>
<!--#includefile="conn.asp"-->
<%
FunctionoutHTM(str)
把字符串举行HTM解码,输入字符串
DimsTemp
sTemp=str
outHTM=""
IfIsNull(sTemp)Then
ExitFunction
EndIf
sTemp=Replace(sTemp,"","")复原单引号
sTemp=Replace(sTemp,"&","&")
sTemp=Replace(sTemp,"<","<")
sTemp=Replace(sTemp,">",">")
sTemp=Replace(sTemp,"$","$$")
sTemp=Replace(sTemp,"","")
sTemp=Replace(sTemp,Chr(10),"<br/>")
outHTM=sTempEndFunction
Sql="SELECT*FROMguestbookORDERBYIDDESC"
SetRs=Server.CreateObject("Adodb.Recordset")
Rs.OpenSql,conn,1,3
page=Request.QueryString("Page")
Rs.PageSize=6一页6笔记录
IFNotIsEmpty(Page)Then
IFNotIsNumeric(Page)Then判别Page是不是为数字
Page=1
Else
Page=Cint(Page)转换成短整形Integer
EndIF
IFPage>Rs.PageCountThen
Rs.AbsolutePage=Rs.PageCount设置以后显现页即是最初一页
ElseIFPage<=0Then
Rs.AbsolutePage=1设置以后页即是第一页
Else
Rs.AbsolutePage=Page假如年夜于零,显现以后页即是吸收的页数
EndIF
Else
Rs.AbsolutePage=1
EndIF
Page=Rs.AbsolutePage
%>
<%Response.ContentType="text/vnd.wap.wml;charset=UTF-8"%>
<?xmlversion="1.0"encoding="utf-8"?><!DOCTYPEwmlPUBLIC"-//WAPFORUM//DTDWML1.1//EN""http://www.wapforum.org/DTD/wml_1.1.xml">
<wml>
<head>
<metahttp-equiv="Cache-Control"content="max-age=0"/>
<metahttp-equiv="Cache-Control"content="no-cache"/>
</head>
<cardid="add"title="典范WAP留言本">
<p>
<ahref="add.asp">宣布新贴</a><br/>
<%
Fori=1toRs.PageSize
IfRs.EofThen
Response.Write"没有留言了!<br/>"
ExitFor
EndIf
%>
(<%=Rs("ID")%>)<%=outHTM(Rs("Title"))%><br/>
内容:<%=outHTM(Rs("Content"))%><br/>
留言者:<%=outHTM(Rs("Name"))%><br/>
工夫:<%=outHTM(Rs("CreatTime"))%><br/>
复兴:<%
ifRs("Reply")""then
Response.WriteoutHTM(Rs("Reply"))
else
Response.Write"“暂无复兴”"
endif
%><br/>
------<br/>
<%
Rs.MoveNext
Next
ifpage>=Rs.PageCountthen
Response.Write("[下一页]")
else
Response.Write("[<ahref=index.asp?Page="&(Page+1)&">下一页</a>]")
endif
ifpage<=1then
Response.Write("[上一页]")
else
Response.Write("[<ahref=index.asp?Page="&(Page-1)&">上一页</a>]")
endif
%>
<br/><ahref="add.asp">宣布新贴</a>
</p>
<p>
有任何疑问,请会见:http://www.designer5.net或<br/>
蓝色幻想论坛WAP版:http://www.blueidea.com/bbs<br/>
告白:蓝色幻想WAP网站改版了,<ahref="http://wap.blueidea.com
http://wap.blueidea.com">http://wap.blueidea.com</a><br/>
假如您有WAP站点,并参考了此程序,请做上http://wap.blueidea.com的毗连
</p>
</card>
</wml>
背景办理页面admin.asp,代码以下:
<%@LANGUAGE="VBSCRIPT"CODEPAGE="65001"%>
<!--#includefile="conn.asp"-->
<%
FunctioninWML(str)
把字符串存进数据库,单引号过滤
sTemp=Replace(str,Chr(39),"")单引号过滤
inWML=sTemp
EndFunction
IF(Request.Form("Flag")="ReplySave")Then
Id=Request.Form("Id")
Name=inWml(Request.Form("Name"))
Title=inWml(Request.Form("Title"))
Content=inWml(Request.Form("Content"))
Reply=inWml(Request.Form("Reply"))
可修正用户留言,是为了不用户输出不法信息
Sql="UPDATEGuestBookSETName="&Name&","
Sql=Sql+"Title="&Title&","
Sql=Sql+"Content="&Content&","
Sql=Sql+"Reply="&Reply&""
Sql=Sql+"WHEREId="&Id
Conn.ExeCuteSql
Conn.Close
SetConn=Nothing
Response.Redirect("admin.asp")
EndIF
IF(Request.QueryString("Action")="Del")Then
Sql="DELETEFROMGuestBookWHEREId="&Request.QueryString("Id")
Conn.ExecuteSql
Conn.Close
SetConn=Nothing
Response.Redirect("admin.asp")
EndIF
%>
<%
SetRs=Server.CreateObject("adodb.Recordset")
Sql="SELECT*FROMGuestBookORDERBYIdDesc"
Rs.openSql,conn,3,3
Page=Request.QueryString("Page")
Rs.PageSize=10一页6笔记录
IFNotIsEmpty(Page)Then
IFNotIsNumeric(Page)Then判别Page是不是为数字
Page=1
Else
Page=Cint(Page)转换成短整形Integer
EndIF
IFPage>Rs.PageCountThen
Rs.AbsolutePage=Rs.PageCount设置以后显现页即是最初一页
ElseIFPage<=0Then
Rs.AbsolutePage=1设置以后页即是第一页
Else
Rs.AbsolutePage=Page假如年夜于零,显现以后页即是吸收的页数
EndIF
Else
Rs.AbsolutePage=1
EndIF
Page=Rs.AbsolutePage
%>
<!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01Transitional//EN">
<html>
<head>
<metahttp-equiv="Content-Type"content="text/html;charset=utf-8">
<title>典范WAP留言本</title>
<styletype="text/css">
body,td{font-size:12px;}
p{line-height:22px;}
</style>
<scriptlanguage="javascript"type="text/javascript"charset="utf-8">
<!--
functioncheck_form1()
{
if(document.form1.Reply.value==""){
alert("请填写复兴内容!");
document.form1.Reply.focus();
}
else{returntrue;}
returnfalse;
}
-->
</script>
</head>
<body>
<tablewidth="600"border="0"align="center"cellpadding="1"cellspacing="1"bgcolor="#2D96FF">
<tralign="center"bgcolor="#D0E8FF">
<tdheight="70"colspan="8"><p><strong>典范WAP留言本</strong></p>
<p><strong>制造:</strong><strong><ahref="http://www.designer5.net"target="_blank">D5S事情室</a>yytcpt</strong></p>
</td>
</tr>
<tralign="center"bgcolor="#9BCDFF">
<tdheight="25"><strong>ID</strong></td>
<td><strong>留言者</strong></td>
<td><strong>题目</strong></td>
<td><strong>留言内容</strong></td>
<td><strong>提交体例</strong></td>
<td><strong>留言工夫</strong></td>
<tdwidth="34"><strong>复兴</strong></td>
<td><strong>删除</strong></td>
</tr>
<%
Fori=1toRs.PageSize
IfRs.EofThen
ExitFor
EndIf
%>
<trbgcolor="#C8E3FF">
<tdwidth="19"height="25"align="center"><%=Rs("Id")%></td>
<tdwidth="48"align="center"><%=Rs("Name")%></td>
<tdwidth="53"align="center"><%=Rs("Title")%></td>
<tdwidth="247"align="left"><%=Rs("Content")%></td>
<tdwidth="53"align="center"><%=Rs("Method")%></td>
<tdwidth="76"align="center"><%=Rs("CreatTime")%></td>
<tdalign="center"><ahref="admin.asp?Action=Reply&Id=<%=Rs("Id")%>">复兴</a></td>
<tdwidth="45"align="center"><ahref="javascript:if(confirm(的确要删除吗?))location=admin.asp?Action=Del&Id=<%=Rs("Id")%>">删除</a></td>
</tr>
<%
Rs.MoveNext
Next
%>
<tralign="center"bgcolor="#9BCDFF">
<tdheight="25"colspan="8">
<%
Response.Write("<formname=pagemethod=getdocument.location=admin.asp?Page=+this.page.value;returnfalse;"">")
ifpage<=1then
Response.Write("[首页][上一页]")
else
Response.Write("[<ahref=admin.asp?Page=1>首页</a>]")
Response.Write("[<ahref=admin.asp?Page="&(Page-1)&">上一页</a>]")
endif
ifpage>=Rs.PageCountthen
Response.Write("[下一页][尾页]")
else
Response.Write("[<ahref=admin.asp?Page="&(Page+1)&">下一页</a>]")
Response.Write("[<ahref=admin.asp?Page="&Rs.PageCount&">尾页</a>]")
endif
Response.Write("[页次:<fontcolor=red>"&page&"</font>/"&Rs.PageCount)
Response.Write("][共"&Rs.RecordCount&"条<fontcolor=red>"&Rs.PageSize&"</font>条/页]")
Response.Write("转到"&"<inputname=pagesize=4value="&page&">"&"页<inputtype=submitvalue=go></form>")
%>
</td>
</tr>
<tralign="center">
<tdheight="30"colspan="8"bgcolor="#C8E3FF"><p>有任何疑问,请会见<ahref="http://www.designer5.nethttp://www.designer5.net"><strong>http://www.designer5.net</strong></a>或<strong><ahref="http://www.blueidea.com/bbs"target="_blank"></a></strong><ahref="http://www.blueidea.com/bbs"target="_blank"><strong></strong></a><strong><ahref=http://www.blueidea.com/bbstarget="_blank">蓝色幻想论坛WAP版块</a></strong><br/>
<strong>告白:</strong>蓝色幻想WAP网站改版了,请利用手机会见<ahref="http://wap.blueidea.com
http://wap.blueidea.com"><strong>http://wap.blueidea.com</strong></a><br/>
假如您有WAP站点,并参考了此程序,请做上http://wap.blueidea.com的毗连</p></td>
</tr>
</table>
<p></p>
<%
IF(Request.QueryString("Action")="Reply")Then
SetRs=Server.CreateObject("adodb.Recordset")
Sql="SELECT*FROMGuestBookWHEREId="&Request.QueryString("Id")
Rs.openSql,conn,3,3
%>
<tablewidth="333"border="0"align="center"cellpadding="0"cellspacing="0"bgcolor="#C8E3FF">
<formname="form1"method="post"action="admin.asp">
<tr>
<tdwidth="69"><strong>ID</strong></td>
<tdwidth="264"><%=Rs("Id")%></td>
</tr>
<tr>
<td><strong>留言者</strong></td>
<td>
<inputname="Name"type="text"value="<%=Rs("Name")%>"size="20">
</td>
</tr>
<tr>
<td><strong>题目</strong></td>
<td><inputname="Title"type="text"value="<%=Rs("Title")%>"size="20"></td>
</tr>
<tr>
<td><strong>留言工夫</strong></td>
<td><%=Rs("CreatTime")%></td>
</tr>
<tr>
<td><strong>留言内容</strong></td>
<td><textareaname="Content"cols="30"rows="4"><%=Rs("Content")%></textarea></td>
</tr>
<tr>
<td><strong>本站复兴</strong></td>
<td><textareaname="Reply"cols="30"rows="4"><%=Rs("Reply")%></textarea></td>
</tr>
<tralign="center">
<tdcolspan="2"><inputtype="submit"name="Submit"value="提交">

<inputtype="reset"name="Submit"value="重置">
<inputname="Id"type="hidden"value="<%=Rs("Id")%>">
<inputname="Flag"type="hidden"value="ReplySave">
</td>
</tr>
</form>
</table>
<%EndIF%>
</body>
</html>
<%
Rs.Close
SetRs=Nothing
%>
毗连数据库conn.asp,代码以下:
<%
DimConn,StrSQL
StrSQL="provider=microsoft.jet.oledb.4.0;"&"datasource="&server.mappath("d5s.mdb")
setConn=Server.Createobject("Adodb.Connection")
Conn.openStrSQL
%>
源码下载地点:点击下载

其他申明:有任何疑问,请会见:http://www.designer5.net或
蓝色幻想论坛WAP版:http://www.blueidea.com/bbs
告白:蓝色幻想WAP网站改版了,利用手机会见http://wap.blueidea.com
假如您参考了此程序,有WAP站点,请做上http://wap.blueidea.com的链接。
问题是他们究竟是喜欢他们是使用软件时,速度快还是速度慢好.(当然在3秒以内).无论是他们输入资料时,查找资料时,分析资料时.

谁可相欹 发表于 2015-1-18 08:55:17

他的语法和设计思路和VB完全相同,导致很多ASP的书都留一句“相关内容请参考VB的相关教材....”更糟糕的是,相当多的ASP教程混合了Javascript,VBscript等等脚本语言,搞的初学者。

莫相离 发表于 2015-1-21 17:00:36

完全不知道到底自己学的是什么。最后,除了教程里面说的几个例子,还是什么都不会。

透明 发表于 2015-1-30 21:27:15

下载一个源代码,然后再下载一个VBScript帮助,在源代码中遇到不认识的函数或是其他什么程序,都可以查帮助进行解决,这样学习效率很高。

飘飘悠悠 发表于 2015-2-6 16:02:33

你可以通过继承已有的对象最大限度保护你以前的投资。并且C#和C++、Java一样提供了完善的调试/纠错体系。

admin 发表于 2015-2-17 00:13:30

哪些内置对象是可以跳过的,或者哪些属性和方法是用不到的?

仓酷云 发表于 2015-3-5 14:46:26

哪些内置对象是可以跳过的,或者哪些属性和方法是用不到的?

柔情似水 发表于 2015-3-19 19:10:19

他的语法和设计思路和VB完全相同,导致很多ASP的书都留一句“相关内容请参考VB的相关教材....”更糟糕的是,相当多的ASP教程混合了Javascript,VBscript等等脚本语言,搞的初学者。
页: [1]
查看完整版本: ASP网页编程之ASP教程:制造WAP留言本