Toon posts:

[ASP]Check voor duplicates in database?

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

Verwijderd

Topicstarter
Ik heb een formuliertje gemaakt waar je je kan aanmelden.
Hij werkt prima, maar nu wil ik er een stukje code bijschrijven.

Deze code moet checken in de database of een username al bestaat. Maar hij checked niet. Of hij geeft altijd aan dat de user bestaat of hij geeft niks aan.

Zelfs niet als ik de username hard in de code zet, zonder query.
Ik heb echt vanalles al geprobeerd. Al 2 dagen |:(
Op dit moment ziet de code er zo uit. Op deze manier valideerd ie niet.

code:
1
2
3
4
5
6
7
8
9
10
11
12
gebruikersnaam  = Request.Form("gebruikersnaam")

   sql_dup = "SELECT * FROM tblAanmelding"
   conn.execute sql_dup
   
   if sql_dup = gebruikersnaam then
   errormessage = "Deze gebruikersnaam bestaat al"
   response.redirect "errormessage.asp?errormessage=" & errormessage
 else if inStrGrp(gebruikersnaam,"./?") = true Then
    errormessage = "Ongeldige tekens in de gebruikersnaam"
    response.redirect "errormessage.asp?errormessage=" & errormessage
   end if

  • Kix@$$
  • Registratie: December 2001
  • Laatst online: 13:23
eerst zet je een sql query in een string:
code:
1
sql_dup = "SELECT * FROM tblAanmelding"

en daarna open je de connectie
code:
1
conn.execute sql_dup

en daarna kijk je of je gebruikersnaam in je sql query staat. probeer eens om te kijken of hij in de database staat, want de sql string verandert niet...

  • Phenomenon
  • Registratie: December 2000
  • Laatst online: 01-04 13:18
code:
1
2
3
4
5
6
gebruikersnaam  = Request.Form("gebruikersnaam")

   sql_dup = "SELECT * FROM tblAanmelding"
   conn.execute sql_dup
   
   if sql_dup = gebruikersnaam then
Doe maar eens response.write sql_dup , dan zul je zien dat ie je query als tekst teruggeeft.
Je moet kijken of je recordset eof is. Sql_dup veranderd nergens hoor.

  • Disciplus-Simplex
  • Registratie: September 2001
  • Laatst online: 28-05 00:58

Disciplus-Simplex

altijd wakker....

Eh, je selecteert alle usernames uit een tabel en vervolgens stop je die in een variabele. Dat gaat niet werken.
Die select is opzich wel ok maar om vervolgens de inhoud daarvan met een variabele te testen moet je 'scrollen' door je recordset met usernames en iedere naam afzonderlijk checken met de ingevoerde user.
Je maakt dus een loop waarin je iedere keer jumpt naar het volgende record enz.

Wat je ook kan doen is de username in de select querie proppen om vervolgens een select daarmee te doen:
SELECT harry FROM tblAanmelding. Als de return een lege recordset oplevert, weet je dat ie nog niet bestaat.

Het beste kun je dit allemaal doen met stored procedures als je tenminste SQL server gebruikt ipv access

Zal ff een stukje code uit de oude doos vissen. ff geduld

Ik dien de wetenschap en put daar vreugde uit.......


Verwijderd

Topicstarter
Kix@$$ schreef op 31 juli 2002 @ 14:57:
eerst zet je een sql query in een string:
code:
1
sql_dup = "SELECT * FROM tblAanmelding"

en daarna open je de connectie
code:
1
conn.execute sql_dup

en daarna kijk je of je gebruikersnaam in je sql query staat. probeer eens om te kijken of hij in de database staat, want de sql string verandert niet...
Dus jij zegt, dat ik nu in de query zoek en niet in de database zelf?
Klinkt inderdaad wel logisch.

Hoe geef ik aan dat hij moet kijken in de database ipv in de query dan?

De fldGebruikersnaam is niet indexed. Kan ik doormiddel van een no duplicate in de tabel, de error message of code vertalen naar mijn eigen error in asp?

Verwijderd

Topicstarter
Disciplus-Simplex schreef op 31 juli 2002 @ 15:07:
Eh, je selecteert alle usernames uit een tabel en vervolgens stop je die in een variabele. Dat gaat niet werken.
Die select is opzich wel ok maar om vervolgens de inhoud daarvan met een variabele te testen moet je 'scrollen' door je recordset met usernames en iedere naam afzonderlijk checken met de ingevoerde user.
Je maakt dus een loop waarin je iedere keer jumpt naar het volgende record enz.

Wat je ook kan doen is de username in de select querie proppen om vervolgens een select daarmee te doen:
SELECT harry FROM tblAanmelding. Als de return een lege recordset oplevert, weet je dat ie nog niet bestaat.

Het beste kun je dit allemaal doen met stored procedures als je tenminste SQL server gebruikt ipv access

Zal ff een stukje code uit de oude doos vissen. ff geduld
Ik gebruik idd access. Hierachter zit nog een script die de records van access naar SQL exporteerd. Dit is voor het modereren van de aanmeldingen, maar helaas heb ik zelf geen toegang tot die database. Ik kan daar ook geen tables toevoegen e.d.

  • Disciplus-Simplex
  • Registratie: September 2001
  • Laatst online: 28-05 00:58

Disciplus-Simplex

altijd wakker....

dim username, bla, bla

strSQL = "SELECT username FROM tblX"
Set objSQL = cn.Execute(strSQL)

If Not objSQL.eof Then
response.write("HE die naam bestaat al hoor!!")
End If

Volgens mij moet dit werken. Het is absoluut niet de mooiste manier maar het geeft wel aan dat je door een recordset moet scrollen. Overigens met het recordset object kun je op allerlei verschillende manieren door records scrollen maar dit object voegt een extra layer toe waardoor het trager kan werken. In dit geval mag je best alleen het connection object gebruiken.
Nogmaals, dit soort werk wil je in een stored procedure doen.

Ik dien de wetenschap en put daar vreugde uit.......


  • Crazy D
  • Registratie: Augustus 2000
  • Laatst online: 09:31

Crazy D

I think we should take a look.

*zucht* beetje basiskennnis hoor...
je doet een select * zonder voorwaarde, je haalt dus alle records op. En vervolgens check je nog of sql_dup gelijk is aan de username, wat ie nooit zal zijn aangezien je de query vergelijkt met de naam. Oh en je hebt geen recordset.

Probeer eens iets als
code:
1
2
3
4
5
6
7
8
9
10
sUsername = Request.Form("username")
sUsername = escapeString(sUsername)

sql = "SELECT 1veld FROM tabel WHERE username = '" & sUsername & "'"
Set rs = con.Execute sql
If rs.EOF Then
    'username bestaat nog niet
Else
    ' username bestaat wel
End If

Als eerste wordt de form uitgelezen. escapeString is een functie van mij die o.a. de ' vervangt voor 2 keer een ' omdat anders de sql query niet klopt (geen standaard functie, maar met Replace moet je een eind komen ;)).
Vervolgens probeer je 1 record te selecteren, nl. die waar username overeen komt. Het resultaat gaat in een recordset, waarna je kan checken met de EOF property of er iets is gevonden. Voor een gedetailleerdere uitleg kun je het beste maar even een willekeurige tutorial bekijken ;)

Exact expert nodig?


  • Sinedia
  • Registratie: Juli 2002
  • Laatst online: 26-07 13:50
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
<%
'-----Declareer Variabelen
Dim sGebruikersnaam, sSQL, sErrormessage
Dim cnUsers, rsUsers
Dim bUserExists
bUserExists = False

'-----Haal Data Op
sGebruikersnaam = Request.Form("gebruikersnaam")

'-----Controleer Of Er Ongeldige Tekens Voorkomen In Be Gebruikersnaam
If inStrGrp(sGebruikersnaam, ".") = True Or inStrGrp(sGebruikersnaam, "/") = True Or inStrGrp(sGebruikersnaam,"?") = True Then
    sErrormessage = "Ongeldige tekens in de gebruikersnaam"
    Response.Redirect "errormessage.asp?errormessage=" & sErrormessage
End If

'-----Zet SQL String
sSQL = "SELECT * FROM tblAanmelding"
'-----Creeer Objecten / Zet Variabelen
cnUsers = Server.CreateObject("ADODB.Connection")
cnUsers.Open(........) 'Verwijs naar je database
Set rsUsers = cnUsers.Execute(sSQL)

'-----Controleer Of User Al Bestaat
If Not rsUsers.BOF And Not rsUsers.EOF Then
    rsUsers.MoveFirst
    While Not rsUsers.EOF
        If sGebruikersnaam = rsUsers.Field("Username") Then
            bUserExists = True
        End If
        rsUsers.MoveNext
    Wend
End If

If bUserExists = True Then
    sErrormessage = "Deze gebruikersnaam bestaat al"
    Response.Redirect "errormessage.asp?errormessage=" & sErrormessage
End If
%>


Ik was deze net even aan het fabriceren, dus had ik de goede opmerking (van CrazyD) al gemist, jammer, want dan had ik al die moeite niet hoeven te doen....

Ach ja, ik heb hem toch maar gepost, zodat je wat meer mogelijkheden ziet.
Tevens zou ik de controle even wat veranderen, die InStr functie gebruik je verkeerd.
Hij zoekt nu namelijk naar de letterlijke reeks "./?", terwijl jij volgens mij de losse tekens ook wilt afkeuren...

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

D2k

begin eens met hello world en dan wat simpele database dingen
verder zie Crazy_D

Doet iets met Cloud (MS/IBM)

Pagina: 1

Dit topic is gesloten.