Vraag & Antwoord

Webprogrammeren & scripting

[ASP/SQL] Bestaande waarde in DB => error geven

11 antwoorden
  • Ik maak een registratiesysteem voor mijn website, waar de info van de users in een Access 2000 DB wordt opgeslagen. Echter wil ik (naast een UserID dat aangemaakt wordt dmv AutoNummering) graag werken met unieke usernames. Ik dacht met SQL te kunnen controleren of een username al bestaat of niet, door de UserID op te vragen en sqlCheckuser die waarde te geven. Helaas werkt het niet en kan er rustig dezelfde username worden geregistreerd... Komt dit omdat het opvragen van een niet bestaand UserID niet kan (dat sqlCheckuser dus ook geen waarde "" krijgt). Of kan op deze manier geen waarde aan sqlCheckuser worden gegeven? Ik weet niet of de SELECT query helemaal goed is (vooral aan het eind, waar & username de waarde van username is die eerder in een form is gesubmit. [code:1:2003552a28] Dim sqlCheckuser 'Check if username exists sqlCheckuser = "SELECT UserID FROM members WHERE username=" & username If sqlCheckuser = "" Then Response.Write "Username already exists.<br>" Response.Write "Go back with the back button of your browser and try again." Response.End End If [/code:1:2003552a28] Als het niet op deze manier mogelijk is, bestaat dan de mogelijkheid om een soort On Error event te creëren dat wordt aangeroepen als ik in de database geen duplicaten van username toesta? Alvast bedankt :D ![/code]
  • Moet je geen enkele quotes om die username var zetten? Dus zoiets als: SELECT UserID FROM members WHERE username='" & username & "'"
  • Mjah.. [code:1:bb15e989c4] Dim sqlCheckuser 'Check if username exists sqlCheckuser = "SELECT UserID FROM members WHERE username='" & username & "'" If sqlCheckuser <> "" Then Response.Write "Username already exists.<br>" Response.Write "Go back with the back button of your browser and try again." Response.End End If [/code:1:bb15e989c4] Maar helaas... ook dat werkt niet (ik heb de = veranderd in <>, omdat de username bestaat als hij een waarde returned, dus NIET leeg is... maar dan geeft ie standaard aan dat de username bestaat... returned hij dan voor een niet bestaande recordset ook een waarde voor UserID :-? ? Op de manier zoals het script zich nu gedraagd wel.. en kan ik er ook achter komen welke waarde dit is (als het een constante waarde is ..) zodat ik iets kan doen met [code:1:bb15e989c4] If sqlCheckuser <> "waarde" Then blabla... [/code:1:bb15e989c4][/code]
  • Zou je de query niet eens uitvoeren (as in: naar de database sturen)? En die username variabele is ook vaut: dat moet iets zijn dat uit de post actie komt. Hoe je dat eruit moet halen vindt je in iedere ASP tutorial/boek (en ik weet het niet, dus kan je daar niet mee helpen).
  • Een [color=darkred:ac4d017423]on error resume next[/color:ac4d017423] constructie kan overigens ook (maar ik zou eigenlijk ook eerst kiezen voor de methode uit je eerste post). beetje pseudo code: [code:1:ac4d017423] <% on error resume next ' insert uitvoeren if err.number <> 0 then ' er is dus een error opgetreden bij de insert ' eventueel kan je nog kijken of de error message inderdaad de juiste is ' (misschien is er wel een andere fout opgetreden namelijk en dan wil je ' natuurlijk een andere melding aan de gebruiker geven). response.end end if on error goto 0 ' rest van je script %> [/code:1:ac4d017423]
  • Hoepla hier is alle code brij :) zoals je ziet komt de username uit een form en wordt er ook een verbinding gemaakt met de database... of moet de query apart uitgevoerd worden :oops: ? [code:1:5d8ebc9a3d]<% option explicit '---- CursorTypeEnum Values ---- Const adOpenForwardOnly = 0 Const adOpenKeyset = 1 Const adOpenDynamic = 2 Const adOpenStatic = 3 '---- LockTypeEnum Values ---- Const adLockReadOnly = 1 Const adLockPessimistic = 2 Const adLockOptimistic = 3 Const adLockBatchOptimistic = 4 '---- CommandTypeEnum Values ---- Const adCmdUnknown = &H0008 Const adCmdText = &H0001 Const adCmdTable = &H0002 Const adCmdStoredProc = &H0004 Const adCmdFile = &H0100 Const adCmdTableDirect = &H0200 Dim username, password, password2, city, country, email, age, website, gender Dim DSN_CONNSTR, SQLstring, rs, DBconn, RecCount Dim sqlCheckuser 'Get values from registration form username = Request.Form("username") password = Request.Form("password") password2 = Request.Form("password2") city = Request.Form("city") country = Request.Form("country") email = Request.Form("email") age = Request.Form("age") website = Request.Form("website") gender = Request.Form("gender") 'Check required fields If username = "" Or password = "" Or password2 = "" Or email = "" Or country = "" Then Response.Write "You didn't fill in all the required fields.<br>" Response.Write "Go back with the back button of your browser and try again." Response.End End If 'Check password If password <> password2 Then Response.Write "The passwords you entered are not the same.<br>" Response.Write "Go back with the back button of your browser and try again." Response.End End If 'Connect to DB DSN_CONNSTR = "DRIVER={Microsoft Access Driver (*.mdb)}; " DSN_CONNSTR = DSN_CONNSTR & "DBQ=" & server.mappath("blablabla.mdb") Set rs = Server.CreateObject("ADODB.Recordset") rs.Open "members", DSN_CONNSTR, adOpenKeyset, adLockPessimistic, adCmdTable 'Check if username exists sqlCheckuser = "SELECT UserID FROM members WHERE username='" & username & "'" If sqlCheckuser <> "" Then Response.Write "Username already exists.<br>" Response.Write "Go back with the back button of your browser and try again." Response.End End If 'Add new record rs.AddNew rs.Fields("username") = username rs.Fields("password") = password rs.Fields("city") = city rs.Fields("country") = country rs.Fields("email") = email rs.Fields("age") = age rs.Fields("website") = website rs.Fields("gender") = gender rs.Update RecCount = rs.RecordCount rs.Close Set rs = Nothing Response.Redirect "register3.asp" %>[/code:1:5d8ebc9a3d]
  • Een query moet je inderdaad uitvoeren op de database (bijv. via een recordset object of rechtstreeks op het connection object). Je hebt zelf al een stuk in je code zitten waarin een recordset wordt geopend. Je kan dit stuk (met wat aanpassingen) kopieren voor een tweede controle-recordset waarin je checked of de user al voorkomt. Maar wat ook kan is de bestaande recordset aanpassen. Oh ja, het stukje code waar ik het over heb is: [code:1:9cb3f93a95] Set rs = Server.CreateObject("ADODB.Recordset") rs.Open "members", DSN_CONNSTR, adOpenKeyset, adLockPessimistic, adCmdTable ' ... hier staat nog wat code voor de invoer van een nieuw record rs.Close Set rs = Nothing [/code:1:9cb3f93a95] Aan jou de keus waar je voor gaat en de uitdaging om het werkend te krijgen. Hier is nog wat [url=http://www.devguru.com/Technologies/ado/quickref/ado_intro.html]leesvoer[/url] voor als je snel wat op moet zoeken.
  • Laten we het simpel houden; je hebt nu records uit een tabel uit de database gehaald, maar je checked nergens of een bepaalde waarde al voorkomt. Je moet dus nog even door de recordset lopen. Daarnaast kun je natuurlijk van het betreffende veld een geindexeerd (Ja, geen duplicaten) veld maken, maar hoe je dan de foutmelding afhandelt heb ik niet paraat
  • [quote:57373b38ad="Wiep Corbier"]maar hoe je dan de foutmelding afhandelt heb ik niet paraat[/quote:57373b38ad]gewoon [color=blue:57373b38ad]on error resume next [/color:57373b38ad]en dan na de insert kijken of er iets in het [color=blue:57373b38ad]err [/color:57373b38ad]object zit.
  • ja, en ik bedoel dus; als er een error opgetreden is, en dat weet je door on error... welke error (foutnr.) dat precies is.
  • [quote:f34ff45815="Wiep Corbier"]ja, en ik bedoel dus; als er een error opgetreden is, en dat weet je door on error... welke error (foutnr.) dat precies is.[/quote:f34ff45815]Oh, je bedoelt: [color=darkred:f34ff45815]Err.Number [/color:f34ff45815]of [color=darkred:f34ff45815]Err.Description[/color:f34ff45815]? En ook ADO heeft overigens een error object (bereikbaar via het connection object).

Beantwoord deze vraag

Weet jij het antwoord op deze vraag? Registreer of meld je aan met je account

Dit is een gearchiveerde pagina. Antwoorden is niet meer mogelijk.