hur gör jag för att anropa funktionen?

ASP

9 svar · 206 visningar · startad av Percy

Medlem sedan mars 2000187 inlägg
Trådstart#1

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

Medlem sedan dec. 200012 464 inlägg
#2

Det bör se ut som du har skrivit. Får du något fel?

Medlem sedan mars 2000187 inlägg
#3

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]

Medlem sedan feb. 20012 412 inlägg
#4

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

Medlem sedan dec. 200012 464 inlägg
#5

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
%>
Medlem sedan mars 2000187 inlägg
#6

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...

Medlem sedan dec. 200012 464 inlägg
#7

Jag ser felet nu. Du skriver


if len("pass") < 1 then

i stället för


if len(pass) < 1 then
Medlem sedan mars 2000187 inlägg
#8

Ja, det fungerar!
Tack LarsG, du är ängel :D

Medlem sedan dec. 200012 464 inlägg
#9

Du har samma fel med

if len("user") < 1 then
Medlem sedan mars 2000187 inlägg
#10

japp, såg det!

376 ms totalt · 4 externa anrop · v20260731065814-full.d34c6d5a
120 ms — deklarationer (db)
0 ms — hämta statistik (cache)
250 ms — hämta tråd, inlägg och bilagor (db)
123 ms — ändringar (db)