注册 登录
编程论坛 ASP技术论坛

请教instr问题

nicechlk 发布于 2008-10-19 19:05, 1801 次点击
大家知道,instr是查找字符串的函数。
不过,如果我把id号都写入到一个字段里,那么该如何查询呢?
比如说,我想查询包含30的,结果,3和30都出来了,怎么办?

[[it] 本帖最后由 nicechlk 于 2008-10-19 19:10 编辑 [/it]]
27 回复
#2
multiple19022008-10-19 19:08
你的长字符串这么写:"|1|2|3|30|"
然后查找"|3|"
#3
nicechlk2008-10-19 19:19
补充说明一下:
1、我有一个表,里面有选项1,选项2,选项3,。。。选项20,选项21
当用户选中其中的一些项时,我就把选中项的id号一次性写入到用户表的choice字段里。
如:rs("choice")=request.form("user_choice")
2、在另外一个表里,显示出用户选择的结果。
如果包含的有这些id的字符串就显示出来。
如:循环开始
  <input ....<%if instr(用户表,""&choice&"") then response.write "checked" end if%>>
   循环结束
#4
nicechlk2008-10-19 19:20
[bo][un]multiple1902[/un] 在 2008-10-19 19:08 的发言:[/bo]

你的长字符串这么写:"|1|2|3|30|"
然后查找"|3|"

我是一次性写入到数据库里的,rs("choice")=request.form("user_choice")
如何能得到 "|1|2|3|30|"呢?
#5
multiple19022008-10-19 19:29
s=Request("choice") ' a, b, c, d
s=Replace(s," ","") ' a,b,c,d
s="|" & Replace(s,",","|") & "|" ' |a|b|c|d|
SaveToDatabase s

''''''''''''''''''''

GetChoiceFromDatabase s ' |a|b|c|d|
If Instr(s,"|c|")>0 Then Response.Write "c被选择"
#6
nicechlk2008-10-19 19:37
if instr(s,""&变量&""),如果是这样的,那"|"该加在哪里?
#7
yms1232008-10-19 19:38
Response.Write request.form("user_choice")
显示一下这个数据然后贴上来
#8
nicechlk2008-10-19 19:41
这个数据是这样的:
2,3,4,......20,21,22  等等,全都有逗号
#9
multiple19022008-10-19 19:41
[bo][un]nicechlk[/un] 在 2008-10-19 19:37 的发言:[/bo]

if instr(s,"[bo]|[/bo]"&变量&"[bo]|[/bo]"),如果是这样的,那"|"该加在哪里?

谁能告诉我没事就连上一个空字符串是个什么习惯……我真的没在书上读到过
#10
multiple19022008-10-19 19:42
[bo][un]nicechlk[/un] 在 2008-10-19 19:41 的发言:[/bo]

这个数据是这样的:
2,3,4,......20,21,22  等等,全都有逗号

你能不能照原样贴上来?
这个关系到需要不需要做空格的替换。
#11
nicechlk2008-10-19 19:43
[bo][un]multiple1902[/un] 在 2008-10-19 19:41 的发言:[/bo]


谁能告诉我没事就连上一个空字符串是个什么习惯……我真的没在书上读到过

呵呵。。。
#12
nicechlk2008-10-19 19:45
咋帖图啊?
#13
multiple19022008-10-19 19:46
[bo][un]nicechlk[/un] 在 2008-10-19 19:45 的发言:[/bo]

咋帖图啊?

难道说您不会复制文本?
你先去百度知道混一会,就了解了。
#14
nicechlk2008-10-19 19:49
如你所言,粘贴过来!
1, 2, 3, 16, 17, 29, 30

[[it] 本帖最后由 nicechlk 于 2008-10-19 19:51 编辑 [/it]]
#15
yms1232008-10-19 19:51
[bo][un]nicechlk[/un] 在 2008-10-19 19:45 的发言:[/bo]

咋帖图啊?

看论坛的帮助网页
如果是1,2,3,4,5,6的话
精确判断可以进行逐个判断,比InStr精确
比如判断某个ID是否在这串字符串里出现过
Function IsHaveID(IDStr,ID)
   Dim i,IsHave,tAry()
   tAry=Split(IDStr,",")
   IsHave=False
   For i=0 To UBound(tAry)
       IF tAry(i)=CStr(ID) Then
          IsHave=True
       End IF
   Next
   IsHaveID=IsHave
End Function
#16
nicechlk2008-10-19 19:52
难道说您不会复制文本?
你先去百度知道混一会,就了解了。


如果你能说:对不起,先生,本论坛不支持用户贴图,你复制粘贴过来就可以了。。。
是不是更好一些呢?

[[it] 本帖最后由 nicechlk 于 2008-10-19 19:53 编辑 [/it]]
#17
yms1232008-10-19 19:55
[bo][un]nicechlk[/un] 在 2008-10-19 19:52 的发言:[/bo]

难道说您不会复制文本?
你先去百度知道混一会,就了解了。


如果你能说:对不起,先生,本论坛不支持用户贴图,你复制粘贴过来就可以了。。。
是不是更好一些呢?

?不可能不支持贴图啊?回复上传附件上传图片会自动显示在帖子里。
#18
nicechlk2008-10-19 19:59
我明白了,必须点击“回复”才有上传附件的按钮,谢谢!
#19
nicechlk2008-10-19 20:03
这是用Response.Write request.form("user_choice")出来的结果
ps:终于知道上传图片了
#20
nicechlk2008-10-19 20:04
[bo][un]yms123[/un] 在 2008-10-19 19:51 的发言:[/bo]


看论坛的帮助网页
如果是1,2,3,4,5,6的话
精确判断可以进行逐个判断,比InStr精确
比如判断某个ID是否在这串字符串里出现过
Function IsHaveID(IDStr,ID)
   Dim i,IsHave,tAry()
   tAry=Split(IDStr,",")
 ...

能不能不用函数啊?
#21
multiple19022008-10-19 20:07
[bo][un]yms123[/un] 在 2008-10-19 19:55 的发言:[/bo]


?不可能不支持贴图啊?回复上传附件上传图片会自动显示在帖子里。

你要理解,有些人生来就不晓得去看论坛帮助的。
#22
multiple19022008-10-19 20:24
[bo][un]nicechlk[/un] 在 2008-10-19 20:04 的发言:[/bo]


能不能不用函数啊?

这个比较难……

自定义函数可以不用,代价是一堆冗余代码。不过有些内置函数估计不用不行吧……
#23
yms1232008-10-19 20:33
[bo][un]nicechlk[/un] 在 2008-10-19 20:04 的发言:[/bo]


能不能不用函数啊?

用函数直接调用不是很方便吗?
比如
Dim tStr
tStr="1,2,3,4,5,6,7,8"
IF Not IsHaveID(tStr,9) Then
   Response.Write "9在'"&tStr&"'中没有出现"
End IF
#24
nicechlk2008-10-19 22:42
[bo][un]yms123[/un] 在 2008-10-19 20:33 的发言:[/bo]


用函数直接调用不是很方便吗?
比如
Dim tStr
tStr="1,2,3,4,5,6,7,8"
IF Not IsHaveID(tStr,9) Then
   Response.Write "9在'"&tStr&"'中没有出现"
End IF

主要就是tStr这个值不是固定的
#25
nicechlk2008-10-19 23:13
综合以上,以下代码请帮我改进一下:
1、写入数据库:
dim limit
limit=request.form("choice")  '获取用户点选的项目id,也就是tree表中tree_name字段的id
limit=replace(limit," ","")   '替换掉空格
limit="|"&replace(limit,",","|")&"|"  '替换逗号为 |
    'response.write limit的结果就是:|1|2|4|8|10|11|....|20|....
rs.open "select * from [user] where ....",conn,1,3
rs("choice")=limit
......

2、用户选择页面
dim effect,newid
...
rs1.open "select * from [user]",conn,1,1
effect=rs1("choice")
...
rs2.open "select id,tree_name from [tree]",conn,1,1
newid=rs2("id")
  循环开始
<input name="choice" value="<%=newid%>" type=...<%if ...then response.write "checked" end if%>><%=rs2("tree_name")%> '意思是,如果user表的choice字段里有tree表中tree_name的ID,就为选中状态。
  循环结束
如何写这个if语句?
if instr(effect,""&newid&"") then.....
补充:关键这个effect的值,它不是普通的字符串,而是tree_name的ID

[[it] 本帖最后由 nicechlk 于 2008-10-19 23:48 编辑 [/it]]
#26
nicechlk2008-10-20 12:24
[bo][un]multiple1902[/un] 在 2008-10-19 19:41 的发言:[/bo]


谁能告诉我没事就连上一个空字符串是个什么习惯……我真的没在书上读到过

问题已解决,如下:
if instr(s,"|"&变量&"|")改成: if instr("|"& s &"|","|"&变量&"|")
文件中代码:
<%if instr("|"&admin_limit&"|","|"&tree_smallID&"|") then response.Write "checked" end if%>
#27
nicechlk2008-10-20 12:25
谢谢各位!
#28
anlige2008-10-20 16:11
查询"|3|"不就可以了吗?
1