webForumDet fria alternativet

tillträde endast egna inlägg

Databaser & SQLur Databashanterare & SQL

34 svar · 1 065 visningar · startad av Trumpf

Medlem sedan feb. 2004213 inlägg
Frågan#1

Hej,
Sitter och knåpar men är inte så där kunnig som alla andra här.

Har ett inloggning system som fungerar fint. Men om jag vill att medlemen ska kunna lägga upp exempel egna annonser för fösäljning går jag bet.

Har en databas som heter members där alla är registrerade.
med id, namn osv......

Nu har jag skapat en tabell som heter annonser. Och där ska man kunna lägga upp egna anonnser.

Om jag kör scriptet nedan så visar han alla annonser.

<%
Set Connect = Server.CreateObject("ADODB.Connection")
Connect.Open "Driver={Microsoft Access Driver (*.mdb)}; DBQ="& Server.MapPath("/db/members.mdb")

SQL = "SELECT * FROM annonser ORDER by id asc"

set rs=server.createobject("adodb.recordset")

rs.Open SQL, connect
%>

<%Do While not rs.eof%>
 Inlagt datum <%=rs("inlagt_datum")%><br>

<%

rs.MoveNext
loop
rs.close
%>

Men hur går jag vidare ?

Medlem sedan dec. 20025 483 inlägg
#2

I tabellen annonser har du ett fält, säg, memberId som refererar till members.id. För att visa endast medlemmens egna annonser kan du använda

select *
  from annonser a
 where a.memberid = <id>
order
    by <date> desc

där <id> är användarens id (som du kanske sparat undan i session("id") vid inloggningen) och <date> är datumfältet i annonser.

Vill du hämta information från både members och annonser samtidigt, kan du använda

select <columns>
  from members m
left outer
  join annonser a
    on m.id = a.memberid
   and m.id = <id>
order
    by a.<date> desc
Medlem sedan dec. 200012 464 inlägg
#3

Flyttas från ASP

Medlem sedan feb. 2004213 inlägg
#4

Felmeddelande:

Microsoft OLE DB Provider for ODBC Drivers error '80040e14'

[Microsoft][ODBC Microsoft Access Driver] Syntax error (missing operator) in query expression 'a.memberid = <id>'.

/skriv_mina_annons.asp, line 81

Medlem sedan dec. 20025 483 inlägg
#5

Om du delar upp koden på flera rader, skall du göra så här:

SQL = "..." &_
"..." &_
"..."

Red./ Här ändras det i snabb takt! ;)

Som jag skrev ovan är <id> det id på den användare vars information du vill plocka ut. Det sparar du troligtvis undan vid inloggningen i ex. session("id").

Medlem sedan feb. 2004213 inlägg
#6

Ni är otroliga. Jag skrev in 11:54 och ni svarade 11:56.
Tyvärr ändrade jag på hela felmeddandet som är:

Microsoft OLE DB Provider for ODBC Drivers error '80040e14'

[Microsoft][ODBC Microsoft Access Driver] Syntax error (missing operator) in query expression 'a.memberid = <id>'.

/skriv_mina_annons.asp, line 81

Medlem sedan feb. 2004213 inlägg
#7

Menar du så här?
SQL = "select * from annonser a where a.memberid = <%=Session("id")%> order by <%=Session("pris")%> desc"

Medlem sedan juli 20011 084 inlägg
#8
SQL = "SELECT * FROM annonser WHERE [i]memberid[/i] = "& Session("id") &" ORDER BY [i]inlagt_datum[/i] DESC"

Men eftersom vi inte vet vad dina tabeller/fält heter måste du själv ändra namnet på dem ifall det behövs.

Medlem sedan feb. 2004213 inlägg
#9

SQL = "SELECT * FROM annonser WHERE memberid = "& Session("id") &" ORDER BY inlagt_datum DESC"

Då får jag felmeddelande:

Microsoft OLE DB Provider for ODBC Drivers error '80040e14'

[Microsoft][ODBC Microsoft Access Driver] Syntax error (missing operator) in query expression 'memberid ='.

Mina tabeller är:

members
id
enamn
fnamn

annonser
id
titel
forfattare
pris

Det räcker med att vi får något att fungera så ska jag nog få ihop resten.
Jag har aldrig haft 2 tabeller förut. Därför problemet.

Medlem sedan dec. 20025 483 inlägg
#10

När användaren loggar in, sparar du då information om denne i någon sessionsvariabel? Syftet med session("id") är just det:

if [i]användare existerar[/i] then
  session("id") = rs("id")
  'rs("id") är då member.id
end

Är det inte intressant att veta när en annons lagts in? Jag saknar en kolumn i annonstabellen som heter "inlagt_datum" eller liknande.

Medlem sedan feb. 2004213 inlägg
#11

inlagt_datum finns med. Jag skrev inte upp alla kolumner........

Medlem sedan dec. 20025 483 inlägg
#12

Då behöver du bara sätta session("id") till den inloggade medlemmens id.

Medlem sedan feb. 2004213 inlägg
#13

jag har session("id") vid inloggningen.

Men var lägger jag if satsen som ni skrev ovan?

<%
Set Connect = Server.CreateObject("ADODB.Connection")
Connect.Open "Driver={Microsoft Access Driver (*.mdb)}; DBQ="& Server.MapPath("/db/members.mdb")

SQL = "SELECT * FROM annonser WHERE memberid = "& Session("id") &" ORDER BY inlagt_datum DESC"

set rs=server.createobject("adodb.recordset")

rs.Open SQL, connect
%>

<%Do While not rs.eof%>

 Inlagt datum <%=rs("id")%><br>

<%

rs.MoveNext
loop
rs.close
%>

Medlem sedan dec. 20025 483 inlägg
#14

Lägg den kring den kod du visar ovan. I all enkelhet:

if session("id") <> "" then
  'din kod
end if

Red./ När användaren loggar in kollar du om denne existerar i members-tabellen. Är så fallet sätter du session("id") till rs("id").

Medlem sedan feb. 2004213 inlägg
#15

Om jag lägger in if så blir det fel meddelande:
Microsoft VBScript compilation error '800a0400'

Expected statement

/skriv_mina_annons.asp, line 91

 Inlagt datum <%=rs("inlagt_datum")
^

Har följande kod nu (uppdaterat kl 15:18)

<%
Set Connect = Server.CreateObject("ADODB.Connection")
Connect.Open "Driver={Microsoft Access Driver (*.mdb)}; DBQ="& Server.MapPath("/db/members.mdb")

SQL = "SELECT * FROM annonser WHERE Session('id') = "& Session("id") &" ORDER BY inlagt_datum DESC"

set rs=server.createobject("adodb.recordset")

rs.Open SQL, connect
%>

<%Do While not rs.eof%>

<%
if session("id") <> "" then

 Inlagt datum <%=rs("inlagt_datum")%><br>

end if
%>

<%

rs.MoveNext
loop
rs.close
%>

Medlem sedan dec. 20025 483 inlägg
#16
<%
if session("id") = "" then
  response.write "ej inloggad"
else
  Set Connect = Server.CreateObject("ADODB.Connection")
  Connect.Open "Driver={Microsoft Access Driver (*.mdb)}; DBQ="& Server.MapPath("/db/members.mdb")
  
  SQL = "SELECT * FROM annonser WHERE [red]forfattare[/red] = "& Session("id") &" ORDER BY inlagt_datum DESC"
  
  set rs=server.createobject("adodb.recordset")
  
  rs.Open SQL, connect
  
  Do While not rs.eof  
    response.write "&nbsp;Inlagt datum " & rs("inlagt_datum") & "<br>"  
    rs.MoveNext
  loop 
  rs.close
  connect.close
end if
%>

Jag utgår från att fältet forfattare refererar till id i members.

Medlem sedan feb. 2004213 inlägg
#17

Det ser bättre och bättre ut. Men jag har något galet fel fortfarande.
Troligen ligger felet i min databas. Får kolla när jag kommer hem från jobbet.

Felet just nu:

Microsoft OLE DB Provider for ODBC Drivers error '80040e07'

[Microsoft][ODBC Microsoft Access Driver] Data type mismatch in criteria expression.

/skriv_mina_annons.asp, line 84

Red/ Jag har kopierat det ovan du har skrivit. Stort tack för hjälp idag.
Ev återkommer jag imorgon........

Medlem sedan dec. 20025 483 inlägg
#18

Är datatypen för fältet id i members heltal (t.ex. int)? Då måste också forfattare vara det.

Medlem sedan feb. 2004213 inlägg
#19

Undrar om jag har fattat detta rätt?!

Min access fil ser ut så här.

Mina tabeller

members
id
user

annonser
id
titel
forfattare
inlagtdatum

Hur kopplar man ihop att members med id kopplar ihop sig till sina annonser i tabellen annonser?

Medlem sedan dec. 20025 483 inlägg
#20

Definiera members.id och annonser.forfattare till att vara av samma datatyp (t.ex int). Antag att medlemmen Kalle får id-värdet 123 och att denne lägger in en annons – då sparar du värdet 123 i forfattare-kolumnen och använder någon typ av JOIN (se ex. inlägg #2) för att hämta Kalles annonser.

148 ms totalt · 3 externa anrop · v20260731065814-full.25f56b17
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
146 ms — hämta tråd, inlägg och bilagor (db)