Avatar billede Slettet bruger
21. maj 2004 - 10:20 Der er 27 kommentarer og
1 løsning

Dropdown i ASP

Hej
Jeg har fundet et script som Eagleeye har lavet, som sædvanligt smart, men jeg er knap så smart åbenbart, fordi jeg kan kun få scriptet til at hente den første værdi, Er der nogen der kan se hvad jeg gør forkert.
Her er scriptet:
<html>

<head>
<title>New Page 1</title>
</head>

<body>
<%
'Hendt den valgte pageid
pageid = Request.Form("pageid")

Set Conn = Server.CreateObject("ADODB.Connection")
connStr = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & Server.MapPath("log.mdb")
Conn.Open connStr
%>

<form name="sels" method="post">
  <p><select name="pageid" onchange="this.form.submit();" size="1">
<%
'Find og list alle med parent=0
SQL = "SELECT pageID, title FROM tabelnavn WHERE parent = 0 ORDER BY pageID"
Set rs = Conn.Execute(SQL)
do while not rs.EOF
Response.Write "<option value=""" & rs("pageid") & """"
if CStr(pageid) = CStr(rs("pageid")) then Response.Write " selected "
Response.Write ">" & rs("title") & "</option>"
rs.Movenext
loop
%>  </select> <br>
  <select name="undermemenuer" size="1">
<%
'Find alle under menuer til den valgt menu
if pageid <> "" then
SQL = "SELECT pageID, title FROM afdeling WHERE parent = " & pageid & " ORDER BY pageID"
Set rs = Conn.Execute(SQL)
do while not rs.EOF
Response.Write "<option value=""" & rs("pageid") & """>" & rs("title") & "</option>"
rs.Movenext
loop
end if
%>  </select> </p>
</form>
</body>
</html>
Avatar billede michael_stim Ekspert
21. maj 2004 - 10:31 #1
<form name="sels" method="post">
  <p><select name="pageid" onchange="this.form.submit();" size="1">
<%
'Find og list alle med parent=0
SQL = "SELECT pageID, title FROM tabelnavn WHERE parent = 0 ORDER BY pageID"
Set rs = Conn.Execute(SQL)
do while not rs.EOF
Response.Write "<option value=""" & rs("pageid") & """"
if CStr(pageid) = CStr(rs("pageid")) then Response.Write " selected "
Response.Write ">" & rs("title") & "</option>"
rs.Movenext
loop
end if
%>
'Får du ingen fejl? Ser ud som om der mangler en end if, men det kan godt väre det er mig der har stirret mig blind.
Avatar billede Slettet bruger
21. maj 2004 - 10:36 #2
Nej, jeg får ingen fejl på siden, den henter title i tabellen tabelnavn og så får jeg en tom dropdown under
Avatar billede and_ Nybegynder
21. maj 2004 - 14:14 #3
og du er fuldkommen sikker på at du får en pageid ind?

Prøv lige at lave dette i toppen:

<%
'Hendt den valgte pageid
pageid = Request.Form("pageid")
if pageid = <> "" then
  response.write "ingen værdi<br><br>"
else
  response.write "Værdien er: " & pageid
end if
Avatar billede Slettet bruger
21. maj 2004 - 14:18 #4
Så får jeg denne fejl:
Microsoft VBScript compilation error '800a03ea'

Syntax error

New/new.asp, line 11

if pageid = <> "" then
------------^
Avatar billede and_ Nybegynder
21. maj 2004 - 14:19 #5
sorry ;) det er fredag......

if pageid <> "" then
Avatar billede Slettet bruger
21. maj 2004 - 14:23 #6
Så får jeg svaret over dropdownboxen Ingen værdi
Avatar billede and_ Nybegynder
21. maj 2004 - 14:30 #7
Godt...

så er det denne blok der fejler:

<%
'Find alle under menuer til den valgt menu
if pageid <> "" then
SQL = "SELECT pageID, title FROM afdeling WHERE parent = " & pageid & " ORDER BY pageID"
Set rs = Conn.Execute(SQL)
do while not rs.EOF
Response.Write "<option value=""" & rs("pageid") & """>" & rs("title") & "</option>"
rs.Movenext
loop
end if
%>


og det er simpelthen fordi du forsøger at trække alle punkterne ud fra en db, hvor parent = ingenting

Prøv lige denne:
SQL = "SELECT pageID, title FROM afdeling WHERE parent > 0 ORDER BY pageid"
Avatar billede and_ Nybegynder
21. maj 2004 - 14:32 #8
jeg tror jeg er et fjols (hhhmmmmmmm)...

Prøv ligge denne først:

'Hendt den valgte pageid
pageid = Request.Form("pageid")
if pageid = <> "" then
  response.write "Værdien er: " & pageid
else
  response.write "ingen værdi<br><br>"
end if
Avatar billede Slettet bruger
21. maj 2004 - 14:37 #9
Det forandrer desværre ikke noget. Jeg har selv på fornemmelsen at jeg ikke helt har forstået opbygningen af databasen. Jeg har en tabel som hedder Tabelnavn, i den er der 3 colums som hedder PageId, title , parent. Parent er sat til 0 i alle poster, og de andre er bare test o.s.v.
Jeg får i første dropdownbox værdi af title som i dette tilfælde er prov1, prov2 o.s.v Den næste dropdown kan jeg også se, men den er tom.
Avatar billede and_ Nybegynder
21. maj 2004 - 14:39 #10
og det vil sige at den eneste parentværdi du har er 0? ingen større eller noget... har du evt. en url hvor man kan se resultatet???
Avatar billede Slettet bruger
21. maj 2004 - 14:39 #11
Jeg nåede ikke at se din sidste kommentar, men det giver:
Microsoft VBScript compilation error '800a03ea'

Syntax error

/New/new.asp, line 11

if pageid = <> "" then
------------^
Avatar billede and_ Nybegynder
21. maj 2004 - 14:40 #12
mig igen.... sorry:

if pageid <> "" then
Avatar billede Slettet bruger
21. maj 2004 - 14:42 #13
Så får jeg et resultat tilbage der siger test4, som er en af posterne i PageId. Desværre kan du ikke se min url
Avatar billede and_ Nybegynder
21. maj 2004 - 14:45 #14
hmmm, lyder som om du ikke har forstået db-opbygningen... normal er id fx. et autonummeringsfelt, men lad os da prøve at løse det ;)

skift denne:

SQL = "SELECT pageID, title FROM afdeling WHERE parent = " & pageid & " ORDER BY pageID"

med:

SQL = "SELECT pageID, title FROM afdeling WHERE parent = '" & pageid & "' ORDER BY pageID"
Avatar billede Slettet bruger
21. maj 2004 - 14:52 #15
Det ændrer ikke noget, jeg ændrer FROM afdeling til Tabelnavn fordi jeg har kun en tabel ?
Nu har jeg ændret PageId til autonummerering og så får jeg - ingen værdi - på din test
Avatar billede and_ Nybegynder
21. maj 2004 - 14:56 #16
hehehehehe ;)

misforståelser fremmer forståelsen....

pageid skal være et tal felt...

Parent 0 = det øverste plan
parent xx = referer til det plan som skal vises

fx. vil en parent 4 være det fjerde nivaeu

kan vi finde ud af at du sender scriptet/db eller andet, da det er svært at hjælpe når jeg kun har et nøglehul at kigge igennem... ;)
Avatar billede Slettet bruger
21. maj 2004 - 15:01 #17
Ja, her er hele scriptet, og DB
title    parent    PageID
prov1    0    1
prov2    0    2
Prov3    0    3
prov4    0    4
tekstfelt - talfelt - Autonummeringsfelt
ASP:
<html>

<head>
<title>New Page 1</title>
</head>

<body>
<%
'Hendt den valgte pageid
pageid = Request.Form("pageid")
if pageid  <> "" then
response.write "Værdien er: " & pageid
else
response.write "ingen værdi<br><br>"
end if


Set Conn = Server.CreateObject("ADODB.Connection")
connStr = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & Server.MapPath("log.mdb")
Conn.Open connStr
%>

<form name="sels" method="post">
  <p><select name="pageid" onchange="this.form.submit();" size="1">
<%
'Find og list alle med parent=0
SQL = "SELECT pageID, title FROM tabelnavn WHERE parent = 0 ORDER BY pageID"
Set rs = Conn.Execute(SQL)
do while not rs.EOF
Response.Write "<option value=""" & rs("pageid") & """"
if CStr(pageid) = CStr(rs("pageid")) then Response.Write " selected "
Response.Write ">" & rs("title") & "</option>"
rs.Movenext
loop
%>  </select> <br>
  <select name="undermenuer" size="1">
<%
'Find alle under menuer til den valgt menu
if pageid <> "" then
SQL = "SELECT pageID, title FROM tabelnavn WHERE parent = '" & pageid & "' ORDER BY pageID"
Set rs = Conn.Execute(SQL)
do while not rs.EOF
Response.Write "<option value=""" & rs("pageid") & """>" & rs("title") & "</option>"
rs.Movenext
loop
end if
%>  </select> </p>
</form>
</body>
</html>

Håber det er til at finde ud af.
Avatar billede and_ Nybegynder
21. maj 2004 - 15:07 #18
eeeehhhhhh, den lister prov1, prov2, prov3 og prov4 korrekt ikke...

ellers så forklar lige udførligt hvad det du vil....
for du har jo ingen undermenuer lagt i db'en...

skift lige denne ud igen:
SQL = "SELECT pageID, title FROM tabelnavn WHERE parent = '" & pageid & "' ORDER BY pageID"

med:
SQL = "SELECT pageID, title FROM tabelnavn WHERE parent = " & pageid & " ORDER BY pageID"
Avatar billede Slettet bruger
21. maj 2004 - 15:11 #19
Jeg vil gerne have at Select er afhængige af hinanden, hvis jeg vælger f.eks. prov1 skal jeg få disse valg i dropdown2- test1,test2, test3 osv. Hvis jeg vælger prov2, skal dropdown skifte til disse valg, test4, test5, test6 osv. Skal jeg oprettet tabeller med navn undermenuer og hvordan får jeg dem "bundet" sammen ?
Avatar billede and_ Nybegynder
21. maj 2004 - 15:12 #20
godt godt... øjeblik ;)
Avatar billede and_ Nybegynder
21. maj 2004 - 15:16 #21
din db skal bare være som den er ;)

men indholdet skal være som følger:

title    parent    PageID
prov1    0            1
prov2    0            2
Prov3    0            3
prov4    0            4
test1    1
test2    1
test3    1
test4    2
test5    2
test6    2
test7    3
test8    4
test9    5

Med parent referer du til det menupunkt som undermenuen tilhører.
i dette tilfælde tilhører test4 menupunktet med pageid 2

håber du forstår ;)
Avatar billede Slettet bruger
21. maj 2004 - 15:22 #22
Det tror jeg jeg gør, men selv on min DB nu ser sådan ud får jeg stadig ikke noget resultat i drop nr. 2
Som jeg har forstået skulle jeg nu hvis jeg vælger prov2 få valgmulighederne - test4, test5 og test6
Avatar billede Slettet bruger
21. maj 2004 - 15:25 #23
Undskyld, den skulle bare lige tænke sig om . Yes, nu virker det, Tusind tak for hjælpen, lægger du et svar så du kan få dine point.
Linda
Avatar billede and_ Nybegynder
21. maj 2004 - 15:28 #24
her er et svar, men hvis jeg må komme med en lille rettelse ;)


<html>
<head>
    <title>New Page 1</title>
</head>
<body>
<form name="sels" method="post">
  <p><select name="pageid" onchange="this.form.submit();" size="1">
<%
Set Conn = Server.CreateObject("ADODB.Connection")
connStr = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & Server.MapPath("log.mdb")
Conn.Open connStr
SQL = "SELECT pageID, title FROM tabelnavn WHERE parent = 0 ORDER BY pageID"
Set rs = Conn.Execute(SQL)
    do while not rs.EOF
        Response.Write "<option value=""" & rs("pageid") & """"
        if CStr(pageid) = CStr(rs("pageid")) then Response.Write " selected " end if
        Response.Write ">" & rs("title") & "</option>"
    rs.Movenext
loop
%>  </select> <br>
  <select name="undermenuer" size="1">
<%
undermenu = Request.Form("pageid")
if undermenu <> "" then
    SQL = "SELECT pageID, title FROM tabelnavn WHERE parent = " & undermenu & " ORDER BY pageID"
    Set rs = Conn.Execute(SQL)
        do while not rs.EOF
            Response.Write "<option value=""" & rs("pageid") & """>" & rs("title") & "</option>"
        rs.Movenext
    loop
else
    response.write "<option>Ingen menu"</option>
end if

rs.close
set rs = nothing
%>  </select> </p>
</form>
</body>
</html>
Avatar billede Slettet bruger
21. maj 2004 - 15:36 #25
Ja, gerne jeg kan ikke lige umiddelbart se rettelsen ?
Avatar billede and_ Nybegynder
21. maj 2004 - 15:41 #26
koden er blevet formateret, så den står pænere ;)

og så har lukket din database... tænk på systemressourcer samt lavet et tjek på om der skal vises undermenuer... hvis ikke, skriver den: Ingen menu

<%
'ændret variabelnavn
undermenu = Request.Form("pageid")

'laver et tjek på variablen har en værdi
if undermenu <> "" then
    SQL = "SELECT pageID, title FROM tabelnavn WHERE parent = " & undermenu & " ORDER BY pageID"
    Set rs = Conn.Execute(SQL)
        do while not rs.EOF
            Response.Write "<option value=""" & rs("pageid") & """>" & rs("title") & "</option>"
        rs.Movenext
    loop

'Variablen er tom, så vi udskriver bare ingen menu
else
    response.write "<option>Ingen menu"</option>
end if

'og vi lukker lige basen igen.. Vi lukker jo al varmen ud ;)
rs.close
set rs = nothing
%>


mvh

anders
Avatar billede Slettet bruger
21. maj 2004 - 15:42 #27
Ok, igen tusind tak for hjælpen og god weekend
Avatar billede and_ Nybegynder
21. maj 2004 - 15:44 #28
i lige måde ;)
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