H Hazze Medlem sedan jan. 2000 2 453 inlägg Trådstart 14 juli 2001 23:30 #1 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
Pace Medlem sedan juni 2001 9 024 inlägg 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!
H Hazze Medlem sedan jan. 2000 2 453 inlägg ok, har försökt med något sådant. får det dock inte att fungera. har du någon kod att visa?
Pace Medlem sedan juni 2001 9 024 inlägg 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!
Pace Medlem sedan juni 2001 9 024 inlägg 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.
P PatrikB Medlem sedan mars 2000 2 836 inlägg 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
Pace Medlem sedan juni 2001 9 024 inlägg Bra idé PatrikB!
Du har banne mig svar på allt (nästan i alla fall)!
Pace Medlem sedan juni 2001 9 024 inlägg Förresten, när jag ändå håller på...
Är det någon som använder DSN "nu förtiden"?
Vad innebär att indexera fältet?
N nakoz Medlem sedan dec. 1999 653 inlägg 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.
H Hazze Medlem sedan jan. 2000 2 453 inlägg 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é?
I icaaq Medlem sedan okt. 2000 5 273 inlägg 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
P PatrikB Medlem sedan mars 2000 2 836 inlägg 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
H Hazze Medlem sedan jan. 2000 2 453 inlägg 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
%>
I icaaq Medlem sedan okt. 2000 5 273 inlägg <%
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
H Hazze Medlem sedan jan. 2000 2 453 inlägg man tackar suveränt!
nu kan man inte längre registrera samma användarnamn. har dock ett par frågor till.
hur gör jag för att snygga till meddelandet om att använarnamnet är upptaget? just nu ser det lite skumt ut:
-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.
om registreringen går bra och använarnamnet är ledigt, var kan jag då lägga in en respone.redirect till en bekräftelse-sida?
I icaaq Medlem sedan okt. 2000 5 273 inlägg <%
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
H Hazze Medlem sedan jan. 2000 2 453 inlägg fungerar perfekt! stort tack
I icaaq Medlem sedan okt. 2000 5 273 inlägg Är du *lycklig*, är jag *lugn*
N nakoz Medlem sedan dec. 1999 653 inlägg 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