Avatar billede zantiago Nybegynder
02. januar 2004 - 15:32 Der 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
%>
     
<tr>
<td width="132" colspan="2"><font size="2">Games</font></td>
<td width="64"><font face="Trebuchet MS" size="2">
<input type="radio" value="2" name="games" <%=strRadio12%>></td>
<td width="58"><font face="Trebuchet MS" size="2">
<input type="radio" value="3" name="games" <%=strRadio13%>></td>
<td width="257"><font face="Trebuchet MS" size="2">
<input type="radio" value="4" name="games" <%=strNoRecord1%>>
</td>
</tr>
------------------------------

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.
Avatar billede The Real Yoda Juniormester
02. januar 2004 - 15:39 #1
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
Avatar billede zantiago Nybegynder
02. januar 2004 - 15:45 #2
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") &"
Avatar billede eagleeye Praktikant
02. januar 2004 - 16:21 #3
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)
Avatar billede zantiago Nybegynder
02. januar 2004 - 16:45 #4
Egleeye - Godt at have dig med på banen..

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 "
-------------------
Avatar billede eagleeye Praktikant
02. januar 2004 - 16:48 #5
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
Avatar billede zantiago Nybegynder
02. januar 2004 - 16:54 #6
kan man så ikke undersøge - om de eksistere før man afgører om man skal bruge update eller insert?

Please lidt kode :o)
Avatar billede eagleeye Praktikant
02. januar 2004 - 17:02 #7
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
Avatar billede zantiago Nybegynder
02. januar 2004 - 17:24 #8
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
Avatar billede eagleeye Praktikant
02. januar 2004 - 17:35 #9
Det tyder på dui mangler at definere Conn_crew og åbne for Conn_crew før linje 338?
Avatar billede zantiago Nybegynder
02. januar 2004 - 17:37 #10
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...

Conn_crew = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" & Server.MapPath("../database/database.mdb") & ""
Avatar billede eagleeye Praktikant
02. januar 2004 - 17:39 #11
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
Avatar billede zantiago Nybegynder
02. januar 2004 - 17:45 #12
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
Avatar billede zantiago Nybegynder
02. januar 2004 - 18:21 #13
Er du gået helt kold? ;o)
Avatar billede eagleeye Praktikant
02. januar 2004 - 18:37 #14
Nope jeg skulle lige havde noget at spise ;)

Prøv at fjerne linje 340 den er så ikke nødvendig ved delete...:
rs.Close
Avatar billede zantiago Nybegynder
02. januar 2004 - 18:40 #15
Bare kom med et svar - Jeg har bare lavet forskellige recordsets - Det virker nu tak :o)

Et svar tak... :o)
Avatar billede eagleeye Praktikant
02. januar 2004 - 18:41 #16
Ok
Her et svar ;)
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