webForumDet fria alternativet

EOF och BOF

ASPur ASP

5 svar · 223 visningar · startad av Mango

Medlem sedan juni 200062 inlägg
Frågan#1

Hoppas kunna få hjälp här!

Jag är lite av en nybörjare när det gäller ASP och jag får inte rätt på mitt lilla problem på egen hand. Jag gör en iloggningssida som ska känna av användarnamn och lösenord mot en Access databas och det fungerar så länge jag skriver i rätt anv.namn och lösen. Det fungerar även när jag skriver rätt anv.namn och fel lösen men skriver jag fel anv.namn och fel lösen så får jag detta felmedelande

Antingen är BOF eller EOF satt till True, eller så har aktuell post raderats. Den begärda åtgärden kräver en aktuell post.
/Snicksnack/index.asp, line 47

Line 47 är då jag hämtar info från databasen och lägger den i variabeln user2.

Jag vill ju att besökaren ska få mina felmedelanden oavsett vilket fel de gör.

Hoppas att det inte blev rörigt och nån kan hjälpa mig.

<%
Dim rs, objConn, strConn, user, password, user2, password2, fel1, fel2, check

user=Request.Form("txtUser")
password=Request.Form("txtPassword")
fel1=""
fel2=""
check=True

If Request.Form.Count Then

	If user="" Then
		Fel1="Fyll i användarnamn!"
		check=false
	End if
	
	If password="" Then
		Fel2="Fyll i lösenord!"
		check=false
	End if
End if

If check=false Then

Else
	If request.form("koll") = "ok" THEN

		Set objConn = Server.CreateObject("ADODB.Connection")
		strConn = "PROVIDER=Microsoft.Jet.OLEDB.4.0;DATA SOURCE=" & server.mappath("../db/dbSnickSnack.mdb") & ";"
		objConn.Open strConn
		Set rs = Server.CreateObject("ADODB.Recordset")
		rs.Open "SELECT * FROM tblUser WHERE fNickName = '"&user&"'", objConn

		user2 = rs("fNickName")
		password2 = rs("fPassword")

				If user2 = user And password2 = password Then
				Response.Redirect "profil.asp"
				Else
				Response.Redirect "fel.htm"
				End if
				If rs.EOF = True Then
				Response.Redirect "fel.htm"
				End If

		Set rs = Nothing
		Set objConn = Nothing
		rs.Close
		objConn.Close				
	End if
End if
%>
Medlem sedan dec. 20003 563 inlägg
#2

Jag måste säga att det luktar lite IDG-kod över detta.
Det finns mycket bättre metoder att kontrollera en inloggning direkt i SQL-koden.
Sök lite här på forumet så hittar du säkert ett jättebra exempel på det du skall göra. ;)
Denna kod skall säkert funka ändå. Dock så är SQL-injections ett problem.

<%
Dim rs, objConn, strConn, user, password, user2, password2, fel1, fel2, check

user=Request.Form("txtUser")
password=Request.Form("txtPassword")
fel1=""
fel2=""
check=True

If Request.Form.Count Then

	If user="" Then
		Fel1="Fyll i användarnamn!"
		check=false
	End if
	
	If password="" Then
		Fel2="Fyll i lösenord!"
		check=false
	End if
End if

If check=false Then

Else
	If request.form("koll") = "ok" THEN

		Set objConn = Server.CreateObject("ADODB.Connection")
		strConn = "PROVIDER=Microsoft.Jet.OLEDB.4.0;DATA SOURCE=" & server.mappath("../db/dbSnickSnack.mdb") & ";"
		objConn.Open strConn
		Set rs = Server.CreateObject("ADODB.Recordset")
		rs.Open "SELECT * FROM tblUser WHERE fNickName = '"&user&"'", objConn
		if NOT rs.eof then
		user2 = rs("fNickName")
		password2 = rs("fPassword")

				If user2 = user And password2 = password Then
				Response.Redirect "profil.asp"
				Else
				Response.Redirect "fel.htm"
				End if
		else
				Response.Redirect "fel.htm"
		end if
		Set rs = Nothing
		Set objConn = Nothing
		rs.Close
		objConn.Close				
	End if
End if
%>
Medlem sedan jan. 20032 285 inlägg
#3
<%
Dim rs, objConn, strConn, user, password, user2, password2, fel1, fel2, check

user=Request.Form("txtUser")
password=Request.Form("txtPassword")
fel1=""
fel2=""
check=True

If Request.Form.Count Then
  If user="" Then
    fel1="Fyll i användarnamn!"
    check=false
  End if	
  If password="" Then
    Fel2="Fyll i lösenord!"
    check=false
  End if
End if

If NOT check=false Then
  If request.form("koll") = "ok" THEN
    Set objConn = Server.CreateObject("ADODB.Connection")
    strConn = "PROVIDER=Microsoft.Jet.OLEDB.4.0;DATA SOURCE=" & server.mappath("../db/dbSnickSnack.mdb") & ";"
    objConn.Open strConn
    Set rs = Server.CreateObject("ADODB.Recordset")
    rs.Open "SELECT * FROM tblUser WHERE fNickName = '"&user&"'", objConn

    If NOT rs.EOF Then
      user2 = rs("fNickName")
      password2 = rs("fPassword")

      If user2 = user And password2 = password Then
        Response.Redirect "profil.asp"
      Else
        Response.Redirect "fel.htm"
      End If
    Else
      Response.Redirect "fel.htm"
    End If
    Set rs = Nothing
    Set objConn = Nothing
    rs.Close
    objConn.Close				
  End if
End if
%>

/red Blev lite sen eftersom ja tog bort alla tabs ur koden ;)

Medlem sedan dec. 200012 464 inlägg
#4

Lägg till villkoret för password direkt i select-satsen.

dim passed
rs.Open "SELECT * FROM tblUser WHERE fNickName = '"&user&"' and fPassword = '" & password & "'", objConn
if not rs.eof then passed = true else passed = false
rs.close
set rs = nothing
objConn.close
set objConn = nothing
if passed then
	Response.Redirect "profil.asp"
Else
	Response.Redirect "fel.htm"
End if

Om du vill stänga objekt explicit så måste du göra det innan du gör response.redirect

Medlem sedan mars 20015 287 inlägg
#5

Då lägger jag också ett förslag:

Dim rs, objConn, strConn, user, password, user2, password2, fel1, fel2, check

user=Request.Form("txtUser")
password=Request.Form("txtPassword")
fel1=""
fel2=""
check=True

If Request.Form.Count Then

	If user="" Then
		Fel1="Fyll i användarnamn!"
		check=false
	End if
	
	If password="" Then
		Fel2="Fyll i lösenord!"
		check=false
	End if
End if

If NOT check=false Then

	If request.form("koll") = "ok" THEN

		Set objConn = Server.CreateObject("ADODB.Connection")
		strConn = "PROVIDER=Microsoft.Jet.OLEDB.4.0;DATA SOURCE=" & server.mappath("../db/dbSnickSnack.mdb") & ";"
		objConn.Open strConn
		Set rs = Server.CreateObject("ADODB.Recordset")
		rs.Open "SELECT * FROM tblUser WHERE fNickName = '"&user&"' and fPassword = '"& password2 &"'", objConn
		if NOT rs.eof then
				Response.Redirect "profil.asp"
		Else
				Response.Redirect "fel.htm"
		end if
		Set rs = Nothing
		Set objConn = Nothing
		rs.Close
		objConn.Close				
	End if
End if
%>
Medlem sedan juni 200062 inlägg
#6

Det fungerade!

Tack för den snabba hjälpen.

138 ms totalt · 3 externa anrop · v20260731065814-full.25f56b17
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
136 ms — hämta tråd, inlägg och bilagor (db)