Ga naar inhoud

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


Aanbevolen berichten

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]
Link naar reactie
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]
Link naar reactie
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]
Link naar reactie
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]
Link naar reactie
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.
Link naar reactie
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
Link naar reactie
[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).
Link naar reactie
Ik heb er toch voor gekozen om een bestaand emailadres te checken (maakt voor de code niets uit :P ) maar hier is de code dan :D ... ik heb me even verdiept in SQL etc... had ik eerder moeten doen :oops: [code:1:cd5f2489b7] <% @ LANGUAGE=VBScript %> <% Dim username, password, password2, city, country, email, birthday, birthmonth, birthyear, website, gender Dim oConn, sConnString, sql, RS, sqle, RC Dim emailexist username = Request.Form("username") password = Request.Form("password") password2 = Request.Form("password2") city = Request.Form("city") country = Request.Form("country") email = Request.Form("email") birthday = Request.Form("birthday") birthmonth = Request.Form("birthmonth") birthyear = Request.Form("birthyear") website = Request.Form("website") gender = Request.Form("gender") 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 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 Set oConn = Server.CreateObject("ADODB.Connection") sConnString = "DRIVER={Microsoft Access Driver (*.mdb)}; " sConnString = sConnString & "DBQ=" & Server.MapPath("eendatabase.mdb") & ";" sConnString = sConnString & "PWD=eenpassword" oConn.Open(sConnString) sqle = "SELECT * FROM members" Set RC = oConn.Execute(sqle) do until RC.EOF emailexist = RC("email") If emailexist = email Then Response.Write "Emailaddress already existing in the database.<br>" Response.Write "Go back with the back button of your browser and try again." Response.End End If RC.moveNext loop sql = "INSERT INTO members (username, password, city, country, email, birthday, birthmonth, birthyear, website, gender) VALUES ('" & username & "', '" & password & "', '" & city & "', '" & country & "', '" & email & "', '" & birthday & "', '" & birthmonth & "', '" & birthyear & "', '" & website & "', '" & gender & "')" Set RS = oConn.Execute(sql) Response.Redirect "register3.asp" %> [/code:1:cd5f2489b7]
Link naar reactie

Om een reactie te plaatsen, moet je eerst inloggen

Gast
Reageer op dit topic

×   Geplakt als verrijkte tekst.   Herstel opmaak

  Er zijn maximaal 75 emoji toegestaan.

×   Je link werd automatisch ingevoegd.   Tonen als normale link

×   Je vorige inhoud werd hersteld.   Leeg de tekstverwerker

×   Je kunt afbeeldingen niet direct plakken. Upload of voeg afbeeldingen vanaf een URL in

  • Populaire leden

    Er is nog niemand die deze week reputatie heeft ontvangen.

  • Leden

    Geen leden om te tonen

×
×
  • Nieuwe aanmaken...