webForumDet fria alternativet

Logga in..

5 svar · 245 visningar · startad av sin_adec

sin_adecMedlem sedan apr. 2002272 inlägg
#1

Hej!
alla programmerare & webbdesigners..
jag försöker skapa ett inloggninssystem... förstår inte vad som är fel..
jag har 2 konton i databasen... men det uppstår fel.. bara den som högst upp på databasen kan logga in..
fattar inte varför.. så här ser min kod..

<% Dim Con
Set Con = Server.CreateObject("ADODB.Connection")
Con.Open "driver={Microsoft Access Driver (*.mdb)};dbq=" & Server.MapPath("test.mdb") &";pwd="

SQL ="Select * from test"
Set Recset = Con.Execute(SQL)
%>

<% if recset("anv") = request.form("anv") AND recset("losen") = Request.form("losen") then

session("id") = recset("id")
response.redirect "visa.asp"

recset.close
	Set recset = nothing
Con.Close
	Set Con = nothing
Else
response.redirect "skriv.asp"

%>
<% end if %>

det finns 2 medlemmar som jag har skapat för att testa..
men det är bara
användare 1 som kan logga in..

ID                 Anv           Losen
1                 123             123
2                 321             321

alltså det är bara medlem "1" som kan logga in...
why
aleborgMedlem sedan jan. 20013 341 inlägg
#2

SQL ="Select * from test Where Anv='"& Replace(request.form("anv"), "'", "''") &"' And Losen='"& Replace(request.form("losen"), "'", "''") &"'"

LR^evil.sidMedlem sedan maj 2002560 inlägg
#3

vad händer om användaren inte finns i databasen?

[red]<% Dim Con
Set Con = Server.CreateObject("ADODB.Connection")
Con.Open "driver={Microsoft Access Driver (*.mdb)};dbq=" & Server.MapPath("test.mdb") &";pwd="

SQL ="Select * from test"
Set Recset = Con.Execute(SQL)

do while not recset.eof = true

if recset("anv") = request.form("anv") AND recset("losen") = Request.form("losen") then

session("id") = recset("id")

exit do

Else
recset.movenext

end if

loop

recset.close
	Set recset = nothing
Con.Close
	Set Con = nothing 

if len ( session ( "anv" ) ) > 0 then
	response.redirect "visa.asp"
else
	response.redirect "skriv.asp
end if %>[/red]

ctrl+c & ctrl+v:ade mycket... vet inte om det är helt korrect :)

LAMPMedlem sedan mars 2002777 inlägg
#4

oj, vilken omständig kod :o

Du får lägga till en funktion som escapar ' tecken

' öppna ett connectionobjekt vid namn Connect

dim strUsername, strPassword, rs, sql

strUsername = request.form("user")
strPassword = request.form("pass")

sql ="SELECT intAnvId, strUsername, strPassword FROM table WHERE strUsername = '" & strUsername & "' and strPassword = '" & strPassword & "' "

set rs = Connect.execute(sql)

if rs.eof then

response.write "felaktig inloggning"

else

session("inloggad") = rs("intAnvId")

end if
rs.close()
set rs = nothing
Connect.close()
set Connect = nothing

RED: stavfel

aleborgMedlem sedan jan. 20013 341 inlägg
#5

Använd det här:

<%
If request.form("anv")<>"" And request.form("losen")<>"" Then
	Dim Con
	Dim Recset

	Set Con = Server.CreateObject("ADODB.Connection")
	Con.Open "driver={Microsoft Access Driver (*.mdb)};dbq=" & Server.MapPath("test.mdb") &";pwd="

	SQL ="Select * from test Where Anv='"& Replace(request.form("anv"), "'", "''") &"' And Losen='"& Replace(request.form("losen"), "'", "''") &"'"
	Set Recset = Con.Execute(SQL)

	If Not Recset.EOF Then
		session("id") = Recset("id")
		Response.Redirect("inloggad.asp")
	Else
	Response.Redirect("error.asp")
	end if

	Recset.close
	Set Recset = nothing
	Con.Close
	Set Con = nothing 
	
End If
%>

På alla sidor som man måste vara inloggad för att kunna se sätter du det här överst:
<%
If not session("id")<>"" Then
Response.Redirect "logga_in.asp"
End If
%>

LAMPMedlem sedan mars 2002777 inlägg
#6

Blir ju lite omständigt att göra replacen på ' i varje sql-sats, bättre med en funktion:

Function FixaTecken(sText)
sText = replace(sText,"'","''")
FixaTecken = sText
End Function

sedan hör det till god programmeringssed att lägga sina värde från t ex request.form i egna variabler ;)

RED: då blir min förra kod enligt:

' lägges med fördel i en include fil

Function FixaTecken(sText)
sText = replace(sText,"'","''")
FixaTecken = sText
End Function

' öppna ett connectionobjekt vid namn Connect

dim strUsername, strPassword, rs, sql

strUsername = FixaTecken(request.form("user"))
strPassword = FixaTecken(request.form("pass"))

sql ="SELECT intAnvId, strUsername, strPassword FROM table WHERE strUsername = '" & strUsername & "' and strPassword = '" & strPassword & "' "

set rs = Connect.execute(sql)

if rs.eof then

response.write "felaktig inloggning"

else

session("inloggad") = rs("intAnvId")

end if
rs.close()
set rs = nothing
Connect.close()
set Connect = nothing
134 ms totalt · 3 externa anrop · v20260731065814-full.fb544a5a
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
131 ms — hämta tråd, inlägg och bilagor (db)