插件名字
版本
类型
作者
TWvote
1.02.1
Server Behavior
Tim Walter
(图1)这个调查系统的思路:
我们这个调查系统的制作主要是利用MX182762_TWvote.mxp插件来生成的。
在此先说明这个插件投票原理:根据每次投票的动作,获得相应的值,增加一条记录,然后在建立记录集时利用SQL语句获得最终所需要的数据来显示投票结果。
在原插件中作者只使用了一个字段进行记录,为了限制少数人恶作剧式的重复投票我们对IP地址和日期进行限制,当然目前还没有一种方法可以绝对限制一个人的重复投票,好在不是政治选票没有必要“精益求精”的了。^_^
这个限制:对于某一天内的同一个IP地址只能进行一次投票。
在这个投票系统中我们共需要三个页面和一个用于柱状图显示的图片文件
default.asp:投票页面
error.htm:重复投票错误的显示页
over.asp:投票结果显示页
col.gif:图片文件
||||||该教程默认你已经懂得UltraDev的基础操作
1. 设计数据库
数据库种建立三个字段,字段名、数据类型如图2所示
(图2)2. 建立default.asp文件
2.1 在页面内插入一个表单,在表单内建立三个单选按钮,按钮名为“voting”,对应数据库中的voting字段,按钮值分别为“1”、“2”、“3”对应三个选项“ASP”、“JSP”、“PHP”;如图3
(图3)2.2 写入投票主题、插入投票按钮和链接到over.asp的查看按钮;
2.3 在表单内建立两个隐藏域,分别是:
域名:xtdate 值:
域名:IP 值:
2.4 建立插入记录的服务器行为,如图4设置,这样每次提交选择的项目后都会在数据库中增加一条包含按钮值、你的IP、和提交日期的记录。
(图4)2.5 插入服务器行为视窗中的User Authentication→Restrict Access To Page行为,如图5设置,这个行为的设置是验证你的IP地址与数据库中“IP”字段所记录的地址是否相同,如果存在相同IP则转向“error.htm”页面。
(图5)||||||2.6 当然,仅仅这样是不够的。对于网友每次上网的IP地址都是不同的,那么下次其他网友使用了你的IP地址不是无法投票了,所以这里还要加上日期验证,就是说在不同日期内的相同IP是允许投票的。我们先来分析一下Restrict Access To Page行为的代码:
MM_dupKeyUsernameValue = CStr(Request.Form("ip"))
MM_dupKeySQL="SELECT ip FROM tp WHERE ip='" & MM_dupKeyUsernameValue & "'"
这里将表单内名为“ip”的隐藏域设为变量“MM_dupKeyUsernameValue”,在SQL语句中对这个变量进行了引用来和“ip”字段匹配,这样结合整个行为来理解,就是说如果“ip”字段中存在与表单“ip”隐藏域中有相符的值就转向“error.htm”页。
在理解代码原理后我们考虑是否可以增加一个变量并在SQL语句中增加这个的变量的判断。
MM_dupKeyUsernameValue2 = CStr(Request.Form("xtdate"))
与“ip”隐藏域相同写法增加一个获得时间的变量:MM_dupKeyUsernameValue2
MM_dupKeySQL="SELECT ip FROM tp WHERE ip='" & MM_dupKeyUsernameValue & "' and xtdate='" & MM_dupKeyUsernameValue2 & "'"
在原SQL语句后增加AND语句让他判断两个条件后才可以转向“error.htm”页。
完整语句如图6
(图6)2.7 最后加上针对单选按钮没有被选择时按下“投票”按钮的JS判断,这不属于UltraDev范围所以只写出代码不作详细说明。
表单验证代码:
<script LANGUAGE="javascript">
<!--
function form1_onsubmit() {
if(document.form1.voting[0].checked==false &&document.form1.voting[1].checked==false&&document.form1.voting[2].checked==false)
{
alert("哎呀,您还没有选择呢!")
return false
}
}
//-->
</script>
2.8 完成default.asp文件制作。如图7
(图7)||||||3. 建立error.htm文件
这个页面是重复投票的错误提示页,没有任何UltraDev动作,所以采用htm格式制作,这里不作说明。如图8
(图8)4. 建立over.asp文件的制作
4.1 在over.asp文件中先建立一个记录集“Recordset1”,如图9设置
(图9)4.2 在服务器行为视窗中使用“TW_vote”插件,在对话框中如图10设置
(图10)Connectionstring链接名称:tp
Recordset Name记录集名:Recordset1
Table Name数据表名:tp
Field Name域名:voting
Image File图片文件:col.gif
Table Width(Pixels)表格宽度:200
Column Width(Pixels)图片宽度:30
完成后确定返回。
||||||4.3 你现在看到的应该如图11所示
(图11)我们修改其中的文字、样式和添加返回按钮后即可存盘预览。如图12
(图12)4.4 虽然现在已经可以投票了但我们还想知道一下投票原理也就是这个插件到底在我们的页面中干了些什么。查看原代码很容易发现一大串SQL语句是最惹眼的了。
1. SELECT COUNT (voting) as total,
2. (select COUNT (voting) FROM tp WHERE voting =1) as votingyes,
3. (select COUNT (voting) FROM tp WHERE voting =2) as votingno,
4. (select COUNT (voting) FROM tp WHERE voting =3) as votingdunno ,
5. INT(votingyes/total*100) AS agreecent,
6. INT(votingno/total*100) AS disagreecent,
7. INT(votingdunno/total*100) AS dontknowcent
8. FROM tp
注意:该序号是为了清楚表达所加。
第一行:计算“vouing”字段的行数总和成为新的字段“total”,得到总投票次数;
第二行:计算“tp”数据表中“vouing”字段等于“1”的总和成为新的字段“votingyes”,得到投票值为“1”的次数;
第三行:与第二条类似得到字段votingno为投票值为“2”的次数;
第四行:与第二条类似得到字段votingdunno为投票值为“3”的次数;
第五行:取得字段“votingyes”除以字段“total”的值乘以100并用INT函数取整成为新的字段“agreecent”,得到投票数为“1”的次数在总次数中所占的百分数;
第六行:与第五行类似取得新的字段“disagreecent”;
第七行:与第五行类似取得新的字段“dontknowcent”;
第八行:不解释了,只是第一行的语句的后半句。
好了,这个投票教程到此结束,其中较为重要的是多条件判断后跳转和插件中的SQL语句,希望你可以从中得到启发!