T Trumpf Medlem sedan feb. 2004 213 inlägg Frågan 28 jan. 2007 18:14 #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 ?
P Peter S Medlem sedan dec. 2002 5 483 inlägg 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
T Trumpf Medlem sedan feb. 2004 213 inlägg 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
P Peter S Medlem sedan dec. 2002 5 483 inlägg 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").
T Trumpf Medlem sedan feb. 2004 213 inlägg 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
T Trumpf Medlem sedan feb. 2004 213 inlägg Menar du så här?
SQL = "select * from annonser a where a.memberid = <%=Session("id")%> order by <%=Session("pris")%> desc"
M mozilla Medlem sedan juli 2001 1 084 inlägg 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.
T Trumpf Medlem sedan feb. 2004 213 inlägg 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.
P Peter S Medlem sedan dec. 2002 5 483 inlägg 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.
T Trumpf Medlem sedan feb. 2004 213 inlägg inlagt_datum finns med. Jag skrev inte upp alla kolumner........
P Peter S Medlem sedan dec. 2002 5 483 inlägg Då behöver du bara sätta session("id") till den inloggade medlemmens id.
T Trumpf Medlem sedan feb. 2004 213 inlägg 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
%>
P Peter S Medlem sedan dec. 2002 5 483 inlägg 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").
T Trumpf Medlem sedan feb. 2004 213 inlägg 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
%>
P Peter S Medlem sedan dec. 2002 5 483 inlägg <%
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 " 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 .
T Trumpf Medlem sedan feb. 2004 213 inlägg 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........
P Peter S Medlem sedan dec. 2002 5 483 inlägg Är datatypen för fältet id i members heltal (t.ex. int)? Då måste också forfattare vara det.
T Trumpf Medlem sedan feb. 2004 213 inlägg 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?
P Peter S Medlem sedan dec. 2002 5 483 inlägg 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.