Avatar billede MrGold Nybegynder
06. februar 2010 - 11:53 Der er 15 kommentarer og
1 løsning

ASP / ACCES - Udskrive et profilnavn fra en tabel udfra et ID'nr i en anden tabel

Er igang med mit online community med login, postsystem osv. og det virker fint. I min database er alle oprettede bruger tildelt autogenereret 'id' - ved ikke lige helt hvordan jeg skal formulere mit spørgsmål, men.. når folk er logget ind kommer de til siden dinside.asp hvor jeg har lavet en liste hvor de kan se hvilkne besøgende de har haft.. siden udskriver så, eks: "2, 29. januar 2010" Hvor 2 er ID'et på den besøgende. Men istedet for at den udskriver "2" skal den gå ind og finde, i databasen, profilnavnet på ID'et "2".

I databasen har jeg: bruger, mail og visitor. Under visitor har jeg: ID, Visited_af, Visited_til og dato.

Jeg smider lige noget af kildekoden til siden herunder:
---------------------------------------------------

<!--#include file="protect.inc"-->
  <%
' Databaseforbindelse - husk at angive sti til din database
Set Conn = Server.CreateObject("ADODB.Connection")
DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; "
DSN = DSN & "DBQ=" & Server.MapPath("database.mdb")
Conn.Open DSN


strSQL = "Select * From bruger Where UserID = " & Request.Querystring("UserID")
Set rs = Conn.Execute(strSQL)

sSQL="SELECT COUNT(*) as ccount from mail Where TIL = '" & Request.Querystring("UserID") & "' and læst='0'"
Set rs2 = Conn.Execute(sSQL)

aSQL="SELECT * from visitor where visited_til = '" & request.QueryString("UserID") & "'"
Set rs3 = Conn.Execute(aSQL)

'tSQL = "Select * From visitor Where visited_til = " & Request.Querystring("UserID")
'Set rs = Conn.Execute(tSQL)


%>

<% response.write "<a href='profil.asp?ShowProfile=" & rs3("visited_af") & "&UserID=" & request.QueryString("UserID") & "'>" & rs3("visited_af") & ", " & rs3("dato") & "<br>" %>
------------------------------------------------------

Så mit spørgsmål er: Hvordan gør jeg så "Visited_af" istedet for at udskrive ID'et på den besøgende, går ind og finder ud af, eksempvis hvis ID'et = 2, så går den ind under tabellen "Bruger" og tjekker feltet "UserID" og matcher ID'et 2 med UserID 2 og tar navnet fra feltet "profil"

På forhånd tak :)
Avatar billede emfr08ab Nybegynder
06. februar 2010 - 12:09 #1
Jeg er lidt forvirret over, hvad du helt præcist har problemer med. For mig at se lyder det som om, du selv har klaret alt det sværeste.

Hvis jeg har forstået det, som du har skrevet rigtigt, så prøv:

bSQL = "SELECT * FROM visitor WHERE visitor.ID = " & request.QueryString("UserID") & " "
Set rs5 Conn.Execute(tSQL)

Og så når du skal udskrive det:

<%=rs4("visited_af")%>
<%=rs4("dato")%>

Men du behøver jo ikke lægge det hele ind i variable i URL'en, som du gør. Du kan bare udskrive det direkte fra tabellen, der hvor det skal stå.
Avatar billede MrGold Nybegynder
06. februar 2010 - 13:01 #2
Hvorfor skriver du rs5 og rs4?

Det jeg har problemer med er at den udskriver teksten (eks): "2, 29. januar 2010"

Hvor 2-tallet i det her tilfælde er ID'et fra tabellen 'Visitor'. Den skal så istedet for at udskrive 2-tallet gå ind i tabellen 'bruger' og finde id'et 2 der. Og så udfra det hente navnet der står i feltet 'profil'
Avatar billede emfr08ab Nybegynder
06. februar 2010 - 13:51 #3
"Hvorfor skriver du rs5 og rs4? "

Det var en fejl. De skulle begge være det samme.

Jeg havde misforstået dit problem lidt. Men som jeg ser det, bruger du flere SQL-sætninger end nødvendigt. Men det har selvfølgelig ikke betydning for om det virker eller ej.

Det du siger er altså at dette: rs3("visited_af") giver et tal. Jeg skal lige forstå din opbygning. Den tabel der hedder visitor. Der består alle kolonner af tal (og den sidste er dato)? Altså det hele er id'er.

Du skal vel noget lignende:

bSQL = "SELECT * FROM visitor, bruger WHERE visitor.ID = " & request.QueryString("UserID") & " AND visitor.visited_af = bruger.UserID "
Set rs5 Conn.Execute(bSQL)

Og så når du skal udskrive det:

<%=rs5("")%> <-- Der skal så stå det felt i bruger, som er brugernavn.
<%=rs5("dato")%>
Avatar billede emfr08ab Nybegynder
06. februar 2010 - 13:53 #4
Men nu er jeg i tvivl om, hvad dit ID i visitor viser. Måske det i mit ovenstående skal byttes ud med Visitet_til.
Avatar billede MrGold Nybegynder
06. februar 2010 - 13:56 #5
Præcis, tabellen visitor består kun af id'er og så dato. Og ja rs3("visited_af") afgiver et tal (id'et på den besøgende)
Avatar billede MrGold Nybegynder
06. februar 2010 - 14:01 #6
Prøver at sætte et scenarie op:

Jeg logger ind som: admin (id=1), kommer ind på dinside.asp.
jeg går ind og kigger på profilen: Testbruger (id=2).

feltet 'visited_til' i tabellen 'visitor' for så tallet: 2 og 'visited_fra' for tallet: 1

Når jeg så logger ind som: Testbruger, henter den oplysningerne fra databasen, tabellen visitor, og udskriver at jeg har haft besøg af: 1

Nu skal jeg så ha den til at finde ud af hvem 1 er i tabellen 'bruger' og hente brugernavnet fra feltet 'profil'
Avatar billede emfr08ab Nybegynder
06. februar 2010 - 14:16 #7
Ville dette så ikke løse det?:

bSQL = "SELECT * FROM visitor, bruger WHERE visitor.visited_til = " & request.QueryString("UserID") & " AND visitor.visited_af = bruger.UserID "
Set rs5 Conn.Execute(bSQL)

Og så når du skal udskrive det:

<%=rs5("")%> <-- Der skal så stå det felt i tabellen bruger, som er brugernavn.
<%=rs5("dato")%>

Altså det id du har i URL'en er vel id'et på den person, hvis profil du besøger. Derfor skal vi i vores databaseudtræk have den id (UserID) til at være lig med visitor.visited_til.

Dernæst skal vi have de rigtige brugernavne fra tabellen bruger. Det må være, hvor visitor.visitor_af er lig med ID'et fra bruger. I den kode jeg har skrevet ovenover går jeg ud fra, at det er bruger.UserID. Derfor visitor.visitor_af = bruger.UserID.

Når du skal printe navnet til skærmen er det nu bare rs5("") med navnet på den kolonne mellem "" som indeholder brugernavne.
Avatar billede MrGold Nybegynder
06. februar 2010 - 14:40 #8
Jeg får siden:
Microsoft OLE DB Provider for ODBC Drivers fejl '80004005'

[Microsoft][ODBC Microsoft Access-driver] Datatyper i JOIN-udtrykket stemmer ikke overens.

/dinside.asp, linje 20

----------------------

Linje 20 = Set rs5 = Conn.Execute(bSQL)
Avatar billede MrGold Nybegynder
06. februar 2010 - 14:43 #9
Men det er vel fordi jeg skal skrive sætningen sådan:


bSQL = "SELECT * FROM visitor, bruger WHERE visitor.visited_til = '" & request.QueryString("UserID") & " AND visitor.visited_af = bruger.UserID & " & "'"
Set rs5 = Conn.Execute(bSQL)
Avatar billede MrGold Nybegynder
06. februar 2010 - 14:48 #10
Og hvis jeg ændrer den til den sætning jeg har skrevet ovenover får jeg dette:
--------------------

ADODB.Field fejl '80020009'

Enten er BOF eller EOF sand, eller den aktuelle post er blevet slettet. Den anmodede handling kræver en aktuel post.

/dinside.asp, linje 0
Avatar billede MrGold Nybegynder
06. februar 2010 - 14:57 #11
Doh, felterne i visitor var tomme.. men.. nu hvor jeg har fået værdier i felterne får jeg fejlen: "fejl '80020009'
/dinside.asp, linje 239"

hvor linje 239 er:
<% response.write "<a href='profil.asp?ShowProfile=" & rs5("visited_af") & "&UserID=" & request.QueryString("UserID") & "'>" & rs5("visited_af") & ", " & rs5("dato") & "<br>" %>
Avatar billede emfr08ab Nybegynder
06. februar 2010 - 15:44 #12
hmm tjek at det tal fra UserID fra URL'en også findes i visitor.visited_til.

Ud fra de poster hvor overstående er ens, der tjek også at et tal fra visitor.visited_af findes i bruger.UserID.
Avatar billede MrGold Nybegynder
06. februar 2010 - 16:01 #13
Det findes
Avatar billede MrGold Nybegynder
06. februar 2010 - 18:57 #14
Men kan det passe sætningen skal hedde:
----------------------------------------
bSQL = "SELECT * FROM visitor, bruger WHERE visitor.visited_til = '" & request.QueryString("UserID") & " AND visitor.visited_af = bruger.UserID & " & "'"
Set rs5 = Conn.Execute(bSQL)

-----------------------------------------

tallene i databasen er ens, men den laver stadig fejl, så det må være bSQL-sætningen den er gal med?
Avatar billede emfr08ab Nybegynder
06. februar 2010 - 20:38 #15
Jeg vil mene den skulle se således ud:

bSQL = "SELECT * FROM visitor, bruger WHERE visitor.visited_til = "& request.QueryString("UserID") &" AND visitor.visited_af = bruger.UserID "
Set rs5 = Conn.Execute(bSQL)
Avatar billede MrGold Nybegynder
19. februar 2010 - 13:24 #16
Kan ikke få det til at virke på den måde. Men har fundet på en anden måde at gøre det.

Istedet for at den skal ind og finde oplysninger fra to forskellige tabeller (bruger og mail) Så har jeg lavet et felt i (mail) som hedder 'profilnavn' og der går den så ind og henter profilnavnet istedet. Faktisk meget nemmere synes jeg
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