13. oktober 2007 - 13:22Der er
39 kommentarer og 1 løsning
løkke i løkke
Jeg er i gang med at lave en menu, som skal oprettes ud fra en posterne i en database. Et af felterne i databasen hedder "subpage", hvis dette har værdien "false" skal der oprettes et "menupunkt". Hvis værdien er "true" skal der oprettes et "undermenupunkt"
do until rs.eof if rs("subpage") = "false" then response.write("<div class='menu'>" & rs("text") & "</div>") subid = rs("id") else response.write("<div class='submenu' id='" & subid & ">" & rs("text") & "</div>") end if loop
Ovenstående virker perfekt, hvis hver submenu skulle indsættes i hver sin <div></div>, hvilket de ikke skal. Alle submenuer der kommer efter en menu skal oprettes i samme <div></div>.
Hvis vi forestiller os at databasen indeholder følgende 1. menu 1 2. submenu 1.1 3. submenu 1.2 4. menu 2 5. submenu 2.1 6. submenu 2.2
do until rs.eof if rs("subpage") = "false" then response.write("<div class='menu'>" & rs("text") & "</div>") subid = rs("id") rs.movenext else response.write("<div class='submenu' id='" & subid & ">" do while not rs.eof and rs("subpage") = "true" response.write rs("text") & "<br>" rs.movenext loop response.write "</div>" end if loop
do until rs.eof if rs("subpage") = "false" then response.write("<div class='menu'>" & rs("text") & "</div>") subid = rs("id") rs.movenext else response.write "<div class='submenu' id='" & subid & "'>" do while not rs.eof and rs("subpage") = "true" response.write rs("text") & "<br>" rs.movenext loop response.write "</div>" end if loop
Denne kode giver samme fejl. Menuen vises men afslutningvis står der: "An error occurred on the server when processing the URL. Please contact the system administrator"
OK, du skal nok lige have slået de der venlige fejlbeskeder fra i din browser. Under antagelse af at det er Internet Explorer, så kan du vist nok finde denne indstilling i menuen Funktioner / Internetindstillinger og så på "avanceret"-fanen skal du lede efter indstillingen: Vis meddelelser om uskadelige HTTP-fejl - denne mener jeg skal være slået til for at få nogle mere beskrivende fejl...
Idet sidste post er af typen "subpage" fortsætter den inderste løkke til rs.eof, hvorfor den yderste løkke ikke kan loope - jeg vil tro fejlen er at finde her, men er ikke sikker.
Med denne kode er resultatet igen menu, men i stedet sub.subpage: -2147352567 - sub.text: -2147352567 - en halv million gange og derefter "An error occurred on the server when processing the URL. Please contact the system administrator"
set rs = conn.execute("SELECT * FROM pages WHERE visible='true' ORDER BY orderid")
Pt. er der ikke så meget ved min tabel. Den består af 5 felter.
Name Type Length Decimals Allow Null Key ------------------------------------------------------------ id int 4 0 no x orderid int 4 0 no subpage varchar 5 0 no text varchar 50 0 no visible varchar 5 0 no
Name Type Length Dec Allow Null Key ----------------------------------------------------------- id int 4 0 no x orderid int 4 0 no subpage varchar 5 0 no text varchar 50 0 no visible varchar 5 0 no
Jeg kan løse problemet ved at tilføje en ekstra post i min database med værdien 9999 i orderid. do until rs.eof if rs("subpage") = "false" then if rs("orderid") <> "9999" then response.write("<div class='menu'>" & rs("text") & "</div>") subid = rs("id") end if rs.movenext else response.write("<div class='submenu' id='" & subid & "'>") do while not rs.eof and rs("subpage") = "true" response.write rs("text") & "<br>" rs.movenext if rs.eof then response.write("</div>") loop response.write("</div>") end if loop
Det jeg foreslår er altså at du ændrer koden til at se således ud:
do until rs.eof if rs("subpage") = "false" then response.write("<div class='menu'>" & rs("text") & "</div>") subid = rs("id") rs.movenext else response.write "<div class='submenu' id='" & subid & "'>" do while (not rs.eof) and (rs("subpage") = "true") response.write rs("text") & "<br>" rs.movenext loop response.write "</div>" end if loop
Din egen løsning, vil jeg mene, giver et </div> for meget i slutningen af den sidste undermenu (hvis det er den sidste række i resultatet af udtrækket). Min løsning vil altid sørge for at lukke undermenuerne med et </div>, så det er ikke nødvendigt at tilføje den betingede indsættelse.
Men din kode blive HTML kildekoden <div class='menu'>Side 1</div> <div class='submenu' id='2'>Sub 1.1<br>Sub 1.2<br></div> <div class='menu'>Side 2</div> <div class='submenu' id='4'>Sub 2.1<br>Sub 2.2<br> An error occurred on the server when processing the URL. Please contact the system administrator
Hvor for jeg ændrede lidt på kode. Hvorfor jeg tilføjede: if rs.eof then response.write("</div>"). HTML kildekoden bliver så <div class='menu'>Side 1</div> <div class='submenu' id='2'>Sub 1.1<br>Sub 1.2<br></div> <div class='menu'>Side 2</div> <div class='submenu' id='4'>Sub 2.1<br>Sub 2.2<br></div> An error occurred on the server when processing the URL. Please contact the system administrator
Ad 13/10-2007 16:39:57: Ja, men det er fordi der opstår en fejl på det tidspunkt, så menuen ikke bliver genereret færdig. Så vi skal nok lige have luset fejlen på serveren ud inden vi afluser fejl i outputtet... :-)
Ad 13/10-2007 16:31:05: Nej, det tror jeg ike, da der ikke er nogen flytning af cursoren i resultatet, mellen det sidste kald til rs.movenext og det loop som bevirker at do until rs.eof terminerer løkken, så det synes jeg er ret usandsynligt at det har noget med det at gøre...
NÆH! Man kan jo ikke checke på et felt i en tom række! Dumme mig! :'(
Prøv lige denne rettelse:
do until rs.eof if rs("subpage") = "false" then response.write("<div class='menu'>" & rs("text") & "</div>") subid = rs("id") rs.movenext else response.write "<div class='submenu' id='" & subid & "'>" do while not rs.eof if rs("subpage") = "true" then response.write rs("text") & "<br>" rs.movenext else exit loop end if loop response.write "</div>" end if loop
do until rs.eof if rs("subpage") = "false" then response.write("<div class='menu'>" & rs("text") & "</div>") subid = rs("id") rs.movenext else response.write "<div class='submenu' id='" & subid & "'>" do while not rs.eof if rs("subpage") = "true" then response.write rs("text") & "<br>" rs.movenext else exit do end if loop response.write "</div>" end if loop
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.