webForumDet fria alternativet

Att byta lösenord..men ändå inte

ASP

10 svar · 295 visningar · startad av Choronzon

Medlem sedan aug. 20011 346 inlägg
Frågan#1

Har nu suttit ett tag med det här och jag verkar bara strula till det ju mer jag håller på, så om någon vänlig själ kan tala om vad jag gör för fel så..väldigt tacksam. Felet uppstår när jag ska ändra lösenordet.

Feltyp:
Körningsfel i Microsoft VBScript (0x800A000D)
Inkompatibla typer: 'recset'
login.asp, line 70

<%
	response.buffer = true
	Response.Expires = -1500
	session.lcid = 1053
%>
	<!--#include file="adovbs.inc"-->
<%
	set connect = server.createobject("ADODB.connection")
	connect.open "driver={Microsoft Access Driver (*.mdb)};dbq=" & server.mappath("db/login.mdb")&";pwd=pwd"
	set style = server.createobject("ADODB.Recordset")
		modi = "SELECT * FROM login"
	style.open modi, connect, adopenstatic, adlockoptimistic

	user = style("user")
	pass = style("pass")
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<%
	session.abandon
%>
<body>
<% 
	if request.querystring("login") = "checking" then
		session("user") = request.form("user")
		session("pass") = request.form("pass")
			if session("user") = user AND session("pass") = pass then 
				response.redirect "login.asp?login=true" 
			else
				response.redirect "login.asp?login=failed"
			end if
	elseif request.querystring("login") = "true" then

%>
<a href="login.asp?addnew=password">Byt Lösenord</a><br>
<a href="admin_logout.asp">Logga ut </a>
<%

	elseif request.querystring("addnew") = "password" then

%>
<form method="post" action="login.asp?newpass=set">
	Gammalt användarnamn:<br>
	<input type="text" name="oldname" size="20">
	<br>
	Gammalt lösenord:<br>
	<input type="password" name="oldpass" size="20">
	<br><br>
	Nytt användarnamn:<br>
	<input type="text" name="newname" size="20"><br>
	Nytt lösenord:<br>
	<input type="password" name="newpass" size="20">
	<br>
	Bekräfta lösenord:<br>
	<input type="password" name="renew" size="20">
	<br>
	<input type="submit" value="Ändra"> <input type="reset" value="Återställ">
</form>
<%
	elseif request.querystring("newpass") = "set" then

	[b][red]if request.form("oldpass") = recset("pass") AND request.form("renew") = request.form("newpass") AND request.form("oldname") = recset("user") then[/red][/b]
				recset("pass") = request.form("newpass")
				recset("user") = request.form("newname")
				recset.update
%>
Användarnamnet och lösenordet har ändrats
<%
	else
%>
ERROR Kontrollera om användarnamnet och lösenord var rätt inskrivna
<%
	end if
	connect.close
	set connect = nothing
%>
<%
	elseif request.querystring("login") = "request" then
%>
<form method="post" action="login.asp?login=checking">
	Administrator:<br><input type="text" name="user" size="20"><br>
	Password:<br><input type="password" name="pass" size="20" class="input"><p>
	<input type="submit" value="Sign in" class="knapp">
</form>
<%
	else
%>
ERROR Användarnamnet eller lösenordet var felaktigt!
<%
	end if
	set connect = nothing
%>
</body>
</html>

edit...
Rensade koden lite..förhoppningsvis blev den mera lättläst..

Medlem sedan dec. 200012 464 inlägg
#2

I början så skapar du ett recordset som heter style (och inte recset.)

Ett annat, större, problem är din inloggning. Som det är nu så tar du bara första posten i resultatet.

din select borde innehålla lite villkor för att bara hämta den post som stämmer med request.form("user") och request.form("pass")

user = "'" & replace(request.form("user"),"'","''") & "'"
pass = "'" & replace(request.form("pass"),"'","''") & "'"

modi = "select 1 from login where user = " & user & " and pass = " & pass
style.open modi, connect, adopenstatic, adlockoptimistic

och sen för att kontrollera om du fått någon post

if not style.eof then
'login lyckades
end if
Medlem sedan feb. 200112 078 inlägg
#3

Du skapar ju aldrig 'recset'. Ditt recordset heter ju 'style'. :)

Medlem sedan aug. 20011 346 inlägg
#4

hmm, det där med recset är bara just här, den heter style i min testfil, hade bara glömt ändra..

Medlem sedan aug. 20011 346 inlägg
#5

eller, jaha.. är det recset.update som är fel då?? det har jag inte sett, kollar det..

Medlem sedan aug. 20011 346 inlägg
#6

LarsG, men den inloggningen ska väl funka? Förstår inte riktigt varför?

edit...
Såg nu vad ni menade med mitt recset, ändrade det och har fått det att fungera. Men jag förstår fortfarande inte varför jag inte kan ha det som det är? Det verkar ju fungera, jag kommer inte in om jag skriver fel pass.. Förklara gärna lite mer..

Medlem sedan dec. 200012 464 inlägg
#7

Du kontrollerar enbart en post i tabellen.

om du har 3 användare och resultatet kommer i ordning

A
B
C

och jag försöker logga in som B så kommer det att misslyckas eftersom du bara jämför med A. (Eller skall det bara finnas en användare?)

Medlem sedan aug. 20011 346 inlägg
#8

Jaha då tror jag att jag förstår..

Just i det här fallet tror jag att det blir en bara, men det skadar ju inte med möjligheten till flera, testar lite med det jag fick av dig får vi se..

Men det ska anses som en säker variant som den är annars? Om vi nu säger att det är till 1 anv. alltså, eller borde jag ändra något mera i så fall?

Medlem sedan feb. 20022 594 inlägg
#9

Vad är poängen med att köra med databas om det endast är en användare?

Medlem sedan aug. 20011 346 inlägg
#10

För att det är till ett adminsystem för en sida, som i alla fall har en massa andra tabeller. Då tänkte jag att det vore smidigt att använda den, eftersom den ändå finns.

Medlem sedan mars 20015 287 inlägg
#11

Jo, men ska det bara vara en eller ett par användare känns det nästan onödigt att öppna och stänga databasen för den sakens skull.

330 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
120 ms — deklarationer (db)
0 ms — hämta statistik (cache)
203 ms — hämta tråd, inlägg och bilagor (db)
123 ms — ändringar (db)