Avatar billede lund_dk Praktikant
12. juni 2006 - 20:02 Der er 19 kommentarer og
1 løsning

Kun bruger må se privat besked

Hvordan kringler jeg lige denne

strGuestbook = "select * from guestbook where receiverID = " & ID & " order by added desc"
Set RSGuestbook = conn.Execute(strGuestbook)


I min tabel har jeg kolonne: private som er false/true

Hvis der i min tabel er en besked med Private = true, må denne KUN vises hvis sender ID eller sender ReceiverID er forbi.

udskriver en brugers session id med session("ID")

tabellen kan ses på www.lund.dk/tabel.gif
Avatar billede madeindk Nybegynder
12. juni 2006 - 20:06 #1
<%
if rs("private") = true then

if Cstr(request.querystring("id")) = Cstr(session("id")) OR Cstr(session("id")) = Cstr(rs("ReceiverID")) then

response.write("Privat besked")

end if

else
response.write("Ikke privat besked")
end if
%>
Avatar billede madeindk Nybegynder
12. juni 2006 - 20:08 #2
Eller...

<%
if rs("private") = true then

  if Cstr(request.querystring("id")) = Cstr(session("id")) OR Cstr(session("id")) = Cstr(Set RSGuestbook("ReceiverID")) then
  response.write("Privat besked")
  end if

else
response.write("Ikke privat besked")
end if
%>
Avatar billede madeindk Nybegynder
12. juni 2006 - 20:09 #3
Hov - nu er jeg da helt galt på den.

<%
if RSGuestbook("private") = true then

  if Cstr(request.querystring("id")) = Cstr(session("id")) OR Cstr(session("id")) = Cstr(RSGuestbook("ReceiverID")) then
  response.write("Privat besked")
  end if

else
response.write("Ikke privat besked")
end if
%>
Avatar billede lund_dk Praktikant
12. juni 2006 - 20:25 #4
Ja sådan ville jeg også løse det MEN!

der skal væra paging i mit script, det betyder, hvis en bruger kigger forbi gæstebogen, om brugeren hverken er modtager eller afsender, og de sidste 20 beskeder i gæstebogen er privat, så vil den besøgende bruger bare få tomme sider ved paging.. og det vil jeg helst undgå, derfor ville jeg se om det kunne løses i sql sætningen..
Avatar billede madeindk Nybegynder
12. juni 2006 - 20:31 #5
Den har jeg også tænkt meget over. Jeg ikke om det kan løses på nogen måde. Har ikke set det på nogen sider - ikke engang Arto har gjort et forsøg på at løse det og jeg skulle mene at de var rimelig dygtige derinde :-)
Avatar billede nielle Nybegynder
12. juni 2006 - 21:27 #6
Hvorfor ikke løse det direkte i din SQL-sætning:

SELECT * FROM guestbook WHERE (private=false OR (private=true AND "ekstra betingelse")) AND receiverID = " & ID & " ORDER BY added DESC"

Her skal "ekstra betingelse" erstattes med de betingelser der skal være opfyldt før man må se private poster.
Avatar billede lund_dk Praktikant
13. juni 2006 - 11:45 #7
nielle: er netop i min sql sætning jeg vil løse det..

Kan du hjælpe mig med få  "ekstra betingelse" på plads også, ved hjælp af info i spørgsmålet?
Avatar billede nielle Nybegynder
13. juni 2006 - 11:57 #8
Det vil jeg gerne, men så må du lige formulere spørgsmålet en gang til, for jeg fik ikke rigtigt fat i hvad du egentlig mener.

Hvad er det for nogen omstændigheder man må se de private=true beskeder, og hvornår må man ikke se dem?
Avatar billede lund_dk Praktikant
13. juni 2006 - 12:31 #9
Jeg har et community, hvor en en given bruger har en gæstebog tilknyttet.
I denne gæstebog er der så mulighed for at oprette private beskeder.

I min tabel har jeg følgende:
senderID = BrugerID for den der har skrevet beskeden
ReceiverID = BrugerID for den har har modtaget besked
Private= true/false om beskeden er privat eller ikke.

Kommer der en bruger forbi en gæstebog hvor der er private beskeder, hvor den besøgende bruger hverken er modtager eller afsender, skal denne bruger selvfølgelig ikke kunne se de private beskeder.

Derimod er der en bruger som kigger i gæstebogen, hvor brugeren enten modtager eller afsender en af en privat besked, skal denne private besked så vises.

En besøgendes brugerID henter jeg med session("ID")

Håber du forstår spørgsmålet korrekt nu..
Avatar billede nielle Nybegynder
13. juni 2006 - 12:41 #10
Klart og tydeligt :^)

sql = "SELECT * FROM guestbook WHERE
(private=false OR (private=true AND (receiverID = " & session("ID") & " OR senderID = " & session("ID") & "))) AND receiverID = " & ID & " ORDER BY added DESC"
Avatar billede nielle Nybegynder
13. juni 2006 - 12:43 #11
Du får den også lige på formateret form (kan selvfølgeligt ikke bruges sådan i din ASP-kode):

"
SELECT *
FROM guestbook
WHERE

(
    private=false OR
    (
        private=true AND
        (
            receiverID = " & session("ID") & " OR
            senderID = " & session("ID") & "
        )
    )
) AND
receiverID = " & ID & "
ORDER BY added DESC
"
Avatar billede lund_dk Praktikant
13. juni 2006 - 12:49 #12
Ser lovende ud ja :D
Men får dog her fejlen:

Der er en syntaksfejl, fordi der mangler en operator. i forespørgselsudtrykket "( private=false OR ( private=true AND (receiverID = 7 OR senderID = 7)) AND receiverID = 7 ORDER BY added DESC".
Avatar billede nielle Nybegynder
13. juni 2006 - 12:55 #13
Prøv med denne variant:

sql = "SELECT * FROM guestbook WHERE receiverID = " & ID & " AND (private = false OR (private = true AND (receiverID = " & session("ID") & " OR senderID = " & session("ID") & "))) ORDER BY added DESC"

og prøv også lige - som debug - at skrive sql-sætningen ud før at du prøver at gennemføre den:

Response.Write "DEBUG: " & sql "<br>"

Hvis man gør dette er det som regel nemmere at gennemsue fejlen fordi at SQL-udtrykket så står i sin "rene" form.
Avatar billede lund_dk Praktikant
13. juni 2006 - 13:07 #14
Det virker som det skal nu..

Lige en lille tilføjelse som jeg glemte, er brugerens session("ADMIN") = true
Så skal brugeren kunne se privatbeskeder også, uanset som id er modtager eller afsender, hvis det kan flettes ind?
Avatar billede lund_dk Praktikant
13. juni 2006 - 13:27 #15
Kan selvfølgelig også bare lave en

if session("ADMIN") = true then
strGuestbook = "select * from guestbook where receiverID = " & ID & " order by added desc"
else
sql = "SELECT * FROM guestbook WHERE receiverID = " & ID & " AND (private = false OR (private = true AND (receiverID = " & session("ID") & " OR senderID = " & session("ID") & "))) ORDER BY added DESC"
end if
Avatar billede lund_dk Praktikant
13. juni 2006 - 13:27 #16
if session("ADMIN") = true then
strGuestbook = "select * from guestbook where receiverID = " & ID & " order by added desc"
else
strGuestbook = "SELECT * FROM guestbook WHERE receiverID = " & ID & " AND (private = false OR (private = true AND (receiverID = " & session("ID") & " OR senderID = " & session("ID") & "))) ORDER BY added DESC"
end if
Avatar billede lund_dk Praktikant
13. juni 2006 - 13:30 #17
Forresten, så giver den følgende fejl, hvis en bruger kigger i en gæstebog uden at være logget ind, altså når session("ID") er lig med "" og ikke har noget ID
Avatar billede nielle Nybegynder
13. juni 2006 - 15:34 #18
Formentlig sådan her:

If Session("ADMIN") = true Then
    strGuestbook = "SELECT * FROM guestbook WHERE receiverID = " & ID & " ORDER BY added DESC"
Else If "" & Session("ID") = ""
    strGuestbook = "SELECT * FROM guestbook WHERE receiverID = " & ID & " AND private = false ORDER BY added DESC"
Else
    strGuestbook = "SELECT * FROM guestbook WHERE receiverID = " & ID & " AND (private = false OR (private = true AND (receiverID = " & Session("ID") & " OR senderID = " & Session("ID") & "))) ORDER BY added DESC"
End If
Avatar billede lund_dk Praktikant
14. juni 2006 - 22:38 #19
Tak for hjælpen
Du må gerne smide et svar
Avatar billede nielle Nybegynder
14. juni 2006 - 22:43 #20
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