checkbox选中输出

steryzone 2009-03-25 03:18:45
数据库里面有三张表,一张表是角色,另一张表式权限,最后一张表是角色与权限之间的关系(一对多等的关系)
现在我输出到页面,想左边是输出权限的名字,右边是输出一个checkbox,如果这个角色有这个权限,输出来的时候就会打上勾,否则就没有
我的思路是,首先查询权限的表,用do-while把所有权限都列在左边,然后再嵌入一个do-while循环,查询角色与权限的表,通过角色的id来查,把 这个觉得的权限都列出来,但是现在出现了一个问题
比如我admin这个角色有2种权限(一共有10种权限),就是因为嵌入do-while循环,所以在输出到页面时就输出了20行,每个权限有2行,当然admin拥有的权限也打上了勾,但是角色有多少种权限就会再每一次嵌入的循环里面全部循环一次,这样好麻烦。。。
有没有什么好的方法,能在嵌入的do-while循环里面,当满足了以次,就跳到下一次循环的呢语句呢?


dim rs2,sql,rs3,id
id = request.QueryString("id")
Set rs2 = server.CreateObject("adodb.recordset")
sql = "select * from saga_rights" //这里是查询‘权限’的表
rs2.open sql,conn,1,1
%>
<table width="48%" border="0">
<tr>
<td colspan="2"> </td>
</tr>
<%do while not rs2.eof%>
<%
Set rs3 = server.CreateObject("adodb.recordset")
sql = "select * from role_rights where role="&id //这里通过某个角色的id来查询他有多少种权限,查询‘角色与权限’的表
rs3.open sql,conn,1,1
do while not rs3.eof//就因为这里的判断,比如某个角色有多少种权限,这里就会循环多少次,令到重复出现
If rs3("rights") =rs2("id") Then//这里是判断‘权限’表的id跟‘角色与权限’表里面的某个角色的权限是否一致
%>
<tr>
<td> <div align="center"> <%=rs2("names")%> </div> </td>
<td> <input name="id" type="checkbox" checked="checked"> </td>
</tr>
<%
End If
If rs3("rights") <> rs2("id") Then
%>
<tr>
<td> <div align="center"> <%=rs2("names")%> </div> </td>
<td> <input name="id" type="checkbox"> </td>
</tr>
<%
End If
rs3.movenext
loop
rs2.movenext
loop
%>
</table>
...全文
112 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
zb1999 2009-03-26
  • 打赏
  • 举报
回复
up
fishfish530 2009-03-25
  • 打赏
  • 举报
回复
楼上正解~~
jim8590251 2009-03-25
  • 打赏
  • 举报
回复
不用这么麻烦
比如你的管理员表,里面有个字段p是权限
还个表是后台的菜单,对应ID,
p的保存的是1,2,5,7
那么循环显示的时候,用instr(","&p&",",","&rs("id")&",")就可以判断,对应的管理员有没有对应菜单的权限了
xxwood 2009-03-25
  • 打赏
  • 举报
回复
你这是只显示了一个人的权限啊,不用弄俩循环这么麻烦吧。而且你的嵌套也有逻辑错误。以下代码未经测试,可能有错误,所以你琢磨琢磨思路就可以了。
dim rs2,sql,rs3,id
id = request.QueryString("id")
Set rs2 = server.CreateObject("adodb.recordset")
sql = "select * from saga_rights order by id" //这里是查询‘权限’的表
rs2.open sql,conn,1,1
%>
<table width="48%" border="0">
<tr>
<td colspan="2"> </td>
</tr>
<%
Set rs3 = server.CreateObject("adodb.recordset")
sql = "select * from role_rights where role="&id+"order by rights" //这里通过某个角色的id来查询他有多少种权限,查询‘角色与权限’的表
rs3.open sql,conn,1,1
%>
<%do while not rs2.eof%>
<%if not rs3.eof then
If rs3("rights")=rs2("id") Then//这里是判断‘权限’表的id跟‘角色与权限’表里面的某个角色的权限是否一致
%>
<tr>
<td> <div align="center"> <%=rs2("names")%> </div> </td>
<td> <input name="id" type="checkbox" checked="checked"> </td>
</tr>
<%rs3.movenext
else %>
<tr>
<td> <div align="center"> <%=rs2("names")%> </div> </td>
<td> <input name="id" type="checkbox"> </td>
</tr>
<%
End If
else%>
<tr>
<td> <div align="center"> <%=rs2("names")%> </div> </td>
<td> <input name="id" type="checkbox"> </td>
</tr>

<%rs2.movenext
loop
%>
</table>


如果你不喜欢将rs排序或者是逻辑上想不明白为什么要排序,也可以这样:
dim rs2,sql,rs3,id
id = request.QueryString("id")
Set rs2 = server.CreateObject("adodb.recordset")
sql = "select * from saga_rights" //这里是查询‘权限’的表
rs2.open sql,conn,1,1
%>
<table width="48%" border="0">
<tr>
<td colspan="2"> </td>
</tr>
<%
Set rs3 = server.CreateObject("adodb.recordset")
%>
<%do while not rs2.eof%>
<%
sql = "select * from role_rights where role="&id+" and rights="+rs2("id") //查询id这个角色是否有rs2("id")这个权限
rs3.open sql,conn,1,1

If not rs3.eof Then//如果id这个角色有rs2("id")这个权限
%>
<tr>
<td> <div align="center"> <%=rs2("names")%> </div> </td>
<td> <input name="id" type="checkbox" checked="checked"> </td>
</tr>
<%
else //如果id这个角色没有rs2("id")这个权限 %>
<tr>
<td> <div align="center"> <%=rs2("names")%> </div> </td>
<td> <input name="id" type="checkbox"> </td>
</tr>
<%
End If
rs3.close()
%>
<%rs2.movenext
loop
%>
</table>

28,390

社区成员

发帖
与我相关
我的任务
社区描述
ASP即Active Server Pages,是Microsoft公司开发的服务器端脚本环境。
社区管理员
  • ASP
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧