Avatar billede krel Nybegynder
18. december 2007 - 14:28 Der er 23 kommentarer og
1 løsning

opdatere ved login/out

Hey eksperter!

Jeg har forsøgt at lave noget kode men får en http 500 error klasket retur af explorer....

Jeg vil gerne lave det sådan at når en person logger ind på siden sættes et felt ved navn "online" til 'true'

Når person logger ud vil jeg gerne opdatere to felter
1 "online" skal sættes til 'false' igen og
2 "sidstonline" skal sættes til '(dags dato)'

* her er koden til min login
<% Response.Buffer = True
Set Conn = Server.CreateObject("ADODB.Connection")
DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath ("/fpdb/kongelogen.mdb")
Conn.Open DSN

Dim strKongenavn, strPassword
strUsername = (Trim(Replace(request.form("username"),"'","''" )))
strPassword = (Trim(Replace(request.form("password"),"'","''" )))

SQL = "select * from konge where username= '" & strUsername & "' and password= '" & strPassword & "'"
Set rs = Conn.Execute(SQL)

If Not (rs.BOF Or rs.EOF) Then
Session("konge") = rs("username")
Session("id") = rs("id")
Session("logemedlem") = True
Conn.Close
Set Conn = Nothing
Set Conn = Server.CreateObject("ADODB.Connection")
DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath ("/fpdb/kongelogen.mdb")
Conn.Open DSN
SQL = "UPDATE [konge] SET [online] = 'true' WHERE [id] = "&Session("id")
Set rs = Conn.Execute(SQL)
Conn.Close
Set Conn = Nothing
Response.redirect "index.asp"
Else
Response.redirect "login.asp"
End If
%>

** her er koden til min logud
<% Response.Buffer = True
dtmDate = Request.QueryString("date")
dtmToday = Date

If dtmDate = "" Then
dtmDate = Date
Else
dtmDate = CDate(dtmDate)
End if
intYear = Year(dtmDate)
strMonth = MonthName(Month(dtmDate))
intDayOfMonth = Day(dtmDate)
dtmFirstDate = DateAdd("d", (-intDayOfMonth)+1, dtmDate)
intFirstDay = Weekday(dtmFirstDate, vbMonday)

Set Conn = Server.CreateObject("ADODB.Connection")
DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath ("/fpdb/kongelogen.mdb")
Conn.Open DSN
SQL = "UPDATE [konge] SET [sidstonline] = '"&dtmDate&"', [online] = 'false' WHERE [id] = "&Session("id")
Set rs = Conn.Execute(SQL)
Conn.Close
Set Conn = Nothing
Session.Abandon
Response.redirect "index.asp"
%>

mvh.
Kristian
Avatar billede fennec Nybegynder
18. december 2007 - 14:55 #1
Funktioner >> internetinstillinger >> Advanceret >> Fjern afkrydsning i "Vis medeelser om uskadelige HTTP fejl"

Så får du den rigtige ASP fejl, og vi har noget at arbejde ud fra.
Avatar billede krel Nybegynder
18. december 2007 - 15:05 #2
dette er for logud

Microsoft OLE DB Provider for ODBC Drivers error '80040e07'
[Microsoft][ODBC Microsoft Access Driver] Data type mismatch in criteria expression.
/version2/konge/logud.asp, line 20

linie 20: er udfør min sql..
Avatar billede fennec Nybegynder
18. december 2007 - 15:18 #3
Går ud fra du menner denne sql:
SQL = "UPDATE [konge] SET [online] = 'true' WHERE [id] = "&Session("id")

Hvad er datatyperne på online og ID kolonnerne (Tal/Tekst...)??
Avatar billede krel Nybegynder
18. december 2007 - 15:28 #4
det er en sand/falsk
Avatar billede krel Nybegynder
18. december 2007 - 15:29 #5
id er autonr. session("id") bliver sat når personen logger ind ud fra brugernavn.
Avatar billede fennec Nybegynder
18. december 2007 - 15:36 #6
Så tror jeg det er online de er problemet. Kan ikke huske hvad den modtager men prøv med:
SQL = "UPDATE [konge] SET [online] = 1 WHERE [id] = "&Session("id")

Længere nede i koden har du en false. Hvis det virker med 1 så brug 0 her:
SQL = "UPDATE [konge] SET [sidstonline] = '"&dtmDate&"', [online] = 0 WHERE [id] = "&Session("id")
Avatar billede krel Nybegynder
18. december 2007 - 15:51 #7
jamen fatastisk.. underligt det med at bruge tal i stedet for true/false... but anyway skal du i hvert fald ha dine point fennec!
Avatar billede fennec Nybegynder
18. december 2007 - 15:55 #8
.o) <-- One Eyed Jack
Avatar billede krel Nybegynder
18. december 2007 - 16:04 #9
hehe..
hvordan kan det være at når jeg laver udtræk fra "online" at så virker det ikke optimalt?

har brugt dette:
if rs("online") = 1 then stronline = "online" end if
if rs("online") = 0 then stronline = "offline" end if

alle bliver bare sat til offline selvom der i DB'en er flueben/true
Avatar billede fennec Nybegynder
18. december 2007 - 16:15 #10
Når man komunikere til databasen via SQL skal man følge visse dataformater. Når data kommer tilbage ligger det med i recordsettet og ASP omsætter det selv til dens datatype.

Derfor når du får true/false data tilbage burde det ikke være nødvendigt at sammenligne med noget, da værdien allerede er true/false. Koden burde derfor bare være:

if rs("online") then stronline = "online" end if
if rs("online") then stronline = "offline" end if
Avatar billede krel Nybegynder
18. december 2007 - 16:25 #11
ok den forstår jeg ikke helt.. prøver lige at forklare hvordan jeg læser det du skriver:

hvis et felt i db'en (onlie), så skal stronline's værdi være online

hvor stilles kriteriet til hvad feltet (online) skal være??
Avatar billede fennec Nybegynder
18. december 2007 - 16:38 #12
Næh nej :o)

Det handler om kommunikations formater. Når du f.eks indsætter datoer i en Access database skal formatet være mm-dd-yyyy, men når det kommer ud igen, omdanner ASP selv det til en ASP dateTime datatype, og derfor bliver datoen vist i henhold til LCID instillingen.

I dit tilfælde er datatypen i Access true/false, men kommunikation til databasen foregår med 1/0. Når data kommer ud burde ASP omdanne til en boolian variabel, så din rs("xxx") variabel indeholder ikke 1 eller 0 men derimod true eller false.

Det er lidt svært at forklare, men håber det lykkedes for mig.
Avatar billede krel Nybegynder
18. december 2007 - 16:43 #13
mangler du så ikke noget så:

if rs("online") then stronline = "online" end if
if rs("online") then stronline = "offline" end if

bliver til

if rs("online") = true then stronline = "online" end if
if rs("online") = false then stronline = "offline" end if

??
Avatar billede fennec Nybegynder
18. december 2007 - 16:49 #14
Faktisk ikke. If sætninger skal bare have en true/false værdi. Det behøver ikke komme fra en sammenligning:

"if true then" er en fuld lovlig if sætning.
"if true=true then" er også en lovlig sætning, men unødvendig.
Avatar billede krel Nybegynder
18. december 2007 - 16:53 #15
okay fatter hat?

kan ikke se man bare kan skrive

<%
if true then stronlie = "online" end if
%>

man er vel nød til at vide hvad der skal være true?! er det bananer et dbpost eller noget helt trdje??
Avatar billede fennec Nybegynder
18. december 2007 - 16:58 #16
Det er jo rs("online") som er true eller false.

Så så også lige en fejl i mit kode eksempel:
if rs("online") then
  stronline = "online"
else
  stronline = "offline"
end if
Avatar billede krel Nybegynder
18. december 2007 - 17:04 #17
nu har jeg prøvet bare at lave en copy/paste af dit sidste eks her og det virker ikke.. alle er sat som offline til trods for at jeg lige er logget på...

kaldet til db'en laves først når siden åbnes ikk?

grunden til jeg spør så meget er at jeg gerne vil lære af mine fejl frem for blot at kopiere det første og det bedste herinde fra og så bare sætte det ind uden at jeg selv kan se hvad det er der foregår....

håber det er ok c",)
Avatar billede fennec Nybegynder
18. december 2007 - 17:13 #18
Prøv at glemme if sætningen et kort øjeblik, og bare udskriv rs variablen i stedet for stronline.

response.write rs("online")
Avatar billede krel Nybegynder
18. december 2007 - 17:22 #19
ok for at se hvad outputtet er selvfølgelig ;) havde jeg ikke lige tænkt på (endnu en lille fidus til samlingen c",)

den giver false
Avatar billede fennec Nybegynder
18. december 2007 - 17:28 #20
på alle linjer??

Ser ud som om den ikke opdatere databasen så. Prøv at åbne databasen i Access og se hvad data er. Der skulle jo gerne være en true..
Avatar billede krel Nybegynder
18. december 2007 - 17:40 #21
det har jeg prøvet og den person jeg er logget ind som er true..
har sat det ind i loopet så nu står der

bruger#1 Falseoffline
bruger#1 Falseoffline
bruger#1 Falseoffline
bruger#1 Trueoffline
bruger#1 Falseoffline
bruger#1 Falseoffline

....
Avatar billede krel Nybegynder
18. december 2007 - 21:25 #22
fandt selv min fejl med hensyn til online/offline :)
- havde placeret if'en uden for loopen hvorfor den bare to den første i db'en...!

men takker for første svar og din tid Fennec!
/Kristian
Avatar billede fennec Nybegynder
19. december 2007 - 08:23 #23
Der mistede jeg vist tråden...

Som jeg ser din løkke der så er den samme bruger online og offline. Det kan da vist ikke være rigtig.

Tror ikke jeg kan hjælpe mere uden at have set databasen og alt kode. Simpelthen fordi jeg ikke er med på, hvordan du har tænkt det skal fungere...

Det bedste er nok at stille et nyt ? så der kan komme friske (andre) øjne på dit problem.
Avatar billede krel Nybegynder
19. december 2007 - 12:36 #24
^
okay mit lille eksempel gik lidt hurtigt... det skulle selvfølgelig være:

bruger#1 Falseoffline
bruger#2 Falseoffline
bruger#3 Falseoffline
bruger#4 Trueoffline
bruger#5 Falseoffline
bruger#6 Falseoffline

MEN som sagt har jeg selv fundet min fejl og nu virker det helt som det skal.. og igen tak for din tid fennec.
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