Avatar billede karsten_larsen Praktikant
19. juni 2005 - 09:57 Der er 7 kommentarer og
1 løsning

Funktionsværdi med i script?

Det er helt sikkert meget enkelt, men jeg er gået helt kold på det!

Hvordan tages værdien af en funktion med i scriptet?

Funktion replacer tegn fra input. Funktionen virker, men resultatet af funktionen skal med i koden i en streng.

F.eks. således
strSQL = "Insert Into tabel .... data = " & [Resultat af funktionen]


Følgende giver fejl:
strSQL = "Insert into tabel .... data = " & funcTrimRequest Request.Form("tekst")

???:-) karsten_larsen

Hele koden følger her til afprøvning:

<html>
</head>
<body>
<%
    Function funcTrimRequest(Input)
        funcTrimRequest = Server.HTMLEncode(Trim(Replace(Input, "'", "''")))
        funcTrimRequest = Server.HTMLEncode(Trim(Replace(funcTrimRequest, "''", "")))
        funcTrimRequest = Server.HTMLEncode(Trim(Replace(funcTrimRequest, "-", "")))       
        funcTrimRequest = Server.HTMLEncode(Trim(Replace(funcTrimRequest, "(", "")))       
        funcTrimRequest = Server.HTMLEncode(Trim(Replace(funcTrimRequest, ")", "")))                       
        Response.Write("Resultat af funcTrimRequest = " & funcTrimRequest & "<br>")
    End Function

    funcTrimRequest Request.Form("tekst")

    strSQL = "Insert into tabel .... data = " & funcTrimRequest Request.Form("tekst")
    Response.Write("<br> Tjek af strSQL"&  strSQL)
%>

<form action="test.asp" method="post">
<input name="tekst" type="text" value="1' OR '1' = '1 ()">
<input name="" type="submit">
</form>
</body>
</html>


Hele koden følger her:
Avatar billede busschou Praktikant
19. juni 2005 - 10:01 #1
Jeg ville gøre sådan her
--
Function funcTrimRequest(Input)
temp = Server.HTMLEncode(Trim(Replace(Input, "'", "''")))
temp = Server.HTMLEncode(Trim(Replace(temp, "''", "")))
temp = Server.HTMLEncode(Trim(Replace(temp, "-", "")))     
temp = Server.HTMLEncode(Trim(Replace(temp, "(", "")))     
temp = Server.HTMLEncode(Trim(Replace(temp, ")", "")))                     
funcTrimRequest = temp
End Function
Response.write "du kan nu sammkæde din funktion med udskrift "&funcTrimRequest("blabla")
Avatar billede busschou Praktikant
19. juni 2005 - 10:03 #2
Dårligt eksempel da jeg ikke kalder funktionen med noget nyttigt :o)
Men pointen er følgende
En funktion returnerer en værdi
En Sub returnerer ikke en værdi
Så hvis du blot ønsker at have en "funktion" som udskriver noget, så kan du ligeså godt benytte SUB, men hvis du ønsker få beregnet på noget og tildele det en variable så benytter du en FUNCTION
eks
sql = "Insert into tabel values('hej',2,#23-03-1928#)"
nysql = funcTrimRequest(sql)
Avatar billede karsten_larsen Praktikant
19. juni 2005 - 10:12 #3
Hmm - det kan jeg ikke få til at virke!

Burde det ikke være sådan her så:

    Function funcTrimRequest(Input)
        temp = Server.HTMLEncode(Trim(Replace(Input, "'", "''")))
        temp = Server.HTMLEncode(Trim(Replace(temp, "''", "")))
        temp = Server.HTMLEncode(Trim(Replace(temp, "-", "")))       
        temp = Server.HTMLEncode(Trim(Replace(temp, "(", "")))       
        temp = Server.HTMLEncode(Trim(Replace(temp, ")", "")))                       
        funcTrimRequest = temp
    End Function

    strSQL = "Insert into tabel .... data = " & Request.Form("tekst")
    funcTrimRequest strSQL
   
    Response.Write("<br> Tjek af strSQL = "&  strSQL)

Men det giver dette resultat:

Insert into tabel .... data = 1' OR '1' = '1 ()

og ikke dette som er ønsket

Insert into tabel .... data = 1 OR 1 = 1 ()

?? karsten_larsen
Avatar billede karsten_larsen Praktikant
19. juni 2005 - 10:14 #4
Hmm

Den får fejl ved følgende
nysql = funcTrimRequest(sql)

Slut på sætning var ventet
/test.asp, line 15, column 24
nySQL = funcTrimRequest strSQL
-----------------------^

Jeg prøver lige med sub
Avatar billede busschou Praktikant
19. juni 2005 - 10:15 #5
Ja men du skriver heller ikke det rigtige ud, når du kører funktionen så får du jo værdien direkte
---
strSQL = "Insert into tabel .... data = " & Request.Form("tekst")
nystrSQL = funcTrimRequest strSQL
Response.Write("<br> Tjek af strSQL = "&  nystrSQL)
Avatar billede busschou Praktikant
19. juni 2005 - 10:17 #6
Jeg har aldrig helt selv lært hvornår man skal benytte Call
Men jeg synes nogen gange man er ude for at man skal benytte Call, specielt hvis man bruger Sub og paranteser
Der er vist følgende måder at kalde den på
test = funcTrimRequest(strSQL)
test = funcTrimRequest strSQL
test = call funcTrimRequest(strSQL)
test = call funcTrimRequest strSQL
Avatar billede karsten_larsen Praktikant
19. juni 2005 - 10:19 #7
Fedt nok nu virker det, der skulle lige () med i nystrSQL = funcTrimRequest (strSQL)

Tak for hjælpen

:-) karsten_larsen
Avatar billede busschou Praktikant
19. juni 2005 - 10:20 #8
Det var så lidt da :o), rart når tingene virker :o)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester