Toon posts:

[ASP] Exception Occured .. Eeeh... ?

Pagina: 1
Acties:
  • 61 views sinds 30-01-2008

Verwijderd

Topicstarter
Morguh!

Ik gebruik de volgende code om een username, wachtwoord en een userlevel te controleren. Hij werkt wel... alleen als je naar de pagina komt, vanaf het ook echt inloggen...
Anyway, als je er dus gewoon heen gaat door het adress in je browser in te typen, krijg ik de volgende error:
Exception occured.

Op line 20...

Hoezo komt dat :?
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
<%
Dim cnDB
Dim rsQuery
Dim Username
Dim Password
Dim IPAdress

IPAdress = Request.ServerVariables("REMOTE_ADDR")
Username = Request.Form("Username")
Password = Request.Form("Password")

Set cnDB = Server.CreateObject("ADODB.Connection")
cnDB.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" _
& "Data source=D:\Accounts\DSAccounts\creepsworld\creepsworld.com\db\database.mdb"
cnDB.Open

Set rsQuery = Server.CreateObject("ADODB.Recordset")
rsQuery.Open "SELECT * FROM login WHERE Username = '" & Request.Form("username") & "'" & " AND Password = '" & Request.Form("password") & "'", cnDB

REGEL 20 >>>>>>>>>>If Username = rsQuery("Username") AND Password = rsQuery("Password") AND rsQuery("Userlevel") = "Webmaster" Then <<<<<<<<<<< REGEL 20
Response.Buffer = True
Session("Username") = Request.Form("Username")
Session("Password") = Request.Form("Password")
Session("level") = "Webmaster"
Session("Allow") = True
Response.Redirect "main.asp"

ElseIf Username = rsQuery("Username") AND Password = rsQuery("Password") AND rsQuery("Userlevel") = "Head Reviewer" Then
Response.Buffer = True
Session("Username") = Request.Form("Username")
Session("Password") = Request.Form("Password")
Session("level") = "Head Reviewer"
Session("Allow") = True
Response.Redirect "main.asp"

ElseIf Username = rsQuery("Username") AND Password = rsQuery("Password") AND rsQuery("Userlevel") = "Reviewer" Then
Response.Buffer = True
Session("Username") = Request.Form("Username")
Session("Password") = Request.Form("Password")
Session("level") = "Reviewer"
Session("Allow") = True
Response.Redirect "main.asp"

ElseIf Username = rsQuery("Username") AND Password = rsQuery("Password") AND rsQuery("Userlevel") = "Interviewer" Then
Response.Buffer = True
Session("Username") = Request.Form("Username")
Session("Password") = Request.Form("Password")
Session("level") = "Interviewer"
Session("Allow") = True
Response.Redirect "main.asp"

ElseIf Username = rsQuery("Username") AND Password = rsQuery("Password") AND rsQuery("Userlevel") = "Forum Administrator" Then
Response.Buffer = True
Session("Username") = Request.Form("Username")
Session("Password") = Request.Form("Password")
Session("level") = "Forum Administrator"
Session("Allow") = True
Response.Redirect "main.asp"

ElseIf Username = rsQuery("Username") AND Password = rsQuery("Password") AND rsQuery("Userlevel") = "Blockerz-List Admin" Then
Response.Buffer = True
Session("Username") = Request.Form("Username")
Session("Password") = Request.Form("Password")
Session("level") = "Blockerz"
Session("Allow") = True
Response.Redirect "main.asp"

ElseIf Username = "" AND Password = ""  AND rsQuery("Userlevel") = ""  Then
Response.Write "You've entered a wrong username and/or password, please try again!"
End If

rsQuery.Close
cnDB.Close
%>

Verwijderd

als je onder de opties van je webbrowser "show friendly errors" uitzet dan zie je de werkelijke error.

bij nader inzien denk ik dat dat het niet is.

  • disjfa
  • Registratie: April 2001
  • Laatst online: 12-05 15:11

disjfa

be

beetje dom btw :)

je selecteerd eerst de username als in request("username")

en daarna check je of die request("username") die username is.

dat kan btw nie... je kan nl maar een keer die username requesten :) die moet je dan in een variabele schoppen en als die requests in je kwerie doen en dan vragen
code:
1
2
3
4
5
if not rsquery.eof then
    username = goed
else
    username niet in db
end if

:)

disjfa - disj·fa (meneer)
disjfa.nl


  • Crazy D
  • Registratie: Augustus 2000
  • Laatst online: 12:14

Crazy D

I think we should take a look.

Check voor de gein eens of je sowieso wel data hebt opgehaald... .EOF property. Al vind ik een exception occured wel een brute melding om te zeggen dat je geen gegevens hebt gevonden ;)

oh en vergeet niet te controleren of de invoer wel goed is (als in, geen illegale tekens, etc, zie ACM's stuk over beveiliging :)

Oh ik zie dat ik en Chello :( weer eens te traag zijn ;)

Exact expert nodig?


  • MichelK
  • Registratie: November 1999
  • Niet online
Voor dit soort doeleinden zou ik geen if's gebruiken maar 'case' statements zie http://msdn.microsoft.com/library/en-us/script56/html/vsstmSelectCase.asp

tevens zou je uit je query maar 1 record terug moeten krijgen. Hierop kan je testen dmv
if rs.recordcount = 1 then
gebruik hier je case of je if then gebeuren
end if

in sommige gevallen welke weet ik niet werkt recordcount niet.
dan voor je de query eerst uit dmv een count:
select count(*D as aantal form user where ... blabla bla
en dan doe je je echte query:
select * from user where pw = pw and user=user

snap je het nog? Ik niet. ;)

Verwijderd

Op woensdag 22 mei 2002 19:58 schreef MichelK het volgende:
test
:? :?

  • MichelK
  • Registratie: November 1999
  • Niet online
auw kut man.
Ik zat op fok, en zag je probleem dus ik dacht ik zal even reageren, maar wist mijn wachtwoord niet meer dus ik postte een test berichtje, in de tussentijd heeft een of andere bemoeial (moderator) aan mijn berichtje gezeten waardoor ik er niet maar aan mocht zitten dus hier volgt ie zonder fouten:

Voor dit soort doeleinden zou ik geen if's gebruiken maar 'case' statements zie http://msdn.microsoft.com/library/en-us/script56/html/vsstmSelectCase.asp
tevens zou je uit je query maar 1 record terug moeten krijgen. Hierop kan je testen dmv
if rs.recordcount = 1 then
gebruik hier je case of je if then gebeuren
end if

in sommige gevallen welke weet ik niet werkt recordcount niet.
dan voer je de query eerst uit mbv een count:
select count( * ) as aantal from user where ... blabla bla
en dan doe je je echte query:
select * from user where pw = pw and user=user
en dan test je dus wat voor soort user het is. De voorkeur heeft de case manier, anders gebruik je de wel bekende if statements...

hoie,
Michel

  • snoei
  • Registratie: Maart 2001
  • Laatst online: 05-09 19:11

snoei

kabels... :D

ik verwacht dat het hier fout gaat:
code:
1
rsQuery.Open "SELECT * FROM login WHERE Username = '" & Request.Form("username") & "'" & " AND Password = '" & Request.Form("password") & "'", cnDB

als je vanaf een andere pagina komt dan is de Select Query incompleet

  • MichelK
  • Registratie: November 1999
  • Niet online
oke, ik had even niets te doen. :)
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
<%
Dim cnDB
Dim rsQuery
Dim Username
Dim Password
Dim IPAdress
IPAdress = Request.ServerVariables("REMOTE_ADDR")
Username = Request.Form("Username")
Password = Request.Form("Password")




set cnDB=Server.CreateObject("ADODB.Connection") 
cnDB.provider="Microsoft.Jet.OLEDB.4.0"

'gebruik dit alleen als je asp + mdb in dezelfde directory staan....
cnDB.open(server.mappath("database.mdb"))
Set rsQuery = Server.CreateObject("ADODB.Recordset")

'even tellen hoeveel users er zijn die dit loginnaam en wachtwoord hebben
  strSQL = "SELECT count(*) as aantal FROM login WHERE Username = '" & Request.Form("username") & "'" & " AND Password = '" & Request.Form("password") & "'"
  rsQuery.Open  strSQL, cnDB
  Aantal = rsQuery("aantal")
  rsQuery.Close

' bij 1 record terug bestaat de user en heeft hij / zij een goed wachtwoord in gevoerd.
if aantal = 1 then
'zoals iemand al zei hoef je hier niet nog een keer te requesten, doe dat 1 keer in een variabele, bijvoorbeeld de username en password die je op regel 8 en 9 en al gebruik :)

  strSQL = "SELECT * FROM login WHERE Username = '" & Request.Form("username") & "'" & " AND Password = '" & Request.Form("password") & "'"
  rsQuery.Open  strSQL, cnDB
  
  usertype=rsQuery("Userlevel")


  
  Select Case usertype
    Case "webmaster"     Response.Redirect "main.asp"
    Case "head reviewer"   Response.Redirect "main.asp"
    Case Else   response.write "Jij bent maar een eikel en krijgt geen toegang, lekker puh"
   End Select
  rsQuery.Close
end if
cnDB.Close
%>


'ps dat is mijn manier ik zeg niet dat mijn manier de juiste is!

  • Crazy D
  • Registratie: Augustus 2000
  • Laatst online: 12:14

Crazy D

I think we should take a look.

Eerst controleren op usernaam/wachtwoord, en dan de usertype checken is geen slecht idee idd :)
Maar waarom ook nog eens checken of er maar 1 user is met die username/password combie? Als je database het toelaat kun je dat forceren door het de db te laten doen, en anders bij het toevoegen/wijzigen van een user.
En als je je input eerst goed checkt kunnen ze niet op die manier de boel opfokken om toegang te krijgen.

Exact expert nodig?


  • disjfa
  • Registratie: April 2001
  • Laatst online: 12-05 15:11

disjfa

be

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
<%
Dim cnDB
Dim rsQuery
Dim Username
Dim Password
Dim IPAdress
IPAdress = Request.ServerVariables("REMOTE_ADDR")
Username = Request.Form("Username")
Password = Request.Form("Password")

set cnDB=Server.CreateObject("ADODB.Connection") 
cnDB.provider="Microsoft.Jet.OLEDB.4.0"

'gebruik dit alleen als je asp + mdb in dezelfde directory staan....
cnDB.open(server.mappath("database.mdb"))
Set rsQuery = Server.CreateObject("ADODB.Recordset")

'even tellen hoeveel users er zijn die dit loginnaam en wachtwoord hebben
  strSQL = "SELECT * FROM login WHERE Username = '" & username & "'" & " AND Password = '" & password & "'"
  rsQuery.Open  strSQL, cnDB, 3,3

if not rsquery.eof then then

  '' dit is alleen als je moet checken of er meer mensen zijn met zelfde naam & pwd :)
  if rsQuery.recordcount > 1 then
     ''meer dan 1 persoon met naam en wachtwoord
  end if

  usertype=rsQuery("Userlevel")
  
  Select Case usertype
    Case "webmaster"     Response.Redirect "main.asp"
    Case "head reviewer"   Response.Redirect "main.asp"
    Case Else   response.write "Jij bent maar een eikel en krijgt geen toegang, lekker puh"
   End Select
  rsQuery.Close
end if
cnDB.Close
%>

ff nog wat makkelijker gemaakt... heb nu ff geen tijd om er verder naar te kijken, maar zo is ie iig ff wat korter :)

disjfa - disj·fa (meneer)
disjfa.nl


  • whoami
  • Registratie: December 2000
  • Laatst online: 07-09 19:30
Ik heb één mega-tip voor jou:
leer debuggen

https://fgheysels.github.io/


  • D2k
  • Registratie: Januari 2001
  • Laatst online: 31-08 10:19

D2k

en daar sluit ik me bij aan
zie whoami<hr>
wachtwoord niet meer dus ik postte een test berichtje, in de tussentijd heeft een of andere bemoeial (moderator) aan mijn berichtje gezeten waardoor ik er niet maar aan mocht zitten dus hier volgt ie zonder fouten:
dat noemen ze een topixbug en daar hebben wij bemoeials nix mee te maken. dus hou dat soort commentaar voortaan bij je ajb

Doet iets met Cloud (MS/IBM)

Pagina: 1

Dit topic is gesloten.