Det bör se ut som du har skrivit. Får du något fel?
------------------
essentitia preter non sans multiplicandum
9 svar · 204 visningar · startad av Percy
Hej!
Novis inom detta som jag är undrar jag hur man gör för att få variabeln pass att anta lösenordfunktionens värde då man valt att inte fylla i något från formulärrutan user? problemet är vad som ska stå i den första If-statsen efter ElseIf Len("pass") < 1 Then.
<%
Function getRandomPassword(ByVal iNoChars)
Dim sChars, sPassword
Dim i
Randomize(Timer())
sChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"
For i = 1 to iNoChars
sPassword = sPassword & Mid(sChars, Rnd * Len(sChars) + 1, 1)
Next
getRandomPassword = sPassword
End Function
Dim surname, lastname, email, pass, user, desc
surname = Request.Form("surname")
lastname = Request.Form("lastname")
email = Request.Form("email")
user = Request.Form("user")
pass = Request.Form("pass")
desc = Request.Form("desc")
If Len("user") < 1 Then
session("no") = "Du måste ange ett användarnamn"
Response.Redirect("account.asp")
ElseIf Len("pass") < 1 Then
pass = getRandomPassword(8)
End If
Set Connection = Server.CreateObject("ADODB.Connection")
Connection.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\databas.mdb"
sqlstmt = "SELECT * FROM account WHERE username = '" & user & "'"
set rs = Connection.Execute(sqlstmt)
IF rs.EOF Then
sqlstmt = "INSERT INTO account ([username], [password], [surname], [lastname], [email], [description]) VALUES ('" & user & "', '" & pass & "', '" & surname & "', '" & lastname & "', '" & email & "', '" & desc & "')"
Connection.Execute(sqlstmt)
Else
Session("no") = "Användarnamnet är upptaget, var god välj ett annat."
Response.Redirect("account.asp")
End If
rs.close
Connection.Close
%>
tack på förhand
Det bör se ut som du har skrivit. Får du något fel?
------------------
essentitia preter non sans multiplicandum
ja, följande:
Microsoft JET Database Engine error '80004005'
Field 'account.password' cannot be a zero-length string.
/members/account1.asp, line 43
rad 43 är f.ö.
Connection.Execute(sqlstmt)
dvs raden efter
sqlstmt = "INSERT INTO account ([username], [password], [surname], [lastname], [email], [description]) VALUES ('" & user & "', '" & pass & "', '" & surname & "', '" & lastname & "', '" & email & "', '" & desc & "')"
detta borde väl rimligen innebära att den inte hämtar värdet från funktionen?
Har du någon briljant lösning kanske? :-)
[Redigerat av Percy den 08 aug 2001]
Prova skriva ut variabeln Pass innan du försöker sätt in den i SQL frågan så ser du fall den är tom eller ej, vilket jag tror den är.
mvh Jörgen
------------------
*** Var går gränsen mellan långa kortbyxor och korta långbyxor? ***
Hmm, nej jag ser inget direkt. Kan du lägga in lite trace-utskrifter så man ser vad som händer?
Tex
<%
Function getRandomPassword(ByVal iNoChars)
Dim sChars, sPassword
Dim i
Randomize(Timer())
sChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"
For i = 1 to iNoChars
sPassword = sPassword & Mid(sChars, Rnd * Len(sChars) + 1, 1)
Next
getRandomPassword = sPassword
End Function
Dim surname, lastname, email, pass, user, desc
surname = Request.Form("surname")
lastname = Request.Form("lastname")
email = Request.Form("email")
user = Request.Form("user")
pass = Request.Form("pass")
desc = Request.Form("desc")
[b]
Response.write "Len(pass):" & len(pass) & "<br>"
[/b]
If Len("user") < 1 Then
session("no") = "Du måste ange ett användarnamn"
Response.Redirect("account.asp")
ElseIf Len("pass") < 1 Then
pass = getRandomPassword(8)
End If
[b]
response.write "pass: " & pass & "<br>"
[/b]
Set Connection = Server.CreateObject("ADODB.Connection")
Connection.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\databas.mdb"
sqlstmt = "SELECT * FROM account WHERE username = '" & user & "'"
set rs = Connection.Execute(sqlstmt)
IF rs.EOF Then
sqlstmt = "INSERT INTO account ([username], [password], [surname], [lastname], [email], [description]) VALUES ('" & user & "', '" & pass & "', '" & surname & "', '" & lastname & "', '" & email & "', '" & desc & "')"
[b]
response.write "Sql: " & sqlstmt & "<br>"
'[/b]Connection.Execute(sqlstmt)
Else
Session("no") = "Användarnamnet är upptaget, var god välj ett annat."
Response.Redirect("account.asp")
End If
rs.close
Connection.Close
%>
------------------
essentitia preter non sans multiplicandum
När jag provar att fylla i ett eget lösen fungerar allt som det ska men då jag utelämnar lösenordet så får jag upp följande kod:
Len(pass):0
pass:
sql: INSERT INTO account ([username], [password], [surname], [lastname], [email], [description]) VALUES ('Adam', '', 'jan', 'banan', 'jan@banan.com', 'ordinary user')
Nu vet vi med all säkerhet att variabeln pass är tom, men jag är inte klokare av att jag vet det....
Har ni någon aning? provade att köra funktionen i en separat fil och med följande kod:
<%
Function getRandomPassword(ByVal iNoChars)
Dim sChars, sPassword
Dim i
Randomize(Timer())
sChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"
For i = 1 to iNoChars
sPassword = sPassword & Mid(sChars, Rnd * Len(sChars) + 1, 1)
Next
getRandomPassword = sPassword
End Function
Response.Write getRandomPassword(8)
%>
det fungerar dock utmärkt...
Jag ser felet nu. Du skriver
if len("pass") < 1 then
i stället för
if len(pass) < 1 then
------------------
essentitia preter non sans multiplicandum
[Redigerat av LarsG den 08 aug 2001]
Ja, det fungerar!
Tack LarsG, du är ängel :D
Du har samma fel med
if len("user") < 1 then
------------------
essentitia preter non sans multiplicandum
japp, såg det!