刚用asp,想问一下<% %>中的循环怎么写

wanlinghai 2010-07-01 10:02:51
hotel_id=request.Form("hotel_id")
hotel_id取出的是多个值,现在我要将这多个值用一个值来代替,比如 :dim str,str=hotel_id&"|"&来表示,问一下这个循环怎么写?这个hotel_id是菜表中的一个外键,是int类型,如果变成多个值的话,我这个外键的类型要不要改变?求教。
...全文
111 点赞 收藏 21
写回复
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
wanlinghai 2010-07-02
<%
set rs3=server.CreateObject("ADODB.RecordSet")
sql3="select * from dish where dish_Id="&rs("dish_Id") &"order by create_time "
rs3.open sql3,conn,1,1
ar = split(rs3("hotel_Id"),",")

%>
<%

set rs2=server.CreateObject("ADODB.RecordSet")
sql2="select * from hotel order by create_time "
rs2.open sql2,conn,1,1
do while not rs2.eof
chk=""


for i=0 to ubound(ar)

if rs2("hotel_id")= Int(ar(i)) Then

chk =chk& "checked=""checked"""

End If

next


%>
<input type="checkbox" name="hotel_id" value="<%=rs2("hotel_id")%>" <%=chk%> ><%=rs2("hotelname")%>


<%
rs2.movenext
loop
rs2.close
set rs2=nothing
%>

我这样写问题解决了。
回复
连描述自己都描述不清楚
建议你先从描述问题开始学习

因为只有你能清楚的描述问题,你才能从中学会,和体会解决的办法
回复
wanlinghai 2010-07-01
[Quote=引用 6 楼 theforever 的回复:]
循环,字串拼接,这些远远比request.Form更基本。
我的建议是先把一个页面玩明白了,再玩页面间调用。
[/Quote]
我没用request.from啊,我就是在一个页面上搞的。
回复
wanlinghai 2010-07-01
楼上的写法没看懂。。。
回复
uvvvw 2010-07-01
菜名 菜系 饭店
酸菜鱼 浙菜 昆山水天堂,昆山蜀鱼馆,昆山鱼香饭店


<td height="25" bgcolor="#F1F3F5"><%=rs1("菜名")%></td>
<td height="25" bgcolor="#F1F3F5"><%=rs1("菜系e")%></td>
<td height="25" bgcolor="#F1F3F5"><%=rs1("饭店")%></td>


回复
wanlinghai 2010-07-01
<%

Dim MyString, MyArray
MyString = Split(rs("hotel_id"),",")
for i=0 to ubound(MyString)
set rs1= Server.CreateObject("adodb.recordset")
sql1="select * from hotel where hotel_Id = " &MyString(i)&" order by create_time"
rs1.open sql1,conn,1,1
%>

<td height="25" bgcolor="#F1F3F5"><%=rs1("hotelName")%></td>
<%

next
%>
循环出来效果是有了,但不是我想要的效果,我想要的效果是:
菜名 菜系 饭店
酸菜鱼 浙菜 昆山水天堂,昆山蜀鱼馆,昆山鱼香饭店
请问怎么实现?

回复
循环,字串拼接,这些远远比request.Form更基本。
我的建议是先把一个页面玩明白了,再玩页面间调用。
回复
uvvvw 2010-07-01
<%

Dim MyString, MyArray
MyString = Split(rs("hotel_id"),",")
for i=0 to ubound(MyString)
set rs1= Server.CreateObject("adodb.recordset")
sql1="select * from hotel where hotel_Id = " &MyString(i)&" order by create_time"
rs1.open sql1,conn,1,1
%>

<td height="25" bgcolor="#F1F3F5"><%=rs1("hotel_Id")%></td>
<%

next
%>

写到循环中
回复
wanlinghai 2010-07-01
现在添加是可以添加了,但是取出来有问题了,
<%

Dim MyString, MyArray
MyString = Split(rs("hotel_id"),",")
for i=0 to ubound(MyString)
set rs1= Server.CreateObject("adodb.recordset")
sql1="select * from hotel where hotel_Id = " &MyString(i)&" order by create_time"
rs1.open sql1,conn,1,1
next
%>
<td height="25" bgcolor="#F1F3F5"><%=rs1("hotel_Id")%></td>
页面上输出来的是这个数组的最后一个值。我这个hotel_id数据库里面的值是5,8,9,10,11。
只输出了11
回复
boyd1985 2010-07-01

dim sql,rs, str
str=""
sql="select distinct hotel_id from 你的表名" 'distinct 不一定要加,“你的表名”你自行修改一下
Set rs= Server.CreateObject("ADODB.Recordset")
rs.open sql,conn,1,1
if rs.bof and rs.eof then
response.Write("无数据") '没有数据
else
do while not rs.eof
str=str+rs(1) & "|" '这个|可以换成其他的
rs.movenext
loop
end if
rs.close
set rs=nothing
response.write str '这就是你要的数据,然后怎么提交你看着办吧......

'最终得到的结果如:100|101|102|103|
'如果要再分开取100、101、102、103,使用split吧

回复
Dogfish 2010-07-01
request.Form("hotel_id") 的值打印一下然后贴出来看看。
回复
uvvvw 2010-07-01
aa=split(str,"|") 用|拆分。拆出来就是个数组。按数组循环。

数据库字段不用变。一个id对应一条记录。
回复
[Quote=引用 14 楼 wanlinghai 的回复:]
<input type="checkbox" name="hotel_id" value="<%=rs2("hotel_id")%>" <% if cint(rs2("hotel_Id"))=cint(rs3("hotel_Id")) then%> checked="checked"<%end if%>><%=rs2("hotelname")%>
rs3("hotel_Id")的值是一个数组,请……
[/Quote]
如果rs2("hotel_Id")=是单一的一个值,而rs3("hotel_Id") 是一个数组,那么用一下函数就可以判断是否在数组中
'函数名:CheckStrInArray
'作 用:判断字符串是否存在数组中
'参 数:str 传递的字符串 array 数组
'返回值:存在 true 不存在 false
function CheckStrInArray(str,arr)
CheckStrInArray=false
if not isnull(arr) and isarray(arr) then
for ii=0 to ubound(arr)
if trim(arr(ii))=trim(str) then
CheckStrInArray=true
exit function
end if
next
end if
end function
回复
wanlinghai 2010-07-01
行不通啊~报错。[Quote=引用 18 楼 spirit888 的回复:]
数组是我们取出来split后的概念,存在数据库里的就是字符串而已,所以 rs2("hotel_Id")=rs3("hotel_Id") 就好
[/Quote]
回复
spirit888 2010-07-01
数组是我们取出来split后的概念,存在数据库里的就是字符串而已,所以 rs2("hotel_Id")=rs3("hotel_Id") 就好
回复
wanlinghai 2010-07-01
<%
set rs3=server.CreateObject("ADODB.RecordSet")
sql3="select * from dish where dish_Id="&rs("dish_Id") &"order by create_time "
rs3.open sql3,conn,1,1
%>
<%

set rs2=server.CreateObject("ADODB.RecordSet")
sql2="select * from hotel order by create_time "
rs2.open sql2,conn,1,1
chk =""

do until rs2.eof

ar = split(rs3("hotel_Id"),",")


for i=(0) to ubound(ar)

if cint(ar(i)) = cint(rs2("hotel_Id")) Then

chk = "checked=""checked"""
'response.Write("sss")
End If

next


%>
<input type="checkbox" name="hotel_id" value="<%=rs2("hotel_id")%>" <%=chk%> ><%=rs2("hotelname")%>


<%
rs2.movenext
loop
rs2.close
set rs2=nothing
%>

这段代码有问题吗?
回复
alenk 2010-07-01
好好学习,天天向上。
回复
LeoZ2002 2010-07-01
完了,我要重新学asp了,完全看不懂LZ在说什么~
回复
wanlinghai 2010-07-01
<input type="checkbox" name="hotel_id" value="<%=rs2("hotel_id")%>" <% if cint(rs2("hotel_Id"))=cint(rs3("hotel_Id")) then%> checked="checked"<%end if%>><%=rs2("hotelname")%>
rs3("hotel_Id")的值是一个数组,请问我怎么让他跟rs2("hotel_Id")相等?
回复
wanlinghai 2010-07-01
求高手帮忙看一下~急
回复
发动态
发帖子
ASP
创建于2007-09-28

2.8w+

社区成员

ASP即Active Server Pages,是Microsoft公司开发的服务器端脚本环境。
申请成为版主
社区公告
暂无公告