Avatar billede lord-jonas Nybegynder
27. september 2010 - 18:48 Der er 20 kommentarer og
1 løsning

Select item fra option

Hej.

Jeg har 5 billeder i en mappe som er tilknyttet forskellige varer, når jeg vælger at redigere en varer og vareren har billedet som hedder billede3.png så står den automatisk på billede1.png når man trykker på rediger, selvom jeg har en option der er selected på den fil der nu er tilknyttet vareren.

Nogen der kan se hvad der er galt?

<select style="width:162px;" name="billede" language="javascript" onchange="return dept_onchange(form1)">
<%
Dim objFSO, objFile, objFolder
Set objFSO = Server.CreateObject("Scripting.FileSystemObject")
Set objFolder = objFSO.GetFolder(Server.MapPath("./../../aviva/media/varer/"))
For Each objFile in objFolder.Files

if Request.Form("billede") = objFile.Name then
Response.Write ""
else

Response.Write "<option selected value=""" & objFile.Name & """>"
Response.Write objFile.Name & "</option>"
end if
Next
             
Set objFolder = Nothing

Set objFSO = Nothing
%>
</select>
Avatar billede w13 Novice
28. september 2010 - 19:32 #1
I koden sættes "selected" på hver item. Derfor bliver en tilfældig, fx. den første, altid vist:

Response.Write "<option selected value=""" & objFile.Name & """>"

Du mangler simpelthen koden, der sammenligner feltet med den valgte fra databasen, og sætter "selected", hvis de er ens. Det kunne eksempelvis være:

Response.Write "<option "
If objFile.Name = rs("billede") Then
    Response.Write "selected "
End If
Response.Write "value=""" & objFile.Name & """>"

Men nu ved jeg selvfølgelig ikke, hvad du kalder rs("billede") i din kode eller om det fuldstændig vil stå ligesom objFile.Name. =)
Avatar billede lord-jonas Nybegynder
29. september 2010 - 09:50 #2
Tak for det, det hjalp at gøre sådan:

          if Request.Form("billede") = objFile.Name then
            Response.Write "Fejl"
          else
            Response.Write "<option "
          If objFile.Name = rs("fldBillede") Then
            Response.Write "selected "
          end If
            Response.Write "value=""" & objFile.Name & """>"
            Response.Write objFile.Name & "</option>"
          end if

Jeg har også en anden jeg har prøvet at gøre det samme med men uden held, kan du se logikken i den?

if Request.Form("kategori") = oRs("fldKategori") then
                response.write "Fejl"
              oRs.MoveNext
              'Hvis ikke skal rive eskrive en option med valgmuligederne.
              else
                Response.Write "<option "
              if oRs("fldKategori") = oRs("fldKategori") then
                Response.Write "selected "
              end if
                Response.Write "value=""" & oRs("fldKategori") & """>"
                Response.write oRs("fldKategori") & "</option>"
              oRs.MoveNext
              end if
              loop
Avatar billede w13 Novice
29. september 2010 - 10:04 #3
Tak for point! :)

Prøv at udskrive indholdet af oRs("fldKategori") på skærmen og derefter oRs("fldKategori"). Ser de 100 % ens ud?
Avatar billede lord-jonas Nybegynder
29. september 2010 - 10:26 #4
De er jo ens, så ja?

oRs("fldKategori")
oRs("fldKategori")
Avatar billede lord-jonas Nybegynder
29. september 2010 - 10:50 #5
Jeg ved det er den her det er galt med.
if Request.Form("kategori") = oRs("fldKategori") then

som der i den anden hedder:
If objFile.Name = rs("fldBillede") Then
Avatar billede lord-jonas Nybegynder
29. september 2010 - 10:59 #6
Hvis jeg skriver
Vinduesplante er en af kategorierne:
  if "Vinduesplante" = oRs("fldKategori") then

Så laver den en selected på vinduesplante
og det samme med de andre selvfølgelig..
Avatar billede w13 Novice
29. september 2010 - 11:48 #7
Ah ja, de er ens.

Men hvad er det så, du vil sammenligne oRs("fldKategori") med? :) Det er jo lidt svært for mig at sige, uden at kende hele din kode eller formålet med den.

Hvis det igen er objFile.Name, så skal det jo være:
  If objFile.Name = oRs("fldKategori") Then

Hvis det er Request.Form("kategori"), så skal det jo være:
  If Request.Form("kategori") = oRs("fldKategori") Then
Avatar billede lord-jonas Nybegynder
29. september 2010 - 12:14 #8
Mit felt hedder kategori. og tabellen den henter ud fra hedder fldKategori, hvis jeg skriver:
if Request.Form("kategori") = oRs("fldKategori") then

Så er der altid select på den første kategori.

ObjFile.Name bruger jeg kun til billederne.

Teknisk set så synes jeg jo det burde virke når jeg skriver
if Request.Form("kategori") = oRs("fldKategori") then
Avatar billede w13 Novice
29. september 2010 - 12:29 #9
Det lyder umiddelbart rigtigt nok.

Nu hvor du tester, hvad indeholder Request.Form("kategori") så, hvis du skriver:
Response.Write Request.Form("kategori")
?
Avatar billede lord-jonas Nybegynder
29. september 2010 - 12:42 #10
Okay mystisk, den indholder ingen ting. Så er de jo klart det ikke virker..
Men hvorfor indeholder den ikke noget?

Jeg bruger input types til at trække andre data ud, men lige med billeder og klategori, skal det være en select.
Avatar billede w13 Novice
29. september 2010 - 13:11 #11
Og du er sikker på, at din kategori-select har fået sat name="kategori"?
Avatar billede lord-jonas Nybegynder
29. september 2010 - 13:23 #12
Den ser sådan ud, så ja:         
<select style="width:162px;" name="kategori" language="javascript" onchange="return dept_onchange(form1)">
Avatar billede w13 Novice
29. september 2010 - 13:40 #13
Det ser også umiddelbart korrekt ud. Bortset fra, at language="javascript" ikke hører hjemme dér. Den kan du godt slette.

Jeg ved ikke, om din onchange måske går ind og forpurrer resultatet?
Avatar billede lord-jonas Nybegynder
29. september 2010 - 13:49 #14
Jeg har fjernet language="javascript" og onchange er også fjernet, men det hjælper ikke.
Avatar billede w13 Novice
29. september 2010 - 13:59 #15
Så er der noget andet, der gør det. Sikkert i noget af det kode, du ikke har vist. Hvordan ser dit form-tag ud?
Avatar billede lord-jonas Nybegynder
29. september 2010 - 14:05 #16
Mit formtag ser sådan ud:
  <form name="form1" method="post" action="redigerVarer.asp?action=opdater_sys">
Avatar billede w13 Novice
29. september 2010 - 14:20 #17
Det ser også rigtigt ud. Er du sikker på, at select'en ligger inde i form'en?

Prøv evt. lige at skrive hele koden for din select her. Dvs. inklusiv <option>'erne.
Avatar billede lord-jonas Nybegynder
29. september 2010 - 14:24 #18
Der er lidt meget kode, men her er det hele. som du kan se er den option til billeder der, som virker.

<%
'Tjekker om login er udført. Hvis ikke bliver man viderestillet til loginsiden.
if "" & session("login")="" then response.redirect "http://www.plantcare.dk/aviva"
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
  <head>
    <title>PlantCare</title>
    <link rel="stylesheet" href="scripts/varer.css" type="text/css" media="screen, projection">
  </head>

<body style="background-image:url('images/design/ie_grafik.png'); background-repeat:repeat-x;">
             
  <a href="nyVarer.asp">Opret en ny vare</a>
  <br><br>
 
  <%
    'Databaseforbindelse.
    Set Conn = Server.CreateObject("ADODB.Connection")
    DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; "
    DSN = DSN & "DBQ=" & Server.MapPath ("plantcare.mdb")
    Conn.Open DSN

    'Hvis "action" = "tryk på knappen", så:
    if request("action") = "opdater_sys" then
      Conn.Execute("update tblVarer set fldVarer = '" & Request.Form("varer") & "', fldPris = '" & Request.form("pris") & "', fldKategori = '" & Request.form("kategori") & "', fldBillede = '" & Request.Form("billede") & "', fldTekst = '" & Request.Form("tekst") & "' WHERE fldId = " & Request.Form("id"))
      'Efter at have trykket opret bliver man sendt tilbage, så man igen har mulighederne for at oprette, redigere eller slette.
      Response.Redirect("http://www.plantcare.dk/templates/dropdown/plantcare.asp")
    else
    'Men da knappen ikke er "klikket på", så udskriver den felterne med indhold, så der kan rettes i dem og derefter klikke på opdater.
      Set rs = Conn.Execute("select * from tblVarer where fldId = " & Request.QueryString("id"))
    If Not rs.EOF Then
      Do While Not rs.EOF
  %>

  <form name="form1" method="post" action="redigerVarer.asp?action=opdater_sys">
    <input type="hidden" name="id" value="<%=rs("fldId")%>"><br>
      <table>
        <tr>
          <td style="width:100px;">
            Varer:
          </td>
          <td>
            <input style="width:156px;" type="text" name="varer" value="<%=rs("fldVarer")%>"><br>
          </td>
        </tr>
        <tr>
          <td>
            Beskrivelse:
          </td>
          <td>
            <textarea style="font-family:verdana;font-size:12px;" rows="8" cols="20" type="text" name="tekst" value=""><%=rs("fldTekst")%></textarea>
        </td>
      </tr>
      <tr>
        <td>
          Pris:
        </td>
        <td>
          <input style="width:156px;" type="text" name="pris" value="<%=rs("fldPris")%>"> kr.<br>
        </td>
      </tr>
      <tr>
        <td>
          Billede:
        </td>
        <td>
          <select style="width:162px;" name="billede">
            <%
              'Erklærer variablerne.
              Dim objFSO, objFile, objFolder
             
              'Opretter forbindelse.
              Set objFSO = Server.CreateObject("Scripting.FileSystemObject")
             
              'Fortæller hvilken mappe der skal ledes i.
              Set objFolder = objFSO.GetFolder(Server.MapPath("./../../aviva/media/varer/"))
             
              'For hver fil der er i mappen, skal der udskrives nedstående.
              For Each objFile in objFolder.Files

          'Hvis formen = "" skal den gøre dette:
          if Request.Form("billede") = objFile.Name then
            Response.Write ""
          else
            Response.Write "<option "
          If objFile.Name = rs("fldBillede") Then
            Response.Write "selected "
          end If
            Response.Write "value=""" & objFile.Name & """>"
            Response.Write objFile.Name & "</option>"
          end if
         
              Next
               
              Set objFolder = Nothing
              'Lukker.
              Set objFSO = Nothing
            %>
          </select>
        </td>
      </tr>
      <tr>
        <td>
          Kategori:
        </td>
        <td>
          <select style="width:162px;" name="kategori">
            <%
              'Opretter forbindelse.
              Set oRs = Server.CreateObject("adodb.recordset")
             
              'Tager fra feltet "fldKategori" i tabellen "tblKategori".
              strSQL = "select fldKategori from tblKategori"
             
              'Sorterer efter "fldKategori".
              strSQL = strSQL & " order by fldKategori"
              oRs.Open strSQL, conn

              Do while not oRs.EOF
             
              'Hvis kategori = "fldkategori" så:
              if Request.Form("kategori") = oRs("fldKategori") then
                response.write ""
              oRs.MoveNext
              'Hvis ikke skal rive eskrive en option med valgmuligederne.
              else
                Response.Write "<option "
              if Request.Form("kategori") = oRs("fldKategori") then
                Response.Write "selected "
              end if
                Response.Write "value=""" & oRs("fldKategori") & """>"
                Response.write oRs("fldKategori") & "</option>"
              oRs.MoveNext
              end if
              loop
            %>   
          </select>
        </td>
      </tr>
      <tr>
        <td>
          <br><a href="java script:history.back()">&laquo;&nbsp;Tilbage</a>
        </td>
        <td>
          <br><input type="submit" name="knap" value="Opdater">
        </td>
      </tr>
    </table>
  </form>

  <%
    rs.MoveNext
    Loop
    Else
    Response.Write "Der er ingen varer"
    end If
    end if
   
    'Tæller hvor mange varer der er i databasen.
    Set rs = Conn.Execute("select count(fldVarer) as antal from tblVarer")
  %>
    <br>Samlet antal varer: <%=rs("antal")%>
  <%
    'Afslutter forbindelsen.
    Conn.Close
    Set Conn = Nothing
  %>

</body>
</html>
Avatar billede w13 Novice
29. september 2010 - 14:32 #19
Det ser ud til, at du i dine input-felter indsætter fra fx rs("fldPris"), så mon ikke du også skal sammenligne med rs("fldKategori") sådan her:
If rs("fldKategori") = oRs("fldKategori") Then
?

Når du bruger Request.Form("kategori") er det jo for at hente data fra en form, der lige er blevet submittet, og det ser ikke ud til, at det er det du vil dér.
Avatar billede lord-jonas Nybegynder
29. september 2010 - 14:44 #20
Der var fejlen!
Hvor kan man blive blind over for sin egen kode.

Mange mange tak for din hjælp! :)
Avatar billede w13 Novice
29. september 2010 - 14:55 #21
Selv tak! ;)
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