Avatar billede ndh Nybegynder
22. juli 2004 - 09:50 Der er 12 kommentarer og
1 løsning

Hente værdi fra db ind i dropdown-boks

Jeg har lavet en formular, hvor jeg henter værdier fra en db ind i en række felter, hvorefter værdierne kan redigeres, og derefter sendes ind i db´en igen i redigeret form. Jeg ønsker nu, at kunne hente en værdi ind fra db´en ind i dropdown-boks. Jeg kender på forhånd hvilke værdier denne variabel kan have. Derfor ønsker jeg på forhånd at kunne definere hvilke værdier, dropdown-boksen skal indeholde. Det jeg gerne vil have er, at den værdi i db´en som en post har, automatisk bliver valgt som selected værdi i dropdown-boksen, men at brugeren af formularen herefter selv kan ændre denne ved at vælge en anden værdi i dropdown-boksen.

Min kode ser således ud.
<%
intID = Request.Querystring("id")
strSelectSkemaSQL = "SELECT * FROM fototabel WHERE id = " & intID & ""
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath ("foto.mdb")
Set objSkemaRS = Conn.Execute(strSelectSkemaSQL)
%>
Normalt henter jeg data ind i et tekst-felt således:
<input maxlength=30 size=25 name=status value="<%=objSkemaRS("status")%>">
Avatar billede keysersoze Guru
22. juli 2004 - 09:59 #1
fx;

<%
SQL = "SELECT * FROM destination ORDER BY name"
Set DESTSELECT = DBConn.Execute(SQL)
<select name="destination_id">
  <option value=""> - select - </option>
  <%
  Do While not DESTSELECT.eof
  %>
  <option value="<%=DESTSELECT("id")%>"<%If DESTSELECT("id") = rs("dest_id") Then%> selected="selected"<%End If%>><%=DESTSELECT("name")%></option>
  <%
  DESTSELECT.movenext
  Loop
  %>
</select>
Avatar billede ndh Nybegynder
22. juli 2004 - 10:35 #2
keysersoze
hvorfor er der behov for at gå ind og ændre min select *? Jeg har jo flere værdier fra db´en jeg trækker i en lang række andre felter, hvor der ikke er nogen problemer med den pågældende kode.
Avatar billede ndh Nybegynder
22. juli 2004 - 10:44 #3
Kunne man lave en include og derefter lægge dit forslag til kode ind i en anden asp
Avatar billede keysersoze Guru
22. juli 2004 - 11:11 #4
hvis alle værdierne der skal ligge i dropdown-boksen alligevel ligger i databasen er der ingen grund til at skrive det manuelt så kan man lige så godt loope det igennem fra databasen - det skal også kun ses som et forslag hvordan man kunne gøre.

Du kan sagtens opbygge det på en anden måde end mit forslag :)

option-boksen skal i mit eksempel nok også se sådan ud i stedet;

<option value="<%=DESTSELECT("id")%>"<%If cint(DESTSELECT("id")) = cint(Request.Querystring("id")) Then%> selected="selected"<%End If%>><%=DESTSELECT("name")%></option>
Avatar billede ndh Nybegynder
23. juli 2004 - 08:40 #5
Jeg vil meget gerne bygge videre på min eksisterende kode. Har viderebearbejdet min kode således:
<%
intID = Request.Querystring("id")
intID2 = Request.Querystring("id2")
strSelectSkemaSQL = "SELECT * FROM tabel WHERE id = " & intID & ""
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath ("tabel.mdb")
Set objSkemaRS = Conn.Execute(strSelectSkemaSQL)

%>

<%

If intID2 = "mulighed1" then
Response.Write "<select name=maerke size=1>"
Response.Write "<option value=" & "inst1" & ">" & "inst1" & "</option>"
Response.Write "<option selected=" & "inst2" & ">" & "inst2" & "</option>"
Response.Write "<option value=" & "inst3" & ">" & "inst3" & "</option>"
Response.Write "<option value=" & "inst4" & ">" & "inst4" & "</option></select>"
end if

If intID2 = "mulighed2" then
Response.Write "<select name=maerke size=1>"
Response.Write "<option selected=" & "inst1" & ">" & "inst1" & "</option>"
Response.Write "<option value=" & "inst2" & ">" & "inst2" & "</option>"
Response.Write "<option value=" & "inst3" & ">" & "inst3" & "</option>"
Response.Write "<option value=" & "inst4" & ">" & "inst4" & "</option></select>"
end if
%>

Ovenstående kode virker kun, hvis intID2 = mulighed1, hvis intID2 = mulighed2 vises dropdownboksen overhovedet ikke. Hvad er galt?
Avatar billede keysersoze Guru
23. juli 2004 - 10:05 #6
det skal jeg ikke lige kunne sige - men ovenstående stykke kode virker (undskyld udtrykket) som om du har galt i den forkert ende af ASP. Det er en komplet uheldig måde at opbygge ASP på... forestil dig et arbejde du skulle igennem hvis du havde en dropdownboks med 50 forskellige values der alle skulle kunne være selected ud fra en querystring?

hvor i ovenstående for du inst1, inst2, inst3 og inst4 fra?
Avatar billede ndh Nybegynder
23. juli 2004 - 10:12 #7
Hvordan skal min kode så se ud, hvis jeg ud over comboboksen også skal trække data ind i alm. tekst-felter, hvor de skal kunne redigeres og herefter sendes tilbage i db´en?
I dag trækker jeg mine andre variable ind således:

<INPUT maxLength=20 name=fornavn value="<%=objSkemaRS("fornavn")%>">
<INPUT maxLength=25 size=25 name=efternavn value="<%=objSkemaRS("efternavn")%>">
Avatar billede keysersoze Guru
23. juli 2004 - 10:33 #8
jeg tror ikke jeg er 100% med på hvad du mener - om du skal hive data ud og lægge i en dropdown, i et tekstfelt eller begge ting på en gang så gør du præcis det samme?
Avatar billede ndh Nybegynder
23. juli 2004 - 10:47 #9
Sagen er den at jeg har et spørgeskema som skal kunne redigeres. Når brugeren har svaret på spørgeskemaet, som bl.a. indeholder flere dropdown-bokse, skal denne bruger igen kunne redigere sit svar. I den forbindelse ønsker jeg, at dataene hentes ind i en ny form, hvor de kan redigeres. I denne form ønsker jeg, at i de felter hvor jeg ved der ikke findes mere end 2-5 svarmuligheder, placeres disse kendte værdier i en dropdownboks, hvor netop brugerens svar er selected. Udover dropdown-boksene har endvidere flere tekstfelter i formen som skal udfyldes, men det fungerer allerede uden problemer i dag!
Avatar billede keysersoze Guru
23. juli 2004 - 11:14 #10
uanset om der er 2, 5 eller 100 valgmuligheder er arbejdet det samme...

fx;

<select name="maerke" size="1">
    <option value="1"<%If objSkemaRS("maerke") = "1" Then%> selected="selected"<%End If%>>Fisk</option>
    <option value="2"<%If objSkemaRS("maerke") = "2" Then%> selected="selected"<%End If%>>Bønner</option>
    <option value="3"<%If objSkemaRS("maerke") = "3" Then%> selected="selected"<%End If%>>Burritos</option>
    <option value="4"<%If objSkemaRS("maerke") = "4" Then%> selected="selected"<%End If%>>Pandekager</option></select>
</select>

Samtidig skal du også passe på at overholde standarderne - fx tror jeg ikke selected=" & "inst1" & " giver mening for alle browsere.
Avatar billede ndh Nybegynder
23. juli 2004 - 11:39 #11
Kanon det virker. Send et svar Keysersoze
Avatar billede keysersoze Guru
23. juli 2004 - 12:00 #12
svar
Avatar billede keysersoze Guru
23. juli 2004 - 12:00 #13
doh!
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