webForumDet fria alternativet

Användarnamnet redan taget...

ASP

7 svar · 306 visningar · startad av magnusfeldth

Medlem sedan jan. 20034 480 inlägg
Frågan#1

Efter att jag lagt till en javakod som kollar efter förbjudna tecken har ett registreringsscript lagt av. Den säger

Microsoft OLE DB Provider for ODBC Drivers (0x80040E2F)
[Microsoft][Drivrutin för ODBC Microsoft Access]Fel i rad 
/hhgspunktse/hhgs/nystudentuser.asp, line 92

Line 92 är RecSet.Update...

Efter en sökning på felmesset har jag fått fram att 0x80040E2F framkommer när man tex redan har ett användarnamn upptaget... men jag har testat och det ska inte vara upptagna namn jag testar med, samt att denna koden (obs, idg-kod, slå mig inte ;) )används för att kolla om användarnamnet redan är upptaget.

	X = FALSE

	Do Until X = TRUE OR RecSet.EOF

	If RecSet("Anvandarnamn") = Request.Form("anvandarnamn") Then
	X = TRUE
	Exit Do
	End If

	RecSet.MoveNext

	Loop

	
	If X = TRUE Then 
	Response.Write "Det användarnamn du vill använda är redan taget, vänligen välj ett nytt."

	End If

	If X = FALSE Then 

RecSet.AddNew

Vad är problemet?

Medlem sedan dec. 200012 464 inlägg
#2

Line 92 är RecSet.Update...

Var är den raden då?

Allmänt så är din strategi med att göra jämförelser i applikationen i stället för i databasen helt förkastlig. Ange villkoren direkt i SQL. Släng den där vansinnigt korkade IDG-koden. (Det finns flera exempel på bättre och enklare skript i inlägg här.)

Fel i rad brukar oftast bero på att du bryter mot något constraint i databasen (check eller foreign key)

Medlem sedan jan. 20034 480 inlägg
#3
RecSet.AddNew

	RecSet("Anvandarnamn") = Request.Form("Anvandarnamn")
	RecSet("Losenord") = Request.Form("Losenord")
	RecSet("Namn") = Request.Form("Namn")
    RecSet("Epost") = Request.Form("Epost")
   	RecSet.Update

...så ser fortsättningen ut... Ja, det är dum idg-kod, har nån en länk till bättre?

Medlem sedan nov. 2003266 inlägg
#4

Ett sätt:

SELECT COUNT(Anvandarnamn) AS antal FROM tabell WHERE Anvandarnamn = '" & Request.Form("Anvandarnamn") & "'
X = RecSet("antal")
If (X > 0) Then
  Användarnamnet fanns
Else
  INSERT INTO tabell (Anvandarnamn, Losenord, Namn, Epost) _ &
VALUES('" & Request.Form("Anvandarnamn") & "', '" & Request.Form("Losenord") & "', '" & Request.Form("Namn") & "', '" & Request.Form("Epost") & "')
End If

Du måste ju naturligtvis köra SQL-frågorna och pilla ihop det med din kod, men det förstod du säkert.
(är lite osäker på om _ & innan VALUES är rätt)

Medlem sedan jan. 20034 480 inlägg
#5

felmess: Feltyp:

Kompileringsfel i Microsoft VBScript (0x800A03FD)
'Case' förväntas.
/hhgspunktse/hhgs/nystudentuser.asp, line 64, column 7
SELECT COUNT(Anvandarnamn) AS antal FROM tabell WHERE Anvandarnamn = '" & Request.Form("Anvandarnamn") & "'
------^
<%	Set Connect = Server.CreateObject("ADODB.Connection")
	Connect.Open "driver={Microsoft Access Driver (*.mdb)};dbq=" &Server.MapPath("db/hhgsdb.mdb")

	Set RecSet = Server.CreateObject("ADODB.Recordset") SELECT COUNT(Anvandarnamn) AS antal FROM tabell WHERE Anvandarnamn = '" & Request.Form("Anvandarnamn") & "'
X = RecSet("antal")
If (X > 0) Then
Response.Write "Det användarnamn du vill använda är redan taget, vänligen välj ett nytt."

Else
  INSERT INTO tabell (Anvandarnamn, Losenord, Namn, Epost) _ &
VALUES('" & Request.Form("Anvandarnamn") & "', '" & Request.Form("Losenord") & "', '" & Request.Form("Namn") & "', '" & Request.Form("Epost") & "')
End If %>
Medlem sedan nov. 2003266 inlägg
#6

Utan att analysera felmeddelandet och utan att testa koden;

<%
' Ändra [I][B]tabell[/B][/I] till tabellens namn i databasen
Set Connect = Server.CreateObject("ADODB.Connection")
Connect.Open "driver={Microsoft Access Driver (*.mdb)};dbq=" &Server.MapPath("db/hhgsdb.mdb")
Set RecSet = Server.CreateObject("ADODB.Recordset") 

SQLstr= "SELECT COUNT(Anvandarnamn) AS antal FROM [I][B]tabell[/B][/I] WHERE Anvandarnamn = '" & Request.Form("Anvandarnamn") & "'"
RecSet.Open SQLstr, Connect
X = RecSet("antal")
RecSet.Close
Set RecSet = nothing

If (X > 0) Then
  Response.Write "Det användarnamn du vill använda är redan taget, vänligen välj ett nytt."

Else
  SQLstr = "INSERT INTO [I][B]tabell[/B][/I] (Anvandarnamn, Losenord, Namn, Epost) VALUES('" & Request.Form("Anvandarnamn") & "', '" & Request.Form("Losenord") & "', '" & Request.Form("Namn") & "', '" & Request.Form("Epost") & "')"
  Connect.Execute(SQLstr),,128

End If

Connect.Close
Set Connect = nothing
%>

Hoppas det funkar :)

Medlem sedan apr. 20003 174 inlägg
#7

Jag hade nog gjort det nått liknande detta..

[red]<%

Function dbSafe(str)
	str = trim(str)
	If Len(str) > 0 Then dbSafe = Replace(Replace(str, "|",""), "'","''")
End Function

Dim strUserName, strPass, strName, strMail
strUserName = dbSafe(Request.Form("Anvandarnamn"))
strPass = dbSafe(Request.Form("Losenord"))
strName = dbSafe(Request.Form("Namn"))
strMail = dbSafe(Request.Form("Epost"))

Set Connect = Server.CreateObject("ADODB.Connection")
	Connect.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="& Server.MapPath("db/hhgsdb.mdb")
		Set RecSet = Connect.Execute("SELECT Anvandarnamn FROM [b]tabell[/b] WHERE Anvandarnamn='"& strUserName &"'")

			If RecSet.EOF Then
				Connect.Execute("INSERT INTO [b]tabell[/b] (Anvandarnamn, Losenord, Namn, Epost) VALUES('"& strUserName &"', '"& strPass &"', '"& strName &"', '"& strMail &"')"),,128
				Response.Write "Dina uppgifter är sparade.."

			Else
				Response.Write "Det användarnamn du vill använda är redan taget, vänligen välj ett nytt."
			
			End If
			RecSet.Close

		Set RecSet = Nothing
	Connect.Close
Set Connect = Nothing

%>[/red]
Medlem sedan jan. 20034 480 inlägg
#8

jag såg vad felet var. När jag justerat javascriptet för förbjudna tecken hade jag ändrat i formuläret från "name=anvandarnamn" till id=anvandarnamn.... när jag ändrade tillbaka fungerade både förbjudna tecken och databassparningen.

Tack för all er hjälp!

257 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
124 ms — deklarationer (db)
0 ms — hämta statistik (cache)
130 ms — hämta tråd, inlägg och bilagor (db)
123 ms — ändringar (db)