webForumDet fria alternativet

[Inloggning samt utloggning]

ASP

27 svar · 600 visningar · startad av trexter.com

Medlem sedan apr. 20021 203 inlägg
Frågan#1

Med hjälp från webforum har jag nu lyckats fixa en registrering på min hemsida så att man kan bli medlem. Alla medlemmarna och deras lösen lagras i en db och scriptet siger till då någon försöker registrera samma användare två gånger. Så långt, allt väl... men sen kommer jag till nästa krux; inloggning och utloggning!

Skulle någon kunna posta en bit kod där man i db:n jämför användarnamn och lösen och om dessa är korrekta så redirectas man!

Skulle vara hemskt tacksamt!

Medlem sedan juni 200032 967 inlägg
#2

Jag utgår ifrån att du har ett connectionobjekt, jag har kallat det för objConn. Det kan se ut någonting sånt här:

strUserName = Replace(Request.Form("username"), "'", "''")
strPassword = Replace(Request.Form("password"), "'", "''")
blnInloggad = False

strSQL = "SELECT 1 FROM tblUsers WHERE fldUserName = '" & strUserName & "' AND fldPassword = '" & strPassword & "'"
set objRS = objConn.Execute (strSQL)
If not objRS.EOF then
     ' jippi, inloggningen lyckades
      blnInloggad = True
Else
     ' näppeligen!
     ' gör något annat
End If
objRS.Close
Set objRS = Nothing
objConn.Close
Set objConn = Nothing

If blnInloggad then Response.redirect "Secure.asp"

Givetvis bör man sätta antingen sessions eller en cookie som hela tiden känner till inloggningsstatus, men det lämnas som övning. ;)

OBS! Koden är mycket otestad och skrevs ur huvudet. Du får ändra så tabell- och fältnamn stämmer.

Mvh,

Medlem sedan dec. 20003 563 inlägg
#3

Jag har två filer för det här. Väldigt enkelt och tydligt.

login.asp
-------------------------------
function teckenkoll(x)
x = REPLACE(x, "'", "''")
x = REPLACE(x, """, """")
end function

namn = teckenkoll(request.form("namn"))
pass = teckenkoll(request.form("pass"))

SET RS = conn.execute("SELECT namn, pass FROM users WHERE namn = '"&namn&"' AND pass = '"&pass&"' ")
if RS.eof then
 ' response.redirect("tillbax")
else
 session("inloggad") = true
 response.redirect("admin.asp")
end if

logout.asp
---------------------------
session.abandon
response.redirect("index.asp")

Sen kan du självklart själv bestämma vilka olika sessions du vill använda.

Medlem sedan apr. 20021 203 inlägg
#4

Ok, tack Anders och Cyprus... men jag undrar vad den här koden ska vara bra för:

Ursprungligen av cyprys

**```
function teckenkoll(x)
x = REPLACE(x, "'", "''")
x = REPLACE(x, """, """")
end function

namn = teckenkoll(request.form("namn"))
pass = teckenkoll(request.form("pass"))

Medlem sedan mars 2002777 inlägg
#5

För att escapa enkla citattecken, som kanske är bekant kan de ställa till med en hel del brydderi.

Medlem sedan apr. 20021 203 inlägg
#6

Ursprungligen av LAMP För att escapa enkla citattecken, som kanske är bekant kan de ställa till med en hel del brydderi.

Tack, det ska jag lägga på minnet! Låter som någonting som är bra att kunna...

Medlem sedan mars 2002777 inlägg
#7

bla sådana här tråkigheter:

http://www.webforum.nu/showthread.php?s=&threadid=43076

Medlem sedan mars 20007 896 inlägg
#8

Enda kruxet är att funktionen inte fungerar. ;)

cyprys verkar ha glömt att returnera den modifierade variabeln x, plus att det är fel i den andra Replace ():en:

Function teckenkoll ( x )
     x = Replace ( x, "'", "'" )
     x = Replace ( x, """", """ )

     teckenkoll = x
End Function

Så hade jag gjort, bytt ut tecknen till deras HTML-entiteter. :)

Medlem sedan apr. 20021 203 inlägg
#9

Ursprungligen av SPiN Enda kruxet är att funktionen inte fungerar. ;)

cyprys verkar ha glömt att returnera den modifierade variabeln x, plus att det är fel i den andra Replace ():en:

Function teckenkoll ( x )
     x = Replace ( x, "'", "'" )
     x = Replace ( x, """", """ )

     teckenkoll = x
End Function

Så hade jag gjort, bytt ut tecknen till deras HTML-entiteter. :)

Men borde det inte bara vara 3 " i den andra replacen?

Medlem sedan dec. 200012 464 inlägg
#10

Den andra replacen skall tas bort. Det är bara ' som man behöver fördubbla innan man använder en variabel i ett sql-statement.

(I VBS så är """" en sträng som innehåller en ")

Medlem sedan dec. 20003 563 inlägg
#11

:r

Medlem sedan mars 2002777 inlägg
#12

Ursprungligen av SPiN Enda kruxet är att funktionen inte fungerar. ;)

cyprys verkar ha glömt att returnera den modifierade variabeln x, plus att det är fel i den andra Replace ():en:

Function teckenkoll ( x )
     x = Replace ( x, "'", "'" )
     x = Replace ( x, """", """ )

     teckenkoll = x
End Function

Så hade jag gjort, bytt ut tecknen till deras HTML-entiteter. :)

Använder man server.HTMLEncode på utdatan så är det smart att replaca med 2 ' istället för att använda HTML-entiteter.

Medlem sedan apr. 20021 203 inlägg
#13

Ok, jag har gjort mitt bästa för att trixa ihop en inloggningsgrej men tyvärr så blir det inte riktigt rätt. Felmeddelande:

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

[Microsoft][ODBC Microsoft Access Driver] Too few parameters. Expected 2.

/tjanster/inloggning.asp, line 11

Kod:

<html>
<%
strDBPathUsers = "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("\databas\main.mdb")

Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open strDBPathUsers

Set RecSet = Server.CreateObject("ADODB.Recordset")
strCheck = "SELECT username, password FROM medlemmar WHERE namn = '"&username&"' AND pass = '"&password&"' "
[b]RecSet.Open strCheck, Conn[/b]

Function teckenkoll ( x )
     x = Replace ( x, "'", "&#39;" )
     teckenkoll = x
End Function

username = teckenkoll(request.form("username"))
password = teckenkoll(request.form("password"))

if RS.eof then
 ' response.redirect("tillbax")
else
 session("inloggad") = true
 response.redirect("admin.asp")
end if
%>
</html>
Medlem sedan juni 200032 967 inlägg
#14

Det verkar vara två tabell- eller fältnamn som är felstavade / felskrivna. Kontrollera att de fält du försöker använda verkligen finns i tabellen, och att all stavning stämmer.

Du har använt olika namn i sql-frågan för både användarnamn och lösenord, vad gäller?

strCheck = "SELECT username, password FROM medlemmar WHERE namn = '"&username&"' AND pass = '"&password&"' "
Medlem sedan jan. 20013 341 inlägg
#15

Du måste lägga in username och password i strängar innan du kollar strängarna mot databasen!

<%
strDBPathUsers = "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("\databas\main.mdb")

Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open strDBPathUsers

username = teckenkoll(request.form("username"))
password = teckenkoll(request.form("password"))
Set RecSet = Server.CreateObject("ADODB.Recordset")
strCheck = "SELECT username, password FROM medlemmar WHERE namn = '"&username&"' AND pass = '"&password&"' "
RecSet.Open strCheck, Conn

Function teckenkoll ( x )
x = Replace ( x, "'", "'" )
teckenkoll = x
End Function

if RS.eof then
' response.redirect("tillbax")
else
session("inloggad") = true
response.redirect("admin.asp")
end if
%>

Medlem sedan okt. 20005 273 inlägg
#16

Password kan vara namnskyddat.....dvs Klammra[] eller byt namn på det fältet

Medlem sedan juni 20003 076 inlägg
#17

Jag tror vi var inne på att man skulle göra replace till två enkelfnuttar också. ;)

Function teckenkoll ( x ) 
x = Replace ( x, "'", "''" ) 
teckenkoll = x 
End Function
Medlem sedan apr. 20021 203 inlägg
#18

Jo, namnen i SQL-satsen stämde inte med dem i databasen men nu till nästa problem! ;) Det står; Object required: " på denna rad:
if RS.eof then
... och jag frstår inte riktigt vad som menas med detta!

Medlem sedan juni 20003 076 inlägg
#19

det ska va RecSet.EOF

Medlem sedan apr. 20021 203 inlägg
#20

Ursprungligen av doggelito Jag tror vi var inne på att man skulle göra replace till två enkelfnuttar också. ;)

Function teckenkoll ( x ) 
x = Replace ( x, "'", "''" ) 
teckenkoll = x 
End Function

Det ser lite onstigt ut där ja, men i den riktiga koden så är ' ersatt av koden för denna symbol... därför!

272 ms totalt · 4 externa anrop · v20260731065814-full.e96017d9
139 ms — deklarationer (db)
0 ms — hämta statistik (cache)
129 ms — hämta tråd, inlägg och bilagor (db)
140 ms — ändringar (db)