| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 617 人关注过本帖
标题:如何处理这样的问题,困扰了我20年
只看楼主 加入收藏
chzh22
Rank: 1
等 级:新手上路
帖 子:129
专家分:0
注 册:2006-6-3
结帖率:0
收藏
 问题点数:0 回复次数:6 
如何处理这样的问题,困扰了我20年
邮箱 手机 短信 是多选项
请问我的字段应该怎么处理啊,也就是说这个字段里应该给什么值合适,没思路了
搜索更多相关主题的帖子: 困扰 
2006-12-16 17:20
渚薰
Rank: 6Rank: 6
等 级:贵宾
威 望:22
帖 子:1132
专家分:0
注 册:2006-8-6
收藏
得分:0 
楼主的意思是不是,有某个题目是多项选择,如何在一个字段里表示到底选了那些项?如果是这样,那解答如下:
字段的类型为数字
邮箱的值为1
手机的值为2
短信的值为4

选中项的值相加,得到最终值

原理???????楼主去网上找找什么叫位掩码。
同时也可以看看我写的这片关于位掩码应用的文章
http://bbs.bc-cn.net/viewthread.php?tid=82676&extra=&page=100#


如果,楼主的意思是需要在一个字段中,存储邮箱、手机、短信等多个元素,那建议把他们都分成单独字段,因为合在一起不符合第一范式

个人ajax技术专题站: " target="_blank">http://www. 我不会闲你烦,只会闲你不够烦!
2006-12-16 17:38
chzh22
Rank: 1
等 级:新手上路
帖 子:129
专家分:0
注 册:2006-6-3
收藏
得分:0 
能简单一点吗,我找了些看,也没看懂,我看有的贴子说可以用split将值以","号存入数据库字段里,但不太明白,如果在修改的时候,比喻像你所说邮箱是1,手机是2,那么如何实现数据字段里值是1,2 我又如何让修改的时候显示邮箱,手机显示打钩

爱我的人教我温柔;恨我的人教我谨慎;对我冷漠的人教我自立.
2006-12-16 17:57
渚薰
Rank: 6Rank: 6
等 级:贵宾
威 望:22
帖 子:1132
专家分:0
注 册:2006-8-6
收藏
得分:0 
首先,把复选框的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编辑过]


个人ajax技术专题站: " target="_blank">http://www. 我不会闲你烦,只会闲你不够烦!
2006-12-16 18:13
yms123
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:209
帖 子:12488
专家分:19042
注 册:2004-7-17
收藏
得分:0 

如果说最简单的办法借助JavaScript和ASP将多选值变成一个字段存储。
也就是说存储为0|1|2这样的字符串。

2006-12-16 20:31
chzh22
Rank: 1
等 级:新手上路
帖 子:129
专家分:0
注 册:2006-6-3
收藏
得分:0 
谢谢,我明白了,请问4楼版主:你说的“然后把他们相加
options=0
for i=0 to UBound(arr)
options=options+cint(arr(i))
next”这句不是很明白。这句能删除吗,然后下面这样写<%if arr(0)=1 then Response.Write "checked"%> >邮箱
谢谢


爱我的人教我温柔;恨我的人教我谨慎;对我冷漠的人教我自立.
2006-12-17 08:55
渚薰
Rank: 6Rank: 6
等 级:贵宾
威 望:22
帖 子:1132
专家分:0
注 册:2006-8-6
收藏
得分:0 
就是把获得的各个值相加
不能删

个人ajax技术专题站: " target="_blank">http://www. 我不会闲你烦,只会闲你不够烦!
2006-12-17 10:57
快速回复:如何处理这样的问题,困扰了我20年
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.034099 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved