02. januar 2004 - 15:32Der er
15 kommentarer og 1 løsning
mange if sætninger
Hej Eksperter
Jeg har lavet noget bruger-styring på mit website. Jeg har alle brugerne i en tabel [users] Jeg har registreret deres rettigheder i en anden tabel [user_perm] Når jeg opretter en bruger ser det sådan her ud: ------------------------------ 'Tilføjer Brugerens Rettigheder If request.form("games") = 4 Then Else RS_dbase_perm.Addnew RS_dbase_perm("user_id") = RS_dbase("id") RS_dbase_perm("site") = 1 RS_dbase_perm("level") = request.form("games") End if ------------------------------ Det første der bliver gjort er at undersøge om brugeren har rettigheder til det pågældende site, i dette tilfælde "games". Der står: If request.form("games") = 4 Then Det betyder at hvis brugeren ikke har nogen rettigheder til sitet, skal der ik ske noget. (der bliver givet 3 numre, 2(redaktør), 3(skribent), 4(ingen rettigheder)) Det er altså kun hvis brugeren får tildelt en rettighed, at han/hende bliver registreret i [user_perm]
Hvis jeg vil redigere en bruger, og skal finde personens rettigheder - Gør jeg følgende: ------------------------------ <% Set RS_userperm1 = Server.CreateObject("ADODB.RecordSet") RS_userperm1.open "Select * from [user_permisions] WHERE user_id = " & RS_edit_personel("id") &" AND site = 1", Conn_crew, 1, 3
dim strNoRecord1 dim strRadio12, strRadio13 strRadio12 = "" strRadio13 = "" strNoRecord1 = "" if RS_userperm1.bof or RS_userperm1.eof then strNoRecord1 = " checked" Else If RS_userperm1("level") = 2 Then strRadio12 = " checked" End If If RS_userperm1("level") = 3 Then strRadio13 = " checked" End If end if %>
Mit problem er så hvis jeg skal opdatere brugeren - Jeg kan ikke overskue hvordan det skal skrives. Jeg prøver at skrive det på dansk, så kan I måske hjælpe med at oversætte.
Hvis brugerens rettighed er forskellig med den nye rettighed, så rediger. Hvis den nye rettighed er 4(ingne rettigheder) så skal posten slettes.
Støv, fibre og metalliske partikler kan påvirke både uptime, levetid og driftssikkerhed. Derfor arbejder flere datacentre systematisk med contamination control.
den simpleste måde at gøre det på er at opdatere den lige meget hvad.. og derefter slette hvis den er 4.. så kan du klare dig uden if sætninger..
RS_userperm1.open "update [user_permisions] set level="&request.form("games")&" WHERE user_id = " & RS_edit_personel("id") &" AND site = 1", Conn_crew, 1, 3
RS_userperm1.open "delete * from [user_permisions] where level=4 AND user_id = " & RS_edit_personel("id") &" AND site = 1", Conn_crew, 1, 3
Hvad så hvis posten ikke eksisterer? Hvis jeg ik har rettigheder til eks. games, så vil den da melde fejl, da den ikke kan finde mig: WHERE user_id = " & RS_edit_personel("id") &"
lige som du har tilføj kan du lave en if sætning sådan hvis request.form("games") er lig 4 så slet brugeren rettighed for den site. Ellers opdater retigheden. Conn skal være en connection til din database.
'Opdater Brugerens Rettigheder If request.form("games") = 4 Then SQL = "DELETE FROM user_permisions where user_id = " & RS_edit_personel("id") & " AND site = 1 " Else SQL = "UPDATE user_permisions SET [level] = " & request.form("games") & " where user_id = " & RS_edit_personel("id") & " AND site = 1 " End if Conn.Execute(SQL)
Hvis nu man opretter en bruger, som ingen rettigheder har på games, så vil han ikke fremkomme i [user_permisions]. Når jeg så vil redigere brugeren senere, vil han stadig ikke have rettigheder - Men nedenstående kræver vel en post at slette, ellers vil den vel melde fejl? ------------------- If request.form("games") = 4 Then SQL = "DELETE FROM user_permisions where user_id = " & RS_edit_personel("id") & " AND site = 1 " -------------------
Nej en delete vil ikke give fejl hvis den ikke finder nogle at slette.
Men hvis personen ikke findes vil det ikke virke med UPDATE da det kræver der en person i databasen for UPDATE virker. Det vil ikke give en fejl. Hvis en person ikke findes skal det laves med INSERT INTO sql, eller som du har lavet det med .AddNew
Jo det kan man, og man bruger et recordset til at hendte data og hvis det er tomt findes brugeren ikke og han skal tilføjes eller opdates, eks som du kan se har jeg brugt det du selv har lavet til at indsætte med:
'Opdater Brugerens Rettigheder If request.form("games") = 4 Then SQL = "DELETE FROM user_permisions where user_id = " & RS_edit_personel("id") & " AND site = 1 " Conn.Execute(SQL) Else Set rs = Server.CreateObject("ADODB.recordset") SQL = "SELECT * FROM user_permisions where user_id = " & RS_edit_personel("id") & " AND site = 1 " rs.Open SQL, Conn, 1, 3 if rs.EOF then RS.Addnew RS("user_id") = RS_edit_personel("id") RS("site") = 1 RS("level") = request.form("games") RS.Update else RS("level") = request.form("games") RS.Update end if rs.Close end if
Microsoft VBScript runtime error '800a01a8' Object required: 'Conn_crew'
/edit_writer.asp, line 338 ---------------------------------- Line 338: Conn_crew.Execute(SQL) ----------------------------------
'Opdater Brugerens Rettigheder til Games If request.form("games") = 4 Then SQL = "DELETE FROM user_permisions where user_id = " & RS_edit_personel("id") & " AND site = 1 " Conn_crew.Execute(SQL) Else Set rs = Server.CreateObject("ADODB.recordset") SQL = "SELECT * FROM user_permisions where user_id = " & RS_edit_personel("id") & " AND site = 1 " rs.Open SQL, Conn_crew, 1, 3 if rs.EOF then RS.Addnew RS("user_id") = RS_edit_personel("id") RS("site") = 1 RS("level") = request.form("games") RS.Update else RS("level") = request.form("games") RS.Update end if rs.Close end if
Jeg bruger den hele tiden.. Det er det der er så mærkeligt.. :o( Har tidligere oplevet at det ik virker når man laver sætningen som du gør med SQL = osv...
ARh og, det fordi Conn_crew er en connection string og ikke en Connection til databasen. Så det rigtigt så virker denne ikke: Conn_crew.Execute(SQL)
Så prøv at lave den om sådan her:
'Opdater Brugerens Rettigheder til Games If request.form("games") = 4 Then SQL = "DELETE FROM user_permisions where user_id = " & RS_edit_personel("id") & " AND site = 1 " Set rs = Server.CreateObject("ADODB.recordset") rs.Open SQL, Conn_crew, 1,3 rs.Close Else
ADODB.Recordset error '800a0e78' Operation is not allowed when the object is closed.
/edit_writer.asp, line 340 ----------------------------------- Line 340: rs.Close ----------------------------------- 'Opdater Brugerens Rettigheder til Games If request.form("games") = 4 Then SQL = "DELETE FROM user_permisions where user_id = " & RS_edit_personel("id") & " AND site = 1 " Set rs = Server.CreateObject("ADODB.recordset") rs.Open SQL, Conn_crew, 1,3 rs.Close Else Set rs = Server.CreateObject("ADODB.recordset") SQL = "SELECT * FROM user_permisions where user_id = " & RS_edit_personel("id") & " AND site = 1 " rs.Open SQL, Conn_crew, 1, 3 if rs.EOF then RS.Addnew RS("user_id") = RS_edit_personel("id") RS("site") = 1 RS("level") = request.form("games") RS.Update else RS("level") = request.form("games") RS.Update end if rs.Close end if
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.