【測試地址】:http://wap.blueidea.com/tutorial/wapguestbook/
後台管理地址:http://wap.blueidea.com/tutorial/wapguestbook/admin.asp
請大(dà)家測試的時候不要輸入非法和反動信息,否則我(wǒ)(wǒ)就隻有删掉測試文件了,謝謝大(dà)家的配合。
測試工(gōng)具:WAP模拟器(如Opera,M3GATE,等),支持WAP的手機。
一(yī)直以來都有朋友在WAP的中(zhōng)文變量傳遞上面遇到問題,這裏給出簡單的WAP留言本的制作過程,也解決了WAP的中(zhōng)文傳遞問題。
WAP網站也和傳統網站類似,同樣是PC電腦來進行後台的管理。隻是不同的是一(yī)個是用手機浏覽,一(yī)個是用電腦浏覽。前台顯示頁面用手機浏覽,後台管理頁面用IE浏覽器進行查看,管理就可以了。
如果你已經能寫簡單的留言本程序,那麽制作WAP留言本已經很簡單的事情了,隻是把HTML換成WML這麽簡單,至于WML的語法,看看教程就會了,比HTML還簡單,具體(tǐ)教程google一(yī)下(xià)。
一(yī)些WAP教程。
www.itsalon.net/wap/
www.wapease.com/class/tip2/
tech.sina.com.cn/wap/school/index.shtml
其他就自己找找吧。
留言本的程序包括:發貼,保存,顯示,編輯,回複,删除。
整個的後台管理+前台顯示,也就這幾個功能。
注意:以下(xià)代碼,如果你是使用EditPlus編寫的,請在保存的時候選擇,另存爲“UTF-8”編碼。如果不這麽做,你就會遇到WML中(zhōng)傳遞中(zhōng)文變量,出現亂碼的問題了。
以ASP爲例。那我(wǒ)(wǒ)們就先從發貼頁面做起,add.asp
指定ASP頁面所用的腳本和編碼,CODEPAGE="65001"這個一(yī)定不能少,是表示UTF-8編碼,GB2312是CODEPAGE="936"。
<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%>
先聲名WML的頭文件信息,這樣即使你用的是虛拟的空間,也不用在IIS或者是Apache裏面映射MIME文件類型。
<% Response.ContentType="text/vnd.wap.wml;charset=UTF-8" %>
聲名WML的頭文件信息,這個是規定,規定了WAP的版本和采用的标準,如果不明白(bái)就這麽寫就行了,不變的,但是必須要加上。 其中(zhōng)encoding也是指定編碼。
<?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">
接下(xià)來就是頁面的顯示代碼了
<card id="add" title="經典WAP留言本">
<p>
昵稱:<br/>
<input name="Name" emptyok="false" size="10" maxlength="10"/><br/>
标題:<br/>
<input name="Title" emptyok="false" maxlength="40"/><br/>
内容:<br/>
<input name="Content" format="false" maxlength="150"/><br/>
</p>
</card>
簡單介紹一(yī)下(xià):wml類似html标簽,card代表一(yī)個卡片,這裏簡單理解爲一(yī)個頁面就行了,注意:所有的顯示的内容都要放(fàng)在<p> </p>标簽裏面,一(yī)定要注意這點,要不然就會出錯。
<meta http-equiv="Cache-Control" content="max-age=0"/>
<meta http-equiv="Cache-Control" content="no-cache"/>
在meta中(zhōng)指定不緩存頁面。
<input name="Title" emptyok="false" maxlength="40"/><br/>
emptyok不允許爲空,maxlength允許輸入的文字最大(dà)長度。
WML的表單提交有點不同,<postfile name="title" value="($title:n)" />是把input表單的值附給title變量,name="title" 是變量名, value="($title:n)"是變量,即input中(zhōng)輸入的信息,content也是一(yī)樣。
注:這裏($title:n)是WML變量的寫法,以$符号開(kāi)頭,類似PHP的變量聲名,WML中(zhōng)表單提交有:n,:e,:u,和空,四種狀态,其中(zhōng):n是強制不進行URL轉義;:e是轉義;:u是反轉義;如果爲空,在有的手機上默認是不轉義,有的是轉義, 規範不統一(yī),安全期間,如果不轉義,還是寫上:n爲好。
WAP的變量提交也分(fēn)兩種情況,GET和POST,使用GET方法,對中(zhōng)文的支持并不是很好,所以有使用到表單提交的地方,都改爲POST方式提交,代碼格式爲:
<anchor>POST方式提交
<go href="save.asp" method="post">
<postfield name="Name" value="$(Name:n)" />
<postfield name="Title" value="$(Title:n)" />
<postfield name="Content" value="$(Content:n)" />
<postfield name="Method" value="POST" />
</go>
</anchor>
當然對于英文和數字,簡單的,使用GET方式提交會比較方便一(yī)些,代碼格式爲:
<a href="save.asp?Name=$(Name:n)&Title=$(Title:n)&Content=$(Content:n)&Method=GET">GET方式提交</a>
注:連接不同變量字符的&符号要寫爲&
發表留言頁面add.asp的代碼如下(xià):
<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%>
<% Response.ContentType="text/vnd.wap.wml;charset=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="add" title="經典WAP留言本">
<p>
昵稱:<br/>
<input name="Name" emptyok="false" size="10" maxlength="10"/><br/>
标題:<br/>
<input name="Title" emptyok="false" maxlength="40"/><br/>
内容:<br/>
<input name="Content" format="false" maxlength="150"/><br/>
<br/><anchor>POST方式提交
<go href="save.asp" method="post">
<postfield name="Name" value="$(Name:n)" />
<postfield name="Title" value="$(Title:n)" />
<postfield name="Content" value="$(Content:n)" />
<postfield name="Method" value="POST" />
</go>
</anchor>
<br/><a href="save.asp?Name=$(Name:n)&Title=$(Title:n)&Content=$(Content:n)&Method=GET">GET方式提交</a><br/><br/>
<a href="index.asp">返回留言列表</a>
</p>
<p>
有任何疑問,請訪問:http://www.designer5.net或<br/>
藍(lán)色理想論壇WAP版:http://www.blueidea.com/bbs<br/>
廣告:藍(lán)色理想WAP網站改版了,使用手機訪問<a href="http://wap.blueidea.com">http://wap.blueidea.com</a><br/>
如果您參考了此程序,有WAP站點,請做上http://wap.blueidea.com的鏈接。
</p>
<do type="prev" label="返回"><prev/></do>
</card>
</wml>
[Ctrl+A 全部選擇 提示:你可先修改部分(fēn)代碼,再按運行]
接下(xià)來是保存數據。
保存頁面save.asp,代碼如下(xià):
<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%>
<!--#include file="conn.asp"-->
<%
Function inWML(str)
' 把字符串存入數據庫,單引号過濾,'==Chr(39)
sTemp = Replace(str, Chr(39), "'") '單引号過濾
inWML = sTemp
End Function
IF Request("Method")<>"" Then
Name=inWML(Trim(Request("Name")))
Title=inWML(Trim(Request("Title")))
Content=inWML(Trim(Request("Content")))
Method=Request("Method")
Sql = "INSERT INTO guestbook(Name, Title, Content, Method) values('"&Name&"', '"&Title&"', '"&Content&"', '"&Method&"')"
Conn.Execute Sql
End IF
Response.Redirect ("index.asp")
%>
[Ctrl+A 全部選擇 提示:你可先修改部分(fēn)代碼,再按運行]
最後是顯示把留言的内容顯示出來。
顯示數據的時候需要注意字符的替換,因爲有些字符是不能直接顯示的,需要轉換爲Ascii碼,在WML裏面“$”符号是表示變量,如果要顯示“$”,需要寫爲“$$”,例:“一(yī)共有$$315元RMB”,顯示爲“一(yī)共有$315元RMB”。
必須要替換的字符,已經寫爲函數,方便大(dà)家使用。
Function outHTM(str)
' 把字符串進行HTM解碼,輸出字符串
Dim sTemp
sTemp = str
outHTM = ""
If IsNull(sTemp) Then
Exit Function
End If
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
End Function
顯示留言的頁面index.asp,代碼如下(xià):
<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%>
<!--#include file="conn.asp"-->
<%
Function outHTM(str)
' 把字符串進行HTM解碼,輸出字符串
Dim sTemp
sTemp = str
outHTM = ""
If IsNull(sTemp) Then
Exit Function
End If
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 End Function
Sql = "SELECT * FROM guestbook ORDER BY ID DESC "
Set Rs = Server.CreateObject("Adodb.Recordset")
Rs.Open Sql,conn,1,3
page = Request.QueryString("Page")
Rs.PageSize = 6 '一(yī)頁6條記錄
IF Not IsEmpty(Page) Then
IF Not IsNumeric(Page) Then '判斷Page是否爲數字
Page=1
Else
Page=Cint(Page) '轉換成短整形Integer
End IF
IF Page > Rs.PageCount Then
Rs.AbsolutePage = Rs.PageCount '設置當前顯示頁等于最後一(yī)頁
ElseIF Page <= 0 Then
Rs.AbsolutePage = 1 '設置當前頁等于第一(yī)頁
Else
Rs.AbsolutePage = Page '如果大(dà)于零,顯示當前頁等于接收的頁數
End IF
Else
Rs.AbsolutePage = 1
End IF
Page = Rs.AbsolutePage
%>
<% Response.ContentType="text/vnd.wap.wml;charset=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="add" title="經典WAP留言本">
<p>
<a href="add.asp">發表新貼</a><br/>
<%
For i=1 to Rs.PageSize
If Rs.Eof Then
Response.Write "沒有留言了!<br/>"
Exit For
End If
%>
(<%=Rs("ID")%>) <%=outHTM(Rs("Title"))%><br/>
内容:<%=outHTM(Rs("Content"))%><br/>
留言者:<%=outHTM(Rs("Name"))%><br/>
時間:<%=outHTM(Rs("CreatTime"))%><br/>
回複:<%
if Rs("Reply")<>""then
Response.Write outHTM(Rs("Reply"))
else
Response.Write "“暫無回複”"
end if
%><br/>
------<br/>
<%
Rs.MoveNext
Next
if page>=Rs.PageCount then
'Response.Write ("[下(xià)一(yī)頁]")
else
Response.Write("[<a href='index.asp?Page=" & (Page+1) & "'>下(xià)一(yī)頁</a>]")
end if
if page<=1 then
'Response.Write ("[上一(yī)頁] ")
else
Response.Write("[<a href='index.asp?Page=" & (Page-1) & "'>上一(yī)頁</a>]")
end if
%>
<br/><a href="add.asp">發表新貼</a>
</p>
<p>
有任何疑問,請訪問:http://www.designer5.net 或<br/>
藍(lán)色理想論壇WAP版:http://www.blueidea.com/bbs<br/>
廣告:藍(lán)色理想WAP網站改版了,<a href="http://wap.blueidea.com">http://wap.blueidea.com</a><br/>
如果您有WAP站點,并參考了此程序,請做上http://wap.blueidea.com的連接
</p>
</card>
</wml>
[Ctrl+A 全部選擇 提示:你可先修改部分(fēn)代碼,再按運行]
後台管理頁面admin.asp,代碼如下(xià):
<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%>
<!--#include file="conn.asp"-->
<%
Function inWML(str)
' 把字符串存入數據庫,單引号過濾
sTemp = Replace(str, Chr(39), "'") '單引号過濾
inWML = sTemp
End Function
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 = "UPDATE GuestBook SET Name = '"&Name&"', "
Sql = Sql + "Title = '"&Title&"', "
Sql = Sql + "Content = '"&Content&"', "
Sql = Sql + "Reply = '"&Reply&"' "
Sql = Sql + " WHERE Id = "&Id
Conn.ExeCute Sql
Conn.Close
Set Conn = Nothing
Response.Redirect("admin.asp")
End IF
IF (Request.QueryString("Action")="Del") Then
Sql = "DELETE FROM GuestBook WHERE Id=" & Request.QueryString("Id")
Conn.Execute Sql
Conn.Close
Set Conn = Nothing
Response.Redirect("admin.asp")
End IF
%>
<%
Set Rs=Server.CreateObject("adodb.Recordset")
Sql = "SELECT * FROM GuestBook ORDER BY Id Desc"
Rs.open Sql,conn,3,3
Page = Request.QueryString("Page")
Rs.PageSize = 10 '一(yī)頁6條記錄
IF Not IsEmpty(Page) Then
IF Not IsNumeric(Page) Then '判斷Page是否爲數字
Page=1
Else
Page=Cint(Page) '轉換成短整形Integer
End IF
IF Page > Rs.PageCount Then
Rs.AbsolutePage = Rs.PageCount '設置當前顯示頁等于最後一(yī)頁
ElseIF Page <= 0 Then
Rs.AbsolutePage = 1 '設置當前頁等于第一(yī)頁
Else
Rs.AbsolutePage = Page '如果大(dà)于零,顯示當前頁等于接收的頁數
End IF
Else
Rs.AbsolutePage = 1
End IF
Page = Rs.AbsolutePage
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>經典WAP留言本</title>
<style type="text/css">
body, td{font-size:12px;}
p{line-height:22px;}
</style>
<script language="javascript" type="text/javascript" charset="utf-8">
<!--
function check_form1()
{
if (document.form1.Reply.value==""){
alert("請填寫回複内容!");
document.form1.Reply.focus();
}
else{return true;}
return false;
}
-->
</script>
</head>
<body>
<table width="600" border="0" align="center" cellpadding="1" cellspacing="1" bgcolor="#2D96FF">
<tr align="center" bgcolor="#D0E8FF">
<td height="70" colspan="8"><p><strong>經典WAP留言本</strong></p>
<p><strong>制作:</strong><strong><a href="http://www.designer5.net" target="_blank">D5S工(gōng)作室</a> 作者:yytcpt</strong></p>
</td>
</tr>
<tr align="center" bgcolor="#9BCDFF">
<td height="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>
<td width="34"><strong>回複</strong></td>
<td><strong>删除</strong></td>
</tr>
<%
For i=1 to Rs.PageSize
If Rs.Eof Then
Exit For
End If
%>
<tr bgcolor="#C8E3FF" onMouseOver="javascript:this.bgColor='#9BCDFF';" onMouseOut="javascript:this.bgColor='#C8E3FF';">
<td width="19" height="25" align="center"><%=Rs("Id")%></td>
<td width="48" align="center"><%=Rs("Name")%></td>
<td width="53" align="center"><%=Rs("Title")%></td>
<td width="247" align="left"><%=Rs("Content")%> </td>
<td width="53" align="center"><%=Rs("Method")%></td>
<td width="76" align="center"><%=Rs("CreatTime")%></td>
<td align="center"><a href="admin.asp?Action=Reply&Id=<%=Rs("Id")%>">回複</a></td>
<td width="45" align="center"><a href="javascript:if(confirm('确實要删除嗎(ma)?'))location='admin.asp?Action=Del&Id=<%=Rs("Id")%>'">删除</a></td>
</tr>
<%
Rs.MoveNext
Next
%>
<tr align="center" bgcolor="#9BCDFF">
<td height="25" colspan="8">
<%
Response.Write("<form name=page method=get onsubmit=""document.location = 'admin.asp?Page='+this.page.value;return false;"">")
if page<=1 then
Response.Write ("[首頁] [上一(yī)頁] ")
else
Response.Write("[<a href=admin.asp?Page=1>首頁</a>] ")
Response.Write("[<a href=admin.asp?Page=" & (Page-1) & ">上一(yī)頁</a>] ")
end if
if page>=Rs.PageCount then
Response.Write ("[下(xià)一(yī)頁] [尾頁]")
else
Response.Write("[<a href=admin.asp?Page=" & (Page+1) & ">下(xià)一(yī)頁</a>] ")
Response.Write("[<a href=admin.asp?Page=" & Rs.PageCount & ">尾頁</a>]")
end if
Response.Write("[頁次:<font color=red>" & page & "[/red]/" & Rs.PageCount)
Response.Write("] [共" & Rs.RecordCount & "條 <font color=red>"& Rs.PageSize & "[/red]條/頁]")
Response.Write(" 轉到" & "<input name=page size=4 value=" & page & ">" & "頁<input type=submit value=go></form>")
%>
</td>
</tr>
<tr align="center">
<td height="30" colspan="8" bgcolor="#C8E3FF"><p> 有任何疑問,請訪問<a href="http://www.designer5.net"> <strong>http://www.designer5.net</strong></a> 或<strong><a href="http://www.blueidea.com/bbs" target="_blank"> </a></strong><a href="http://www.blueidea.com/bbs" target="_blank"><strong> </strong></a><strong><a href="http://www.blueidea.com/bbs" target="_blank">藍(lán)色理想論壇WAP版塊</a></strong><br/>
<strong>廣告:</strong>藍(lán)色理想WAP網站改版了,請使用手機訪問<a href="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
Set Rs=Server.CreateObject("adodb.Recordset")
Sql = "SELECT * FROM GuestBook WHERE Id ="&Request.QueryString("Id")
Rs.open Sql,conn,3,3
%>
<table width="333" border="0" align="center" cellpadding="0" cellspacing="0" bgcolor="#C8E3FF">
<form name="form1" method="post" action="admin.asp" onsubmit="javascript:return check_form1()">
<tr>
<td width="69"><strong>ID</strong></td>
<td width="264"><%=Rs("Id")%></td>
</tr>
<tr>
<td><strong>留言者</strong></td>
<td>
<input name="Name" type="text" value="<%=Rs("Name")%>" size="20">
</td>
</tr>
<tr>
<td><strong>标題</strong></td>
<td><input name="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><textarea name="Content" cols="30" rows="4"><%=Rs("Content")%>
後台管理地址:http://wap.blueidea.com/tutorial/wapguestbook/admin.asp
請大(dà)家測試的時候不要輸入非法和反動信息,否則我(wǒ)(wǒ)就隻有删掉測試文件了,謝謝大(dà)家的配合。
測試工(gōng)具:WAP模拟器(如Opera,M3GATE,等),支持WAP的手機。
一(yī)直以來都有朋友在WAP的中(zhōng)文變量傳遞上面遇到問題,這裏給出簡單的WAP留言本的制作過程,也解決了WAP的中(zhōng)文傳遞問題。
WAP網站也和傳統網站類似,同樣是PC電腦來進行後台的管理。隻是不同的是一(yī)個是用手機浏覽,一(yī)個是用電腦浏覽。前台顯示頁面用手機浏覽,後台管理頁面用IE浏覽器進行查看,管理就可以了。
如果你已經能寫簡單的留言本程序,那麽制作WAP留言本已經很簡單的事情了,隻是把HTML換成WML這麽簡單,至于WML的語法,看看教程就會了,比HTML還簡單,具體(tǐ)教程google一(yī)下(xià)。
一(yī)些WAP教程。
www.itsalon.net/wap/
www.wapease.com/class/tip2/
tech.sina.com.cn/wap/school/index.shtml
其他就自己找找吧。
留言本的程序包括:發貼,保存,顯示,編輯,回複,删除。
整個的後台管理+前台顯示,也就這幾個功能。
注意:以下(xià)代碼,如果你是使用EditPlus編寫的,請在保存的時候選擇,另存爲“UTF-8”編碼。如果不這麽做,你就會遇到WML中(zhōng)傳遞中(zhōng)文變量,出現亂碼的問題了。
以ASP爲例。那我(wǒ)(wǒ)們就先從發貼頁面做起,add.asp
指定ASP頁面所用的腳本和編碼,CODEPAGE="65001"這個一(yī)定不能少,是表示UTF-8編碼,GB2312是CODEPAGE="936"。
<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%>
先聲名WML的頭文件信息,這樣即使你用的是虛拟的空間,也不用在IIS或者是Apache裏面映射MIME文件類型。
<% Response.ContentType="text/vnd.wap.wml;charset=UTF-8" %>
聲名WML的頭文件信息,這個是規定,規定了WAP的版本和采用的标準,如果不明白(bái)就這麽寫就行了,不變的,但是必須要加上。 其中(zhōng)encoding也是指定編碼。
<?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">
接下(xià)來就是頁面的顯示代碼了
<card id="add" title="經典WAP留言本">
<p>
昵稱:<br/>
<input name="Name" emptyok="false" size="10" maxlength="10"/><br/>
标題:<br/>
<input name="Title" emptyok="false" maxlength="40"/><br/>
内容:<br/>
<input name="Content" format="false" maxlength="150"/><br/>
</p>
</card>
簡單介紹一(yī)下(xià):wml類似html标簽,card代表一(yī)個卡片,這裏簡單理解爲一(yī)個頁面就行了,注意:所有的顯示的内容都要放(fàng)在<p> </p>标簽裏面,一(yī)定要注意這點,要不然就會出錯。
<meta http-equiv="Cache-Control" content="max-age=0"/>
<meta http-equiv="Cache-Control" content="no-cache"/>
在meta中(zhōng)指定不緩存頁面。
<input name="Title" emptyok="false" maxlength="40"/><br/>
emptyok不允許爲空,maxlength允許輸入的文字最大(dà)長度。
WML的表單提交有點不同,<postfile name="title" value="($title:n)" />是把input表單的值附給title變量,name="title" 是變量名, value="($title:n)"是變量,即input中(zhōng)輸入的信息,content也是一(yī)樣。
注:這裏($title:n)是WML變量的寫法,以$符号開(kāi)頭,類似PHP的變量聲名,WML中(zhōng)表單提交有:n,:e,:u,和空,四種狀态,其中(zhōng):n是強制不進行URL轉義;:e是轉義;:u是反轉義;如果爲空,在有的手機上默認是不轉義,有的是轉義, 規範不統一(yī),安全期間,如果不轉義,還是寫上:n爲好。
WAP的變量提交也分(fēn)兩種情況,GET和POST,使用GET方法,對中(zhōng)文的支持并不是很好,所以有使用到表單提交的地方,都改爲POST方式提交,代碼格式爲:
<anchor>POST方式提交
<go href="save.asp" method="post">
<postfield name="Name" value="$(Name:n)" />
<postfield name="Title" value="$(Title:n)" />
<postfield name="Content" value="$(Content:n)" />
<postfield name="Method" value="POST" />
</go>
</anchor>
當然對于英文和數字,簡單的,使用GET方式提交會比較方便一(yī)些,代碼格式爲:
<a href="save.asp?Name=$(Name:n)&Title=$(Title:n)&Content=$(Content:n)&Method=GET">GET方式提交</a>
注:連接不同變量字符的&符号要寫爲&
發表留言頁面add.asp的代碼如下(xià):
<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%>
<% Response.ContentType="text/vnd.wap.wml;charset=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="add" title="經典WAP留言本">
<p>
昵稱:<br/>
<input name="Name" emptyok="false" size="10" maxlength="10"/><br/>
标題:<br/>
<input name="Title" emptyok="false" maxlength="40"/><br/>
内容:<br/>
<input name="Content" format="false" maxlength="150"/><br/>
<br/><anchor>POST方式提交
<go href="save.asp" method="post">
<postfield name="Name" value="$(Name:n)" />
<postfield name="Title" value="$(Title:n)" />
<postfield name="Content" value="$(Content:n)" />
<postfield name="Method" value="POST" />
</go>
</anchor>
<br/><a href="save.asp?Name=$(Name:n)&Title=$(Title:n)&Content=$(Content:n)&Method=GET">GET方式提交</a><br/><br/>
<a href="index.asp">返回留言列表</a>
</p>
<p>
有任何疑問,請訪問:http://www.designer5.net或<br/>
藍(lán)色理想論壇WAP版:http://www.blueidea.com/bbs<br/>
廣告:藍(lán)色理想WAP網站改版了,使用手機訪問<a href="http://wap.blueidea.com">http://wap.blueidea.com</a><br/>
如果您參考了此程序,有WAP站點,請做上http://wap.blueidea.com的鏈接。
</p>
<do type="prev" label="返回"><prev/></do>
</card>
</wml>
[Ctrl+A 全部選擇 提示:你可先修改部分(fēn)代碼,再按運行]
接下(xià)來是保存數據。
保存頁面save.asp,代碼如下(xià):
<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%>
<!--#include file="conn.asp"-->
<%
Function inWML(str)
' 把字符串存入數據庫,單引号過濾,'==Chr(39)
sTemp = Replace(str, Chr(39), "'") '單引号過濾
inWML = sTemp
End Function
IF Request("Method")<>"" Then
Name=inWML(Trim(Request("Name")))
Title=inWML(Trim(Request("Title")))
Content=inWML(Trim(Request("Content")))
Method=Request("Method")
Sql = "INSERT INTO guestbook(Name, Title, Content, Method) values('"&Name&"', '"&Title&"', '"&Content&"', '"&Method&"')"
Conn.Execute Sql
End IF
Response.Redirect ("index.asp")
%>
[Ctrl+A 全部選擇 提示:你可先修改部分(fēn)代碼,再按運行]
最後是顯示把留言的内容顯示出來。
顯示數據的時候需要注意字符的替換,因爲有些字符是不能直接顯示的,需要轉換爲Ascii碼,在WML裏面“$”符号是表示變量,如果要顯示“$”,需要寫爲“$$”,例:“一(yī)共有$$315元RMB”,顯示爲“一(yī)共有$315元RMB”。
必須要替換的字符,已經寫爲函數,方便大(dà)家使用。
Function outHTM(str)
' 把字符串進行HTM解碼,輸出字符串
Dim sTemp
sTemp = str
outHTM = ""
If IsNull(sTemp) Then
Exit Function
End If
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
End Function
顯示留言的頁面index.asp,代碼如下(xià):
<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%>
<!--#include file="conn.asp"-->
<%
Function outHTM(str)
' 把字符串進行HTM解碼,輸出字符串
Dim sTemp
sTemp = str
outHTM = ""
If IsNull(sTemp) Then
Exit Function
End If
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 End Function
Sql = "SELECT * FROM guestbook ORDER BY ID DESC "
Set Rs = Server.CreateObject("Adodb.Recordset")
Rs.Open Sql,conn,1,3
page = Request.QueryString("Page")
Rs.PageSize = 6 '一(yī)頁6條記錄
IF Not IsEmpty(Page) Then
IF Not IsNumeric(Page) Then '判斷Page是否爲數字
Page=1
Else
Page=Cint(Page) '轉換成短整形Integer
End IF
IF Page > Rs.PageCount Then
Rs.AbsolutePage = Rs.PageCount '設置當前顯示頁等于最後一(yī)頁
ElseIF Page <= 0 Then
Rs.AbsolutePage = 1 '設置當前頁等于第一(yī)頁
Else
Rs.AbsolutePage = Page '如果大(dà)于零,顯示當前頁等于接收的頁數
End IF
Else
Rs.AbsolutePage = 1
End IF
Page = Rs.AbsolutePage
%>
<% Response.ContentType="text/vnd.wap.wml;charset=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="add" title="經典WAP留言本">
<p>
<a href="add.asp">發表新貼</a><br/>
<%
For i=1 to Rs.PageSize
If Rs.Eof Then
Response.Write "沒有留言了!<br/>"
Exit For
End If
%>
(<%=Rs("ID")%>) <%=outHTM(Rs("Title"))%><br/>
内容:<%=outHTM(Rs("Content"))%><br/>
留言者:<%=outHTM(Rs("Name"))%><br/>
時間:<%=outHTM(Rs("CreatTime"))%><br/>
回複:<%
if Rs("Reply")<>""then
Response.Write outHTM(Rs("Reply"))
else
Response.Write "“暫無回複”"
end if
%><br/>
------<br/>
<%
Rs.MoveNext
Next
if page>=Rs.PageCount then
'Response.Write ("[下(xià)一(yī)頁]")
else
Response.Write("[<a href='index.asp?Page=" & (Page+1) & "'>下(xià)一(yī)頁</a>]")
end if
if page<=1 then
'Response.Write ("[上一(yī)頁] ")
else
Response.Write("[<a href='index.asp?Page=" & (Page-1) & "'>上一(yī)頁</a>]")
end if
%>
<br/><a href="add.asp">發表新貼</a>
</p>
<p>
有任何疑問,請訪問:http://www.designer5.net 或<br/>
藍(lán)色理想論壇WAP版:http://www.blueidea.com/bbs<br/>
廣告:藍(lán)色理想WAP網站改版了,<a href="http://wap.blueidea.com">http://wap.blueidea.com</a><br/>
如果您有WAP站點,并參考了此程序,請做上http://wap.blueidea.com的連接
</p>
</card>
</wml>
[Ctrl+A 全部選擇 提示:你可先修改部分(fēn)代碼,再按運行]
後台管理頁面admin.asp,代碼如下(xià):
<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%>
<!--#include file="conn.asp"-->
<%
Function inWML(str)
' 把字符串存入數據庫,單引号過濾
sTemp = Replace(str, Chr(39), "'") '單引号過濾
inWML = sTemp
End Function
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 = "UPDATE GuestBook SET Name = '"&Name&"', "
Sql = Sql + "Title = '"&Title&"', "
Sql = Sql + "Content = '"&Content&"', "
Sql = Sql + "Reply = '"&Reply&"' "
Sql = Sql + " WHERE Id = "&Id
Conn.ExeCute Sql
Conn.Close
Set Conn = Nothing
Response.Redirect("admin.asp")
End IF
IF (Request.QueryString("Action")="Del") Then
Sql = "DELETE FROM GuestBook WHERE Id=" & Request.QueryString("Id")
Conn.Execute Sql
Conn.Close
Set Conn = Nothing
Response.Redirect("admin.asp")
End IF
%>
<%
Set Rs=Server.CreateObject("adodb.Recordset")
Sql = "SELECT * FROM GuestBook ORDER BY Id Desc"
Rs.open Sql,conn,3,3
Page = Request.QueryString("Page")
Rs.PageSize = 10 '一(yī)頁6條記錄
IF Not IsEmpty(Page) Then
IF Not IsNumeric(Page) Then '判斷Page是否爲數字
Page=1
Else
Page=Cint(Page) '轉換成短整形Integer
End IF
IF Page > Rs.PageCount Then
Rs.AbsolutePage = Rs.PageCount '設置當前顯示頁等于最後一(yī)頁
ElseIF Page <= 0 Then
Rs.AbsolutePage = 1 '設置當前頁等于第一(yī)頁
Else
Rs.AbsolutePage = Page '如果大(dà)于零,顯示當前頁等于接收的頁數
End IF
Else
Rs.AbsolutePage = 1
End IF
Page = Rs.AbsolutePage
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>經典WAP留言本</title>
<style type="text/css">
body, td{font-size:12px;}
p{line-height:22px;}
</style>
<script language="javascript" type="text/javascript" charset="utf-8">
<!--
function check_form1()
{
if (document.form1.Reply.value==""){
alert("請填寫回複内容!");
document.form1.Reply.focus();
}
else{return true;}
return false;
}
-->
</script>
</head>
<body>
<table width="600" border="0" align="center" cellpadding="1" cellspacing="1" bgcolor="#2D96FF">
<tr align="center" bgcolor="#D0E8FF">
<td height="70" colspan="8"><p><strong>經典WAP留言本</strong></p>
<p><strong>制作:</strong><strong><a href="http://www.designer5.net" target="_blank">D5S工(gōng)作室</a> 作者:yytcpt</strong></p>
</td>
</tr>
<tr align="center" bgcolor="#9BCDFF">
<td height="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>
<td width="34"><strong>回複</strong></td>
<td><strong>删除</strong></td>
</tr>
<%
For i=1 to Rs.PageSize
If Rs.Eof Then
Exit For
End If
%>
<tr bgcolor="#C8E3FF" onMouseOver="javascript:this.bgColor='#9BCDFF';" onMouseOut="javascript:this.bgColor='#C8E3FF';">
<td width="19" height="25" align="center"><%=Rs("Id")%></td>
<td width="48" align="center"><%=Rs("Name")%></td>
<td width="53" align="center"><%=Rs("Title")%></td>
<td width="247" align="left"><%=Rs("Content")%> </td>
<td width="53" align="center"><%=Rs("Method")%></td>
<td width="76" align="center"><%=Rs("CreatTime")%></td>
<td align="center"><a href="admin.asp?Action=Reply&Id=<%=Rs("Id")%>">回複</a></td>
<td width="45" align="center"><a href="javascript:if(confirm('确實要删除嗎(ma)?'))location='admin.asp?Action=Del&Id=<%=Rs("Id")%>'">删除</a></td>
</tr>
<%
Rs.MoveNext
Next
%>
<tr align="center" bgcolor="#9BCDFF">
<td height="25" colspan="8">
<%
Response.Write("<form name=page method=get onsubmit=""document.location = 'admin.asp?Page='+this.page.value;return false;"">")
if page<=1 then
Response.Write ("[首頁] [上一(yī)頁] ")
else
Response.Write("[<a href=admin.asp?Page=1>首頁</a>] ")
Response.Write("[<a href=admin.asp?Page=" & (Page-1) & ">上一(yī)頁</a>] ")
end if
if page>=Rs.PageCount then
Response.Write ("[下(xià)一(yī)頁] [尾頁]")
else
Response.Write("[<a href=admin.asp?Page=" & (Page+1) & ">下(xià)一(yī)頁</a>] ")
Response.Write("[<a href=admin.asp?Page=" & Rs.PageCount & ">尾頁</a>]")
end if
Response.Write("[頁次:<font color=red>" & page & "[/red]/" & Rs.PageCount)
Response.Write("] [共" & Rs.RecordCount & "條 <font color=red>"& Rs.PageSize & "[/red]條/頁]")
Response.Write(" 轉到" & "<input name=page size=4 value=" & page & ">" & "頁<input type=submit value=go></form>")
%>
</td>
</tr>
<tr align="center">
<td height="30" colspan="8" bgcolor="#C8E3FF"><p> 有任何疑問,請訪問<a href="http://www.designer5.net"> <strong>http://www.designer5.net</strong></a> 或<strong><a href="http://www.blueidea.com/bbs" target="_blank"> </a></strong><a href="http://www.blueidea.com/bbs" target="_blank"><strong> </strong></a><strong><a href="http://www.blueidea.com/bbs" target="_blank">藍(lán)色理想論壇WAP版塊</a></strong><br/>
<strong>廣告:</strong>藍(lán)色理想WAP網站改版了,請使用手機訪問<a href="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
Set Rs=Server.CreateObject("adodb.Recordset")
Sql = "SELECT * FROM GuestBook WHERE Id ="&Request.QueryString("Id")
Rs.open Sql,conn,3,3
%>
<table width="333" border="0" align="center" cellpadding="0" cellspacing="0" bgcolor="#C8E3FF">
<form name="form1" method="post" action="admin.asp" onsubmit="javascript:return check_form1()">
<tr>
<td width="69"><strong>ID</strong></td>
<td width="264"><%=Rs("Id")%></td>
</tr>
<tr>
<td><strong>留言者</strong></td>
<td>
<input name="Name" type="text" value="<%=Rs("Name")%>" size="20">
</td>
</tr>
<tr>
<td><strong>标題</strong></td>
<td><input name="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><textarea name="Content" cols="30" rows="4"><%=Rs("Content")%>
文章來源:http://www.blueidea.com/bbs/NewsDetail.asp?id=2055033