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
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)
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 %>
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
%>
[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]
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!
255 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2