22. oktober 2000 - 12:05Der er
31 kommentarer og 1 løsning
login-problem
Jeg har et lille problem ! Problemet er at efter en bruger er logget ind så skal den næste side vise brugerens info(Navn, adr o.s.v), men den viser kan den forkerte bruger - altså den der er først i tabelen og ikke den bruger der logger ind... Her er koden
<BODY> <H2>Du har indtastet følgende oplysninger:</H2>
<% dim connectionString connectionString = \"DRIVER={Microsoft Access Driver (*.mdb)};DBQ=\"&Server.MapPath(\"cs2000.mdb\") dim forbindelse set forbindelse = Server.CreateObject(\"ADODB.Connection\") \' Nutshell side 162. forbindelse.Open(connectionString)
dim kilde kilde = \"Kunde\" dim recordSet dim showRecordSet() set recordSet = forbindelse.Execute(\"select * from Kunde \") While Not recordset.EOF Response.Write recordset(\"kundenavn\") Wend
recordSet.close() forbindelse.close() set recordSet = Nothing \' de-allokerer RecordSet objektet set forbindelse = Nothing \' de-allokerer Connection objektet %>
Du er nødt til at fortælle os, hvad for en entydig variabel/session du bruger til at skelne mellem dine brugere, hvis :
Det er en session, der hedder Session(\"BrugerID\") så skal den hedde : set recordSet = forbindelse.Execute(\"select * from Kunde WHERE ID = \" & Session(\"BrugerID\") & \"\")
Hvis det er en almindelig variabel, er det bare at erstatte brugerbetegnelsen i SQL-strengen: set recordSet = forbindelse.Execute(\"select * from Kunde WHERE ID = \" & BrugerID & \"\")
response.buffer = true SqlQ = \"Select * From Login(Dette er tabellen hvor brugerlogin oplysninger ligger) where Brugernavn = \'\" & request(\"brugernavn\") & \"\' And Adgangskode = \'\" & requesrt(\"adgangskode\") & \"\'\" Set retur_SqlQ = Connection.execute(SqlQ) if not retur_SqlQ.eof then session(LoginID) = retur_SqlQ(\"LoginID\") response.redirect(\"Din Url\") end if
Ja! Du bliver nødt til at oprette kundenr, som en session variabel, så las os gå ud fra, at du kalder den for Session(\"kundenr\"), så skal du, for at hente brugerdata ud skrive :
set recordSet = forbindelse.Execute(\"select * from Kunde WHERE kundenr = \" & Session(\"kundenr\") & \"\")
og så virker det, men KUN hvis du har oprettet den sessionvariabel, og det skal du gøre i dit login script ...
hvordan gøres det ??? Koden ser således ud<% \' Hvis der er blevet trykket på knappen \"Godkend\"\' If Request.Form(\"Action\") = \"Godkend\" Then \' Her forberedes de indtastede værdier til validering\' strUID = Trim(Replace(Request.Form(\"brugernavn\"),\"\'\",\"\")) strPWD = Trim(Replace(Request.Form(\"adgangskode\"),\"\'\",\"\"))
\' Hvis der er skrevet noget i både brugernavn og adgangskode\' If Len(strUID) > 0 And Len(strPWD) > 0 Then
dim connectionString connectionString = \"DRIVER={Microsoft Access Driver (*.mdb)};DBQ=\"&Server.MapPath(\"cs2000.mdb\") dim forbindelse set forbindelse = Server.CreateObject(\"ADODB.Connection\") \' Nutshell side 162. forbindelse.Open(connectionString)
strSQL = \"SELECT adgangskode FROM login\"&_ \" WHERE (brugernavn = \'\" & strUID & \"\')\"&_ \" AND (adgangskode = \'\" & strPWD & \"\')\"
Set rs = forbindelse.Execute(strSQL)
If Not (rs.EOF) Then Session(\"password-session\") = Request(\"kundenavn \'Hvis brugeren fandtes i databasen\' Response.Redirect \"godkendKbsordre2.asp\"
\' Hvis brugeren ikke fandtes i databasen\' Else%>
<H4>Du har indtastet forkert brugernavn og adgangskode - prøv en gang <a href=\"valgAfKundetype.asp\">til</a></H4> <%End If
\' Rydder op i vores connection objekt\' forbindelse.Close Set forbindelse = Nothing
<% \' Hvis der er blevet trykket på knappen \"Godkend\"\' If Request.Form(\"Action\") = \"Godkend\" Then \' Her forberedes de indtastede værdier til validering\' strUID = Trim(Replace(Request.Form(\"brugernavn\"),\"\'\",\"\")) strPWD = Trim(Replace(Request.Form(\"adgangskode\"),\"\'\",\"\"))
\' Hvis der er skrevet noget i både brugernavn og adgangskode\' If Len(strUID) > 0 And Len(strPWD) > 0 Then
dim connectionString connectionString = \"DRIVER={Microsoft Access Driver (*.mdb)};DBQ=\"&Server.MapPath(\"cs2000.mdb\") dim forbindelse set forbindelse = Server.CreateObject(\"ADODB.Connection\") \' Nutshell side 162. forbindelse.Open(connectionString)
strSQL = \"SELECT * FROM login\"&_ \" WHERE (brugernavn = \'\" & strUID & \"\')\"&_ \" AND (adgangskode = \'\" & strPWD & \"\')\"
Set rs = forbindelse.Execute(strSQL)
If Not (rs.EOF) Then Session(\"password-session\") = Request(\"kundenavn \'Hvis brugeren fandtes i databasen\' Session(\"Kundenr\") = RS(\"kundenr\") \' HER ER DER RETTET! Response.Redirect \"godkendKbsordre2.asp\"
\' Hvis brugeren ikke fandtes i databasen\' Else%>
<H4>Du har indtastet forkert brugernavn og adgangskode - prøv en gang <a href=\"valgAfKundetype.asp\">til</a></H4> <%End If
\' Rydder op i vores connection objekt\' forbindelse.Close Set forbindelse = Nothing
Nej - selve login-fasen er ok !! Det er denne kode der volder problemer nu !
<% dim connectionString connectionString = \"DRIVER={Microsoft Access Driver (*.mdb)};DBQ=\"&Server.MapPath(\"cs2000.mdb\") dim forbindelse set forbindelse = Server.CreateObject(\"ADODB.Connection\") \' Nutshell side 162. forbindelse.Open(connectionString)
dim kilde kilde = \"Kunde\" dim recordSet dim showRecordSet() set recordSet = forbindelse.Execute(\"select * from kunde WHERE kundenr = \" & Session(\"kundenr\") & \"\") While Not recordset.EOF Response.Write recordset(\"kundenavn\") Response.Write recordset(\"kundeadr\") Wend
recordSet.close() forbindelse.close() set recordSet = Nothing \' de-allokerer RecordSet objektet set forbindelse = Nothing \' de-allokerer Connection objektet %>
Når du har logget ind, så prøv at køre denne test fil :
<%
If Session(\"Kundenr\") <> \"\" Then Response.Write \"Kundesession er aktiv!\" Else Response.Write \"Kundesession er <FONT COLOR=\"\"red\"\">IKKE</FONT> aktiv!\" End If
Når du har logget ind, så prøv at køre denne test fil : Kundesession er IKKE aktiv! Det er hvad den skriver og det siger jo alt ik´ Hvad er problemet mod ???
Det er fordi den ikke opretter den session korrekt!
<% \' Hvis der er blevet trykket på knappen \"Godkend\"\' If Request.Form(\"Action\") = \"Godkend\" Then \' Her forberedes de indtastede værdier til validering\' strUID = Trim(Replace(Request.Form(\"brugernavn\"),\"\'\",\"\")) strPWD = Trim(Replace(Request.Form(\"adgangskode\"),\"\'\",\"\"))
\' Hvis der er skrevet noget i både brugernavn og adgangskode\' If Len(strUID) > 0 And Len(strPWD) > 0 Then
dim connectionString connectionString = \"DRIVER={Microsoft Access Driver (*.mdb)};DBQ=\"&Server.MapPath(\"cs2000.mdb\") dim forbindelse set forbindelse = Server.CreateObject(\"ADODB.Connection\") \' Nutshell side 162. forbindelse.Open(connectionString)
strSQL = \"SELECT * FROM login\"&_ \" WHERE (brugernavn = \'\" & strUID & \"\')\"&_ \" AND (adgangskode = \'\" & strPWD & \"\')\"
Set rs = forbindelse.Execute(strSQL)
If Not (rs.EOF) Then Session(\"kundenr\") = RS(\"kundenr\") If Session(\"kundenr\") <> \"\" Then Response.Redirect \"godkendKbsordre2.asp\" Else Response.Write \"Din session er ikke aktiv!<br>\" Response.Write \"Kundenr : \" & RS(\"Kundenr\") & \"<br>\" Response.Write \"Brugernavn : \" & RS(\"Brugernavn\") & \"<br>\" Response.Write \"Adgangskode: \" & RS(\"Adgangakode\") & \"<br>\" Response.Write \"Skriv lige de oplysninger tilbage på Eksperten.dk\" End If
\' Hvis brugeren ikke fandtes i databasen\' Else%>
<H4>Du har indtastet forkert brugernavn og adgangskode - prøv en gang <a href=\"valgAfKundetype.asp\">til</a></H4> <%End If
\' Rydder op i vores connection objekt\' forbindelse.Close Set forbindelse = Nothing
ok - nu gør den som den skal ....næsten !! Den lukker brugeren ind - og udskriver den rigtige brugers navn - MEN Den bliver ved med at skrive ud - det ser således ud aneansenaneansenaneasne o.s.v !! hvad er der nu glat for det andet problem er jo løst !!
jeg har selv løst det problem !!! Nu fungerer det som det skal !! Tak for en fantatisk hjælp - tak fordi du ville bruge noget tid på mig...tak og selvfølgelig er pointene dine !!!
Hvis du har en form med to felter (hhv. Adgangskode & Brugernavn) kan du med denne SQL sætning hente de data om din bruger (fra begge tabeller) med nedenstående: (det kræver selvfølgelig at du har en form med de to felter, der sender til siden med nedenstående)
SQL = \"SELECT l.brugernavn, l.adgangskode, k.kundenavn, k.kundeadr FROM Login-tabel l INNER JOIN Kunde-tabel k ON l.kundenr = k.kundenr WHERE l.Brugernavn = \'\" & Request.Form(\"Brugernavn\") & \"\' AND l.adgangskode = \'\" & Request.Form(\"Adgangskode\") & \"\'\"
Hvis du så i din indledning blot retter: set recordSet = forbindelse.Execute(\"select * from Kunde \") While Not recordset.EOF Response.Write recordset(\"kundenavn\") Wend
Til: set recordSet = forbindelse.Execute(\"SELECT l.brugernavn, l.adgangskode, k.kundenavn, k.kundeadr FROM Login-tabel l INNER JOIN Kunde-tabel k ON l.kundenr = k.kundenr WHERE l.Brugernavn = \'\" & Request.Form(\"Brugernavn\") & \"\' AND l.adgangskode = \'\" & Request.Form(\"Adgangskode\") & \"\'\" ) While Not recordset.EOF Response.Write recordset(\"kundenavn\") recordset.MoveNext Wend
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.