[ASP] Database Select WHERE

Pagina: 1
Acties:

  • RupS
  • Registratie: Februari 2001
  • Laatst online: 30-08 20:49
Ik vergelijk gegevens van een form uit de database.

Dus ik maak een database connectie, doe vervolgens:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
RS.Open "SELECT * from login WHERE UIN =" & Request.Form("ICQ")

uinDB = RS.Fields("UIN")
passDB = RS.Fields(pass")

If uinDB <> "" then
   If Request.Form("ICQ") = uinDB then
    If Request.Form("pass") = passDB then
         Response.Write "Gelukt!!"
    Else
         Response.Write "Uw Password klopt niet"
    End If
   Else
    Response.Write "Uw loginnaam komt niet in de database voor"
   End IF
Else
Response.Write "U moet wel een ICQ Nummer invullen"
End If

Dit gaat allemaal goed als ik een nummer invul dat daadwerkelijk in de database staat. Op het moment dat ik een nummer invul dat niet in de database staat, gaat ie over zijn nek. met zo'n melding: OR Rs.EOF OR RS.BOF has been reached (kweetniet meer precies, ben nu niet thuis...)

Wat is nou een goede manier om toch een login en een pass uit de database te vergelijken? of is er een vlaggetje dat ie niet het hele script afbreekt op het moment dat hij de gegevens niet in de database kan vinden?

Ik heb namenlijk niet zo'n zin om het hele script opnieuw te schrijven, of het totaal anders te doen, voornamenlijk, omdat de rest al af is.... :)

  • [ti]
  • Registratie: Februari 2000
  • Niet online
code:
1
2
if RS.Eof then
  response.write "jij bestaat niet"

Overigens zit er een enorm security bug in je code. (voer maar es " in als icq nummer)

  • RupS
  • Registratie: Februari 2001
  • Laatst online: 30-08 20:49
Wat jij zegt id dus na de select: If RS.Eof then, maar zover komt ie dan helemaal niet, als het ICQ nummer niet bestaat in de database, dan stopt het script gewoon en gaat ie niet verder dan het SELECT Statement, dat begrijp ik niet...

BUG??
Ik zit hier achter een hele vervelende proxy en kan er niet bij, maar wat is die bug dan? ben wel benieuwd....

  • RupS
  • Registratie: Februari 2001
  • Laatst online: 30-08 20:49
Als je " invult dan krijg je toch gewoon: SELECT * from login WHERE UIN="

Dan klapt ie er toch ook uit op het If <> "" statement??

Maar is
code:
1
If <> empty

dan beter?

  • [ti]
  • Registratie: Februari 2000
  • Niet online
Nja ik zat ff te slapen ofzo.. klopt niet helemaal wat ik zei :)
code:
1
"SELECT * from login WHERE UIN ='" & Request.Form("ICQ") & "'"

maak dat es van je query? Alleen moet je dan nog wel Request.Form("ICQ") strippen van " en ' enzo.

  • RupS
  • Registratie: Februari 2001
  • Laatst online: 30-08 20:49
Ff dat ik het goed begrijp ;)

Strippen as in FormatNumber of zo, of een Int functie?

(Ik weet ze nog niet helemaal/allemaal uit mijn hoofd... :))

  • Gert
  • Registratie: Juni 1999
  • Laatst online: 05-12-2025
code:
1
2
3
4
5
6
7
8
9
10
11
12
"SELECT * from login WHERE UIN =" & Request.Form("ICQ")

If Not RS.EoF Then
  uinDB = RS.Fields("UIN")
  .
  .
  .
  Response.Write "U moet wel een ICQ Nummer invullen"
  End If
Else
  Response.Write "Gottegot, kan niet eens een icqnummer in vullen."
End If

  • RupS
  • Registratie: Februari 2001
  • Laatst online: 30-08 20:49
Gert: dat werkt dus niet, op het moment dat iemand een nummer invult dat niet in de database voorkomt, klapt ie eruit... stopt het script, en krijg ik een error page....

Ik doe nu een RS.Open, wat is het verschil als ik RS.Execute gebruik?

Nogmaals: Ik zou het graag proberen, maar ik kan hier niet door de proxy heenkomen, omdat een heleboel URL's zijn geblokked....

Verwijderd

ok

RS.Open "SELECT * from login WHERE UIN = '" & Replace(Request.Form("ICQ"), "'", "''") & "'"
uinDB = RS.Fields("UIN")
passDB = RS.Fields(pass")

if rs.EOF AND rs.BOF Then
response.write "bestaat niet"
response.end
end if

If uinDB <> "" then
If Request.Form("ICQ") = uinDB then
If Request.Form("pass") = passDB then
Response.Write "Gelukt!!"
Else
Response.Write "Uw Password klopt niet"
End If
Else
Response.Write "Uw loginnaam komt niet in de database voor"
End IF
Else
Response.Write "U moet wel een ICQ Nummer invullen"
End If

Verwijderd

hmmz z ff uitleg
die Replace vervangt de enkele quotes door 2 enkele quotes en dan gaat ie niet meer over z'n nek als mensen quotes invullen

als een RS zowel EOF ALS BOF is dan is begin of file dus gelijk aan end of file, en issie dus leeg.

zo tjek ik tenminste of er iets inzit.

die response.end is om de boel af te kappen aangezien bij mij vaak gewoon vrolijk verder gaat en dan alsnog errors geeft.

  • RupS
  • Registratie: Februari 2001
  • Laatst online: 30-08 20:49
Thanx voor de reacties!! ik ga het vanmiddag gelijk proberen, en post eventuele probs/dingetjes hier wel....

:) :)

Verwijderd

Op dinsdag 16 oktober 2001 13:45 schreef Scimitar het volgende:
ok

RS.Open "SELECT * from login WHERE UIN = '" & Replace(Request.Form("ICQ"), "'", "''") & "'"
uinDB = RS.Fields("UIN")
passDB = RS.Fields(pass")

if rs.EOF AND rs.BOF Then
response.write "bestaat niet"
response.end
end if
.....
Even omdraaien:
code:
1
2
3
4
5
6
7
8
9
10
RS.Open "SELECT * from login WHERE UIN = '" & Replace(Request.Form("ICQ"), "'", "''") & "'"
if rs.EOF Then
  response.write "bestaat niet"
  response.end
else
  uinDB = RS.Fields("UIN")
  passDB = RS.Fields(pass")

  .....rest....
end if

Dit is al (iets) beter.

  • reddog33hummer
  • Registratie: Oktober 2001
  • Laatst online: 24-08 18:08

reddog33hummer

Dat schept mogelijkheden

ASP is niet mijn specialiteit, maar zou je niet de unicode kunnen gebruiken van de ' zodat je (met een oracle database) de boel over kan nemen met

%('unicode);select UIN, pass form DUAL

en dan pass als gebruikersnaam ?
Dit was namelijk ook een probleem met MS IIS zelf dat ze dit te laat decodeerde en afvingen. aangezien de database unicode automatisch omvormd zou dit vreemde effecten kunnen opleveren.

Backup not found (R)etry (A)bort (P)anic<br\>AMD 3400+ 64, 2 GB DDR, 1,5 TB Raid5


  • RupS
  • Registratie: Februari 2001
  • Laatst online: 30-08 20:49
Op dinsdag 16 oktober 2001 13:45 schreef Scimitar het volgende:
ok

RS.Open "SELECT * from login WHERE UIN = '" & Replace(Request.Form("ICQ"), "'", "''") & "'"
uinDB = RS.Fields("UIN")
passDB = RS.Fields(pass")

if rs.EOF AND rs.BOF Then
response.write "bestaat niet"
response.end
end if

If uinDB <> "" then
If Request.Form("ICQ") = uinDB then
If Request.Form("pass") = passDB then
Response.Write "Gelukt!!"
Else
Response.Write "Uw Password klopt niet"
End If
Else
Response.Write "Uw loginnaam komt niet in de database voor"
End IF
Else
Response.Write "U moet wel een ICQ Nummer invullen"
End If
Scimitar: errug bedankt, na veel geklooi werkte er helemaal niets meer, je kent het wel :)

Dus ik heb het hele script herschreven, met jouw tips, en het werkt nu perfect....

  • maikel
  • Registratie: Januari 2001
  • Nu online
Op dinsdag 16 oktober 2001 13:20 schreef dutchrups het volgende:
Gert: dat werkt dus niet, op het moment dat iemand een nummer invult dat niet in de database voorkomt, klapt ie eruit... stopt het script, en krijg ik een error page....

Ik doe nu een RS.Open, wat is het verschil als ik RS.Execute gebruik?

Nogmaals: Ik zou het graag proberen, maar ik kan hier niet door de proxy heenkomen, omdat een heleboel URL's zijn geblokked....
Het verschil tussen RS.Open en RS.Execute is dat ie bij RS.Execute geen RecordSet retourneerd.
Execute wordt dus bij Delete-, Insert- en Update-statements gebruikt.

  • Annie
  • Registratie: Juni 1999
  • Laatst online: 25-11-2021

Annie

amateur megalomaan

Op dinsdag 16 oktober 2001 23:55 schreef maikel het volgende:

[..]

Het verschil tussen RS.Open en RS.Execute is dat ie bij RS.Execute geen RecordSet retourneerd.
Execute wordt dus bij Delete-, Insert- en Update-statements gebruikt.
Uhm, waarschijnlijk bedoel je de Execute method van een connection object i.p.v. RS.execute.
Bovendien kan een cn.Execute wel degelijk een recordset object retourneren:
code:
1
2
3
<%
set rs = cn.execute("select * from tabel")
%>

Als er geen rows teruggegeven worden krijg je een gesloten recordset terug (bijv. bij een insert). Het voordeel is idd wel dat je ook:
code:
1
2
3
<%
cn.Execute("delete from tabel where id=5")
%>

kan doen i.p.v. werken met een recordset object, dat scheelt namelijk weer het openen van een extra object wat je toch niet nodig hebt.

Today's subliminal thought is:

Pagina: 1