webForumDet fria alternativet

hur hämta en funktion!

ASP

12 svar · 233 visningar · startad av doggelito

Medlem sedan juni 20003 076 inlägg
Frågan#1

tjena!
på vilket sätt bör man hämta funktioner på?
ta denna som exempel

Function Login
Validname = LTrim(Request.Form("name"))
Validpassword = Ltrim(Request.Form("password"))
errors = 0
Set objConn = Connopen
strsql = "SELECT Username, Password, Userlevel FROM Usertbl "&_
"WHERE Username = '" & Validname & "' AND Password = '" & Validpassword & "' ;"
Set rs = objConn.execute(strsql)
	If rs.EOF Then
	errors = 1
	Else
	Session("Username") = rs("username")
	Session("Userlevel") = rs("userlevel")
	End If
Set objConn = Connclose
End Function

och hämtningen

If Request.Querystring("Login") = "yes" Then
Login
End If

inget fel kanske men förvirrande är det när man bara skriver Login, kan ju misstolkas med en tom variabel då och jobbigare blir det, ju fler man får.
ska man skriva på något annat sätt?

Medlem sedan juli 20012 450 inlägg
#2

Kanske såhär...

Function Login(name,password)
errors = 0
Set objConn = Connopen
strsql = "SELECT Username, Password, Userlevel FROM Usertbl "&_
"WHERE Username = '" & name& "' AND Password = '" & password& "' ;"
Set rs = objConn.execute(strsql)
If rs.EOF Then
return false
Else
return true
End If
Set objConn = Connclose
End Function

Sen i koden på lämpligt ställe.

if Login(Request.Form("name"),Request.Form("password") then
Response.write("inloggad")
[b]'sätt sessions[/b]
else
Response.write("ej inloggad")
end if

Taget ur luften. :)
/r se flyttning av "sätt session"

Medlem sedan juni 200032 967 inlägg
#3

Jo, fast i VB-Script använder man inte return, skyman... ;)

Så här kan funktionen tänkas se ut:

Function Login(name,password)
errors = 0
Set objConn = Connopen
strsql = "SELECT Username, Password, Userlevel FROM Usertbl "&_
"WHERE Username = '" & name& "' AND Password = '" & password& "' ;"
Set rs = objConn.execute(strsql)
If rs.EOF Then
    blnTemp = false
Else
'sätt sessions
    blnTemp = true
End If
Set objConn = Connclose
Login = blnTemp
End Function

Mvh,

Medlem sedan juni 20003 076 inlägg
#4

ja just ja! smart. :)
när jag tänker efter så händer det väl aldrig att man hämtar en funktion utan argument, inte så stor vits med funktionen då! :h

Medlem sedan juli 20012 450 inlägg
#5

You´re right @nders...
När jag ska jag komma ihåg det? ;)
eller... när ska de ändras ;)

Medlem sedan juli 20012 450 inlägg
#6

en grej till

Om du ska ha med userlevel i sessions så är det nog bäst om du sätter sessions i funktionen istället... :)
För de fanns väl bara i databasen?

Medlem sedan juni 20003 076 inlägg
#7

hur tusan flyttar jag sql-strängen, ska man inte kunna göra så här?

Function Login(name,password,strSql)
errors = 1
Set objConn = Connopen
Set rs = objConn.execute(strSql)
	If rs.EOF Then
    blnTemp = false
	Else
    blnTemp = true
	Session("Username") = rs(0)
	Session("Userlevel") = rs(2)
	End If
Set objConn = Connclose
Login = blnTemp
End Function

strSql = "SELECT Username, Password, Userlevel FROM Usertbl "&_
"WHERE Username = '" & name & "' AND Password = '" & password & "' ;"
if Login(request.form("name"),request.form("password"),strSql) then
Medlem sedan juni 200032 967 inlägg
#8

Jo, det ser lite knasigt ut dock.

För det första har variablerna name och password som du använder i SQL-frågan inge värden eftersom SQL-frågan numera skapas utanför funktionen. Du använder inte heller name och password i funktionen längre, så du behöver inte ha dem som parametrar.

Mvh,

Medlem sedan juli 20012 450 inlägg
#9

:)

Du kan ju skicka med sqlsträngen men utan WHERE om du måste och sen köra en while-loop i funktionen...

Medlem sedan juni 20003 076 inlägg
#10

nu blev det överkurs för mig! :l
tanken slog mig bara att man borde kunna använda samma funktion till en annan loginsida utan att behöva skriva om den.

Medlem sedan juli 20012 450 inlägg
#11

SQL-sträng:

SELECT Username, Password, Userlevel FROM Usertbl

Sedan i funktionen, istället för if not rs.EOF then... så skriver du:

funnen=false
while not rs.eof or funnen=false
if rs("username")=user and rs("password")=passw then
funnen=true
'sätt sessionerna...
else
rs.MoveNext
end if
wend

Jag tycker det är klumpigt att behöva skicka med sql-strängen i funktionen, du kommer ju knappast att använda den flera gånger på en sida, eller ens i samma projekt...
Eller ska du det?

Medlem sedan dec. 200012 464 inlägg
#12

Nej, så gör man inte. Låt alltid databasen göra utsökningen.

Medlem sedan juni 20003 076 inlägg
#13

må vara att man inte använder den mer i samma projekt, men däremot så är det alltid roligt när man hittar lösningar som underlättar nästa projekt, och nästa...
ganska coolt vore det ju om man bara behövde kopiera med 'funktions-sidan' till nästa projekt utan att behöva gå in i den.
men det är ju lite överkurs förstås, jag är helnöjd ändå, tack!
:bire

273 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
124 ms — deklarationer (db)
0 ms — hämta statistik (cache)
146 ms — hämta tråd, inlägg och bilagor (db)
122 ms — ändringar (db)