首先,把复选框的name取成同一个,然后用response.form获得值,此时,如果选中了多个,那么获得的值将是
1, 2, 4
经过如下处理可以把该值转化成具体选中项的值
str=Replace(str," ","")
arr=split(str,",")
这样就得到
arr(0)=1
arr(1)=2
arr(2)=4
然后把他们相加
options=0
for i=0 to UBound(arr)
options=options+cint(arr(i))
next
把options的值写入数据库相应字段
要读取出来的时候采取如下手段
<input type="checkbox" value="1" <%if (options and 1)=1 then Response.Write "checked"%> >邮箱
<input type="checkbox" value="2" <%if (options and 2)=2 then Response.Write "checked"%> >手机
<input type="checkbox" value="4" <%if (options and 4)=4 then Response.Write "checked"%> >短信
也就是只要把从数据库中读出来的options值分别进行and操作相应的value(这里的and不再是“逻辑与”操作,而是“位与”操作,由于vbscript里“位与”操作符和“逻辑与”操作符都是and,但在c/c++,java等语言中,“逻辑与”操作是&&,“位与”操作是&),如果结果等于对应的value就表示选中
同时要注意一点,各个选项的value值必须是2的次方数,也就是必须是
1 2 4 8 16 32
建议认真看看我那篇文章,了解位掩码是怎么回事
备注:什么是位与
位与就是比较两个数的二进制位
如果对应的二进制位都是1,则结果是1,否则是0
比如,两个二进制
100010110
010110111
进行位与后结果就是
000010110
而位掩码的应用就是来源于位与
可以这么认为,位掩码就是用来判断一个“组合数”中是否包含指定的数
这样的“组合数”是以各个2的次方数来相加的
比如
2+8+16+1024=1056
如果要判断这个“组合数”1056中是否包含16,只要进行位与操作
1056 and 16 结果等于16就表示,1056“包含”16
原理就是1056的二进制是
10000011010
而16的二进制是
00000010000
位与后结果为
00000010000
因为,从低位开始数的第5位的1就表示16(2的4次方)
同样 1056 and 32就等于0
10000011010
& 00000100000
-------------------------------
00000000000
这样就判断了32并不“包含”与1056
位掩码是很有用的技术,它是计算机二进制原理的精髓之一
[此贴子已经被作者于2006-12-16 18:34:54编辑过]