webForumDet fria alternativet

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

ASP

9 svar · 204 visningar · startad av Percy

Medlem sedan mars 2000187 inlägg
Frågan#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?

------------------
essentitia preter non sans multiplicandum

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

------------------
*** Var går gränsen mellan långa kortbyxor och korta långbyxor? ***

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

------------------
essentitia preter non sans multiplicandum

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

------------------
essentitia preter non sans multiplicandum

[Redigerat av LarsG den 08 aug 2001]

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

------------------
essentitia preter non sans multiplicandum

Medlem sedan mars 2000187 inlägg
#10

japp, såg det!

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