20. september 2005 - 12:23Der er
11 kommentarer og 1 løsning
Problemer med loop
Hej Eksperter,
Jeg har et problem, jeg er igang med at lave et modul som styrer brugerene i mit system, jeg ønsker så at tildele hver enkelt bruger forskellige rettigheder, dette virker som sådant også fint nok, det er først når jeg vil redigerere brugeren jeg får et problem.
Jeg løber alle mine moduler igennem, og skriver disse ud med en checkbox, problemet er bare hvordan får jeg "checked" i checkboxen hvis nu at brugeren er blevet tildelt denne rettighed?
' Start File System Objectet... Set fso = Server.CreateObject("Scripting.FileSystemObject") Set rootFolder = fso.GetFolder(folderspec) Set files = rootFolder.Files
For Each file in files on error resume next
' definer filnavn som variabel filnavn = file.name if lcase(filnavn) = lcase("mainDatabase.mdb") or lcase(filnavn) = lcase("filesystem") then ' ingen ting else
Set conn = Server.CreateObject("ADODB.Connection") Conn.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & server.MapPath("../../access/"& filnavn) tableName = replace(filnavn,".mdb","") ' Open USerDatabase
response.Write("<tr><td>" & tableName & "</td><td>") if admin = true then response.Write("<input type=""checkBox"" name=""" & tableName & """ Value=""" & tableName & """ disabled>") else itemAccess = split(ItemAccess,":") for each objItem in itemAccess if tableName = objItem then response.Write("<input type=""checkBox"" name=""" & tableName & """ Value=""" & tableName & """ checked>") end if
next response.Write("<input type=""checkBox"" name=""" & tableName & """ Value=""" & tableName & """ >") end if response.Write("</td><td>") response.Write("</TD></tr>")
du kigger vel bare på om værdien er "true" og i givet fald skriver du "cheked" uden have tjek på din kode så noget ala -- if rs("internet") = True then response.write "<input type=""chekBox"" checked> else response.write "<input type=""chekBox""> end if
itemAccess = split(ItemAccess,":") for each objItem in itemAccess if tableName = objItem then response.Write("<input type=""checkBox"" name=""" & tableName & """ Value=""" & tableName & """ checked>") end if
next
problemet er bare at det sker inden i den anden løkke og så får jeg altså et output der ser sådan her ud:
Du har en matrix med rettigheder i den ene retning og moduler i den anden retning. Til hver af disse skal du så checke om en given bruger har rettigheder.
Jeg kan ikke helt gennemskue hvordan du gør, men jeg ville gøre således (pseudokode):
for hver fil (rækken) for hver rettighed (kolonnen) hvis bruger har rettighed generer checkbox med checkmark ellers generer checkbox uden checkmark slut hvis slut for slut for
hvorvidt brugeren har rettighed ville jeg så checke ved at køre flg. linie kode
if instr(1, ":" & ItemAccess & ":", ":" & rettighed & ":") > 0 then ' så har brugeren rettighed og der skal checkmark else ' så har brugeren ikke rettighed => ingen checkmark end if
Bær over med mig hvis jeg ikke har fattet en brik af hvad du vil, men det er det jeg tror du skal gøre... :)
Jeg kom lige til at kigge lidt mere på din kode og tror egentlig jeg har misforstået dig lidt. Så jeg prøvede lige at ændre din kode en lille smule (er der egentlig nogen årsag til at du åbner hver eneste database som du checker for rettigheder til?)... mit forslag til koden ser således ud:
' Start File System Objectet... Set fso = Server.CreateObject("Scripting.FileSystemObject") Set rootFolder = fso.GetFolder(folderspec) Set files = rootFolder.Files
on error resume next For Each file in files
' definer filnavn som variabel filnavn = file.name if lcase(filnavn) = lcase("mainDatabase.mdb") or lcase(filnavn) = lcase("filesystem") then ' ingen ting else Set conn = Server.CreateObject("ADODB.Connection") Conn.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & server.MapPath("../../access/"& filnavn) tableName = replace(filnavn,".mdb","") ' Open USerDatabase
response.Write("<tr><td>" & tableName & "</td><td>") if admin = true then response.Write("<input type=""checkBox"" name=""" & tableName & """ Value=""" & tableName & """ disabled>") else selectedValue = "" itemAccess = split(ItemAccess,":") for each objItem in itemAccess if tableName = objItem then selectedValue = " checked" end if next response.Write("<input type=""checkBox"" name=""" & tableName & """ Value=""" & tableName & """" & selectedValue & ">") end if response.Write("</td><td>") response.Write("</TD></tr>")
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.