17. marts 2006 - 19:45Der er
7 kommentarer og 1 løsning
Flytte og gemme min dropdown form
Hejsa igen igen
Nu har jeg forsøgt hele dagen og kan bare ikke hitte ud af det. Jeg har en velfungerende dropdown boks i en form, jeg nu vil flytte ind i en eksisterende form.
Der sker to ting ved det; 1) Den viser ikke dropdown indholdet 2) Den sletter alt efterfølgende (altså den viser ikke længere de følgende felter i formen)
Det jeg forsøger at flytte er fra linie 17-40 (jeg flytter det hen, hvor jeg har skrevet XXXXXXXXXX i nedenviste kode:
updateRS("MenuNavn") = request.form("Menu")
Jeg vil også gemme det valgte i formen ind i tblPages tabellen. Det forsøger jeg at gøre med : updateSQL = "SELECT pagename, pagedata, overskrift, underoverskrift, beskrivelse, noegleord, active, directlink, MenuNavn from tblPages where ID = " & ID & ";"
på linie 53 altså med Menunavn og så på linie 81: updateRS("MenuNavn") = request.form("Menu")
Hele sidens kode er:
<!-- #INCLUDE FILE="../common/checksession.asp" --> <% ID = request("ID") if not isNumeric(id) or id = "" then response.redirect("sidedefault.asp?not_number") end if %>
<form action="editpage.asp?ID=<%=ID%>" method="post" name="menu"> <select name="menu" size="1" onChange="document.menu.submit()"> <% Set menuRS = Server.CreateObject("ADODB.RecordSet") menuSQL = "Select MenuNavn FROM Menu" 'Response.Write menuSQL menuRS.Open menuSQL, whtConn, 1 set tblRS = Server.CreateObject("ADODB.RecordSet") tblSQL = "Select MenuNavn FROM tblPages where ID = " & ID & ";" tblRS.Open tblSQL, whtConn, 1 Do While Not menuRS.EOF if request.Form("menu") <> "" then menu = request.Form("menu") else menu = tblRS("MenuNavn") end if if menu = menuRS("MenuNavn") then %> <option value="<%=menuRS("MenuNavn")%>" selected><%=MenuRS("MenuNavn")%></option> <% else %> <option value="<%=menuRS("MenuNavn")%>"><%=MenuRS("MenuNavn")%></option> <% end if MenuRS.MoveNext loop %> </select>
</form>
<% '==========SETUP IMAGES LIST=========== Set myFso = Server.CreateObject("Scripting.FileSystemObject") Set Myfolder = Myfso.GetFolder(imageuploadpath)
'*****IF POSTBACK THEN UPDATE******** if request.form("postback") = 1 then
set updateRS = Server.CreateObject("ADODB.RecordSet") updateSQL = "SELECT pagename, pagedata, overskrift, underoverskrift, beskrivelse, noegleord, active, directlink, MenuNavn from tblPages where ID = " & ID & ";" updateRS.Open updateSQL, whtConn, 1,3 recordcount = updateRS.recordcount if recordcount <> 1 then updateRS.Close Set updateRS = Nothing whtConn.Close Set whtConn = Nothing response.redirect("sidedefault.asp?norecord") end if updateRS("pagename") = Presubmit2(request.form("pagename")) pagedata = Presubmit(request.form("pagedata"))
insertimage = request.form("insertimage") if insertimage <> "" then imagelink = "<img src='" & imagewebpath & insertimage & "'>" 'response.write imagelink pagedata = replace(pagedata,"imagehere",imagelink) end if
active = dataRS("active") if active = 1 then activeform = "<input type='checkbox' name='active' value='1' checked class=""cssborder"">" else activeform = "<input type='checkbox' name='active' value='1' class=""cssborder"">" end if
'close connections,etc.. dataRS.Close Set dataRS = Nothing whtConn.Close Set whtConn = Nothing %> <%=message%> <br> <form action="editpage.asp?ID=<%=ID%>" method="post" name="frmXinhaTest" language="javascript"> <table class="smallbold"> <tr> <td>Menu navn </td> <td> XXXXXXXXXX </td> </tr>
<p class="smalltext">For at indsætte et billede, skrive <strong>imagehere</strong> på din side, hvor du vil have billedet skal blive vist. <br>Vælg så det billede fra drop ned boksen herunder og klik på Opdater knappen.</p> <select name="insertimage" size="1" class="cssborder"> <option selected></option> <% filecount = 0 For Each myFile in MyFolder.Files filename = myfile.name Response.Write "<option>" & filename & "</option>" filecount = filecount + 1 Next Set MyFolder = Nothing Set myFSO = Nothing %> </select>
Du kan prøve sådan her, jeg har fjernet onChange="document.menu.submit()" fra drop-downen så den ikke submitter formen når man vælger noget nyt.
<!-- #INCLUDE FILE="../common/checksession.asp" --> <% ID = request("ID") if not isNumeric(id) or id = "" then response.redirect("sidedefault.asp?not_number") end if %>
active = dataRS("active") if active = 1 then activeform = "<input type='checkbox' name='active' value='1' checked class=""cssborder"">" else activeform = "<input type='checkbox' name='active' value='1' class=""cssborder"">" end if
'close connections,etc.. dataRS.Close Set dataRS = Nothing whtConn.Close Set whtConn = Nothing %> <%=message%> <br> <form action="editpage.asp?ID=<%=ID%>" method="post" name="frmXinhaTest" language="javascript"> <table class="smallbold"> <tr> <td>Menu navn </td> <td> <select name="menu" size="1"> <% Set menuRS = Server.CreateObject("ADODB.RecordSet") menuSQL = "Select MenuNavn FROM Menu" 'Response.Write menuSQL menuRS.Open menuSQL, whtConn, 1 set tblRS = Server.CreateObject("ADODB.RecordSet") tblSQL = "Select MenuNavn FROM tblPages where ID = " & ID & ";" tblRS.Open tblSQL, whtConn, 1 Do While Not menuRS.EOF if request.Form("menu") <> "" then menu = request.Form("menu") else menu = tblRS("MenuNavn") end if if menu = menuRS("MenuNavn") then %> <option value="<%=menuRS("MenuNavn")%>" selected><%=MenuRS("MenuNavn")%></option> <% else %> <option value="<%=menuRS("MenuNavn")%>"><%=MenuRS("MenuNavn")%></option> <% end if MenuRS.MoveNext loop %> </select> </td> </tr>
<p class="smalltext">For at indsætte et billede, skrive <strong>imagehere</strong> på din side, hvor du vil have billedet skal blive vist. <br>Vælg så det billede fra drop ned boksen herunder og klik på Opdater knappen.</p> <select name="insertimage" size="1" class="cssborder"> <option selected></option> <% filecount = 0 For Each myFile in MyFolder.Files filename = myfile.name Response.Write "<option>" & filename & "</option>" filecount = filecount + 1 Next Set MyFolder = Nothing Set myFSO = Nothing %> </select>
ja det er nok fordi conenction bliver lukket for tidligt prøv sådan her:
<!-- #INCLUDE FILE="../common/checksession.asp" --> <% ID = request("ID") if not isNumeric(id) or id = "" then response.redirect("sidedefault.asp?not_number") end if %>
active = dataRS("active") if active = 1 then activeform = "<input type='checkbox' name='active' value='1' checked class=""cssborder"">" else activeform = "<input type='checkbox' name='active' value='1' class=""cssborder"">" end if
'close connections,etc.. dataRS.Close Set dataRS = Nothing ' whtConn.Close 'må ikke lukkes her 'Set whtConn = Nothing 'må ikke lukke her %> <%=message%> <br> <form action="editpage.asp?ID=<%=ID%>" method="post" name="frmXinhaTest" language="javascript"> <table class="smallbold"> <tr> <td>Menu navn </td> <td> <select name="menu" size="1"> <% Set menuRS = Server.CreateObject("ADODB.RecordSet") menuSQL = "Select MenuNavn FROM Menu" 'Response.Write menuSQL menuRS.Open menuSQL, whtConn, 1 set tblRS = Server.CreateObject("ADODB.RecordSet") tblSQL = "Select MenuNavn FROM tblPages where ID = " & ID & ";" tblRS.Open tblSQL, whtConn, 1 Do While Not menuRS.EOF if request.Form("menu") <> "" then menu = request.Form("menu") else menu = tblRS("MenuNavn") end if if menu = menuRS("MenuNavn") then %> <option value="<%=menuRS("MenuNavn")%>" selected><%=MenuRS("MenuNavn")%></option> <% else %> <option value="<%=menuRS("MenuNavn")%>"><%=MenuRS("MenuNavn")%></option> <% end if MenuRS.MoveNext loop %> </select> </td> </tr>
<p class="smalltext">For at indsætte et billede, skrive <strong>imagehere</strong> på din side, hvor du vil have billedet skal blive vist. <br>Vælg så det billede fra drop ned boksen herunder og klik på Opdater knappen.</p> <select name="insertimage" size="1" class="cssborder"> <option selected></option> <% filecount = 0 For Each myFile in MyFolder.Files filename = myfile.name Response.Write "<option>" & filename & "</option>" filecount = filecount + 1 Next Set MyFolder = Nothing Set myFSO = Nothing %> </select>
OOoooo - altså hvis jeg kunne ville jeg møsse dig lige på trutten - men jeg nøjes med at give dig points istedet *griner*
Bare for at være sikker - det du har ændret er: <select name="menu" size="1" onChange="document.menu.submit()"> til <select name="menu" size="1">
og så har du slettet det med at lukke whtConn forbindelsen? ' whtConn.Close 'må ikke lukkes her 'Set whtConn = Nothing 'må ikke lukke her
To spørgsmål - skal jeg ikke lukke whtConn senere i dokumentet og har du lavet andre ændringer (jeg ikke lige kan få øje på) - da jeg umådelig gerne vil lære, hvad der er gået galt?
Det som er gået galt er et connectionen til databasen er blevet lukke før før der blev hentet data til drop-down boksen efter den blev flyttet ind i formen. Grunden til reesten af formen ikke blev vist er at koden er stoppet pga. fejl.
Ja det er det eneste jeg har ændret. Som skrevet nævnt så er onChange="document.menu.submit()" fjernet så valget ikke reloader siden.
Det andet er udkommenteret så connection til databasen ikke lukkes for tidligt.
Du har har helt ret med dit spørgsmål angående whtConn, man skal altid huske at lukke for en connection.
Så jeg vil anbefale at gøre det efter formen og gør det samme sted som myFSO sættes = nothing så disse linier:
Set MyFolder = Nothing Set myFSO = Nothing %>
Bliver til:
whtConn.Close Set whtConn = Nothing Set MyFolder = Nothing Set myFSO = Nothing %>
du kan også optimere lidt på det kode som laver drop-down boksen da koden faktisk henter MenuNavn fra tblPages ind i et recordset for sig selv, men det kunne i princippet lige så godt ske i den SQL sætningen som er lige inden hvor du får data til formen fra:
whtSQL = "Select ID, pagedata, pagename, overskrift, underoverskrift, beskrivelse, noegleord, active, directlink FROM tblPages where ID = " & ID & ";"
Rettes til dette så MenuNavn kolonnen medtages:
whtSQL = "Select ID, pagedata, pagename, overskrift, underoverskrift, beskrivelse, noegleord, active, directlink, MenuNavn FROM tblPages where ID = " & ID & ";"
Så skal der laves en variable som så kan indeholde MenuNavn og kopiers fra recordset, tilføj ved disse linier:
underoverskrift = dataRS("underoverskrift") beskrivelse = dataRS("beskrivelse") noegleord = dataRS("noegleord") menunavn = dataRS("MenuNavn") 'her hentes den menunavn som er valgt til posten
Så kan koden som lave drop-down boksen rettes til dette:
<select name="menu" size="1"> <% Set menuRS = Server.CreateObject("ADODB.RecordSet") menuSQL = "Select MenuNavn FROM Menu" 'Response.Write menuSQL menuRS.Open menuSQL, whtConn, 1 Do While Not menuRS.EOF if request.Form("menu") <> "" then menunavn = request.Form("menu") end if if menunavn = menuRS("MenuNavn") then %> <option value="<%=menuRS("MenuNavn")%>" selected><%=MenuRS("MenuNavn")%></option> <% else %> <option value="<%=menuRS("MenuNavn")%>"><%=MenuRS("MenuNavn")%></option> <% end if MenuRS.MoveNext loop MenuRS.Close 'ny linier Set MenuRS = Nothing 'ny linie %> </select>
Hmmmmm - min tekst forsvandt ud i den blå luft ?-)
Nå jeg forsøger igen.
Tak skal du have - og ja du har ret, jeg kan kun undskylde mig med, jeg lavede koden udenom det, jeg havde lavet, for at få den til at virke, INDEN jeg byggede den ind i alt det andet.
Den eneste bagdel er at, jeg så ikke får reloaded siden og dermed kan den ikke sortere på den undermenu, som jeg også skal have bygget ind. Men det må han bare leve med - altså at skulle vælge mellem alle undermenuer og ikke kun dem, der er under den menu han har valgt.
Tak for hjælpen igen
mvh simsen
Synes godt om
Ny brugerNybegynder
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.