Avatar billede kaage Nybegynder
15. juli 2004 - 13:53 Der er 19 kommentarer og
1 løsning

Update af option form/dropdown

Jeg har en database med 2 tabeller. En med data og en med personer.

Tabellen med personer bruges som en dropdown list og skriver navnet man har valgt fint ned i db'en. Som vist herunder:

<select name="ID_salesperson">

    <%
    Set cnnID = Server.CreateObject("ADODB.Connection")
    cnnID.Open Application("DSN_dealer")

sql="SELECT * FROM Salesperson ORDER BY Name"
Set rs=cnnID.execute(sql)

    Do While Not rs.eof
      Response.Write("<option value=""" & rs("name") & """>" & _
                      rs("name") & "</option>")
      rs.movenext
    Loop

    cnnID.close
    Set cnnID=Nothing
    Set rs=Nothing
    %>
</select>

Mit problem bliver herefter, at jeg skal kunne rettet denne - men at den skal angive, når man går ind i edit.asp?id=xxxx - HVEM der var ID_Salesperson?? altså finde den person i listen og markere ham som "selected".

Det kan jeg bare ikke få til at virke.. Kan i hjælpe?
Avatar billede fennec Nybegynder
15. juli 2004 - 15:50 #1
Do While Not rs.eof
      if request.querystring("id") = rs("name") then
        Response.Write("<option value=""" & rs("name") & """ selected>" & _
                      rs("name") & "</option>")
      else
        Response.Write("<option value=""" & rs("name") & """>" & _
                        rs("name") & "</option>")
      end if
      rs.movenext
    Loop
Avatar billede kaage Nybegynder
15. juli 2004 - 16:16 #2
Nu har jeg lavet det sådan her, men den taget stadig og returnere den første i tabellen..

<select name="ID_salesperson">

    <%


StrSQL = "SELECT * FROM Salesperson ORDER BY Name"
Set rs = cnnID.Execute(strSQL)
Do While Not rs.eof
      if request.querystring("id") = rs("name") then
        Response.Write("<option value=""" & rs("name") & """ selected>" & _
                      rs("name") & "</option>")
      else
        Response.Write("<option value=""" & rs("name") & """>" & _
                        rs("name") & "</option>")
      end if
      rs.movenext
    Loop

  cnnID.close
  Set rs=Nothing
    %>

</select>
Avatar billede fennec Nybegynder
15. juli 2004 - 17:09 #3
hvad indeholder request.querystring("id")???
Avatar billede kaage Nybegynder
16. juli 2004 - 08:36 #4
159 = ID - hermed hele edit.asp filen:


<!-- #include virtual="/sm/page_begin.asp" -->

<%
    'Create DB connection
    Set cnnID = Server.CreateObject("ADODB.Connection")
    cnnID.Open Application("DSN_dealer")


    strSQL = "SELECT * FROM data Where ID =" & Request.Querystring("ID")
    Set rs = cnnID.Execute(strSQL)
%>

<form method="post" name="forhandlere" action="update.asp?id=<%=Request.Querystring("id")%>">
   
<table bgcolor='#B0C4DE' class='form' Width='400' cellspacing=4 cellpadding=4 border=1 style='border-collapse: collapse' bordercolor='#FFFFFF'><tr><TD colspan='2'>Information om:</td></tr>

<tr><TD valign="top">Firma navn:&nbsp;</td><td><input type="text" name="FirmaNavn" size="50" class='input' value='<%=rs("FirmaNavn")%>'></text></td></tr>
<tr><TD valign="top">Kontaktperson:&nbsp;</td><td><input type="text" name="Contact" size="50" class='input' value='<%=rs("Contact")%>'></text></td></tr>
<tr><TD valign="top">Adresse:&nbsp;</td><td><input type="text" name="Adresse" size="50" class='input' value='<%=rs("Adresse")%>'></text></td></tr>
<tr><TD valign="top">Postnr.:&nbsp;</td><td><input type="text" maxlength="4" name="Postnr" size="5" class='input' value='<%=rs("Postnr")%>'></text></td></tr>
<tr><TD valign="top">By:&nbsp;</td><td><input type="text" name="City" size="50" class='input' value='<%=rs("City")%>'></text></td></tr>
<tr><TD valign="top">Telefon:&nbsp;</td><td><input type="text" name="Tel" size="10" class='input' value='<%=rs("Tel")%>'></text></td></tr>
<tr><TD valign="top">E-mail:&nbsp;</td><td><input type="text" name="Email" size="40" class='input' value='<%=rs("Email")%>'></text></td></tr>
<tr><TD valign="top">WWW:&nbsp;</td><td><input type="text" name="WWW" size="40" class='input' value='<%=rs("WWW")%>'></text></td></tr>
<tr><TD valign="top">ID Sælger:&nbsp;</td><td>

<select name="ID_salesperson">
    <%
StrSQL = "SELECT * FROM Salesperson ORDER BY Name"
Set rs = cnnID.Execute(strSQL)

Do While Not rs.eof
      if request.querystring("id") = rs("name") then
        Response.Write("<option value=""" & rs("name") & """ selected>" & _
                      rs("name") & "</option>")
      else
        Response.Write("<option value=""" & rs("name") & """>" & _
                        rs("name") & "</option>")
      end if
      rs.movenext
    Loop

  cnnID.close
  Set rs=Nothing
    %>

</select>


</td></tr>

<tr><TD valign='top'></td><td>
<input type="Submit" value="R E T" class="input" name"Upd">
</td></tr>
</table>

<input type=text name=ID value="<%=Request.QueryString("id") %>">
</form>

<!-- #include virtual="/sm/page_end.asp" -->
Avatar billede fennec Nybegynder
16. juli 2004 - 10:34 #5
hvis id er et tal, er det jo klart at det ikke virker :o)

if request.querystring("id") = rs("name") then
skal være:
if cstr(request.querystring("id")) = cstr(rs("id")) then
Avatar billede kaage Nybegynder
19. juli 2004 - 09:15 #6
Nu ser det således ud:

<select name="ID_salesperson">
    <%
StrSQL = "SELECT * FROM salesperson"
Set rs = cnnID.Execute(strSQL)

Do While Not rs.eof
    if cstr(request.querystring("id")) = cstr(rs("id")) then
        Response.Write("<option value=""" & rs("name") & """ selected>" & _
                      rs("name") & "</option>")
      else
        Response.Write("<option value=""" & rs("name") & """>" & _
                        rs("name") & "</option>")
      end if
      rs.movenext
    Loop

  cnnID.close
  Set rs=Nothing
    %>
</select>

Men den returnerer stadig den første i tabellen salesperson. What to do? :o)
Avatar billede fennec Nybegynder
19. juli 2004 - 10:05 #7
Prøv lige at skrive id'erne ud.
response.write cstr(request.querystring("id")) &"="& cstr(rs("id"))

Du skal måske ind og se kildekoden i browseren, for at se udskrivningen, da den sker i et <select> element.
Avatar billede kaage Nybegynder
19. juli 2004 - 10:13 #8
Det er evt. forkert bygget op, her er min new.asp fil som sender et tal ned i tabellen data.

sql="SELECT * FROM Salesperson ORDER BY Name"
Set rs=cnnID.execute(sql)

    Do While Not rs.eof
      Response.Write("<option value=""" & rs("id") & """>" & _
                      rs("name") & "</option>")
      rs.movenext
    Loop

    cnnID.close
    Set cnnID=Nothing
    Set rs=Nothing
    %>
</select>


Når jeg så skal finde værdien af denne bruges denne:

<select name="ID_salesperson">
    <%

StrSQL = "SELECT * FROM salesperson"
Set rs = cnnID.Execute(strSQL)


Do While Not rs.eof
    if cstr(request.querystring("id")) = cstr(rs("id")) then
        Response.Write("<option value=""" & rs("name") & """ selected>" & _
                      rs("name") & "</option>")
      else
        Response.Write("<option value=""" & rs("name") & """>" & _
                        rs("name") & "</option>")
      end if
      rs.movenext
    Loop

   

  cnnID.close
  Set rs=Nothing
    %>

Jeg tror problemet ligger i min Sql sætning, for der kommer intet ud når jeg forsøger at skrive din: response.write cstr(request.querystring("id")) &"="& cstr(rs("id"))  - men jeg kan ikke helt overskue det..
Avatar billede fennec Nybegynder
19. juli 2004 - 10:47 #9
Den eneste "fejl" jeg kan se, er at value=""" rs("name") måske skulle værevalue=""" rs("id") i den sidste.

Du skal kunne tjekke de 2 id'er. Prøv lige med denne:

<select name="ID_salesperson">
    <%
StrSQL = "SELECT * FROM salesperson"
Set rs = cnnID.Execute(strSQL)
Do While Not rs.eof
    response.write cstr(request.querystring("id")) &"="& cstr(rs("id"))
    if cstr(request.querystring("id")) = cstr(rs("id")) then
...
...

Så skulle der gerne stå noget, men du skal tjekke kildekoden i browseren (højerklik >> vis kildekode). Det kommer nemlig ikke ud på skærmen, da det er i et <select> element. Du kan måske se nogle af dem i dropdown boxen.
Avatar billede kaage Nybegynder
19. juli 2004 - 10:52 #10
Så kommer det til at se således ud?

<select name="ID_salesperson">
    162=194<option value="Klaus Andersen">Klaus Andersen</option>162=316<option value="Karsten Knudsen">Karsten Knudsen</option>
</select>
Avatar billede fennec Nybegynder
19. juli 2004 - 11:02 #11
så er det jo problemet.
162=194
162=316

der er ingen personer med id 162. Hvis du prøvede med 316 eller 194 i stedet, vil det virke. Hvor kommer request.querystring("id") værdien fra. Det er der problemet ligger, da den er forkert.
Avatar billede kaage Nybegynder
19. juli 2004 - 11:06 #12
Den kommer jo nok helt oppe fra toppen - altså :

    strSQL = "SELECT * FROM data Where ID =" & Request.Querystring("ID")
    Set rs = cnnID.Execute(strSQL)

Men skal jeg så indsætte endnu en request.Querystring??? Hele min fil ser nu således ud:


<!-- #include virtual="/sm/page_begin.asp" -->

<%
    'Create DB connection
    Set cnnID = Server.CreateObject("ADODB.Connection")
    cnnID.Open Application("DSN_dealer")


    strSQL = "SELECT * FROM data Where ID =" & Request.Querystring("ID")
    Set rs = cnnID.Execute(strSQL)
%>

<form method="post" name="forhandlere" action="update.asp?id=<%=Request.Querystring("id")%>">
   
<table bgcolor='#B0C4DE' class='form' Width='400' cellspacing=4 cellpadding=4 border=1 style='border-collapse: collapse' bordercolor='#FFFFFF'><tr><TD colspan='2'>Information om:</td></tr>

<tr><TD valign="top">Firma navn:&nbsp;</td><td><input type="text" name="FirmaNavn" size="50" class='input' value='<%=rs("FirmaNavn")%>'></text></td></tr>
<tr><TD valign="top">Kontaktperson:&nbsp;</td><td><input type="text" name="Contact" size="50" class='input' value='<%=rs("Contact")%>'></text></td></tr>
<tr><TD valign="top">Adresse:&nbsp;</td><td><input type="text" name="Adresse" size="50" class='input' value='<%=rs("Adresse")%>'></text></td></tr>
<tr><TD valign="top">Postnr.:&nbsp;</td><td><input type="text" maxlength="4" name="Postnr" size="5" class='input' value='<%=rs("Postnr")%>'></text></td></tr>
<tr><TD valign="top">By:&nbsp;</td><td><input type="text" name="City" size="50" class='input' value='<%=rs("City")%>'></text></td></tr>
<tr><TD valign="top">Telefon:&nbsp;</td><td><input type="text" name="Tel" size="10" class='input' value='<%=rs("Tel")%>'></text></td></tr>
<tr><TD valign="top">E-mail:&nbsp;</td><td><input type="text" name="Email" size="40" class='input' value='<%=rs("Email")%>'></text></td></tr>
<tr><TD valign="top">WWW:&nbsp;</td><td><input type="text" name="WWW" size="40" class='input' value='<%=rs("WWW")%>'></text></td></tr>
<tr><TD valign="top">ID Sælger:&nbsp;</td><td>

<select name="ID_salesperson">
    <%

StrSQL = "SELECT * FROM salesperson"
Set rs = cnnID.Execute(strSQL)

Do While Not rs.eof
    response.write cstr(request.querystring("id")) &"="& cstr(rs("id"))
    if cstr(request.querystring("id")) = cstr(rs("id")) then

'Do While Not rs.eof
'    if cstr(request.querystring("id")) = cstr(rs("id")) then
        Response.Write("<option value=""" & rs("id") & """ selected>" & _
                      rs("name") & "</option>")
      else
        Response.Write("<option value=""" & rs("name") & """>" & _
                        rs("name") & "</option>")
      end if
      rs.movenext
    Loop

   

  cnnID.close
  Set rs=Nothing
    %>

</select>

</td></tr>

<tr><TD valign='top'></td><td>
<input type="Submit" value="R E T" class="input" name"Upd">
</td></tr>
</table>

<input type=hidden name=ID value="<%=Request.QueryString("id") %>">
</form>

<!-- #include virtual="/sm/page_end.asp" -->
Avatar billede fennec Nybegynder
19. juli 2004 - 11:20 #13
så er jeg mere med :o)
Du skal bruge 2 resultset's. En med bruger oplysninger (rs) og en med salspersoner (rsSale)

<select name="ID_salesperson">
    <%
StrSQL = "SELECT * FROM salesperson"
Set rsSale = cnnID.Execute(strSQL)

Do While Not rsSale.eof
    if cstr(rsSale("id")) = cstr(rs("SalsPersonId")) then
        Response.Write("<option value=""" & rsSale("id") & """ selected>" & _
                      rsSale("name") & "</option>")
      else
        Response.Write("<option value=""" & rsSale("name") & """>" & _
                        rsSale("name") & "</option>")
      end if
      rsSale.movenext
    Loop
  cnnID.close
  Set rsSale=Nothing
  Set rs=Nothing
    %>
</select>
Avatar billede kaage Nybegynder
19. juli 2004 - 11:51 #14
ØV ØV, det virker stadig ikke.. Er ked af at jeg er sådan en spasser til det her.. Du kender ikke et godt sted hvor jeg kan læse noget mere og dette?? Eller eksempler på dette.

Nu får den kun værdien på hele siden, altså : edit.asp?id=162 - der ser således ud:

<select name="ID_salesperson">
    <%
StrSQL = "SELECT * FROM salesperson"
Set rsSale = cnnID.Execute(strSQL)

Do While Not rsSale.eof
    if cstr(rsSale("id")) = cstr(rs("Id")) then
        Response.Write("<option value=""" & rsSale("id") & """ selected>" & _
                      rsSale("name") & "</option>")
      else
        Response.Write("<option value=""" & rsSale("name") & """>" & _
                        rsSale("name") & "</option>")
      end if
      rsSale.movenext
    Loop
  cnnID.close
  Set rsSale=Nothing
  Set rs=Nothing
    %>
</select>
Avatar billede fennec Nybegynder
19. juli 2004 - 12:48 #15
Nu skal jeg lige have opklaret nogle ting.

Du har en data tabel. Den går jeg udfra indeholder oplysninger om en bruger.
Du har en salesperson tabel. Den går jeg ud fra indeholder en liste af salgs-personer.
Jeg går også ud fra at en salgs-person er tilknyttet en bruger. Altså er der en kolonne i data tabellen som indeholder et id, som henviser til salgs-person.

Er alt dette korrekt???

Hvis det er, er det nemlig salgs-persons id'erne, der skal bruges i sammenligningen. Og ikke salgs-persons id'et og bruger id'et.

if cstr(rsSale("id")) = cstr(rs("salgs-persons id'et")) then
Avatar billede kaage Nybegynder
19. juli 2004 - 13:13 #16
Du har fuldstændig ret i det hele. Er det nemmere at du kan downloade .mdb filen og asp filerne - hvis det er, så kan du hente dem her: www.kaage.dk/files/db.mdb - www.kaage.dk/files/new.asp - www.kaage.dk/files/edit.asp

Hvis du ønsker flere points så sig til, for det her VIL jeg bare fatte og lærer hvordan fungerer.. :o)
Avatar billede fennec Nybegynder
19. juli 2004 - 13:29 #17
Dette burde virke:

<select name="ID_salesperson">
    <%
StrSQL = "SELECT * FROM salesperson"
Set rsSale = cnnID.Execute(strSQL)

Do While Not rsSale.eof
    if cstr(rsSale("id")) = cstr(rs("ID_salesperson")) then
        Response.Write("<option value=""" & rsSale("id") & """ selected>" & _
                      rsSale("name") & "</option>")
      else
        Response.Write("<option value=""" & rsSale("name") & """>" & _
                        rsSale("name") & "</option>")
      end if
      rsSale.movenext
    Loop
  cnnID.close
  Set rsSale=Nothing
  Set rs=Nothing
    %>
</select>

Som jeg også sagde tidligere, handler det om at have 2 resultset's (tabeller med data fra databasen). En med bruger data fra data tabellen (den vi kalder rs) og en med alle salgspersonerne (den vi kalder rsSale)
Avatar billede kaage Nybegynder
19. juli 2004 - 13:33 #18
HALLLLELUJA!!! Det virker, dog med en lille modifikation, så den sender id over i stedet:

<select name="ID_salesperson">
    <%
StrSQL = "SELECT * FROM salesperson"
Set rsSale = cnnID.Execute(strSQL)

Do While Not rsSale.eof
    if cstr(rsSale("id")) = cstr(rs("ID_salesperson")) then
        Response.Write("<option value=""" & rsSale("id") & """ selected>" & _
                      rsSale("name") & "</option>")
      else
        Response.Write("<option value=""" & rsSale("id") & """>" & _
                        rsSale("name") & "</option>")
      end if
      rsSale.movenext
    Loop
  cnnID.close
  Set rsSale=Nothing
  Set rs=Nothing
    %>
</select>

Men tusind tak - det er jeg sindsygt glad for at ha' løst, nu skal jeg bare videre.. MANGE MANGE TAK ;o)
Avatar billede fennec Nybegynder
19. juli 2004 - 13:45 #19
no prob. Kun glad for at det kom til at virke.
.o) <-- One Eyed Jack
Avatar billede kaage Nybegynder
20. juli 2004 - 14:27 #20
Hey fennec, har lige et lille tillægsspørgsmål - hvad nu hvis jeg har en multiple choice box, her kan jeg godt hive en værdi ud, men ikke flere...

<select name="area1" multiple="multiple">

    <%
    Set cnnID = Server.CreateObject("ADODB.Connection")
    cnnID.Open Application("DSN_dealer")

sql="SELECT * FROM Area1 ORDER BY Name"
Set rsArea1=cnnID.execute(sql)

Do While Not rsArea1.eof
    if cstr(rsArea1("id")) = cstr(rs("Area1")) then
        Response.Write("<option value=""" & rsArea1("id") & """ selected>" & _
                      rsArea1("name") & "</option>")
            else
        Response.Write("<option value=""" & rsArea1("id") & """>" & _
                        rsArea1("name") & "</option>")
      end if
      rsArea1.movenext
    Loop

    Set rsArea1=Nothing
    %>
</select>
</td><td valign="bottom">
<script language="JavaScript">
function selectAll(sel,tf) {
      for (i=0;i<sel.length;i++) {
          sel.options[i].selected = tf;
      }
}
</script>
<input type="button" class="input" value=" Vælg alle til" onclick="selectAll(this.form.area1,true);" /><br><br>
<input type="button" class="input" value="Vælg alle fra" onclick="selectAll(this.form.area1,false);" />

Har du et eller andet smart dertil.. Ellers virker det hele som en drøm :o)
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