Avatar billede mini-me Nybegynder
20. september 2005 - 12:23 Der 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?

eks.

Internet: []
Computersystem: []
Macromedia: []
Photoshop: []

i min database gemmer jeg værdien af checkboxen eks. internet:true, macromedia:true

det jeg ønsker er så at når jeg loader siden igen skal den vise flg.:


Internet: [x]
Computersystem: []
Macromedia: [x]
Photoshop: []


Jeg har lavet flg. kode som virker fint, bortset fra at den looper sig selv for mange gange når den skal chekke om brugeren har adgang til modulet:



<%

session("UserID2ModuleAccess") = rs("id")
ItemAccess = Rs("ModuleAccess")
admin = rs("administrator")

' 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>")
           
           
           
        end if
   
    next
%>
Avatar billede busschou Praktikant
20. september 2005 - 12:27 #1
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
Avatar billede mini-me Nybegynder
20. september 2005 - 13:05 #2
nej, problemet ligger i at de bliver gemt som en streng...

rs.update
            rs("ModuleAccess") = ""
            for each ObjItem in Request.Form()
                ' New input
                rs("ModuleAccess") = rs("ModuleAccess") & ":" & Request.Form(objItem)
               
            next
        rs.update


så jeg skal jo loope igennem outputtet...
Avatar billede mini-me Nybegynder
20. september 2005 - 15:53 #3
anyone?
Avatar billede busschou Praktikant
20. september 2005 - 16:09 #4
kan du så ikke på samme måde splitte strengen igen?
Avatar billede mini-me Nybegynder
20. september 2005 - 16:26 #5
jeg splitter da også strengen igen:

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:

Internet: [x][][][]
Computersystem: []
Macromedia: [x][][][]
Photoshop: []
Avatar billede busschou Praktikant
20. september 2005 - 16:28 #6
hmm ok...
Avatar billede softspot Forsker
21. september 2005 - 09:55 #7
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... :)
Avatar billede mini-me Nybegynder
27. september 2005 - 12:38 #8
softspot... kan du prøve at give et eksempel hvor du integerere det kode du har vist der, er stadig ikke helt med på hvordan jeg skal løse det.
Avatar billede softspot Forsker
27. september 2005 - 13:14 #9
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:

<%
  session("UserID2ModuleAccess") = rs("id")
  ItemAccess = Rs("ModuleAccess")
  admin = rs("administrator")

  ' 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>")

      conn.Close
      set conn = nothing
    end if
  next
%>
Avatar billede mini-me Nybegynder
27. september 2005 - 13:22 #10
YEs det virkede :)

Endnu engang brillere du - Bare smid et svar så får du point!
Avatar billede softspot Forsker
27. september 2005 - 14:00 #11
Super! Velbekomme :)
Avatar billede softspot Forsker
27. september 2005 - 14:26 #12
Tak for point :)
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester