Avatar billede cape Nybegynder
22. oktober 2000 - 12:05 Der 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

<% @ LANGUAGE = VBSCRIPT LCID=1030 %>
<% OPTION EXPLICIT %>

<!-- #include file=\"adovbs.inc\" -->

<HTML>
<HEAD><TITLE>Vis indtastede data</TITLE>

</HEAD>

<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
%>

</BODY>
</HTML>
Avatar billede thewicked Nybegynder
22. oktober 2000 - 12:19 #1
Sådan kunne det evt se ud :)

set recordSet = forbindelse.Execute(\"select * from Kunde where BrugerID=\" & BrugerID & \")
Avatar billede cape Nybegynder
22. oktober 2000 - 12:27 #2
problemet er at kunde og login-data ligger i to forskellige tabeller - hvordan klarer jeg den ??
Avatar billede phylox2 Nybegynder
22. oktober 2000 - 12:27 #3
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 & \"\")
Avatar billede phylox2 Nybegynder
22. oktober 2000 - 12:28 #4
Hvis du i din brugerdata tabel bruger brugeren entydige ID fra den anden tabel, så kan den bare hentes frem på den måde, som jeg næsten har beskrevet.

Prøv at beskrive databasens struktur, så er det nemmere at sætte sig ind i.

Avatar billede cd930 Nybegynder
22. oktober 2000 - 12:31 #5
...
Avatar billede cape Nybegynder
22. oktober 2000 - 12:33 #6
jeg bruger ingen session-variabele - men det kommer jeg jo nok til !!

Login-tabel ser således ud
brugernavn    adgangskode    kundenr

Kunde-tabel ser såledess ud
kundenavn kundeadr kundenr


Avatar billede thewicked Nybegynder
22. oktober 2000 - 12:33 #7
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
Avatar billede thewicked Nybegynder
22. oktober 2000 - 12:34 #8
Husk at response.buffer = true skal altid ligge øverst i dit dokument :)
Avatar billede phylox2 Nybegynder
22. oktober 2000 - 12:35 #9
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 ...
Avatar billede thewicked Nybegynder
22. oktober 2000 - 12:37 #10
Ja undskyld det skal skrives session(\"LoginID\") = retur_SqlQ(\"LoginID\")
Avatar billede cape Nybegynder
22. oktober 2000 - 12:39 #11
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


    End if
End if

%>


Avatar billede phylox2 Nybegynder
22. oktober 2000 - 12:41 #12
<%
\' 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


    End if
End if

%>
Avatar billede thewicked Nybegynder
22. oktober 2000 - 12:41 #13
strUID = Trim(Replace(Request.Form(\"brugernavn\"),\"\'\",\"\"))
    strPWD = Trim(Replace(Request.Form(\"adgangskode\"),\"\'\",\"\"))

Hvorfor gør du det så besværligt ?
Avatar billede phylox2 Nybegynder
22. oktober 2000 - 12:42 #14
Fordi det er et standard script, han har hentet og forsøger at få til at virke ...
Avatar billede cape Nybegynder
22. oktober 2000 - 12:43 #15
sandheden er svær at løbe fra !!
Avatar billede thewicked Nybegynder
22. oktober 2000 - 12:45 #16
Lorte sted du henter din kode :)
Avatar billede cape Nybegynder
22. oktober 2000 - 12:55 #17
hmmm - det virker ikke !!

Her er fejlen !

Unterminated string constant


//checkPasswordReg.asp, line 37

Session(\"password-session\") = Request(\"kundenavn    \'Hvis brugeren fandtes i databasen\'
---------------------------------------------------------------------------------------^

Avatar billede phylox2 Nybegynder
22. oktober 2000 - 12:57 #18
Du skal bare slette den linie, hvis du ikke skal bruge den til noget, og det ser det ikke ud til at du skal, så fjern HELE linien totalt :)
Avatar billede cape Nybegynder
22. oktober 2000 - 12:59 #19
ok - virker det er pointene jo dine :))
Avatar billede cape Nybegynder
22. oktober 2000 - 13:09 #20
ok - nu accepterer den brugers kode og lukker ham ind - den sider der kommer skal jo så udskrive hans info ...
jeg får en fejl

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

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

/godkendKbsordre2.asp, line 28
jeg har gjort som du sagde, men stadig fejl ?
Avatar billede phylox2 Nybegynder
22. oktober 2000 - 13:13 #21
Okay - så kan det være, at det der er blevet slettet skulle bruges alligevel, så sæt det ind igen, men ret det til :

Session(\"password-session\") = RS(\"kundenavn\")   
Avatar billede cape Nybegynder
22. oktober 2000 - 13:19 #22
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
%>

</BODY>
</HTML>
Avatar billede phylox2 Nybegynder
22. oktober 2000 - 13:25 #23
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

%>

Kald den evt. for session.asp
Avatar billede cape Nybegynder
22. oktober 2000 - 13:29 #24
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 ???
Avatar billede phylox2 Nybegynder
22. oktober 2000 - 13:38 #25
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


    End if
End if

%>

Prøv lige med den dersens loginsekvens!
Avatar billede cape Nybegynder
22. oktober 2000 - 13:50 #26
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 !!
Avatar billede phylox2 Nybegynder
22. oktober 2000 - 13:54 #27
HVAD skriver den op skræmen præcist?
Avatar billede cape Nybegynder
22. oktober 2000 - 13:58 #28
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 !!!
Avatar billede phylox2 Nybegynder
22. oktober 2000 - 13:59 #29
Okay - glad for det her hjulpet dig!
Avatar billede tigerdyr Nybegynder
22. oktober 2000 - 14:12 #30
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\") & \"\'\"
Avatar billede tigerdyr Nybegynder
22. oktober 2000 - 14:13 #31
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
Avatar billede tigerdyr Nybegynder
22. oktober 2000 - 14:14 #32
hmm... too late :o(
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