11. april 2004 - 21:56Der er
30 kommentarer og 2 løsninger
asp-kode i databasefelt
Jeg har et TextArea i en form, hvor en bruger kan skrive en besked og submitte formen. Teksten gemmes i et memo-felt i en AccessDB og hentes frem igen. Hvis brugeren skal skrive et link, angives det i html: "Se lige dette <a href="http://www.eksperten.dk">site</a>. Det er ret godt." [Submit]
Denne besked vises så på skærmen til brugeren. Det virker fint - også med link. Problemet kommer, hvis brugeren ønsker at skrive asp-kode i feltet: "Jeg sidder kl. <%=Now()%> og skriver en besked til dig" [Submit]
Det gemmes ok i DB, men skrives ikke "rigtigt" på skærmen. Der kommer til at stå "Jeg sidder kl. og skriver en besked til dig" - men hvis jeg ser i kildekoden står der faktisk: "Jeg sidder kl. <%=Now()%> og skriver en besked til dig" - men asp-koden vises ikke...
Mit spørgsmål er derfor - hvorledes får jeg gjort det muligt at gemme asp-kode i et databasefelt, så det eksekveres når det vises på skærmen? Giver spørgsmålet mening?
Jeg tror ikke det er muligt, fordi ASP kode køres serverside, og det gør dit database udtrak også, dvs. det som du har hentet fra din DB bliver ikke kørt fordi serveren har jo allerede kørt ASP scriptet inden <%=Now()%> blev en del af den kode.
Det er vel også forbundet med en vis risiko at lade ASP-kode blive tastet af brugeren og eksekveret af serveren? En 'ondsindet' bruger kunne jo finde på at skrive noget alvorlig kode: <% DeleteAllFiles %>? Eller hvad det nu hedder? Det er måske derfor det ikke er så ligetil?
Der er såmend en funktion indbygget, der kan eksekvere ASP-kode fra en tekst-streng. Den hedder Execute.
Den skal ikke forveksles med Server.Execute, der tager et filnavn.
Den kan dog (tilsyneladende) ikke klare en tekst-streng, der indeholder spring ud og ind af ASP-kode (<% og %>). Det er der dog lavet en work-around for her: <URL:http://www.asp-faq.dk/kildekode/serverexecute.txt>
Som andre også er inde på, så giv endelig ikke brugere mulighed for at køre kode gennem funktionen. Det kan kun gå galt!
Det lykkedes faktisk, takket være torben brandts forslag Her er et lille udpluk Feltet i databasen hedder Response.write "Gulerod" Response.write "Gulerod" sql = "SELECT * FROM taske" Set objRS=Conn.Execute(sql) If Not objRS.EOF Then ord = objRS("taske") Execute ord End If objRS.Close
>> torben brandt: Det ser faktisk ret cool ud - jeg har bare et par enkelte spg.: Jeg pusler med et meget basic CMS-system, hvor jeg vha en database og en række artikler, lader nogle adminbrugere vedligeholde teksten på frontend. Dette gøres i et admin-modul backend, hvor de kan lave/rette/slette artikler og kategorier. Frontend genereres så dynamisk afhængigt at adminbrugerens ønsker.
Jeg kunne dog godt tænke mig at opbygge backend på samme måde, således at jeg kan styre de forskellige backend-sider i selve backend. Jeg ville derfor gerne, direkte i et textarea kunne kopiere noget asp-kode ind, f.eks. en form eller Update-SQL el. lign.
Jeg har en form for front- og backend template, som udgør overskrift, layout og tekstplacering. I tekstruden hentes data fra databasen, som er indtastet i adminmodulet. Det kan f.eks. være [Titel:] "Velkommen" og [Brødtekst:] "Denne tekst byder dig velkommen her på sitet" Feltet [Titel] bliver så en del af navigeringsmenuen og brødteksten vises, når man klikker på menuobjektet [Titel]. So far so good.. Det virker fint.. Jeg kunne dog godt tænke mig at bygge backend op på samme måde - men så brødteksten bliver ASP-kode, der f.eks. genererer formfelter, hvori [Titel] og [Brødtekst] skal angives og en ny side, der håndterer disse input og opdaterer DB. Derfor ønsker jeg mulighed for at man kan skrive ASP-kode i et textarea som gemmes i DB, men som udføres, når siden vises.
Pseudo: [Titel:] "Velkommen til Admindelen" [Brødtekst:] "Tillykke, du er logget ind kl. "& FormatDateTime(Now,vbShortTime) & "."
Brødteksten skal lagres i DB, men når velkomstsiden vises, skal tiden naturligvis vises og ikke Now.
Hvis du ser på det link jeg gav tidligere, og ser hvordan det er bygget op [1]. Så du at den bearbejder en streng, der f.eks. indeholder Klokken er <%= Now %> og eksekverer den til Klokken er 12/04-2004 15:18:00
Hvis det ikke skal eksekveres, så skal du lade databasen indeholde noget, som når det bliver eksekveret giver Klokken er <%= Now %> Det ville f.eks. være Response.Write "Klokken er <%= Now %>" Det virker dog bare ikke, idet %> altid bliver fortolket som slut-på-asp, så i stedet kan du lave det som dette [2] Response.Write "Klokken er <" & "%= Now %" & ">"
/Torben
[1] Faktisk kan du med fordel omskrive den funktion i linket, så den i stedet for et filnavn taget strengen strContent som input.
[2] Afhængigt af hvordan resultatet skal præsenteres, så skal < og > måske også laves om til html-entiteter < og >
ugotabe_kidding> Spm'et skal alligevel lukkes, hvis en løsning er fundet. Hvis du selv vil tage torben_brandts "del" af kagen, skal du lægge et svar.
De navne i boksen til venstre, som har medvirket til løsningen, skal markeres. Derefter klikker du på Accepter-knappen. Husk rækkefølgen: Marker > Klik Accepter
Ingen skade sket :-) At få en mail fra spm'et, er en god ting :-)
- Mit indlæg var ikke negativt ment..
Synes godt om
Ny brugerNybegynder
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.