首页搜索健康笑话音乐论坛游戏聊天FLASH信箱交友域名电影娱乐域名注册虚拟主机域名+空间158元
收藏本站
设为首页
 BANNER欣赏
润东链|网站PR值查询|免费二级域名|免费友情链接|免费邮箱
详解如何在后台管理中进行批量操作(ASP+Script)
作者:我容易么我
来源:今晚在线
点击次数:35210
2003-6-19 8:45:59


〓简介〓
我们常看到有些优秀的后台管理系统都是可以对信息批量操作的,比如点击一个复选框,全部选中(取消选中),然后一个确定按钮就可以全部删除(更新)那些信息了,其实这也不难,只是需要了一段小脚本……

〓正文〓
比如表单页面里全选的HTML语句是这样的

<input type="checkbox" name="chkAll" value="on" onClick="CheckAll(this.form)">《全部选中》

这里就定义了一个CheckAll函数, this.form 表示动作当前的表单里,

onClick的意思就是当鼠标按下放开执行这样一个点击动作后激活CheckAll函数

而这个CheckAll函数的源代码也很简单:
========================================================
<script>
function CheckAll(form){
for (var i=0;i<form.elements.length;i++){
var e = form.elements[i];
if (e.name != 'chkAll')
e.checked = form.chkAll.checked;
}
}
</script>
===================================================
里面仅仅是一个FOR(initallization; test; increment) 典型的JS循环语句

initallization 表示循环开始付值一次这里是 var i=0 由于JS语法是强制每个变

量必须声明后才能使用的,而声明JS变量的声明方式可以有两种一种是先声明,

换行后付值比如:

var i, a
i = 1
a = 0

而另一种则是在同一行同时声明并付值 比如 var i = 0 当然了,我这里用的是后者

(不行了,老娘喊我吃饭了,待会儿回来接着说……)

…………吃好了,可以接着说了, 下面这句是i<form.elements.length,理论上讲

form.elements.length是获取当前表单里总共有多少个复选框(checkbox)获取的值是个整数类型

与i作比较,如果i小于他,则执行循环语句里的内容,后面的 i++ 则表示条件成立后每循环一次

i的数值累加一,这样当i累加到大于form.elements.length取得的数值后退出循环!

值得注意的是form.elements.length所获得的复选框的个数是包括那个form表单里

《全部选中》的那个复选框的

<input type="checkbox" name="chkAll" value="on" onClick="CheckAll(this.form)">《全部选中》


所以接下来的语句 var e = form.elements[i]; 接着声明一个变量,记录循环到了哪个复选框

而全部选中的那个复选框名称为chkAll,所以我们对复选框名称(name)不为chkAll的

进行操作 if (e.name != 'chkAll')  

!= 在JS中表示不等于,后面的语句 e.checked = form.chkAll.checked; 让所有的复选框的状态

都等于表单中chkAll的状态(checked表示选中),这里需要注意的是JS当中对变量命名的大小写

是敏感的(也就是区分大小写,所以chkAll和chkall脚本执行当中或把它解释成两个不同的名字)

至此批量操作脚本方面的语法就全部解释完了,下面是ASP方面要注意的

由于checkbox复选框获取的值是以数组的形式存在的比如我们一个名称为ID记录数据库内容ID自动编号


复选框,用 ID = Request.Form("ID") 取得的值直接不做处理显示出来会是以数组形式存在的,

ID = "3,22,32,66,6543" 那么在ASP语句里想以此为条件批量执行操作则必须把它们以单个数值的形式

提取出来,当然我们可以很简单地做到比如你在SQL查询语句里将等号(=)替换成(in)旁边再多加

两个括号就行了,比如原来的删除语句 sql = "delete id from table where id = " & id & ""

现在批量删除只要改成 sql = "delete id from table where id in (" & id & ")"  就OK了!

可是如果我们是要用ID这个数组里的每个数值为条件去查询数据库相关内容 用 where  in  

就不太好操作了,我们这时候需要将ID这个数组以循环形式单独提取出来,

一一进行操作,那么我们还需要

多用到一个变量(IDD),一个VBS内置函数(Split)和一个循环语句(For Each …… Next)

当然变量IDD是我们自己取的名字,您可以根据喜好自己定义,函数Split的作用是返回指定字符串的一维数组

For Each …… Next的作用是依据指定的数字重复循环执行一次,当我们用ID = Request.Form("ID")

获得一个数组的时候 紧接下面 IDD = Split(ID,",") 或者这个字符串的一维数组

接着

For ID Each in IDD

执行你的代码, 而这期间代码的条件 你就可以用等号了 where id = " & id & ""

Next


这样的代码本来就是万无一失的,可是我还是遇到了一个让我头疼半天的问题,还在已经找到原因解决了

下面我告诉你吧免得以后碰到就不会不知所措了……

Request.Form("ID") 获得的字符串"2,33,454,3222" 本来中间的逗号分隔符,都应该是英文半角的这样Split才能

辨认,而我有次获取出来的居然都是用中文半角逗号的分隔符"2,24,55,342,322",每次在调试的时候都告诉我说

数据溢出,搞不懂,后来我用VBS的Replace函数作了一下替换就OK了,就是在 ID = Request.Form("ID") 的下面

加一句 ID = Replace(ID,",",",")  将ID字符串里的中文逗号全部替换成英文半角的,呵呵,也怪我懒

没有追根溯源看看到底为什么会全变成中文半角的逗号!如果哪位高手知道的话请告知小弟,在下感激不尽!

 


企业邮局|免费统计|域名申请|虚拟空间|论坛空间|ASP空间|域名查询|注册域名|国际域名|国内域名|网站空间|域名whois查询|英文域名|中文域名