Avatar billede biver.dk Nybegynder
30. september 2005 - 01:17 Der er 18 kommentarer og
1 løsning

Inkludere andre sider

Hej, dette script opfører sig temmelig underlig, derfor håber jeg der er en der kan hjælpe mig..

<%

if Request.Querystring("type") = 1 then
%>
<!-- #include virtual="/is/person.asp" -->
<%
elseif Request.Querystring("type") = 2 then
%>
<!-- #include virtual="/is/klub.asp" -->
<%
elseif Request.Querystring("type") = 3 then
%>
<!-- #include virtual="/is/butik.asp" -->
<%
else
response.write "<font face=""verdana"" size=""2"">Linket findes ikke! Naviger videre med menuen foroven....</font>"
end if

conn.close
set conn = nothing
%>

Det underlige er når Request.Querystring("type") = 1 inklderer den klub.asp istedet for person.asp

Hvorfor?
Avatar billede softspot Forsker
30. september 2005 - 01:21 #1
Den inkluderer altid alle scripts, da du ikke kan lave betingede includes med #include.

Hvis du vil lave betingede includes skal du benytte dig af Server.Execute, men det giver dig ikke alle de faciliteter som #include gør...
Avatar billede biver.dk Nybegynder
30. september 2005 - 01:22 #2
har du så et forslag jeg kan?
Avatar billede biver.dk Nybegynder
30. september 2005 - 01:22 #3
jeg ved ikke hvordan det der server.execute virker
Avatar billede kalp Novice
30. september 2005 - 01:29 #4
Avatar billede softspot Forsker
30. september 2005 - 01:29 #5
Først og fremmest bør vi lige finde ud af hvad dine behov er ifht. de der includes...

Har du nogle variable/funktioner som du bruger i det script hvor du inkluderer fra, eller er det ren og skær rendering af HTML til siden?

Har du nogle referencer fra dine includes til det script hvori de bliver inkluderet (så bør du redesigne ;))?

Hvis du kan svare "Nej, ren HTML-rendering" hhv. "Nej" til de to ovenstående spørgsmål, kan du inkludere vha Server.Execute således:

<%
if Request.Querystring("type") = 1 then
  Server.Execute "/is/person.asp"
elseif Request.Querystring("type") = 2 then
  Server.Execute "/is/klub.asp"
elseif Request.Querystring("type") = 3 then
  Server.Execute "/is/butik.asp"
else
  response.write "<font face=""verdana"" size=""2"">Linket findes ikke! Naviger videre med menuen foroven....</font>"
end if

conn.close
set conn = nothing
%>
Avatar billede softspot Forsker
30. september 2005 - 01:31 #6
kalp >> Det var vist den korte version om Server.Execute og Server.Transfer ;)
Avatar billede biver.dk Nybegynder
30. september 2005 - 01:33 #7
har lige prøvet... det virker ikke! min person.asp og min klub.asp er begge fyldt med en masse kode...
Avatar billede ksoren Nybegynder
30. september 2005 - 01:34 #8
Selv om include inkluderer alle sider, er det kun én af koderne som bliver afviklet. Den bliver betinget af if-else-sætningerne

er du sikker på at type=1 i urlen?
Avatar billede softspot Forsker
30. september 2005 - 01:35 #9
Ja, ellers ville det jo ikke give meget mening at have dem ;)

Anyway! Så opfylder dine scripts nok ikke de to kriterier jeg har opstillet og det bliver mere besværligt at bruge Server.Execute som illustreret...
Avatar billede biver.dk Nybegynder
30. september 2005 - 01:37 #10
hvis jeg sætter denne her (<!-- #include virtual="/db.asp" -->
) ind i person.asp og klub.asp så virker lortet :)

kom med et svar...
Avatar billede softspot Forsker
30. september 2005 - 01:46 #11
Der er lige en kommetar at knytte til måde du inkluderer på, nemlig at hvis du definerer funktioner som skal benyttes i det inkluderende script, så skal du sikre dig at der ikke er gengangere i funktionsnavnene, da det ellers er den sidste der gælder, uanset om det er den ene eller den anden betingelse der er sand...

Så din metode er ikke helt uden risici - bare til information :)
Avatar billede biver.dk Nybegynder
30. september 2005 - 01:49 #12
så indviklede ting laver jeg slet ikke endnu :) er først ved at lære asp... kom du med et svar?
Avatar billede bredum Nybegynder
30. september 2005 - 08:12 #13
Jeg havde nok klaret den sådanne, den hurtige :o).

<%
if Request.Querystring("type") = 1 then
%>
<!--#include file="is/person.asp"-->
<%
elseif Request.Querystring("type") = 2 then
%>
<!--#include file="is/klub.asp"-->
<%
elseif Request.Querystring("type") = 3 then
%>
<!--#include file="is/butik.asp"-->
<%
else
  response.write "<font face=""verdana"" size=""2"">Linket findes ikke! Naviger videre med menuen foroven....</font>"
end if

conn.close
set conn = nothing
%>
Avatar billede sneakraid Nybegynder
30. september 2005 - 08:27 #14
Sådan som jeg forstår det, så bruger du faktisk en menu, til at navigere med. Altså når querystring er sat til noget, så includér en side, hvis ik, så skriv "Linket findes ikke! Naviger videre med menuen foroven...."

Er det så ik smartere at bruge en Case og Server.Execute ?
Sådan her:

<%
type = Request.QueryString("type")

On Error Resume Next

Select Case type
' her kan du skrive en side som skal eksekveres, når querystring IK er sat til noget f.eks.
Case(""): Server.Execute("is/person.asp")
Case Else: Server.Execute("is/" & type & ".asp")
End Select

If Err.Number <> 0 Then
  Response.Write("Linket findes ikke! Naviger videre med menuen foroven...")
End If
%>
Avatar billede softspot Forsker
30. september 2005 - 10:30 #15
Jamen, hvis du insisterer, så kommer jeg da med et svar :)
Avatar billede softspot Forsker
30. september 2005 - 10:34 #16
bredum >> hvad er forskellen ud over at du inkluderer med en rigtig sti frem for en virtuel sti...? I øvrigt skal includefilerne så ligge under det aktuelle scripts folder, hvor den oprindelige løsning peger på den samme folder uanset hvorfra de bliver inkluderet...
Avatar billede softspot Forsker
30. september 2005 - 10:40 #17
Hvis du endelig skulle lave noget "smart" ville jeg nok anbefale dig at generere din menu på grundlag af querystring-parameteren og så bare have alt koden samlet i en includefil. Du kunne evt. lave en kommasepareret tekstfil (hvis du ikke er så familiær med databaser), som definerer dine menupunkter og links. Den kan du så generere din menu ud fra med et generisk script. Den vil også være meget nemmere at udvide, da du så bare skal rette i tekstfilen i stedet for at lave en ny scriptfil...

Desuden skal du undgå at lave "nested includes", dvs. inkludere den samme fil i flere includes, så skal den jo læses flere gange hver gang en side skal indlæses og koden kommer til at ligge flere gange i dit script.
Avatar billede thomas_yde Nybegynder
30. september 2005 - 12:56 #18
Jeg ville nok tage råde dig til at tage en lektion i databaser før jeg vil råde til at lave dynamiske menuer fra en tekstfil, databasen er nemmere at tilrette og kan redigeres online via et simpelt system.
Et meget simpelt menusystem i en database kan være:

menutitler
- id
- navn
- menutitelid

menuitem
- id
- menutitelid
- navn
- url
- prioritet (kan bruges til at flytte menuitem op og ned i menuen)

Så skal du læse lidt på sql og hvordan du opretter tabellen.
Men det er ikke så svært, du kan evt. kigge på www.w3schools.com og www.mysql.com for yderlige hjælp eller du kan spørge her på eksperten.

Nu ved jeg ikke hvormeget du har lavet med ASP men jeg kan give et par tips.

1. Det er en god ide at opdele functioner i forskellige functionssider som du kan inkludere de steder, hvor det er nødvendigt, det giver god kode stil og det er smart hvis/når du skal genbruge dine scripts senere.

2. Sammel generelle scripts i en side så du altid hurtigt kan tilføje nye funktioner, som du kunne for brug for senere. fx.

Function FormVar(fName)
FormVar = Trim(Request.Form(fName))
End Function

Function QueryVar(fname)
QueryVar = Trim(Request.QueryString(fName))
End Function

Så er du fri for at skrive det samme mange gang. Det speeder din udvikling op.

Jeg kom vist lidt væk fra spørgsmålet, men håber du kan bruge noget af det.
Avatar billede softspot Forsker
24. oktober 2005 - 18:59 #19
Tak for point :)
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