只看楼主 楼主

[转帖]【第六课】用ASP开发WAP新闻系统--增加新闻的回复功能

【第六课】用ASP开发WAP新闻系统--增加新闻的回复功能

这一课,我们将通过增加新闻的回复功能了解WML表单的使用,深入了解WAP站点表单数据传输过程中应该注意的一些问题。

首先,打开NewsShow.asp文件,并在if pagecount>2 then response.write "<br/><input name=""page"" format=""*N"" value="""&page&""" type=""text"" maxlength=""5""/><br/><a href="""&gopage&"page=$(page)"">[跳转到该页]</a>" 和 Else 之间加入以下代码:


Response.Write("<br/>=*=*=*=*=*=<br/>")
 Response.Write ("快速回复:<br/>"&_
     "<input name=""content"&ID&""" emptyok=""true"" type=""text""/><br/>"&_
     "<anchor>马上回复"&_
     "<go href=""SaveReply.asp"" method=""post"">"&_
     "<postfield name=""ID"" value="""&ID&""" />"&_
     "<postfield name=""content"" value=""$(content"&ID&":n)"" />"&_
     "<postfield name=""Method"" value=""POST"" />"&_
     "</go>"&_
     "</anchor>")

     
代码解释:
这是WML用POST方式传输表单数据的代码。当然,输入框input可以有多个,并在<anchor></anchor>之间相应添加postfield就可以了,名字要一一对应!
emptyok=""true"" 是指该输入框可以为空,在一般情况下,建议加上这一句,否则有些手机在点别的链接的时候,总会提示出错。
(content"&ID&":n)加上"&ID&"是为了避免手机缓存致使每条新闻的回复框都出现之前输入的回复内容,你当然也可以将其改成($content:n)
($content:n)是WML变量的写法,以$符号开头,WML中表单提交有:n,:e,:u,和空,四种状态,其中:n是强制不进行URL转义;:e是转义;:u是反转义。

传输中文数据的时候,一定要用POST方式。如果你只传输英文或者数字,可以使用GET方式进行传输。格式如下:
<a href="SaveReply.asp?ID="& ID &"&amp;content=$(content"&ID&")&amp;Method=GET">马上回复</a>

在这里 $(content"&ID&") 里的:n和&amp;Method=GET"可以省略掉。但是,&amp;绝对不可以写成&,否则页面执行时将出错!


清楚上面的代码之后,我们来运行调试一下!打开Opera,输入网址:http://localhost/NewsShow.asp?ID=2 可以看到,多了一个如图6-1所示的快速回复框!
http://www.wapforum.cn/download/newsSystem/images/6_1.gif
现在,我们来制作保存页面。新建一个文本文件,将文件名重命名为:SaveReply.asp,打开文件,将文件的编码保存为UTF-8,复制以下代码:

<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%>
<!--#include file="inc/config.asp"-->
<%
Response.ContentType="text/vnd.wap.wml;charset=UTF-8" '将文件的格式转换成wml,编码为UTF-8
%>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml">
<wml>
<head>
<meta http-equiv="Cache-Control" content="max-age=0"/><!-- 每次都需通过连接服务器调用本页内容 -->
<meta http-equiv="Cache-Control" content="no-cache"/><!-- 禁止浏览器从缓存中访问页面内容 -->
</head>
<card id="SaveReply" title="保存回复">

<%
Dim ID,content
ID=int(Request.Form("ID"))
%>
<onevent type="ontimer"><go href="NewsShow.asp?ID=<%=ID%>" method="get"></go></onevent><timer value="30"/>
<p align="left"><!-- 页面居左对齐 -->
<%
If ID=0 Then
 Response.Write ("参数传输出错!<br/>=*=*=*=*=*=<br/>")
 Response.Write ("<anchor title=""返回上一页"">返回上一页<prev/></anchor><br/>") '这是WML中的goback代码,相当于Javascript中的history.goback
 Response.Write ("<a href=""index.asp"">返回网站首页</a><br/>"&_
     "</p></card></wml>")
 Response.End '在这里结束代码的执行,避免下面的代码的相关操作会影响程序的执行效果
End IF

content=Replace(Request.Form("content"),Chr(39), "&#39;")  '获取content的内容,并讲单引号进行转换

If content="" Then
 Response.Write ("内容不能为空!<br/>=*=*=*=*=*=<br/>")
 Response.Write ("<anchor title=""返回上一页"">返回上一页<prev/></anchor><br/>") 
 Response.Write ("<a href=""NewsShow.asp?ID="& ID &""">返回新闻内容</a><br/>"&_
     "<a href=""index.asp"">返回网站首页</a><br/>"&_
     "</p></card></wml>")
 Response.End 
End If


Call openConn() '打开数据库
Conn.Execute("Insert Into [NewsComment] (newsID,content) values("& ID &",'"& content &"')")
Call ConnClose()
Response.Write ("回复成功!<br/>=*=*=*=*=*=<br/>")
Response.Write ("<anchor title=""返回上一页"">返回上一页<prev/></anchor><br/>") 
Response.Write ("<a href=""NewsShow.asp?ID="& ID &""">返回新闻内容</a><br/>"&_
    "<a href=""index.asp"">返回网站首页</a><br/>"&_
    "</p></card></wml>")

%>

上面这段代码都比较简单,我就不多加解释了,需要强调一点就是,每一个出错的提示,都必须有</p></card></wml>结尾,因为WML对代码完整性要求非常严格,另外,在每次提示出错时,要加上Response.End,否则,当有两个出错条件符合的时候,程序将会执行两个输出错误,进而让页面显示出错!


接下来,返回刚才打开的页面,http://localhost/NewsShow.asp?ID=2,在快速回复输入框中输入一些内容,进行调试!


最后,就是回复的显示跟回复列表文件了。
先打开NewsShow.asp文件,在快速回复上面,即Response.Write("<br/>=*=*=*=*=*=<br/>"),插入以下代码:

'//读取最后一条回复
 Dim rsReply
 Set rsReply=conn.execute("Select top 1 content from [NewsComment] where newsID="& ID &" order by ID desc")
 If Not rsReply.eof Then
  Response.Write("<br/>=*=*=*=*=*=<br/>")
  Response.Write ("最新回复:<br/>"&_
      replaceStr(rsReply(0))&"<br/>"&_
      "<a href=""ReplyList.asp?ID="& ID &""">阅读所有回复</a>")
 End If
 rsReply.close()
 set rsReply=nothing

这段代码主要是读取回复表里关于这条新闻的最后一条回复。相信大家都对这段代码的意思非常清楚了,这里就不多罗索!
保存文件之后,回到刚才的调试页面,刷新页面看一看,嘿嘿,刚刚回复的内容就显示出来了!请看图6-2的效果。
http://www.wapforum.cn/download/newsSystem/images/6_2.gif

点击图片放大
 

新闻回复列表文件的完成:
同样是新建立一个文本文件,将文件名修改为ReplyList.asp,保存文件编码为UTF-8。复制以下代码:

<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%>
<!--#include file="inc/config.asp"-->
<%
Response.ContentType="text/vnd.wap.wml;charset=UTF-8" '将文件的格式转换成wml,编码为UTF-8
%>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml">
<wml>
<head>
<meta http-equiv="Cache-Control" content="max-age=0"/><!-- 每次都需通过连接服务器调用本页内容 -->
<meta http-equiv="Cache-Control" content="no-cache"/><!-- 禁止浏览器从缓存中访问页面内容 -->
</head>
<card id="ReplyList" title="阅读回复">
<p align="left"><!-- 页面居左对齐 -->
阅读所有回复
<br/>=*=*=*=*=*=<br/>
<%
Dim ID,rs
ID=int(request.QueryString("ID"))

Call openConn() '打开数据库
Set rs=conn.execute("Select content From [NewsComment] where newsID="& ID &"") '读取新闻回复表
If Not rs.eof Then
 Dim PageSize,i
 PageSize=10        '每一页显示的条数
 Dim Count,page,pagecount,gopage   '定义相关变量
 gopage="ReplyList.asp?ID="&ID&"&amp;"
 Count=conn.execute("Select count(ID) from [NewsComment] where newsID="& ID &"")(0) '读取回复总数
 page=int(request.QueryString ("page"))
 if page<=0 or page="" then page=1  '默认为第一页
 pagecount=(count+pagesize-1)\pagesize '计算出页数
 rs.move(pagesize*(page-1))    '将游标指到每一页的第一条记录  
 For i=1 To PageSize      '根据每一页的条数进行循环
 If rs.eof Then Exit For    '如果循环到了尽头,则跳出循环
  Response.Write (i+(PageSize*(page-1))&"."&replaceStr(rs(0))&_
      "<br/>-=-=-=-=-=-<br/>")
 rs.moveNext        
 Next
 response.write ("共:"&count&"条,"&page&"/"&pagecount&"页")
 if page-pagecount<0 then response.write "<br/><a href="""&gopage&"page="&page+1&""">下页-</a><a href="""&gopage&"page="&pagecount&""">尾页</a>"
 if page>1 then response.write "<br/><a href="""&gopage&"page="&page-1&""">上页-</a><a href="""&gopage&"page=1"">首页</a>"
 '//下面这一句,是让用户通过输入框输入页数,然后通过链接直接转向该页
 if pagecount>1 then response.write "<br/><input name=""page"" format=""*N"" value="""&page&""" type=""text"" maxlength=""5"" emptyok=""true""/><br/><a href="""&gopage&"page=$(page)"">[跳转到该页]</a>"
Else
 Response.Write ("暂无回复内容!")
End If
Call rsClose()
Call ConnClose()

Response.Write ("<br/>=*=*=*=*=*=<br/>")
Response.Write ("快速回复:<br/>"&_
     "<input name=""content"&ID&""" emptyok=""true"" type=""text""/><br/>"&_
     "<anchor>马上回复"&_
     "<go href=""SaveReply.asp"" method=""post"">"&_
     "<postfield name=""ID"" value="""&ID&""" />"&_
     "<postfield name=""content"" value=""$(content"&ID&":n)"" />"&_
     "<postfield name=""Method"" value=""POST"" />"&_
     "</go>"&_
     "</anchor>")
%>
<br/>=*=*=*=*=*=<br/>
<a href="NewsShow.asp?ID=<%=ID%>">返回新闻内容</a><br/>
<a href="index.asp">返回网站首页</a><br/>

</p>
</card>
</wml>


这些代码相信大家都非常熟悉,其实它跟新闻列表文件的代码几乎是一样的,只是读取的数据库跟数据库表不同而已!具体就不多讲了。


在本地调试无错误之后,我们把代码传送到远程空间,用手机测试一下!

【第六课到此结束,要知后事如何,请看下课讲解,o(∩_∩)o...哈哈】
=====================================================
【本文首发】       http://www.wapforum.cn/html/203/1689.htm  ( 站长论坛)
【本文涉及的源码】 http://www.wapforum.cn/download/newsSystem/class/class6.rar
  【联系交流】       联系QQ: 13431619,44459416,82890065
                             QQ交流群: 36508170
 要了解更详细请到: http://www.wapforum.cn/html/203/1611.htm
【注】    其余教程将后续推出,敬请关注! 如有问题,请到论坛发帖或者qq群(36508170)提问!我们将为你解答。


[此贴子已经被作者于2007-3-15 9:28:19编辑过]
CHINAZ官方广告

 TOP

只看该用户 沙发

坐下来慢慢看
yxhlfan的签名

 TOP

只看该用户 板凳

哈哈~~

偶来飘过了。。。顶~~~

lxc_1119的签名
一套视频分享网站系统,集56、土豆、酷6等视频分享网站的功能于一身,是当前最强的视频分享网站系统。
客服:视创806  QQ:623256150
电话:0351-8390173  8390273
主页:http://ww.tyucc.cn    演示:http:// www.sxucc.cn

 TOP

只看该用户 地板

该用户发言被屏蔽

 TOP

只看该用户 #4

该用户发言被屏蔽

 TOP

只看该用户 #5

猫岛UCC视频分享系统2.0火爆推出

猫岛UCC视频分享网站系统,集56、土豆、酷6等视频分享网站的功能于一身,当前最强的视频分享网站系统。拥有视频分享\播客\涂鸦\大头贴\相册MV\K歌等功能。
转换系统2.0功能介绍(全国最强的转换系统之一)
   1.
稳定系统转换效率

2.将所有的参数可以单个更改,并制作演示程序。使服务器可以用行多个不同站点或者同一站点不同的频道等功能。

3.多文件上传以及处理系统。

4.多截图,多时间处理。

5.字幕模板功能。自定义字幕功能.多彩滚动,等等

6.多格式转出,同时出。 MP4移动设备和手机 FLV网络 3GP诺基亚S60手机

7.更强的剪辑功能,支持多文件合并成一个文件。

8.支持用户自己写字幕。

9.配置数据库升级成SQL SERVER.

10.超时和错误检查,使用文件大小<>转换时间。和CMD通道技术。来查问题。

11.支持更大的文件转换,最大限度的提高转换时间。

12.关于参数设置的更合理性进行调整。

公司网站:http://www.tyucc.cc演示网站:http://www.sxucc.cn

客服编号:视创网络810          QQ309023059

手机:13753165108先生)    电话::0351-8390173  8390273

jinjin的签名

一套视频分享网站系统,集56、土豆、酷6等视频分享网站的功能于一身,是当前最强的视频分享网站系统。
客服:视创810 QQ:309023059
电话:0351-8390173  8390273
主页:http://ww.tyucc.cn    演示:http:// www.sxucc.cn

 TOP

只看该用户 #6

[em01][em01][em01][em01]
cangjg的签名

 TOP

只看该用户 #7

Re:[转帖]【第六课】用ASP开发WAP新闻系统--增加新闻的回复功能

顶啦~~
002874的签名

 TOP