Toon posts:

[Meerdere dropdowns met ASP en JavaScript

Pagina: 1
Acties:
  • 139 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Hey,

Ik heb een script gemaakt in ASP waarmee ik mijn bezoekers een keuze laat maken doormiddel van 4 dropdown menu's. Dit werkt er mooi alleen nu wil ik dat de dropdown onder elkaar staan ipv elke op een andere pagina.

Bij mijn ASP script is het noodzakelijk dat men de keuze specificeert dus b.v.
[list]
• Men kiest eerst het genre van een boek. Alle boeken van het gekozen genre worden in het 2de dropdown menu geshowed.

• Vervolgens kiest men de schrijver van het boek in deze genre. Alle titels van het betreffende genre en schrijver worden in de 3de dropdown geshowed.

• Wanneer de betreffende titel in dropdown 3 van de schrijver en het gekozen genre gekozen zijn gaat deze verder naar dropdown 4

• In dropdown 4 kiest men welke taal men wil ..

Het zou eigenlijk allemaal automatisch moet gaan ( dwz wanneer er nieuwe data is dat de script niet hoeft worden aangepast. ) Kijk bv hier http://www.carmax.com/sea...ue&NewUsed=1&SearchType=0


Ik kom er zelf echt niet uit, ik hoop dat jullie me verder kunnen helpen _/-\o_

betreffende ASP script:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
<html>
<head>

</head>
<%
Dim Conn

Set Conn = Server.CreateObject("ADODB.connection") 
Conn.Open "blaat","blaat","blaat"

If Request.QueryString("soort") <> "" Then
    'gegevens opbouwen
    Session("soort") = Request.QueryString("soort")
    Set objRS = Conn.Execute("SELECT DISTINCT schrijver FROM tblboeken Where soort = '" & Session("soort") & "' ORDER BY schrijver")
    If Not (objRS.EOF And objRS.BOF) Then%>
        <form action="boeken.asp" method="get">
        Welke Schrijver : 
        <select name="schrijver">
            <option></option>
        <%Do While Not objRS.EOF%>
            <option value="<%= objRS.Fields("schrijver") %>"><%= objRS.Fields("schrijver")%></option>
            <%objRS.MoveNext
        Loop%>
        </select>
        <input type="submit" value="Zoek" />
        </form>
    <%Else%>
        Sorry wij hebben geen <%=request("soort")%>
    <%End If
ElseIf Request.QueryString("schrijver") <> "" Then
    'gegevens opbouwen
    Session("schrijver") = Request.QueryString("schrijver")
    Set objRS = Conn.Execute("SELECT DISTINCT [voornaamschrijver] FROM tblboeken Where soort = '" & Session("soort") & "' and schrijver = '" & session("schrijver") & "' ORDER BY [voornaamschrijver]")
    If Not (objRS.EOF And objRS.BOF) Then%>
        <form action="boeken.asp" method="get">
        Voornaam: 
        <select name="voornaamschrijver">
            <option></option>
        <%Do While Not objRS.EOF%>
            <option value="<%= objRS.Fields("voornaamschrijver") %>"><%= objRS.Fields("voornaamschrijver")%></option>
            <%objRS.MoveNext
        Loop%>
        </select>
        <input type="submit" value="Zoek" />
        </form>
    <%Else%>
        Sorry wij hebben geen <%=session("soort")%> van <%=request("schrijver")%>
    <%End If
    objRS.Close
ElseIf Request.QueryString("voornaamschrijver") <> "" Then
    'gegevens opbouwen
    Session("voornaamschrijver") = Request.QueryString("voornaamschrijver")
    Set objRS = Conn.Execute("SELECT DISTINCT naamboek FROM tblboeken Where soort = '" & Session("soort") & "' and schrijver = '" & session("schrijver") & "' and [voornaamschrijver] = '" & session("voornaamschrijver") & " ' ORDER BY naamboek")
    If Not (objRS.EOF And objRS.BOF) Then%>
        <form action="boeken.asp" method="get">
        Titel boek: 
        <select name="naamboek">
            <option></option>
        <%Do While Not objRS.EOF%>
            <option value="<%= objRS.Fields("naamboek") %>"><%= objRS.Fields("naamboek")%></option>
            <%objRS.MoveNext
        Loop%>
        </select>
        <input type="submit" value="Zoek" />
        </form>
    <%Else%>
        Sorry wij hebben geen <%=session("soort")%> van <%=session("schrijver")%> met het als voornaam <%=request("voornaamschrijver")%>
    <%End If
    objRS.Close
ElseIf Request.QueryString("naamboek") <> "" Then
        Set objRS = Conn.Execute("SELECT * FROM tblboeken WHERE soort = '" & session("soort") & "' AND [schrijver] = '" & session("schrijver") & "' AND [voornaamschrijver] = '" & session("voornaamschrijver") & "' And [naamboek] = '" & Request.QueryString("naamboek") & "'")
    If Not (objRS.EOF And objRS.BOF) Then%>
        </head>
        <table border="0" style="border-collapse: collapse" bordercolor="#111111" cellpadding="0" cellspacing="0" height="44" width="1125">
        <%'objRS.Open "SELECT DISTINCT soort FROM tblboeken ORDER BY soort", objDC, 0, 1
        Do While Not objRS.EOF%>
            <tr>
            <td width="175">
            <a href="bekijkitem.asp?ID=<%= objRS.Fields("ID") %>"><%= objRS.Fields("Tekst") %></a>
            </td>
            <td width="150">
            <%= objRS.Fields("Uitkomst") %>
            </td>
            </tr>
            <%objRs.MoveNext
        Loop%>
        </table>
    <%Else%>
        Sorry wij hebben geen <%=session("soort")%> van <%=session("schrijver")%> met het als voornaam <%=session("voornaamschrijver")%> met als titel <%=request("naamboek")%>
    <%End If
    Set objRS = Nothing
ElseIf Request.QueryString = "" Then
    Set objRS = Conn.Execute("SELECT DISTINCT soort FROM tblboeken ORDER BY soort")%>
    <form action="boeken.asp" method="get">
    Soort Boek :
    <select name="soort">
        <option></option>
        <%Do While Not objRS.EOF%>
            <option value="<%= objRS.Fields("soort") %>"><%= objRS.Fields("soort")%></option>
            <%objRS.MoveNext
        Loop%>
        </select>
        <input type="submit" value="Zoek" />
    </form>
<%
End If

Conn.Close
Set Conn = Nothing
%>
</body>
</html>

  • CmdrKeen
  • Registratie: Augustus 2000
  • Laatst online: 27-05 21:11

CmdrKeen

Krentenboltosti

OnChange gebruiken.. zie bv. op www.w3schools.com
Je laat je form naar zichzelf sturen en de ingevulde waarden stuur je mee. De "Submit"-button onderaan het form laat je ergens anders naartoe wijzen met een OnClick.

Als je wilt, kan ik je wel voorzien van de source van een werkend systeem dat hier gebruik van maakt. ICQ 6495710

Bloed, zweet & koffie


  • CmdrKeen
  • Registratie: Augustus 2000
  • Laatst online: 27-05 21:11

CmdrKeen

Krentenboltosti

Lighting_Man, ik heb je script, maar niet je ICQ-, MSN- of emailadres. Hier is het... Stuur maar ff een ICQ-msg als je nog meer wilt weten.

Je kan het script hier werkend vinden en downloaden.

Discaimer: ik weet dat dit veel op een scriptrequest lijkt, maar er zijn meer mensen die met dit probleem lopen (ikzelf eerst ook), daarom post ik hier de basiscode.

ASP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
<% @Language = "VBScript" %>
<% Option Explicit %>
<% Response.Buffer = True %>

<%
Dim rs, Conn, SqlStmt
Set rs = Server.CreateObject ("ADODB.Recordset")
Set Conn = Server.CreateObject ("ADODB.Connection")
Conn.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("test.mdb")
' Verbinding maken met de database

Dim PostbackCat, postback
PostbackCat = request("catselect")
' Kijken of dit een postback is om de gelecteerde categorie te bewaren.

Dim again
again = request("again")
if again = "ja" then
    PostbackCat = ""
    infoselect = ""
end if
' Het again-linkje - zie onderaan.

%>

<html>
    <head>
        <title>
            Test
        </title>
    </head>
    <body>
        <table border = 1 width = 200 height = 100>
            <tr height = 50 valign = center>
                <td width = 100 align = center>
                    <form name = mijnform> <!--Niet vergeten een NAAM mee tegen voor de javascript!-->
                        <select onchange="mijnform.submit()"; name = catselect> <!--Select-box maken. In de JavaScript staat: als de waarde in het pull-downmenu gewijzigd wordt, moet het formulier verzonden worden.-->
                            <%
                            Dim HuidigeCat
                            'recordset maken
                            SqlStmt = "SELECT cat FROM cats ORDER BY cat" 'Categorieën uit de tabel cats halen en rangschikken op de naam van de categorie in alfabetische volgorde. Voor omgekeerd rangschikken: ORDER BY cats DESC
                            rs.Open SqlStmt, Conn
                            while not rs.eof 'Zolang we niet bij het eind van de lijst zijn
                                HuidigeCat = rs("cat")
                                response.write("<option")
                                if PostbackCat = HuidigeCat then response.write(" selected") 'Om de eerder geselecteerde waarde te behouden.
                                response.write(">" & HuidigeCat & "</option>") 'bv: <option>cat1</option> - zie ook de BRON in je browser.
                                rs.movenext 'Naar de volgende entry gaan
                            wend
                            rs.close 'Recordset weer afsluiten
                            %>
                        </select>
                </td>
                <td align = center>
                    <%
                    if PostbackCat <> "" then 'Alleen uitvoeren als er een categorie is geselecteerd.
                        %>
                        <select onchange="mijnform.submit()"; name = infoselect> <!--Select-box maken. In de JavaScript staat: als de waarde in het pull-downmenu gewijzigd wordt, moet het formulier verzonden worden.-->
                            <%
                            Dim HuidigeInfo
                            SqlStmt = "SELECT info FROM info WHERE cat = '" & PostbackCat & "' ORDER BY info"
                            rs.Open SqlStmt, Conn
                            while not rs.eof
                                HuidigeInfo = rs("Info")
                                response.write("<option>" & HuidigeInfo & "</option>")
                                rs.movenext
                            wend
                            rs.close 'Recordset weer afsluiten
                            %>
                        </select>
                        <%
                    else
                        Response.write("&nbsp;") 'Alleen ff een lege spatie neerzetten zodat de tabel niet verziekt wordt.
                    end if
                    %>
                </td>
            </tr>
        </table>
        </form>
        <%
        Dim infoselect
        infoselect = request("infoselect")
        if infoselect <> "" then
            %>
            Je hebt <%=infoselect%> geselecteerd uit de categorie <%=PostbackCat%>.
            <p>
            <a href = ?again=ja>Klik hier om opnieuw te kiezen.</a>
            <%
        end if
        ' Als er een categorie en een info is geselecteerd, de resultaten neerzetten met een AGAIN-linkje erbij.
        %>
        <hr>Klik <a href = "http://demo.beco.nl/martin/catselect/catselect.zip">hier</a> om het script te downloaden. (catselect.zip, 19kB)
    </body>
</html>

<%
' Databaseverbinding opruimen
Conn.Close
Set Conn = nothing
Set rs = nothing
%>


Ik zie dat er nog een bugje inzit: als je een categorie selecteert en een "info", en dan een andere categorie, krijg je niet de nieuwe "info's" te zien. Dit maakt voor het principe niets uit. (ALS info bestaat EN postbackcat bestaat DAN info = "")

[ Voor 29% gewijzigd door CmdrKeen op 02-01-2003 12:59 . Reden: Bugmelding. ]

Bloed, zweet & koffie


Verwijderd

ben toch benieuwd wat voor monitor ts heeft :D

maar ik vraag me af wanneer je de schrijver selecteert, maar als je neit al te veel serveracties er tussen wil hebben moet je dus gaan werken met arrays, maar het nadeel is dat je pagina dan erg groot wordt.... je zult dus wel af en toe naar de server moeten posten om de inhoud vh volgende box te downen

  • CmdrKeen
  • Registratie: Augustus 2000
  • Laatst online: 27-05 21:11

CmdrKeen

Krentenboltosti

Valt wel mee denk ik hoor.. het enige dat je t.a.t. moet weten is de naam van de parents (de bovenliggende categorieën) en de lijst met alle onderliggende mogelijkheden - dus het pad + de listing zeg maar.
Dat is toch wel te doen?

Bloed, zweet & koffie


  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 11:06
Je kunt, als je niet wilt dat de pagina steeds opnieuw geladen wordt, een hele vieze manier gebruiken, in een onzichtbaar frame steeds de data ophalen.
Pagina: 1