Avatar billede tommyf Nybegynder
13. januar 2008 - 20:24 Der er 9 kommentarer og
1 løsning

Løkke inden i løkke

Er der en af jer, der hurtigt kan se fejlen i nedenstående?
Jeg prøver at lave en menu ud fra en database, hvor nogle af elementerne er undermenuer til de andre.

SQL = "SELECT id, navn FROM kategori WHERE undermenu = 0"
SET objMenu = Conn.Execute(SQL)
    Do
        Response.Write ("<a class=""menu-overskrift0"" href=""dims-kategori.asp?id=" & objMenu("id") & "">"" & objMenu("navn") & "</a><br><br>") 

            SQL = "SELECT id, navn, undermenu FROM kategori WHERE undermenu = " & objMenu("id")
            SET objUnderMenu = Conn.Execute(SQL)
                If Not (objUnderMenu.BOF Or objUnderMenu.EOF) Then do
                    'Do While Not objUnderMenu.EOF
                        Response.write ("<a class=""menu-overskrift1"" href=""dims-kategori.asp?id=" & objMenu("id") & """>" & objMenu("navn") & "</a><br>")       
                objUnderMenu.MoveNext
                Loop While Not objUnderMenu.EOF

    objMenu.MoveNext
    Loop While Not objMenu.EOF
Avatar billede erikjacobsen Ekspert
13. januar 2008 - 22:04 #1
Fejl? Hvad er problemet? Du få nok hurtigere svar, hvis du fortæller lidt mere.

Men kan det være fodi du aldrig egentlig bruger objUnderMenu til noget. Ser ud som om du ukritisk har kopieret en linie uden at ændre det nødvendige i den.
Avatar billede nielle Nybegynder
13. januar 2008 - 22:39 #2
Du skal i hvert fald rette denne:

Response.Write ("<a class=""menu-overskrift0"" href=""dims-kategori.asp?id=" & objMenu("id") & "">"" & objMenu("navn") & "</a><br><br>")

til:

Response.Write ("<a class=""menu-overskrift0"" href=""dims-kategori.asp?id=" & objMenu("id") & """>" & objMenu("navn") & "</a><br><br>")

Hvis du bruger '-tegn i stedet for 2 "-tegn, så bliver den slags fejl nemmer at undgå:

Response.Write ("<a class='menu-overskrift0' href='dims-kategori.asp?id=" & objMenu("id") & "'>" & objMenu("navn") & "</a><br><br>")
Avatar billede tommyf Nybegynder
13. januar 2008 - 22:44 #3
Hver gang jeg rettede én ting, dukkede der en ny op... har lige fundet en løsning på det. Tak for tippet med ' Nielle, det havde jeg helt glemt.

<%
Set ConnMenu = Server.CreateObject("ADODB.Connection")
ConnMenu.Open "DRIVER={MySQL ODBC 3.51 Driver}; SERVER=217.195.176.237; DATABASE=dims; UID=dims; PASSWORD=123akv; OPTION=3"

SQL = "SELECT id, navn, undermenu FROM kategori WHERE undermenu = 0"
SET objMenu = ConnMenu.Execute(SQL)
 
    Response.Write ("<a class=""menu-overskrift0"" href=""default.asp"">Forside</a><br><br>")

    Do While Not objMenu.EOF
        MenuID = objMenu("id")
        Response.Write ("<a class=""menu-overskrift1"" href=""dims-kategori.asp?id=" & MenuID & """>" & objMenu("navn") & "</a><br><br>")

            SQL = "SELECT id, navn, undermenu FROM kategori WHERE UnderMenu =" & MenuID
            SET objUnderMenu = ConnMenu.Execute(SQL)
                'Do
                    Do While Not objUnderMenu.EOF
                        Response.write ("<a class=""menu-overskrift1"" href=""dims-kategori.asp?id=" & objUnderMenu("id") & """>" & objUnderMenu("navn") & "</a><br>")       
                objUnderMenu.MoveNext
                Loop

    objMenu.MoveNext
    Loop
%>
Avatar billede tommyf Nybegynder
13. januar 2008 - 22:46 #4
Sådan skal det gøres... altid godt at offentliggøre sin kode på EXP. Det er ikke første gang ;)

Det er bare en lille test-database og jeg har rettet koden på serveren nu, så der er ingen, der behøver spilde sin tid på at teste ;o)
Avatar billede erikjacobsen Ekspert
13. januar 2008 - 22:57 #5
Nu har du så lige skrevet password til din database på nettet - det må du overveje...

Når nu en person ser din side, så skal den der menu dannes - hver gang - adskillige database-kald. Det kan så være i orden, når der ikke er ret meget trafik, men det er en rød klud for øjnene for os, der arbejder med rigtig mange brugere. Den samme beregning hver eneste gang, med mindre der er ændringer i menuen. Det er der nok ikke så tit.

I den sammenhæng ser jeg hellere et PHP-script, der laver en fil til brug for include, og som så kun kaldes når du ved menuen ændrer sig.

(...bare et lille pip, fra een der til daglig sidder og tæller millisekunder...)
Avatar billede tommyf Nybegynder
14. januar 2008 - 08:36 #6
Min kommentar kl. 22:46:14 gik på, at jeg var kommet til at offentliggøre password/koden. Det gør jeg i snit hver andet år her på exp ;)

Det første år, bliver der formegentlig en hel del ændringer til menuen og ikke så mange besøgende. Når der så er ved at falde ro på strukturen og kommer lidt flere besøgende, skal jeg nok overveje at lave den statisk.

Det med en side, der generere menuen når den bliver kaldt, lyder meget smart. Jeg vil lige undersøge, om det er noget jeg kan finde ud af i ASP.
Avatar billede erikjacobsen Ekspert
14. januar 2008 - 08:54 #7
;) ha ha - ja, undskyld, det er jo ASP ... men i princippet det samme ...
Avatar billede nielle Nybegynder
14. januar 2008 - 19:19 #8
Jeg er ikke rigtit klar på om du har fået løst dit problem eller ej?
Avatar billede tommyf Nybegynder
14. januar 2008 - 19:50 #9
Jeg fik det løst. Jeg slettede og slettede indtil det virkede og så begyndte jeg at bygge videre på det derfra :)

Smid et svar Nielle og tag et kig på den her:
http://www.eksperten.dk/spm/814608
Avatar billede nielle Nybegynder
15. januar 2008 - 19:15 #10
Svar :^)
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