Avatar billede morpheus73 Nybegynder
17. marts 2002 - 14:53 Der er 11 kommentarer og
1 løsning

Dynaisk function

Er dette muligt?

Jeg skal bruge funktionen til et messageboard, hvor jeg gerne vil have mulighed for at lade brugerne indsætte dynamisk html hentet fra andre emner i databasen end det der læses.

Function DynamicInclude(EmneID)
strSQL2="SELECT EMNE, EMNEINDHOLD FROM DATABASE.EMNE WHERE EMNE = " & EmneID""
connect og hent fra DB
EmneIndhold2= rs2("EMNEINDHOLD")
Response write " <table bgcolor=""grøn""><td>" & EmneIndhold2 & "</td></table>
end function

strSQL1=SELECT EMNE,EMNEINDHOLD FROM DATABASE.EMNE WHERE EMNE = " & Request.Querystring("EMNEVARIABEL")
connect og hent fra DB
EmneIndhold1= rs1("EMNEINDHOLD")
Response.Write  EmneIndhold1


EmneIndhold 1 hentet fra DB ser således ud "<TABLE width=100%><td>hej med dig dette er indold jeg selv har skrevet. og følgende er indhold jeg har hentet fra et andet emne <% DynamicInclude(2) %> og nu ser vi om det virker</td></table>

er dette muligt, eller skal jeg til at lave server.execute på ASP 3.0 med variablen gemt som en session - og hvis - hvordan?

- Der er 200 point til den der ved det
Avatar billede morpheus73 Nybegynder
17. marts 2002 - 22:59 #1
* bump *
Avatar billede coltau Juniormester
18. marts 2002 - 12:31 #2
Jeg forstår ikke problemet - tilsyneladende har du jo allerede lavet noget der ser ud til at kunne løse dit problem. ?
Avatar billede morpheus73 Nybegynder
18. marts 2002 - 20:56 #3
well, - jeg har ikke orket at lave en backend m.m. før jeg ved om man kan køre og vise et resultat fra en SQL query fra en funktion, hvor funktionens variabel er hentet fra den foregående SQL forespørgsel.

den skal altså hente et emne fra databasen og hvis der i dette emne´s source er angivet at den skal hente et andet emne og vise dette samtidigt - så skal den gøre det.

Jeg spørger altså om hvorvidt man kan køre en eller flere SQL forespørgsler FRA en SQL forespørgsel?
Avatar billede coltau Juniormester
18. marts 2002 - 22:21 #4
Først nu forstår jeg dit problem. Som nedenstående kode.
<%
sub Get1 ' Kommando som må bruges
  Response.Write("1")
end sub

Response.Write "<tabel><tr><td>Henter lige nummer: <%Get1%> for en sikkerheds skyld.</td></tr></table>"
%>

Sorry - det kan ikke lade sig gøre.

MEN man kunne jo anvende en anden løsning for at få nedenstående tekst udskrivet korrekt.

strS = "<tabel><tr><td>Henter lige nummer: ##Get1## for en sikkerheds skyld og ##get2## også.</td></tr></table>"

## angiver at der her skal anvendes en kommando. Eksemplet kan endda anvende to forskellige kommandoer: Get1 og Get2.
Jeg har lavet et eksempel (og testet det.) som gør brug af de to kommandoer.

<%
sub Get1 ' Kommando som må bruges
  Response.Write("1")
end sub

sub Get2 ' Kommando som må bruges
  Response.Write("2")
end sub

sub UdskrivCmd(Value) ' Udskriver fra de forskellige kommandoer
  if LCase(Value) = "get1" then
    Call Get1
  else
    if LCase(Value) = "get2" then
      Call Get2
    else
      Response.Write(Value) ' Udskriv som tekst hvis ukendt kommando
    end if
  end if
end sub

sub Udskriv(Value) ' Udskriv tekst der indeholder kommandoer
  P = inStr(Value, "##")
  do while (P > 0)
    if (P > 0) then
      Response.Write(Left(Value, P - 1)) ' Udskriv før kommando
      Value = Mid(Value, P + 2)
      P = inStr(Value, "##") ' Find slut på kommando
      if (P > 0) then
        Cmd = Left(Value, P - 1) ' Find kommando
        Call UdskrivCmd(Cmd)
        Value = Mid(Value, P + 2)
      end if
    end if
    P = inStr(Value, "##")
  loop
  Response.Write(Value)
end sub

strS = "<tabel><tr><td>Henter lige nummer: ##Get1## for en sikkerheds skyld og ##get2## også.</td></tr></table>"
Call Udskriv strS
%>

Jeg håber at jeg har forstået spørgsmålet og at du kan se sammenhængen i svaret. Du skal jo ændre Get1 og Get2 til at indeholde udtræk fra database.

Øhh ...
Du har brug for parametre til Get1 - det overså jeg lige. Men det kan jo løses ved at ændre lidt i formatet og Udskriv-proceduren.
Avatar billede morpheus73 Nybegynder
18. marts 2002 - 23:40 #5
<%
sub Get1 (variable1,variable2,variable3)
strSQL1="SELECT " & variable1 & "FROM " & Variable2 & " WHERE " & variable1 & "=" & Variable3
connect og hent
Response.Write  "<TABLE BGCOLOR=""GREEN""><TD>" & strSQL1 & "</td></TABLE>"
end sub

sub Get2  '' Vi glemmer lige sub2, da vi kun har brug for at kontrollere indholdet via Get1´s variabler


sub UdskrivCmd(Value) ' Udskriver fra de forskellige kommandoer
if LCase(Value) = "get1" then ' !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! HER KOMMER SÅ MIT AFGØRENDE SPØRGSMÅL: I StrS optræder Get1 med varabler, således: ##Get1(EMNE,FORUM,38)## - vil den så stadig reagere på GET1? variablerne er jo forskellige hver gang? eller skal teksten yderligere opdeles mellem "##GET1" og "(" ?
Call Get1
else ' tak, Else ;o)
Response.Write(Value) ' Udskriv som tekst hvis ukendt kommando
end if
end if
end sub

sub Udskriv(Value) ' Udskriv tekst der indeholder kommandoer
P = inStr(Value, "##")
do while (P > 0)
if (P > 0) then
Response.Write(Left(Value, P - 1)) ' Udskriv før kommando
Value = Mid(Value, P + 2)
P = inStr(Value, "##") ' Find slut på kommando
if (P > 0) then
Cmd = Left(Value, P - 1) ' Find kommando
Call UdskrivCmd(Cmd)
Value = Mid(Value, P + 2)
end if
end if
P = inStr(Value, "##")
loop
Response.Write(Value)
end sub

strS = "<tabel><tr><td>Henter lige nummer: ##Get1(EMNE,FORUM,38)## for en sikkerheds skyld og ##get2## også.</td></tr></table>"
Call Udskriv strS
%>
Avatar billede morpheus73 Nybegynder
18. marts 2002 - 23:42 #6
Hov glemte mine kommentarer: Ovenstående kode tager så variabler i Get1 i betragtning, men er der et problem med variablerne, da SUB UdskrivCMD jo leder efter GET1 og ikke GET1(medvariabler, der jo er forskellige)?
Avatar billede coltau Juniormester
19. marts 2002 - 12:37 #7
Du har ret - parametrene skal med  - men hvis du har tålmodighed til i morgen kan jeg se på det i aften. ?

Jeg skal så lige høre om du har nok i en procedure. Eller har du behov for flere forskellige. ?
Avatar billede morpheus73 Nybegynder
19. marts 2002 - 19:04 #8
Som jeg ser det er det først her filmen knækker pga IF kommandoen:

sub UdskrivCmd(Value) ' Udskriver fra de forskellige kommandoer
if LCase(Value) = "get1" then
Call Get1
else
Response.Write(Value) ' Udskriv som tekst hvis ukendt kommando

hvad hvis man bare lod den udskrive hele Lcase(Value), således:

sub UdskrivCmd(Value) ' Udskriver fra de forskellige kommandoer
strS2 = LCase(Value)
Response.write "" & call <% strs2 %> & ""
END SUB

Måske noget i den retning? og så lade SQL´en checke om det eksisterer eller ej.
Avatar billede coltau Juniormester
20. marts 2002 - 12:06 #9
Jeg har løst problemet. Med nedenstående asp-kode får du en skabelon der tillader 2 kommandoer med op til 5 parametre til hver. Jeg har lavet eksemplet således at kommando1 (get1) anvender 3 parametre og get2 anvender 1.

<%
Dim strParam(5) ' Anvendes til parametre i kommandoerne
Dim pCount ' Antal parametre i strParam

sub Get1 ' Kommando som må bruges
  Response.Write("<br>" & strParam(0) & "-" & strParam(1) &  "-" & strParam(2) & "<br>")
end sub

sub Get2 ' Kommando som må bruges
  Response.Write("<br>" & strParam(0) & "<br>")
end sub

sub UdskrivCmd(Value) ' Udtræk parametre og kald de forskellige kommandoer
Dim P, strP
  pCount = 0
  ' Udtræk alle parametre og gem i strParam
  P = inStr(Value, "(")
  if (P > 0) then
    strP = Mid(Value, P + 1) ' Alle parametre uden første "("
    Value = Left(Value, P - 1)
    P = inStr(strP, ",")
    do while (P > 0)
      strParam(pCount) = Left(strP, P - 1)
      pCount = pCount + 1
      strP = Mid(strP, P + 1) ' Resten af parametre uden første ","
      P = inStr(strP, ",") ' Flere parametre ?
    loop
    strParam(pCount) = Left(strP, Len(strP) - 1) ' Fjern sidste ")"
    pCount = pCount + 1
  end if
  ' Kald den rette procedure
  if LCase(Value) = "get1" then
    Call Get1
  else
    if LCase(Value) = "get2" then
      Call Get2
    else
      Response.Write(Value) ' Udskriv som tekst hvis ukendt kommando
    end if
  end if
end sub

sub Udskriv(Value) ' Udskriv tekst der indeholder kommandoer
  P = inStr(Value, "##")
  do while (P > 0)
    if (P > 0) then
      Response.Write(Left(Value, P - 1)) ' Udskriv før kommando
      Value = Mid(Value, P + 2)
      P = inStr(Value, "##") ' Find slut på kommando
      if (P > 0) then
        Cmd = Left(Value, P - 1) ' Find kommando
        Call UdskrivCmd(Cmd)
        Value = Mid(Value, P + 2)
      end if
    end if
    P = inStr(Value, "##")
  loop
  Response.Write(Value)
end sub

strS = "<tabel><tr><td>Her vises kommando get1's parametre: ##Get1(EMNE,FORUM,32)## og for en sikkerheds skyld også get2:  ##get2(12)##.</td></tr></table>"
Call Udskriv(strS)
%>

Jeg håber at du kan overføre det til det du har behov for.
Avatar billede morpheus73 Nybegynder
20. marts 2002 - 15:49 #10
Kool, tak - pointene er givet! - haaber du kan bruge dem. - lige et spørgsmål: Kan man genanvende de to GetX funktioner med forskellige parametre? dvs. kan man bruge "hej med dig her ser du noget fra emne 32: ##Get1(EMNEFORUM,32)## og her ser du noget fra emne 10: ##Get1(EMNE,FORUM,10##)" - er dette mon muligt - har ikke mulighed for at teste scriptet på denne maskine
Avatar billede coltau Juniormester
20. marts 2002 - 15:59 #11
Ja - det er netop det der er ideen i det.
Men vær opmærksom på at anatllet af parametre altid skal være det samme.
I mit eksempel har jeg lavet 3 til get1 og 1 til get2 - men det bestemmer du jo selv.
Avatar billede morpheus73 Nybegynder
20. marts 2002 - 16:21 #12
wauw - ville give flere point hvis jeg kunne!
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