Avatar billede goose Nybegynder
05. december 2004 - 22:14 Der er 26 kommentarer og
1 løsning

server.execute og replace

Jeg har brug for lidt hjælp til server.execute og noget replace.
Jeg vil prøv at forklare det så godt som jeg nu kan.

Jeg redigerer mine sider i en wysiwyg-editor og i denne editor kan jeg indsætte nogle specialkoder.

Jeg skriver f.eks. $$$galleri_odense$$$

Når jeg så skal vise min side, så skal denne kode erstattes af noget andet kode, her lidt dummykode:

indhold = rs("indhold")
indhold = replace(indhold, "$$$galleri_odense$$$", "server.execute("/galleri/galleri_odense.asp")")

response.write indhold

Som sagt er det et dummy eksempel og det virker ikke.

Er der en der ved hvordan det kan laves så den erstatter en værdi med noget server.execute ?

Jeg skal lige sige, at hvis jeg laver en fil der kun indeholder:
<%
server.execute ("/galleri/galleri_odense.asp")
%>
- så virker denne fint

/Goose
Avatar billede thesurfer Nybegynder
05. december 2004 - 22:16 #1
Du kan ikke udskrive asp kode, og derefter udføre det.
Avatar billede thesurfer Nybegynder
05. december 2004 - 22:17 #2
Jo, det kan man godt, hvis man "save"'r koden..

dvs, gemmer den udskrevede kode, i en ny fil (f.eks. "minfil.asp"), og derefter bruger:

server.execute("minfil.asp")
Avatar billede goose Nybegynder
05. december 2004 - 22:36 #3
Hmm, jeg er ikke meget for at skulle gemme indholdet i en ny fil, er der ikke andre muligheder for at få samme resultat ?

/Goose
Avatar billede thesurfer Nybegynder
05. december 2004 - 22:42 #4
..mener at have læst, at man kan udfører ASP kode hentet fra en database..
Jeg ved bare ikke hvordan.. husker det ikke..
Avatar billede clausn Nybegynder
05. december 2004 - 22:57 #5
Hej,

Denne kode bruger jeg i forskellige VBS filer - jeg har IKKE testet om det virker i ASP.

<kode>
Sub Include(File)
    Set objFSo = CreateObject("Scripting.FileSystemObject")
    Set f = objFso.OpenTextFile(File, 1)
    str = f.ReadAll
    f.Close
    ExecuteGlobal str
End Sub
</kode>

Her kan jeg hente indholdet af en anden VBS fil ind og eksekvere denne kode før end jeg fortsætter med resten af min kode.

/ Claus
Avatar billede netro Nybegynder
06. december 2004 - 00:12 #6
Du kan sagtens lægge din kode ind i en database. Så ser det bare sådan ud:'

Execute(rs("Feltnavn"))

;o)
Avatar billede goose Nybegynder
06. december 2004 - 15:43 #7
netro >> ja, men problemet er bare, at sidens indhold jo godt nok ligger i en database, men det er som ren HTML, altså incl. koder m.v. og det er hvis dette indeholder f.eks. $$$galleri_odense$$$ så skal det erstattes af en fil der bliver eksekveret på den aktuelle placering.
Jeg har forsøgt at hente filen med httpget og det virker for så vidt også godt nok, blot bliver siden ustyrlig langsom at hente.

/Goose
Avatar billede netro Nybegynder
06. december 2004 - 17:10 #8
Kan du ikke klippe/klistre lidt, hvis det kun er HTML-kode, der ligger i tabellen?


Sub RepKode(indhold, key)
  If InStr(indhold, key) Then
    pos = InStr(indhold, key)
    Response.Write Left(indhold, pos - 1)
    Server.Execute ("/galleri/" & key & ".asp")
    Response.Write Mid(indhold, pos + Len(key))
  Else
    Response.Write indhold
  End If
End Sub

Call RepKode(rs("indhold"), "$$$galleri_odense$$$")
Avatar billede netro Nybegynder
06. december 2004 - 17:11 #9
Linie 5 skal så være:

Server.Execute ("/galleri/" & Replace(key, "$", "") & ".asp")

- så du får dollartegnene væk.
Avatar billede goose Nybegynder
06. december 2004 - 18:06 #10
netro >>> kunne du ikke lige kommenterer din kode lidt, jeg kan ikke lige gennemskue helt hvad det er den gør og hvordan jeg bruger den ?

/Goose
Avatar billede netro Nybegynder
06. december 2004 - 18:18 #11
Jo, selvfølgelig. Jeg var bare for doven ;)

Sub RepKode(indhold, key)
  If InStr(indhold, key) Then ' Hvis $$$galleri_odense$$$ indgår i tabelfeltet
    pos = InStr(indhold, key) ' Startposistion for $$$galleri_odense$$$ (det første $)
    Response.Write Left(indhold, pos - 1) ' Udskriv kode, der står inden $$$galleri_odense$$$
    Server.Execute ("/galleri/" & Replace(key, "$", "") & ".asp")
' Eksekver filen "/galleri/galleri_odense.asp"
    Response.Write Mid(indhold, pos + Len(key)) ' Udskriv kode, der står efter $$$galleri_odense$$$
  Else
    Response.Write indhold ' Hvis $$$galleri_odense$$$ ikke fundet, så udskriv blot hele feltet
  End If
End Sub

' Kald sub med det aktuelle felts indhold og strengen, der ønskes erstattet - resultat udskrives her
Call RepKode(rs("indhold"), "$$$galleri_odense$$$")
Avatar billede netro Nybegynder
06. december 2004 - 18:24 #12
Prøv at komme det ind i en eller anden editor, så der kommer farver på.
Det ser lidt rodet ud med alle de $.
Avatar billede goose Nybegynder
06. december 2004 - 20:14 #13
Skal det forståes således, at jeg kan bruge den samme sub, og så for hvert galleri der er oprettet kan bruge:

indhold = rs("indhold")

Call RepKode(indhold, "$$$galleri_odense$$$")
Call RepKode(indhold, "$$$galleri_aarhus$$$")
Call RepKode(indhold, "$$$galleri_aalborg$$$")
Call RepKode(indhold, "$$$galleri_soenderborg$$$")

- eller vil det gå galt hvis der er flere at sådanne forekomster ?

Undskyld jeg spørger så meget, men jeg vil gerne være sikker på det nu også er det rigtige jeg gør :-/


/Goose
Avatar billede netro Nybegynder
06. december 2004 - 22:22 #14
Jeg valgte at lave det som en sub, fordi du sikkert vil bruge det på flere forskellige felter.

Hvis der kun står ét gallerinavn i hvert felt, så virker det. Men hvis der fx. både står $$$galleri_odense$$$ og $$$galleri_aarhus$$$ i samme felt, så gør det ikke.
Avatar billede netro Nybegynder
06. december 2004 - 22:33 #15
Følgende burde virke, selvom der er flere gallerinavne i samme felt.
Nu skal du bare kalde nedenstående sub med et array som parameter nummer to i stedet.


Sub RepKode(indhold, arr_key)
  For i = 0 To UBound(arr_key)
    If InStr(indhold, arr_key(i)) Then
      pos = InStr(indhold, arr_key(i))
      Response.Write Left(indhold, pos - 1)
      Server.Execute ("/galleri/" & Replace(arr_key(i), "$", "") & ".asp")
      indhold = Mid(indhold, pos + Len(arr_key(i)))
    End If
  Next
  Response.Write indhold
End Sub

gallerinavne = Array("$$$galleri_odense$$$", "$$$galleri_aarhus$$$")
Call RepKode(rs("indhold"), gallerinavne)
Avatar billede goose Nybegynder
07. december 2004 - 20:34 #16
netro >> du er intet mindre en genial og har løst mit problem, så hvis du lægger et svar får du dine velfortjente point :o)

/Goose
Avatar billede netro Nybegynder
07. december 2004 - 22:40 #17
Jeg er glad for at kunne hjælpe ;)
Avatar billede goose Nybegynder
08. december 2004 - 09:40 #18
netro >> jeg er nød til lige at have lidt mere hjælp, du skal nok få nogle flere point.

Det du har lavet virker såmænd godt nok, men der er dog lige noget der "halter" :o)

Mit array med gallerinavne ser nu således ud:
gallerinavne = Array("$$$galleri_odense$$$", "$$$galleri_aarhus$$$")

Hvis mit indhold indeholder strengen:

"Galleri fra Odense<br>$$$galleri_odense$$$<br><br>Galleri fra Århus<BR>$$$galleri_aarhus$$$"

Så virker det fint nok.

Hvis jeg bytter rundt på min streng så den ser således ud:
"Galleri fra Århus<BR>$$$galleri_aarhus$$$<BR><BR>Galleri fra Odense<br>$$$galleri_odense$$$"

- så udskriver den blot $$$galleri_odense$$$ og $$$galleri_aarhus$$$, den eksekverer altså ikke filerne.
Såvidt jeg har kunne teste mig frem til, så skyldes det, at rækkefølgen i mit array ikke stemmer overens med rækkefølgen i min streng.

Hvordan løser jeg det ?

/Goose
Avatar billede netro Nybegynder
08. december 2004 - 18:04 #19
Ja, det kan jeg godt se. Jeg troede, der var lidt system i teksten.
Men hvis det skal virke på den måde, skal vi gribe det list anderledes an.


<%
Sub RepKode(indhold, keys)
  Set regEx = New RegExp
  regEx.IgnoreCase = True
  regEx.Global = True
  regEx.Pattern = "[\$]{3}(" & Replace(keys, ",", ")[\$]{3}|[\$]{3}(") & ")[\$]{3}"
  Set Matches = regEx.Execute(indhold)
  startpos = 1
  For Each Match In Matches
    pos = Match.FirstIndex + 1
    Response.Write Mid(indhold, startpos, pos - startpos)
    Server.Execute("/galleri/" & Replace(Match.Value, "$", "") & ".asp")
    startpos = pos + Len(Match.Value)
  Next
  Response.Write Mid(indhold, startpos)
End Sub

gallerinavne = "galleri_odense,galleri_aarhus"
Call RepKode(rs("indhold"), gallerinavne)
%>
Avatar billede goose Nybegynder
08. december 2004 - 19:59 #20
netro >>> supert, det er rigtig godt gået :o)

Hvis lægger et svar i http://www.eksperten.dk/spm/569078 - så er der 100 point mere på vej som tak for din store hjælp.

/Goose
Avatar billede netro Nybegynder
08. december 2004 - 20:13 #21
Jeg må ikke modtage mere end 200 points for et enkelt spørgsmål. Ellers tak for det :)
Avatar billede goose Nybegynder
08. december 2004 - 20:27 #22
Jamen så siger jeg da mange tak og du har istedet fået et "skud" karma :o)

/Goose
Avatar billede netro Nybegynder
08. december 2004 - 20:32 #23
Velbekomme ;)
Avatar billede goose Nybegynder
25. juli 2005 - 15:37 #24
Netro >> hvis du er med på en lytter her, ved du så hvorfor ovenstående ikke virker hvis jeg skifter til MSSQL i stedet for Access ?

/Goose
Avatar billede netro Nybegynder
25. juli 2005 - 16:35 #25
Nej, det kan jeg ikke lige umiddelbart sige. Det burde ikke være noget problem. Prøv at vise noget kode og fortæl, hvilken fejl du får.
Avatar billede goose Nybegynder
25. juli 2005 - 16:38 #26
Problemet er at jeg ingen fejl får og ingen data bliver vist.

Det er mit første spæde forsøg med MSSQL og der er vist noget andet galt også, så jeg åbner lige et nyt spørgsmål.

/Goose
Avatar billede netro Nybegynder
25. juli 2005 - 17:03 #27
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