Avatar billede mvk Nybegynder
05. maj 2003 - 15:10 Der er 52 kommentarer og
1 løsning

Dropdown list som er afhængig af anden dropdown

jeg har 2 dropdown menuer (list/menu) som jeg genre vil gøre anhængige af hinanden til en søgefunktion.

eks. jeg har en produktsøgning hvor brugeren kan søge på mærke og kategori (værdierne til dropdown kommer fra en tabel med mærke og en tabel med kategori).
hvordan gør man så hvis brugeren vælger Nike så bliver der kun vist de kategorier som Nike har produkter i ?
Avatar billede mvk Nybegynder
05. maj 2003 - 15:14 #1
okay - nu kom jeg i tanke om noget smart - ved ikke om det kan lade sig gøre.
jeg har en tabel med mærke og en med kategori - men det er jo ikke sikkert at der er nogle produkter indenfor de enkelte.
derfor kunne man lave drodown menuerne så de ikke indeholder værdierne fra mærke tabellen, men fra produkt tabellen. men så skal den jo vide at den kun skal vise hver mærke 1 gang.
så kan brugeren jo egentlig ikke foretage en tom søgning - det ville være smart :) hehe but i dont know how ?
Avatar billede mvk Nybegynder
05. maj 2003 - 15:20 #2
Avatar billede pelkjaer Nybegynder
05. maj 2003 - 15:28 #3
Du bliver nødt til at hive mærke og kategori ud og lægge dem i et js array først. Ellers vil du skulle reloade hele tiden.

Evt. med mærke som ID's og kategori som beskrivelser af kategorier

Et output således kunne minde om

var what = new Array();
what[0] = new Array();
what[0][0] = '1';
what[0][1] = new Array();
what[0][1][0] = '1';
what[0][1][1] = 'nike produkt 1';
what[0][2] = new Array();
what[0][2][0] = '2';
what[0][2][1] = 'puma produkt 1';
what[0][3] = new Array();
what[0][3][0] = '3';
//osv

Når du har gjort det kan jeg hjælpe med js'en til at vælge i selecterne hvis du får problemer.
Avatar billede mvk Nybegynder
05. maj 2003 - 15:38 #4
skal jeg gøre det manuelt ?
jeg tænker mere på hvis der på senere tidspunkt kommer flere kategorier eller mærker på ...
Avatar billede pelkjaer Nybegynder
05. maj 2003 - 15:56 #5
Nej det skal du ikke gøre manuelt :)

Hvis du ændrer feltnavne og rs navne til dit eget, vil du kunne bruge dette til at generere array med

<%
'Standard Replace funktion
function VBreplace(thetext)
  if isNull(thetext) then thetext = ""
  newstring = Replace(cStr(thetext),"'","|pE|")
  newstring = Replace(newstring,"\","\\")
  VBreplace = newstring
end function

if (NOT rsSubKat.EOF) THEN

  'Her laver vi JS array udfra DB udtræks
  Response.Write("<sc" & "ript type=""text/javascript"">"&chr(10))
  Response.Write("var what = new Array();"&chr(10))

  oldmainid = 0
  newmainid = rsSubKat("MainId")
  if (NOT IsNumeric(newmainid))    THEN
    newmainid = cStr(newmainid)
  END IF
  if (oldmainid = newmainid)    THEN
    oldmainid = ""
  END IF
  n = 0
    while (NOT SubKat.EOF)
    if (oldmainid <> newmainid) THEN
      Response.Write("what[" & n & "] = new Array();"&chr(10))
      Response.Write("what[" & n & "][0] = '" & VBreplace(newmainid) & "';"&chr(10))
      m = 1
    END IF

    Response.Write("what[" & n & "][" & m & "] = new Array();"&chr(10))
    Response.Write("what[" & n & "][" & m & "][0] = " & "'" & VBreplace(SubKat("ID")) & "'" & ";" &chr(10))
    Response.Write("what[" & n & "][" & m & "][1] = " & "'" & VBreplace(SubKat("kategori")) & "'" & ";" &chr(10))
    m=m+1
    if (cStr(oldmainid) = "0") THEN
      oldmainid = newmainid
    END IF
    oldmainid = newmainid
    SubKat.MoveNext()
    if (NOT SubKat.EOF) THEN
      newmainid = SubKat("MainId")
    END IF
    if (NOT IsNumeric(newmainid)) THEN
    newmainid = cStr(newmainid)
  END IF
    if (oldmainid <> newmainid)    THEN
      n=n+1
    END IF
  WEND

  Response.Write("var SubKat_what = what;"&chr(10))
  Response.Write("what = null;"&chr(10))
  Response.Write("</sc" & "ript>"&chr(10))
END IF
if (NOT SubKat.BOF) THEN
  SubKat.MoveFirst()
END IF %>
Avatar billede mvk Nybegynder
05. maj 2003 - 16:07 #6
oki :)
kan du give et eks på feltnavnene ?
rs giver vist sig selv
Avatar billede pelkjaer Nybegynder
05. maj 2003 - 16:12 #7
De står der også

rsSubKat er rs :)
ID er "underprodukter"'s ID
MainID er Fabrikat ID (samme som din tabel med fabrikat only)
Kategori er en beskrivelse
Avatar billede mvk Nybegynder
05. maj 2003 - 16:31 #8
oki - ser dette nogenlunde ud :) ?

<%
'Standard Replace funktion
function VBreplace(thetext)
  if isNull(thetext) then thetext = ""
  newstring = Replace(cStr(thetext),"'","|pE|")
  newstring = Replace(newstring,"\","\\")
  VBreplace = newstring
end function

if (NOT rscategory.EOF) THEN

  'Her laver vi JS array udfra DB udtræks
  Response.Write("<sc" & "ript type=""text/javascript"">"&chr(10))
  Response.Write("var what = new Array();"&chr(10))

  oldmainid = 0
  newmainid = rscategory("IDcategory")
  if (NOT IsNumeric(newmainid))    THEN
    newmainid = cStr(newmainid)
  END IF
  if (oldmainid = newmainid)    THEN
    oldmainid = ""
  END IF
  n = 0
    while (NOT category.EOF)
    if (oldmainid <> newmainid) THEN
      Response.Write("what[" & n & "] = new Array();"&chr(10))
      Response.Write("what[" & n & "][0] = '" & VBreplace(newmainid) & "';"&chr(10))
      m = 1
    END IF

    Response.Write("what[" & n & "][" & m & "] = new Array();"&chr(10))
    Response.Write("what[" & n & "][" & m & "][0] = " & "'" & VBreplace(category("ID")) & "'" & ";" &chr(10))
    Response.Write("what[" & n & "][" & m & "][1] = " & "'" & VBreplace(category("kategori")) & "'" & ";" &chr(10))
    m=m+1
    if (cStr(oldmainid) = "0") THEN
      oldmainid = newmainid
    END IF
    oldmainid = newmainid
    category.MoveNext()
    if (NOT category.EOF) THEN
      newmainid = category("IDcategory")
    END IF
    if (NOT IsNumeric(newmainid)) THEN
    newmainid = cStr(newmainid)
  END IF
    if (oldmainid <> newmainid)    THEN
      n=n+1
    END IF
  WEND

  Response.Write("var category_what = what;"&chr(10))
  Response.Write("what = null;"&chr(10))
  Response.Write("</sc" & "ript>"&chr(10))
END IF
if (NOT category.BOF) THEN
  category.MoveFirst()
END IF %>
Avatar billede mvk Nybegynder
05. maj 2003 - 16:32 #9
det ser ud som om din MainId er min IDcategory fra mit recordset
Avatar billede mvk Nybegynder
05. maj 2003 - 19:40 #10
oldmainid og newmainid skal jeg ikke røre ved vel...
Avatar billede pelkjaer Nybegynder
06. maj 2003 - 09:28 #11
Ja MainId refererer til fx. Nike og Puma. oldmainid og newmainid skal du ikke ændre.

Har du prøvet at udskrive det?
Avatar billede mvk Nybegynder
06. maj 2003 - 09:54 #12
okay - MainID er så mine IDbrand - det retter jeg lige til
skal koden bare pastes ind før min html kode ?
Avatar billede pelkjaer Nybegynder
06. maj 2003 - 09:57 #13
Det vil se bedst ud hvis du gør det imellem <head> og </head> da det jo er et javascript array der udskrives.

Dog skal du huske selv at åbne dine recordsets, det har jeg ikke gjort i eksemplet.
Avatar billede mvk Nybegynder
06. maj 2003 - 11:31 #15
jeg har lavet 2 recordset - brand og category
i brand hedder min værdi = Brand
i category hedder den = Category

nu ser koden sådan ud:
<%
'Standard Replace funktion
function VBreplace(thetext)
  if isNull(thetext) then thetext = ""
  newstring = Replace(cStr(thetext),"'","|pE|")
  newstring = Replace(newstring,"\","\\")
  VBreplace = newstring
end function

if (NOT rsbrand.EOF) THEN

  'Her laver vi JS array udfra DB udtræks
  Response.Write("<sc" & "ript type=""text/javascript"">"&chr(10))
  Response.Write("var what = new Array();"&chr(10))

  oldmainid = 0
  newmainid = rsbrand("IDbrand")
  if (NOT IsNumeric(newmainid))    THEN
    newmainid = cStr(newmainid)
  END IF
  if (oldmainid = newmainid)    THEN
    oldmainid = ""
  END IF
  n = 0
    while (NOT brand.EOF)
    if (oldmainid <> newmainid) THEN
      Response.Write("what[" & n & "] = new Array();"&chr(10))
      Response.Write("what[" & n & "][0] = '" & VBreplace(newmainid) & "';"&chr(10))
      m = 1
    END IF

    Response.Write("what[" & n & "][" & m & "] = new Array();"&chr(10))
    Response.Write("what[" & n & "][" & m & "][0] = " & "'" & VBreplace(brand("ID")) & "'" & ";" &chr(10))
    Response.Write("what[" & n & "][" & m & "][1] = " & "'" & VBreplace(brand("brand")) & "'" & ";" &chr(10))
    m=m+1
    if (cStr(oldmainid) = "0") THEN
      oldmainid = newmainid
    END IF
    oldmainid = newmainid
    brand.MoveNext()
    if (NOT brand.EOF) THEN
      newmainid = brand("IDbrand")
    END IF
    if (NOT IsNumeric(newmainid)) THEN
    newmainid = cStr(newmainid)
  END IF
    if (oldmainid <> newmainid)    THEN
      n=n+1
    END IF
  WEND

  Response.Write("var brand_what = what;"&chr(10))
  Response.Write("what = null;"&chr(10))
  Response.Write("</sc" & "ript>"&chr(10))
END IF
if (NOT brand.BOF) THEN
  brand.MoveFirst()
END IF %>
Avatar billede mvk Nybegynder
06. maj 2003 - 11:35 #16
HTTP 500 - Internal server error på http://www.capitolshop.dk/1index.asp
Avatar billede pelkjaer Nybegynder
06. maj 2003 - 11:37 #17
hvad står der i den linje
Avatar billede mvk Nybegynder
06. maj 2003 - 11:42 #18
nu har jeg flyttet koden til lige under: head

Microsoft VBScript runtime error '800a01a8'

Object required: 'rsbrand'

/1index.asp, line 120

det er fejlen
Avatar billede mvk Nybegynder
06. maj 2003 - 11:44 #19
jeg skal måske fjerne alle rs fordi jeg ikke kalder mine recordset rs foran ?
Avatar billede pelkjaer Nybegynder
06. maj 2003 - 11:45 #20
ja :)
Avatar billede mvk Nybegynder
06. maj 2003 - 11:51 #21
hehe - nu er siden helt hvid
Avatar billede mvk Nybegynder
06. maj 2003 - 11:54 #22
<html>
<head>
<%
'Standard Replace funktion
function VBreplace(thetext)
  if isNull(thetext) then thetext = ""
  newstring = Replace(cStr(thetext),"'","|pE|")
  newstring = Replace(newstring,"\","\\")
  VBreplace = newstring
end function

if (NOT brand.EOF) THEN

  'Her laver vi JS array udfra DB udtræks
  Response.Write("<sc" & "ript type=""text/javascript"">"&chr(10))
  Response.Write("var what = new Array();"&chr(10))

  oldmainid = 0
  newmainid = brand("IDbrand")
  if (NOT IsNumeric(newmainid))    THEN
    newmainid = cStr(newmainid)
  END IF
  if (oldmainid = newmainid)    THEN
    oldmainid = ""
  END IF
  n = 0
    while (NOT brand.EOF)
    if (oldmainid <> newmainid) THEN
      Response.Write("what[" & n & "] = new Array();"&chr(10))
      Response.Write("what[" & n & "][0] = '" & VBreplace(newmainid) & "';"&chr(10))
      m = 1
    END IF

    Response.Write("what[" & n & "][" & m & "] = new Array();"&chr(10))
    Response.Write("what[" & n & "][" & m & "][0] = " & "'" & VBreplace(brand("ID")) & "'" & ";" &chr(10))
    Response.Write("what[" & n & "][" & m & "][1] = " & "'" & VBreplace(brand("brand")) & "'" & ";" &chr(10))
    m=m+1
    if (cStr(oldmainid) = "0") THEN
      oldmainid = newmainid
    END IF
    oldmainid = newmainid
    brand.MoveNext()
    if (NOT brand.EOF) THEN
      newmainid = brand("IDbrand")
    END IF
    if (NOT IsNumeric(newmainid)) THEN
    newmainid = cStr(newmainid)
  END IF
    if (oldmainid <> newmainid)    THEN
      n=n+1
    END IF
  WEND

  Response.Write("var brand_what = what;"&chr(10))
  Response.Write("what = null;"&chr(10))
  Response.Write("</sc" & "ript>"&chr(10))
END IF
if (NOT brand.BOF) THEN
  brand.MoveFirst()
END IF %>

<title>Capitolshop</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<link href="capitol.css" rel="stylesheet" type="text/css">
</head>

<body>
.........
Avatar billede pelkjaer Nybegynder
06. maj 2003 - 11:55 #23
Tjek kilden - linje 130
Avatar billede mvk Nybegynder
06. maj 2003 - 12:29 #24
newmainid = brand("IDbrand")
det er linie 130
Avatar billede mvk Nybegynder
06. maj 2003 - 12:36 #25
i brand recordset er følgende: IDbrand, Brand, Logo
i category er følgende: IDcategory, Category
Avatar billede mvk Nybegynder
07. maj 2003 - 11:25 #26
ser det rigtigt ud ? :)
Avatar billede mvk Nybegynder
07. maj 2003 - 12:50 #27
pelkjaer - nu har jeg siddet og rodet mere med det men den bliver ved med at melde fejl
Avatar billede pelkjaer Nybegynder
07. maj 2003 - 12:51 #28
Jeg har ikke tid før iaften - sidder og arbejder ;D
Avatar billede mvk Nybegynder
07. maj 2003 - 12:57 #29
okay :o) tak
Avatar billede mvk Nybegynder
09. maj 2003 - 08:54 #30
morning pelkjaer
jeg har stadig iikke fået det til at virke, hvis du får tid :)))
Avatar billede pelkjaer Nybegynder
09. maj 2003 - 16:49 #31
Sorry havde glemt dig. Send det du har til p@peterelkjaer.dk hvis det er.
Avatar billede mvk Nybegynder
10. maj 2003 - 00:18 #32
det er helt ok - jeg har sendt filen
Avatar billede pelkjaer Nybegynder
11. maj 2003 - 14:51 #33
Mail sendt retur

online version: www.peterelkjaer.dk/exp/1index.asp

kode: www.peterelkjaer.dk/exp/codeview.htm (vises uden indrykninger desværre)
Avatar billede mvk Nybegynder
12. maj 2003 - 08:52 #34
det ser rigtig godt ud pelkjaer :) - roder med det nu
Avatar billede mvk Nybegynder
12. maj 2003 - 09:04 #35
hvad svarer rsFabProdukt til i min category tabel ? (IDcategory, Category)
Avatar billede mvk Nybegynder
12. maj 2003 - 09:09 #36
nm - det må være mit brand recordset
Avatar billede mvk Nybegynder
12. maj 2003 - 09:17 #37
nu forsøger jeg at få det til at spille i et seperat dokument
http://www.capitolshop.dk/test.asp
Avatar billede mvk Nybegynder
12. maj 2003 - 09:20 #38
det er ikke fordi jeg vil være en pain... men er det muligt at gøre sådan at brugeren kan vælge begge dele fra starten. eksempelvis ligesom på http://www.sneakersnstuff.com - det er drømme løsningen :) (bare uden den der ekstra brand som de smider på når man har valgt kategori)
Avatar billede mvk Nybegynder
12. maj 2003 - 09:30 #39
jeg har svært ved at gennemskue hvilke værdiet jeg skal sætte i stedet for: <option value="<% Response.Write rs("ID") %>"><% Response.Write rs("fabrikantNavn") %></option>
ID og fabrikantNavn - er det nogle du definerer eller skal jeg tage den fra min tabel ? (total spørge-jørgen her til morgen :)
Avatar billede mvk Nybegynder
12. maj 2003 - 10:00 #40
hehe - indtil videre har jeg en stor flot tom side
Avatar billede mvk Nybegynder
12. maj 2003 - 10:02 #41
her er min kode:

<%@LANGUAGE="VBSCRIPT" CODEPAGE="1252"%>
<!--#include file="Connections/capitol.asp" -->
<%
Dim brand
Dim brand_numRows

Set brand = Server.CreateObject("ADODB.Recordset")
brand.ActiveConnection = MM_capitol_STRING
brand.Source = "SELECT * FROM brand ORDER BY Brand ASC"
brand.CursorType = 0
brand.CursorLocation = 2
brand.LockType = 1
brand.Open()

brand_numRows = 0
%>
<%
Dim category
Dim category_numRows

Set category = Server.CreateObject("ADODB.Recordset")
category.ActiveConnection = MM_capitol_STRING
category.Source = "SELECT * FROM category ORDER BY Category ASC"
category.CursorType = 0
category.CursorLocation = 2
category.LockType = 1
category.Open()

category_numRows = 0
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title></title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<%
' Replace funktion
Function VBreplace(thetext)
  If isNull(thetext) Then thetext = ""
    newstring = Replace(cStr(thetext),"'","|pE|")
    newstring = Replace(newstring,"\","\\")
    VBreplace = newstring
End Function

If (Not brand.EOF) Then

  'Her laver vi JS array udfra DB udtræk
  Response.Write("<sc" & "ript type=""text/javascript"">"&chr(10))
  Response.Write("var what = new Array();"&chr(10))

  oldmainid = 0
  newmainid = brand("IDbrand")
  If (Not IsNumeric(newmainid)) Then
    newmainid = cStr(newmainid)
  End If
  If (oldmainid = newmainid) Then
    oldmainid = ""
  End If
  n = 0
    While (Not brand.EOF)
    If (oldmainid <> newmainid) Then
      Response.Write("what[" & n & "] = new Array();"&chr(10))
      Response.Write("what[" & n & "][0] = '" & VBreplace(newmainid) & "';"&chr(10))
      m = 1
    End If

    Response.Write("what[" & n & "][" & m & "] = new Array();"&chr(10))
    Response.Write("what[" & n & "][" & m & "][0] = " & "'" & VBreplace(brand("ID")) & "'" & ";" &chr(10))
    Response.Write("what[" & n & "][" & m & "][1] = " & "'" & VBreplace(brand("fabrikantNavn")) & "'" & ";" &chr(10))
    m = m +1
       
    If (cStr(oldmainid) = "0") Then
      oldmainid = newmainid
    End If
    oldmainid = newmainid
    brand.MoveNext()
    If (Not brand.EOF) Then
      newmainid = brand("IDbrand")
    End If
    If (Not IsNumeric(newmainid)) Then
      newmainid = cStr(newmainid)
    End If
    If (oldmainid <> newmainid) Then
      n=n+1
    End If
  Wend
   
  Response.Write("var brand_what = what;"&chr(10))
  Response.Write("what = null;"&chr(10))
  Response.Write("</sc" & "ript>"&chr(10))
End If

If (Not brand.BOF) Then
  brand.MoveFirst()
End If
%>
<script type="text/JavaScript">
ALT JAVA har jeg slet ikke rørt
</script>
</head>
<body>
<form method="post" action="">
<table border="0" cellpadding="3">
<tr>
<td>
<p><select name="brand" id="brand" onChange="makeSubList(brand_what,findObj('brand'),findObj('category'),0,0,false,':');enableSel('category');">
<option value="">Choose brand</option> 
<%
strSQL = "SELECT * FROM brand WHERE dBvalg = 1"
Set rs = conn.Execute(strSQL)

Do
%>
<option value="<% Response.Write rs("ID") %>"><% Response.Write rs("fabrikantNavn") %></option>           
<%
rs.MoveNext
Loop While Not rs.EOF
rs.Close
%>
</select></p>
<p><select name="category" class="text" id="category" disabled>
<option value="">Choose category</option>
<%
strSQL = "select * from category"
Set rs = conn.Execute(strSQL)

Do
%>
<option value="<% Response.Write rs("ID") %>"><% Response.Write rs("fabrikantNavn") %></option>
<%
rs.MoveNext
Loop While Not rs.EOF
%>
</select></p></td>
</tr>
</table>
</form>
</body>
</html>
<%
brand.Close()
Set brand = Nothing
%>
<%
category.Close()
Set category = Nothing
%>
Avatar billede mvk Nybegynder
13. maj 2003 - 10:06 #42
rs("ID")
rs("fabrikantNavn")
jeg tror det er dem der volder mig problemer
Avatar billede pelkjaer Nybegynder
13. maj 2003 - 10:15 #43
Send mig din db så jeg kan se dine navne hvis du ikke kan bruge dem jeg har lavet. p@peterelkjaer.dk

det bliver tidligst iaften :)
Avatar billede mvk Nybegynder
13. maj 2003 - 10:21 #44
hehe - det er helt i orden - sende den med det samme :)
TAK!
Avatar billede mvk Nybegynder
13. maj 2003 - 11:20 #45
3 tabeller du skal se på:
brand
category
product
Avatar billede mvk Nybegynder
14. maj 2003 - 13:19 #46
Peter - tror du man kan lave SQL´en så den kun viser de brands og categories som der rent faktisk er oprettet produkter til ?
så den laver en SELECT DISTINCT fra produkt tabellen og det så er den den bruger til at søge efter ?
Avatar billede mvk Nybegynder
19. maj 2003 - 10:02 #47
:) har du haft tid over weekenden.
jeg har det vild dårligt med at spørge, for du vender jo tilbage når du har. :)
Avatar billede mvk Nybegynder
21. maj 2003 - 13:17 #48
noget nyt :o)
Avatar billede pelkjaer Nybegynder
21. maj 2003 - 19:06 #49
hehe my bad - det er fordi jeg sidder med en deadline. Jeg lover du har noget i din inbox inden weekenden - det er det bedste jeg kan tilbyde.
Avatar billede mvk Nybegynder
21. maj 2003 - 20:02 #50
det er helt fint - tak ;)
Avatar billede mvk Nybegynder
27. maj 2003 - 13:24 #51
pelkjaer - du må sige til hvis der er ting som er svært at huske...

1. man skal kunne vælge fra begge dropdown på samme tid, og kun 1 hvis man ønsker det
2. resultatet skal vises i http://www.capitolshop.dk/products.asp
3. filen med de to dropdown skal indsættes som include i de andre filer

thanks man ;)
Avatar billede mvk Nybegynder
02. juni 2003 - 11:50 #52
hej pelkjaer - har du haft tid til at kigge på det
Avatar billede mvk Nybegynder
24. juni 2003 - 10:59 #53
pelkjaer - jeg har fået hjælp andetsteds :)
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

IT-JOB

Politiets Efterretningstjeneste

Data engineer til PET

Riskpoint A/S (Riskpoint Solutions Limited)

Senior Developer