Op deze website gebruiken we cookies om content en advertenties te personaliseren, om functies voor social media te bieden en om ons websiteverkeer te analyseren. Ook delen we informatie over uw gebruik van onze site met onze partners voor social media, adverteren en analyse. Deze partners kunnen deze gegevens combineren met andere informatie die u aan ze heeft verstrekt of die ze hebben verzameld op basis van uw gebruik van hun services. Meer informatie.

Akkoord

Vraag & Antwoord

Webprogrammeren & scripting

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

redmar
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 !
  • 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]
  • 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
  • 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 leesvoer 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
  • 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:

Beantwoord deze vraag

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