webForumDet fria alternativet

Dynamiska <select> med databaskoppling

ASP

21 svar · 683 visningar · startad av Seiza

Medlem sedan dec. 200313 inlägg
Frågan#1

Hej, som ganska ny inom ASP skulle jag behöva lite hjälp.

Jag försöker skapa två dropdown boxar där valet i den ena styr innehållet i den andra. I box nummer ett läses ett antal värden in från en databas. Om ett värde väljs ska, från samma databas, box nummer två fyllas med värden som är relaterade till box ett. Låter det krångligt? Jag tycker iaf det, men jag måste lösa det på något sätt.

Uppskattar all hjälp jag kan få.

Medlem sedan sep. 20011 722 inlägg
#2

Du får ge varje värde som ska visas i box två någonting att relatera till det värde som finns i box ett. Lämpligt är det nummer du har anget som räknare. Exempelvis skulle du kunna bygga din databas såhär:

BoxID - Typ räknare
BoxUnderID - Typ nummer
BoxNamn - Typ Text

Sen låter du innehållet i BoxUnderID vara 0 för de som ska hämtas till förstaboxen. Exepel på SQL:

SELECT BoxID, BoxNamn FROM Box WHERE BoxUnderID = 0

Sedan när det är dags att hämta innehållet till box två tar du med dig BoxID från box nummer ett så du vet vilken kategori du ska hämta ifrån. Exepel på SQL:

SELECT BoxID, BoxNamn FROM Box WHERE BoxUnderID = " & BoxID från box ett & "
Medlem sedan dec. 200313 inlägg
#3

Precis så som jag gjort från början men det har inte fungerat tyvärr. Min kod än så länge ser ut som följer:

<td>
<%SET rsf = anslutU.Execute("SELECT katID, katnamn FROM Kategori WHERE förälder=0 ORDER BY katnamn asc")%>
Huvudrubrik<br>
<select name="kat">
 <% while not(rsf.EOF) %> 
<option value="<%=rsf("katid")%>"><%=rsf("katnamn")%>
<% rsf.movenext
wend
rsf.Close()
%>
</select>
</td>
<td>
<%
if request.form("kat") <> "" then
SET rsb = anslutU.Execute("SELECT katID, katnamn FROM Kategori WHERE förälder='"&request.form("kat")&"' ORDER BY katnamn asc")
end if
%>
Underrubrik<br>
<select name="kat2">
<% while not(rsb.EOF) %> 
<option value="<%=rsb("katID")%>"><%=rsb("katnamn")%>
<% rsb.movenext
wend
rsb.Close()
%>
</select>
</td>
Medlem sedan juli 2001203 inlägg
#4

Detta kanske:

<select name="kat" onchange="submit();">
Medlem sedan nov. 20017 144 inlägg
#5

1. Välkommen till WF!
2. Vad är det som inte funkar?
3. Felmeddelande?
4. Svenska tecken i sql-satsen/databasen är inte att rekommendera.

/r höll på att glömma.

Medlem sedan dec. 200313 inlägg
#6

1. Tack! :)
2. Jag får saker listade i box ett men inte i box 2.
3. Just nu är det Object required: på line 30 som är:

<% while not(rsb.EOF) %>

4. Jo jag har förstått det, får ta och ändra det.

Medlem sedan juni 200032 967 inlägg
#7

Objektet rsb skapar du ju inne i en if-sats. Dvs, uppfylls inte if-satsen (om request.form("kat") är tom alltså), finns inte objektet, och då kan du inte heller kontrollera någon av dess egenskaper.

Vad vill du ska finnas i den andra selectboxen från början?

(vi börjar där så länge :) )

Mvh

Medlem sedan dec. 200313 inlägg
#8

Där behöver inte finnas något, skulle eventuellt kunna lägga in en text bara som säger att man måste välja ett värde i box ett först.

Medlem sedan nov. 20017 144 inlägg
#9

1. Testa @nders förslag. Han är kung
2. I den första sql-satsen så skriver du: förälder=0.
Är kolumen förälder typen "tal", så kan du kanske testa med att ändra: förälder='"&request.form("kat")&"'
till: förälder="& cInt(request.form("kat")) &"
Alltså utan enkelfnuttar.

/r LarsG är kung, @nders är drottning... :e

Medlem sedan juni 200032 967 inlägg
#10

Okej, då gör vi så här till att börja med:

<td>
Underrubrik<br>
<select name="kat2">
<%
if request.form("kat") <> "" then
SET rsb = anslutU.Execute("SELECT katID, katnamn FROM Kategori WHERE förälder='"&request.form("kat")&"' ORDER BY katnamn asc")
%>
<% while not(rsb.EOF) %> 
<option value="<%=rsb("katID")%>"><%=rsb("katnamn")%>
<% rsb.movenext
wend
rsb.Close()
else
    Response.write "<option>Du måste välja något i den första!</option>"
end if
%>
</select>
</td>

Du saknar också lite <form>-taggar och dylikt utanför dina <select>-boxar, men du kanske bara har klippt bort dem här? De taggarna måste finnas med för att du ska kunna posta iväg värdena.

Mvh

Medlem sedan dec. 200313 inlägg
#11

Det funkar ju bra, men nu ska det bara hända något i den andra när jag trycker på ett värde i den första.

Medlem sedan juni 200032 967 inlägg
#12

Jepp, och det är där du behöver form-taggarna. ;)

<form method="post">
<select name="kat" onchange="document.forms[0].submit();">
<option></option>
'
'
'
'
</select>
</form>
Medlem sedan dec. 200313 inlägg
#13

Ett litet bekymmer där bara, gör jag som du skrev där laddar den ett annat formulär jag inkluderar i ett tidigare skede. Kan jag ange vilket formulär det handlar om?

Medlem sedan feb. 200112 078 inlägg
#14

Seiza skrev:

Ett litet bekymmer där bara, gör jag som du skrev där laddar den ett annat formulär jag inkluderar i ett tidigare skede. Kan jag ange vilket formulär det handlar om?

Ja.

<form method="post">
<select name="kat" onchange="document.[b]DittFormNamn[/b].submit();">
<option></option>
'
'
'
'
</select>
</form>

eller

<form method="post">
<select name="kat" onchange="document.Forms[[b]1[/b]].submit();">
<option></option>
'
'
'
'
</select>
</form>

där 1 är numret på ditt formulär. Arrayen börjar väl på noll, antar jag.

Medlem sedan juni 200032 967 inlägg
#15

Aha, jag trodde det var all kod på sidan.

Det du gör är att du postar ett formulär. Det innebär att sidan laddas om.

Och ja, du anger själv vilket formulär som postas, men när du postas ett formulär laddas allt på sidan om, inte bara det formulär du postar.

Du anger vilket formulär som ska postas antingen genom att ange dess index (0 om det är det första, 1 om det är det andra, osv) när du postar formuläret.

<select name="kat" onchange="document.forms[0].submit();">

Annars kan du ge formulären namn och referera till det istället.

<form method="post" name="myForm">
<select name="kat" onchange="document.myForm.submit();">

Mvh

Medlem sedan dec. 200313 inlägg
#16

Ja just det, nu verkar det nära. :)

Sidan laddas om men ingen förändring sker i den andra boxen. Verkar som den hela tiden kör else-satsen istället.

Medlem sedan juni 200032 967 inlägg
#17

Hur ser din kod ut nu?

Medlem sedan dec. 200313 inlägg
#18
		<td>
			<%
			SET rsf = anslutU.Execute("SELECT katID, katnamn FROM Kategori WHERE förälder=0 ORDER BY katnamn asc")
			%>
			<form name="katform">
			Huvudrubrik<br>
			<select name="kat" onchange="document.katform.submit();">
			 <% while not(rsf.EOF) %> 
			 <option value="<%=rsf("katid")%>"><%=rsf("katnamn")%>
			 <% rsf.movenext
			 wend
			 rsf.Close()
			 %>
			</select>
		</td>
		<td>
			Underrubrik<br>
			<select name="kat2">
			<%
			if request.form("kat") <> "" then
			SET rsb = anslutU.Execute("SELECT katID, katnamn FROM Kategori WHERE förälder="& cInt(request.form("kat")) &" ORDER BY katnamn asc")
			%>
			<% while not(rsb.EOF) %> 
			<option value="<%=rsb("katID")%>"><%=rsb("katnamn")%>
			<% rsb.movenext
			wend
			rsb.Close()
			else
				Response.write "<option>Du måste välja något i den första!</option>"
			end if
			%>
			</select>
			</form>
		</td>
Medlem sedan dec. 200313 inlägg
#19

Men nu kurrar magen så jag tror bestämt jag får ta mig lite lunch och fortsätta att slita mig i håret om en stund.

Tack för all hjälp hittills iaf, jag återkommer. Lita på det. :e

Medlem sedan juni 200032 967 inlägg
#20

Du måste ha med method="post" i <form>-taggen som i mitt exempel, om du ska använda request.form. Annars är det request.querystring som gäller, eftersom defaultmetod för formulär är get.

Mvh

282 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
132 ms — deklarationer (db)
0 ms — hämta statistik (cache)
147 ms — hämta tråd, inlägg och bilagor (db)
132 ms — ändringar (db)