Själv gör jag så att jag först kör en SQL sats där jag kollar om användarnamnet redan finns - om det inte finns, dvs recordset:et blir EOF så är det fritt fram att lägga till med insert!
------------------
Peter D
20 svar · 323 visningar · startad av Hazze
hur gör jag för att undvika att personer registrerar samma användarnamn?
min insert ser ut så här:
<%
Set connection = server.createObject("adodb.connection")
connection.open "driver={Microsoft Access Driver (*.mdb)};dbq=" & Server.MapPath("falala.mdb") & ";"
SQL = "INSERT INTO members (Login, Password, Email, Lag, Position, Kommentar ) VALUES ('" & Request.Form("namn") &"','" & Request.Form("pass") &"','" & Request.Form("epost") &"','" & Request.Form("lag") &"','" & Request.Form("pos") &"','" & Request.Form("comment") &"')"
set RS = Connection.Execute(SQL)
Response.Redirect("registrerad.asp")
%>
tacksam för svar :)
------------------
It aint over until the fat lady sings...
Själv gör jag så att jag först kör en SQL sats där jag kollar om användarnamnet redan finns - om det inte finns, dvs recordset:et blir EOF så är det fritt fram att lägga till med insert!
------------------
Peter D
ok, har försökt med något sådant. får det dock inte att fungera. har du någon kod att visa? :)
------------------
It aint over until the fat lady sings...
Hmm, det verkar konstigt. För mig funkar det utmärkt att använda det sättet, vilket jag gjort med följande:
'***************************************************************
'* Lägg till i databas.
'***************************************************************
' Öppna databas och skapa recordSet instans.
databasFil = "login.mdb"
losenord = "nej du, sånt skriver jag ju inte här förstås!"
Set Connect = Server.CreateObject("ADODB.Connection")
Connect.Open "driver={Microsoft Access Driver (*.mdb)};DBQ=" & Server.Mappath(databasFil) & ";pwd=" & losenord
' Kontrollera så att användaren inte finns redan.
SQL = "SELECT * FROM Users WHERE username='" & Request.Form("username") & "'"
SET rs = Connect.Execute(SQL)
If rs.EOF Then
'Fält att lägga till i databasen.
SQL = "INSERT INTO Users (username, password, name, initials, email)"
SQL = SQL & " VALUES('" & Request.Form("username") & "', "
SQL = SQL & "'" & Request.Form("password") & "', "
SQL = SQL & "'" & Request.Form("name") & "', "
SQL = SQL & "'" & Request.Form("initials") & "', "
SQL = SQL & "'" & Request.Form("email") & "'"
SQL = SQL & ")"
Connect.Execute(SQL)
%>
Användaren "<% =Request.Form("username") %>" har lagts till.<P>
<A HREF="login.asp">Tillbaka</A>
<%
Else
%>
Användaren "<% =Request.Form("username") %>" finns redan.<P>
<A HREF="javascript:history.back(-1)">Tillbaka till formuläret</A>
<%
End If
Hoppas det funkar för dig!
------------------
Peter D
Fast jag ska nog uppdatera den koden och använda ADO istället... det blir så in i helvetes jobbigt att använda SQL för att skriva insert och sådant. Chanserna för att man gör fel är 110 % högre än om man använder ADO tycker jag.
Förresten så är den koden inte sådär optimerad.
Connect.Execute(SQL)
%>
[b]
Användaren "<% =Request.Form("username") %>" har lagts till.<P>
<A HREF="login.asp">Tillbaka</A>
[/b]
<%
Else
%>
[b]
Användaren "<% =Request.Form("username") %>" finns redan.<P>
<A HREF="javascript:history.back(-1)">Tillbaka till formuläret</A>
[/b]
<%
End If
De fetmarkerade områden bör skrivas med "Response.Write" istället, det är snabbare på sådana korta partier.
------------------
Peter D
Du kan oxå indexera fältet username och sätta att inga dubbletter är tillåtna.
Sedan kan du använda denna kod:
SQL = "INSERT INTO members (Login, Password, Email, Lag, Position, Kommentar ) " & _
"VALUES ('" & Request.Form("namn") &"','" & Request.Form("pass") &"','" & _
Request.Form("epost") &"','" & Request.Form("lag") &"','" & _
Request.Form("pos") &"','" & Request.Form("comment") &"')"
On Error Resume Next
Set Connection = Server.CreateObject("ADODB.Connection")
Connection.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & Server.MapPath("falala.mdb")
Connection.Execute(SQL)
If err.Number <> 0 Then
Response.Write "Användarnamnet är upptaget. Försök med ett annat."
err.Clear
End If
Connection.Close
Set Connection = Nothing
cya,
PatrikB
------------------
*Det tar sig sa han som hade eld i håret*
Bra idé PatrikB!
Du har banne mig svar på allt (nästan i alla fall)! :)
------------------
Peter D
Förresten, när jag ändå håller på... :)
Är det någon som använder DSN "nu förtiden"?
------------------
Peter D
det innebär att du ställer in i Access/mySql/ms SQL att fältet 'username' eller vad det nu heter är indexerat. då kommer den använda användarnamnet som ett slags ID då detta är unikt.
vidare så saknar jag Trim() då vi inte vill att folk ska kunna regga "nakoz", " nakoz" och "nakoz " m.m.
mvh.
------------------
stora pojkar gråter också.
tackar för hjälpen alla :)
tyvärr är det något som inte riktigt stämmer. använder PatrikB´s kod just nu såhär:
<%
Set connection = server.createObject("adodb.connection")
connection.open "driver={Microsoft Access Driver (*.mdb)};dbq=" & Server.MapPath("falala.mdb") & ";"
SQL = "INSERT INTO members (Login, Password, Email, Lag, Position, Kommentar, Goals, Matcher) " & _
"VALUES ('" & Request.Form("namn") &"','" & Request.Form("pass") &"','" & _
Request.Form("epost") &"','" & Request.Form("lag") &"','" & _
Request.Form("pos") &"','" & Request.Form("comment") &"','" & Request.Form("goal") &"','" & Request.Form("match") &"')"
On Error Resume Next
Set Connection = Server.CreateObject("ADODB.Connection")
Connection.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & Server.MapPath("falala.mdb")
Connection.Execute(SQL)
If err.Number <> 0 Then
Response.Write "Användarnamnet är upptaget. Försök med ett annat."
err.Clear
End If
Connection.Close
Set Connection = Nothing
%>
tyvärr visas meddelandet att användarnamnet är upptaget även om det är ledigt. någon som ar någon idé? :)
------------------
It aint over until the fat lady sings...
Jag skulle gjort så här..
1. Lagt in alla Request.Form´s i variablar.
2. Klammrat alla reserverade ord kolla här http://www.webeye.nu/default2.asp?que=asp/default.asp&exec=asp/reserverade_ord_t-sql.asp
3. Tagit bort det översta connectionobjektet.
4. Skrivit ut SQL-satsen med response.wtite och slängt upp den här på wF.
Testa detta :)
------------------
I like ¼ £ whith cheese
Om du avkommaterar On Error Resume Next vad får du för felmeddelande då??
När man använder sig av On Error Resume Next så kommer inga fel att visas och sidan fortsätter att processa dock ej på korrekt sätt.
Man kan även i if satsen kolla felen så här:
If err.Number <> 0
Response.Write "<P>" & err.Number & "<BR>" & err.Description & "</P>"
Response.Write "Användarnamnet upptaget."
End If
cya,
PatrikB
------------------
*Det tar sig sa han som hade eld i håret*
PatrikB: använde mig av din senaste kod. fick följande fel:
-2147217900
Syntax error in INSERT INTO statement.
Användarnamnet upptaget.
såhär ser det ut just nu:
<%
SQL = "INSERT INTO members (Login, Password, Email, Lag, Position, Kommentar, Goals, Matcher) " & _
"VALUES ('" & Request.Form("namn") &"','" & Request.Form("pass") &"','" & _
Request.Form("epost") &"','" & Request.Form("lag") &"','" & _
Request.Form("pos") &"','" & Request.Form("comment") &"','" & Request.Form("goal") &"','" & Request.Form("match") &"')"
On Error Resume Next
Set Connection = Server.CreateObject("ADODB.Connection")
Connection.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & Server.MapPath("falala.mdb")
Connection.Execute(SQL)
If err.Number <> 0 Then
Response.Write "<P>" & err.Number & "<BR>" & err.Description & "</P>"
Response.Write "Användarnamnet upptaget."
End If
Connection.Close
Set Connection = Nothing
%>
------------------
It aint over until the fat lady sings...
<%
SQL = "INSERT INTO members ([Login], [Password], Email, Lag, Position, Kommentar, Goals, Matcher) " & _
"VALUES ('" & Request.Form("namn") &"','" & Request.Form("pass") &"','" & _
Request.Form("epost") &"','" & Request.Form("lag") &"','" & _
Request.Form("pos") &"','" & Request.Form("comment") &"','" & Request.Form("goal") &"','" & Request.Form("match") &"')"
On Error Resume Next
Set Connection = Server.CreateObject("ADODB.Connection")
Connection.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & Server.MapPath("falala.mdb")
Connection.Execute(SQL)
If err.Number <> 0 Then
Response.Write "<P>" & err.Number & "<BR>" & err.Description & "</P>"
Response.Write "Användarnamnet upptaget."
End If
Connection.Close
Set Connection = Nothing
%>
testa att klammra dessa som jag har gjort :)
------------------
I like ¼ £ whith cheese
man tackar :D suveränt!
nu kan man inte längre registrera samma användarnamn. har dock ett par frågor till.
-2147467259
The changes you requested to the table were not successful because they would create duplicate values in the index, primary key, or relationship. Change the data in the field or fields that contain duplicate data, remove the index, or redefine the index to permit duplicate entries and try again.
Användarnamnet upptaget.
------------------
It aint over until the fat lady sings...
<%
SQL = "INSERT INTO members ([Login], [Password], Email, Lag, Position, Kommentar, Goals, Matcher) " & _
"VALUES ('" & Request.Form("namn") &"','" & Request.Form("pass") &"','" & _
Request.Form("epost") &"','" & Request.Form("lag") &"','" & _
Request.Form("pos") &"','" & Request.Form("comment") &"','" & Request.Form("goal") &"','" & Request.Form("match") &"')"
On Error Resume Next
Set Connection = Server.CreateObject("ADODB.Connection")
Connection.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & Server.MapPath("falala.mdb")
Connection.Execute(SQL)
If err.Number <> 0 Then
Response.Write "Användarnamnet upptaget."
Else
Response.redirect "sida2.asp"
End If
Connection.Close
Set Connection = Nothing
%>
tror jag, jag har aldrig använt denna kod själv :)
------------------
I like ¼ £ whith cheese
[Redigerat av icaaq den 15 jul 2001]
SQL = "INSERT INTO members ([Login], [Password], Email, Lag, Position, Kommentar, Goals, Matcher) " & _
"VALUES ('" & [b]Trim(Request.Form("namn"))[/b] &"','" & Request.Form("pass") &"','" & _
Request.Form("epost") &"','" & Request.Form("lag") &"','" & _
Request.Form("pos") &"','" & Request.Form("comment") &"','" & Request.Form("goal") &"','" & Request.Form("match") &"')"
bara ett tips :)
------------------
stora pojkar gråter också.