Avatar billede mrpalermo Nybegynder
19. juli 2005 - 02:44 Der er 17 kommentarer og
1 løsning

Hente asp koder fra database

Jeg ved ikke om jeg ikke kan tænke rent her kl. 2.30 om natten, men måske der er en derude som han hjælpe mig med følgende:

Jeg har lavet et simpelt content management modul, som kører i ASP + MS SQL.

Jeg kunne godt tænke mig at jeg havde mulighed for at gemme ASP kommandoer i databasen, og efterfølgende kunne "tolke" disse sider (hente asp in i en asp side fra db):

Forestil jer følgende tekst gemt i databasen:

"Velkommen <% =Session("Brugernavn") %>"

Når jeg henter indholdet fra databasen ud på min side, vil jeg naturligvis gerne have den til at skrive:

"Velkommen Peter Petersen" fx.

Forstår i min problematik?
Avatar billede apo Praktikant
19. juli 2005 - 03:21 #1
Jeg er ikke sikker på om det kan lade sig gøre, at hente ASP-koder fra en database. Men har du prøvet med:

"Velkommen " & Response.Write Session("Brugernavn")

?

Apo
Avatar billede steen_hansen Forsker
19. juli 2005 - 06:36 #2
Prøv at inkludere dette over <html>

<%
Function FormatText(str)
    Set objRegExp = New RegExp
    objRegExp.IgnoreCase = True
    objRegExp.Global = True

    str = Server.HTMLEncode(str)

    objRegExp.Pattern = "(\s) "
    str = objRegExp.Replace(str,"$1&nbsp;")

    str = Replace(str, vbcrlf, VbCrLf & "<br>" & vbCrLf)

    str = LinkString(str)

    FormatText = str
End function
%>
Avatar billede steen_hansen Forsker
19. juli 2005 - 06:37 #3
<%=FormatText(RS("VBScript")%>
Avatar billede busschou Praktikant
19. juli 2005 - 07:58 #4
Måske steen_hansen´s virker ?
Problemet er jo at det ikke er ren asp du har gemt i databasen
Hvis nu det var ren asp så burde du kunne evaluere det med Execute kommandoen
altså
tekst = "response.write ""Velkommen ""&Session(""Brugernavn"")"
Execute(tekst)
http://www.4guysfromrolla.com/webtech/030300-1.shtml
Avatar billede busschou Praktikant
19. juli 2005 - 08:01 #5
og den er selvfølgelig også at læse om her hvis det er  :o)
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/script56/html/vsstmexecute.asp
Avatar billede soes Nybegynder
19. juli 2005 - 10:37 #6
Så vidt jeg ved er det ikke muligt at bruge Server.Execute til at eksekvere asp kode fra en tekst streng.
http://www.w3schools.com/asp/met_execute.asp

En løsning ville være at man hentede asp koden ud, gemte det i en fil på serveren og så brugte server.execute("codesniplets/tmpCode.asp")

Når du så er færdig med at eksekvere koden sletter du naturligvis de filer du har oprettet løbende.
Avatar billede busschou Praktikant
19. juli 2005 - 10:40 #7
soes >> ikke Server.Execute - bare Execute eller ExecuteGlobal
Avatar billede soes Nybegynder
19. juli 2005 - 10:58 #8
busschou >> du har ret. Kendte ikke til Execute kommandoen og troede derfor at man mente server.execute udgaven.
Avatar billede busschou Praktikant
19. juli 2005 - 11:06 #9
soes >> men du har da ret i at det er en mulighed at gemme udtrækket som en fil. Dog vil jeg mene at hvis man vil gemme alle sine informationer i en database frem for asp filer, blot for at hive det ud i asp filer alligevel, ja så kunne man ligeså godt have gemt det i en fil til at starte med :o)
Avatar billede soes Nybegynder
19. juli 2005 - 11:17 #10
busschou >> true true :o)
Avatar billede mrpalermo Nybegynder
19. juli 2005 - 12:46 #11
Soes, jeg har også tænkt på at gemme den kode som hentes ud fra databasen som midlkertidig fil, og efterfølgende redirecte til asp filen.

Busschou, du har tildels ret, men i databasen er der bl.a. gemt en SiteTemplate, PageTemplate, samt typisk 10-20 content sektioner, som skal "sammensmeltes" til et site. Jeg mente ikke det var nødvendigt at gå i detaljer om hvad indholdet i databasen var, men mere om selve problematikken.

Soes, jeg kigger lige nærmere på Execute funktionen. Den har jeg ikke prøvet før. Jeg får muligvis et par spg. undervejs. Hvis det virker smider jeg et accept.
Avatar billede ksoren Nybegynder
20. juli 2005 - 01:30 #12
Man kunne dele indholdet op. Udskrive teksten, og kun køre Execute på det som er ren kode. Noget i denne stil måske:

<%
Session("Brugernavn") = "jeg er en session variabel"

str = "Velkommen <% = Session(""Brugernavn"") %\>"
str = str & "<br>hello world <% response.write "" asp kode "" %\> mere "
str = str & "<% g=""en var"" %\> mere tekst <% response.write ""g="" & g %\> slut "
str = str & "<%=""prut""%\> finale"

Set re = New RegExp
re.Global = True
re.Pattern = "<%([^%]*)%\>"

Set matches = re.Execute(str)

oldpos = 1

For Each m In Matches
    pos = m.FirstIndex

    ' print text før <%
    Response.Write Mid(str, oldpos, pos-oldpos+1)

    oldpos = pos + Len(m.Value)+1   

    ' udfør scriptet
    script = Trim(m.SubMatches(0))
    If Left(script, 1) = "=" Then
        ' genvej til response.write
        ' <="noget tekst%\>
        script = "Response.Write " & Mid(script, 2)
    End If

    Execute script
Next

' udskriv alt efter sidste %\>
Response.Write Mid(str, oldpos)
%>
Avatar billede mrpalermo Nybegynder
20. juli 2005 - 14:08 #13
Hej ksoren

Det er helt genialt det du er kommet med, jeg har dog 2 spg. som jeg håber du kan hjælpe mig med.

1.
Jeg har lavet dit script om til en function:

Function DecodeASP(SiteContent)
Set re = New RegExp
re.Global = True
re.Pattern = "<%([^%]*)%\>"
Set matches = re.Execute(SiteContent)
oldpos = 1
For Each m In Matches
    pos = m.FirstIndex
    Response.Write Mid(SiteContent, oldpos, pos-oldpos+1)
    oldpos = pos + Len(m.Value)+1   
    script = Trim(m.SubMatches(0))
    If Left(script, 1) = "=" Then
        script = "Response.Write " & Mid(script, 2)
    End If
    Execute script
Next
DecodeASP = Mid(SiteContent, oldpos)
End Function

i linie 9 (  Response.Write Mid(SiteContent, oldpos, pos-oldpos+1)  )

Hvad laver den linie, og hvordan får jeg den til at lade være med at udskrive noget? Er det noget med SiteContent = SiteContent & Mid(SiteContent, oldpos, pos-oldpos+1) i stedet?

2.
Hvis jeg fx. skriver følgende:
str = "<% g=""en var"" %\> mere tekst <% response.write ""g="" & g %\> slut "
response.write DecodeASP(str)

Så skriver den rigtigt:
mere tekst g=en var slut

Hvis jeg derimod lader indholdet komme fra en database:
str = RS("Content") , hvor RS("Content") = <% g="en var" %\> mere tekst <% response.write "g=" & g %\>

så bliver outputtet på skærmen følgende:
<% g="en var" %\> mere tekst <% response.write "g=" & g %\>

Hvorfor træder din funktion ikke rigtigt i kræft her?

Kan du hjælpe mig med det, så er det super.

Mvh. Peter
Avatar billede ksoren Nybegynder
20. juli 2005 - 17:00 #14
At du ikke får indholdet af databasen til at virke, skyldes måden sluttagget er skrevet på: %\>

Når det kommer fra databasen, skal der ikke backslash på


Function DecodeASP(SiteContent)
    Dim final, re, pos, oldpos, script, output, matches, m

    ' final = slutprodukt
    final = ""

    Set re = New RegExp
    re.Global = True
    re.Pattern = "<%([^%]*)%\>"
    Set matches = re.Execute(SiteContent)
    oldpos = 1
    For Each m In matches
        pos = m.FirstIndex
        final = final & Mid(SiteContent, oldpos, pos-oldpos+1)
        oldpos = pos + Len(m.Value)+1   
        script = Trim(m.SubMatches(0))
        If Left(script, 1) = "=" Then
            script = "Response.Write " & Mid(script, 2)
        End If

        '-- Erstat Response.Write
        '-- så den gemmer i vores variabel, output
        '-- i stedet for at udskrive til klienten
        output = ""
        script = Replace(script, "response.write", "output = output & ", 1, -1, 1)

        Execute script

        final = final & output
    Next

    final = final & Mid(SiteContent, oldpos)

    DecodeASP = final
End Function

--

Response.Write "tekst"

bliver til

output = output & "tekst"
Avatar billede ksoren Nybegynder
20. juli 2005 - 17:05 #15
Du kunne også overveje at lave din skabelon anderledes. I stedet for at inkludere asp kode, så lav noget variabelsubstitution. Noget i stil med

Velkommen {USERNAME}


Og lave en Replace på alle {VARIABLER}
Avatar billede mrpalermo Nybegynder
20. juli 2005 - 17:08 #16
Det har jeg også overvejet, men det er meget rart at jeg direkte kan sidde og skrive ASP i min RichEditor, i tilfælde af form-submit eller lign.
Sitet består kun af en asp fil. Resten er udelukkende database indhold der hentes ind.
Avatar billede mrpalermo Nybegynder
20. juli 2005 - 17:15 #17
ksoren, smid et svar. Det virker alt for cool det shit du givet mig. Kanon godt job :)
Avatar billede ksoren Nybegynder
20. juli 2005 - 19:02 #18
ok :)
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