Avatar billede arvin Nybegynder
09. november 2003 - 13:20 Der er 27 kommentarer og
1 løsning

Tjek database om eksistens

Hej Eksperter

Jeg har to tabeller. Den ene med brugere [tabel X], og den anden med deres rettigheder [Tabel Y].
Der er flere sider, som de skal have rettigheder til, eks. et site om spil, og et site om film.
I [tabel y] er der en række for hver site de har adgang til. Eks:
---------------------
user    site    level
4      spil      2
4      film      3
5      spil      3
---------------------
Når jeg så vil redigerer i bruger nummer 4 eksempelvis, har jeg nogle radiobuttons, hvor fra man kan vælge deres level (2,3 og 4).
---------------------
<tr>
<td width="132" colspan="2"><font size="2">Spil</font></td>
<td width="64"><input type="radio" value="2" name="spil"></td>
<td width="58"><input type="radio" value="3" name="spil"></td>
<td width="257"><input type="radio" value="4" name="spil"></td>
</tr>
<tr>
<td width="132" colspan="2"><font size="2">Film</font></td>
<td width="64"><input type="radio" value="2" name="film"></td>
<td width="58"><input type="radio" value="3" name="film"></td>
<td width="257"><input type="radio" value="4" name="film"></td>
</tr>
---------------------

Det er så meningen at den skal tjekke [tabel y] om hvilke rettigheder brugeren har i den tabel.
Det skal lige siges at har man tidligere valgt at brugeren ikke har rettigheder (value 4) så bliver der ikke registreret noget i databasen. Dvs. at scriptet skal tjekke om der findes en post i databasen med brugerens id og sitet værdi (eks. spil) - Hvis ikke skal:
<input type="radio" value="4" name="spil"> være "checked".

Findes posten der i mod skal den finde den værdi eks. 2 og så gøre:
<input type="radio" value="2" name="spil"> "checked".

Håber I forstår...

//Arvin
Avatar billede loss Nybegynder
09. november 2003 - 13:26 #1
du kan lave et count på tabellen, med de kriterier du selv nævner, og hvis countet er størrere end 0, så er det true.

SELECT COUNT(*) AS Antal FROM Tabel WHERE USER_ID = '" & ID & "' AND RETTIGHED_1 = '" & Rettighed_1 & "'
Avatar billede thesurfer Nybegynder
09. november 2003 - 13:29 #2
prøv:

<%
Option explicit
dim mysite, myvalue

strSQL = "Select TOP 1 from TABELY where id = " & bruger_id
' åben forbindelsen

if (not rs.bof) and (not rs.eof) then
' feltet eksisterer
mysite = rs("site")

if len(rs("level")) = 0 then
  ' længden af indholdet af feltet level er 0 -> der står ikke noget -> brugeren har ikke rettigheder
    myvalue = "4"
else
    myvalue = rs("level")
end if
%>

<input type="radio" value="<%=myvalue%>" name="<%=mysite%>" checked>
Avatar billede thesurfer Nybegynder
09. november 2003 - 13:32 #3
Mht "Top 1":
Jeg bruger her Top 1, som vælger den først record/post. Jeg er ikke helt sikker på "Top 1", hvis det ikke virker, kan du prøve med "*" i stedet for "Top 1".

Mht "id =.."
Jeg mener at når man tester/spørger til en værdi som er et tal, skal der ikke ' udenom..
eksempel:
bruger_id er et tal: where id = " & bruger_id
bruger_id er string/tekst: where id = '" & bruger_id & "'"
Avatar billede loss Nybegynder
09. november 2003 - 13:33 #4
Top 1 virker kun med MSSQl og Ikke med MySQL der skal du bruge Limit istedet..

Det bruges bare på et lidt anden måde.

Hvilken db kører du med ?
Avatar billede arvin Nybegynder
09. november 2003 - 13:36 #5
Access
Avatar billede loss Nybegynder
09. november 2003 - 13:37 #6
ok, der virker top vist osse..
Avatar billede thesurfer Nybegynder
09. november 2003 - 13:37 #7
brug "*".. det virker altid..

mht Top 1 = MssQl and (not MySQL): det tror jeg altså ikke på..
Avatar billede arvin Nybegynder
09. november 2003 - 13:37 #8
Har prøvet med dette, men jeg mangler en tjek funktion

<%
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
%>     
<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" <% if rs_userperm1("level") = "2" Then response.write ("checked") End If%>></td>
<td width="58"><font face="Trebuchet MS" size="2">
<input type="radio" value="3" name="games"<% if rs_userperm1("level") = "3" Then response.write ("checked") End If%>></td>
<td width="257"><font face="Trebuchet MS" size="2">
<input type="radio" value="4" name="games" <% if rs_userperm1("level") = "4" OR rs_userperm1("level") = "" Then response.write ("checked") End If%>></td>
</tr>
Avatar billede loss Nybegynder
09. november 2003 - 13:38 #9
Det virker ikke med MySql.. 100 % :)
Avatar billede thesurfer Nybegynder
09. november 2003 - 13:42 #10
hvad for en tjek funktion? hvad skal den gøre..?

det ville være nemmer at overskue hvis du havde dine if-sætninger i asp kode, og smed resultat over en variabel.. derefter bruger du <%=variabelnavn%> i stedet for <% if rs_userperm1("level") = "3" Then response.write ("checked") End If%>
Avatar billede arvin Nybegynder
09. november 2003 - 13:47 #11
Tjekfunktion = Hvis der ikke findes nogen poster hvor eks. site = 1 og bruger = 3, så skal den gøre noget andet...
Avatar billede thesurfer Nybegynder
09. november 2003 - 13:49 #12
if rs.bof or rs.eof then
' vi er enten før ved starten eller slutning -> ingen poster fundet..
end if

det er det modsatte af:
if (not rs.bof) and (not rs.eof) then
' vi er hverken ved start eller slutning -> vi har fundet en post
Avatar billede arvin Nybegynder
09. november 2003 - 13:55 #13
Cool - Tror jeg prøver det - Vender lige tilbage
Avatar billede arvin Nybegynder
09. november 2003 - 14:11 #14
Ok - Så har jeg det her nu:

<%
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
if RS_userperm1.bof or RS_userperm1.eof then
%>     
<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" <% if rs_userperm1("level") = "2" Then response.write ("checked") End If%>></td>
<td width="58"><font face="Trebuchet MS" size="2">
<input type="radio" value="3" name="games"<% if rs_userperm1("level") = "3" Then response.write ("checked") End If%>></td>
<td width="257"><font face="Trebuchet MS" size="2">
<input type="radio" value="4" name="games"></td>
</tr>

I den sidste radiobutton vil jeg så have den checked hvis posten ikke eksisterer, hvordan skriver jeg det?

<% if [et eller andet] then response.write "checked" %>
Avatar billede thesurfer Nybegynder
09. november 2003 - 14:29 #15
igen.. brug variabler :)

dim strNoRecord
strNoRecord = ""
if rs.bof or rs.eof then
strNoRecord = " checked"
end if

<input type="radio" value="4" name="games"<%=strNoRecord%>>

Læg mærke til at jeg har mellemrum i " checked", og ikke i selve input feltet..
så undgår du mellemrum uden noget efter det..
Avatar billede arvin Nybegynder
09. november 2003 - 15:12 #16
Thanx det virker - I hvert fald med den der ikke eksisterer - Hvad med de andre to?
Jeg har nu:

<%
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
strNoRecord1 = ""
if RS_userperm1.bof or RS_userperm1.eof then
strNoRecord1 = " checked"
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"></td>
<td width="58"><font face="Trebuchet MS" size="2">
<input type="radio" value="3" name="games"></td>
<td width="257"><font face="Trebuchet MS" size="2">
<input type="radio" value="4" name="games" <%=strNoRecord1%>>
</td>
</tr>
Avatar billede thesurfer Nybegynder
09. november 2003 - 15:15 #17
øh.. hvad med dem?
Avatar billede arvin Nybegynder
09. november 2003 - 15:17 #18
Da skal den skrive checked hvis værdien er henholdsvis 2 eller 3
Avatar billede thesurfer Nybegynder
09. november 2003 - 15:28 #19
hvor mange radioboxe er der?
Avatar billede thesurfer Nybegynder
09. november 2003 - 15:28 #20
..er der kun "2, 3, 4" ?
Avatar billede arvin Nybegynder
09. november 2003 - 15:31 #21
ja
Avatar billede thesurfer Nybegynder
09. november 2003 - 15:51 #22
jeg har lavet noget javascript til at automatisk gøre det..:


<%
' hent info fa db
' hvis alt er ok:
strAspValgt = rs("level")
%>

<form name="FORMNAVN">

<tabellen starter her>

radio
blah
blah
blah

</tabellen slutter her>

</form>

i bunden af din side:
<SCRIPT LANGUAGE="JavaScript">
<!--
var frm = document.FORMNAVN;
var ErValgt = <%=strASPvalgt%>;
if (frm.spil[0].value == ErValgt) { frm.spil[0].checked = true; }
if (frm.spil[1].value == ErValgt) { frm.spil[1].checked = true; }
//-->
</SCRIPT>
Avatar billede thesurfer Nybegynder
09. november 2003 - 15:53 #23
..du skal så ændre FORMNAVN til navnet på din form..
jeg kan jo ikke se hvad din form hedder..
Avatar billede arvin Nybegynder
09. november 2003 - 16:13 #24
Kan det ik gøre med asp? Lidt ala det første du lavede hvor man spørger om:
If RS_userperm5("level") = 2 Then response.write ("checked") End If ??
Avatar billede thesurfer Nybegynder
09. november 2003 - 16:19 #25
du kunne bruge:
If RS_userperm5("level") = 2 Then strRadio2 = " checked"
If RS_userperm5("level") = 3 Then strRadio3 = " checked"


<input type="radio" value="2" name="spil"<%=strRadio2%>>
<input type="radio" value="3" name="spil"<%=strRadio3%>>
Avatar billede thesurfer Nybegynder
09. november 2003 - 16:20 #26
før if-sætningerne:
dim strRadio2, strRadio3
strRadio2 = ""
strRadio3 = ""
Avatar billede arvin Nybegynder
09. november 2003 - 16:34 #27
Kom med et svar så skal du få nogle points - Du har været en KÆMPE hjælp... TARK :o)
Avatar billede thesurfer Nybegynder
09. november 2003 - 16:45 #28
Det var så lidt :)
her er 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