Avatar billede buxxy Praktikant
20. december 2009 - 19:45 Der er 13 kommentarer og
1 løsning

Problemer med validering

Hej Eksperter!

Jeg er næsten ved at få grå hår at mit "problem" nu. Jeg kan simpelthen ikke se hvor det går galt. Flg. kode vil ikke validere XHTML - der er 16 fejl tilbage nu. Dog synes jeg umiddelbart ikke at kunne komme de sidste til bunds. Koden er til en Dropdown-menu, derfor brugen af <ul><li>-tags. (hvilket jeg i øvrigt ikke er særlig god til at kunne se mig vej ud af).

Her kan man se de 16 nævnte fejl:
http://validator.w3.org/check?uri=http%3A%2F%2Fwww.dvdside.dk%2Fnews.php&charset=%28detect+automatically%29&doctype=Inline&ss=1&outline=1&group=0&No200=1&verbose=1&st=1&user-agent=W3C_Validator%2F1.654

Og her følger koden så:
----------------------------------------------
$msql = dbquery("SELECT * FROM ".DB_MENUS." WHERE menu_cat='0' ORDER BY menu_order");
if (dbrows($msql) != 0) {
echo "<ul id='menu'>";
while ($mdata = dbarray($msql)) {
if (checkgroup($mdata['menu_access'])) {       
$link_target = ($mdata['menu_window'] == "1" ? " target='_blank'" : "");
if (strstr($mdata['menu_link'], "http://") || strstr($mdata['menu_link'], "https://")) {
echo "<li><a href='".$mdata['menu_link']."'".$link_target.">".$mdata['menu_name']."</a>\n";
} else {
echo "<li><a href='".BASEDIR.$mdata['menu_link']."'".$link_target.">".$mdata['menu_name']."</a>\n";
}
           
           
          $msql2 = dbquery("SELECT * FROM ".DB_MENUS." WHERE menu_cat='".$mdata['menu_id']."' ORDER BY menu_order");
          if (dbrows($msql2) != 0) {
          echo "<ul>";
          while ($mdata2 = dbarray($msql2)) {
          if (checkgroup($mdata2['menu_access'])) {                     
          $link_target = ($mdata2['menu_window'] == "1" ? " target='_blank'" : "");
          if (strstr($mdata2['menu_link'], "http://") || strstr($mdata2['menu_link'], "https://")) {
          echo "<li><a href='".$mdata2['menu_link']."'".$link_target.">".$mdata2['menu_name']."</a>\n";
          } else {
          echo "<li><a href='".BASEDIR.$mdata2['menu_link']."'".$link_target.">".$mdata2['menu_name']."</a>\n";
          }
                       
                       
                    $msql3 = dbquery("SELECT * FROM ".DB_MENUS." WHERE menu_cat='".$mdata2['menu_id']."' ORDER BY menu_order");
                    if (dbrows($msql3) != 0) {
                    echo "<ul>";
                    while ($mdata3 = dbarray($msql3)) {
                    if (checkgroup($mdata3['menu_access'])) {
                    $link_target = ($mdata3['menu_window'] == "1" ? " target='_blank'" : "");
                    if (strstr($mdata3['menu_link'], "http://") || strstr($mdata3['menu_link'], "https://")) {
                    echo "<li><a href='".$mdata3['menu_link']."'".$link_target.">".$mdata3['menu_name']."</a>\n";
                    } else {
                    echo "<li><a href='".BASEDIR.$mdata3['menu_link']."'".$link_target.">".$mdata3['menu_name']."</a>\n";
                    }
                                   
                                   
                    }
                    }
                    echo "</li></ul>\n";
                    }
                   
                   
          }
          }
          echo "</li></ul>\n";
          }
         
         
}
}
echo "</li></ul>\n";
}
----------------------------------------------

Jeg ved ikke hvor vanskeligt dette vil være for en ekspert, men for mig er det i hvert fald reelt meget svært.


OBS: Det skal siges at jeg tidligere har haft det oppe at vende. Tag evt. et kig på det tidligere foreslåede, som så ikke virker i FF.

http://www.eksperten.dk/spm/877962#reply_7402451

http://www.eksperten.dk/spm/877962#reply_7402451


I må alle have en rigtig god jul!'

Mvh.
Buxxy.
Avatar billede keysersoze Ekspert
20. december 2009 - 19:55 #1
Du har generelt noget rod i hvilke tags du åbner og lukker - og det primære problem ser ud til at være at mangler at afslutte flere af af dem, primært omkring dine li'er - fx omkring forside og artikler.
Avatar billede phliplip Nybegynder
20. december 2009 - 20:04 #2
Hvis du bruger W3's validator, burde den så ikke rimeligt klart fortælle dig hvor du har fejl - hvad der fejler?
Avatar billede phliplip Nybegynder
20. december 2009 - 20:04 #3
Doh.. Så ikke lige dit øverste link :P
Avatar billede public2 Nybegynder
20. december 2009 - 20:15 #4
Prøv at se på din kildekode på http://www.dvdside.dk/news.php

F.eks.: Linie 133 ser således ud:
<li><a href='articles.php'>Artikler</a>

Der har du en af dine fejl. Det samme gør sig gældende for linie 134, 135 og det samme nedefter.

Jeg har ikke kigget alle dine fejl igennem, men prøv at se på din HTML kildekode når den bliver vist i browseren, der har du svaret på en hel del af de valideringsproblemer du får.
Avatar billede phliplip Nybegynder
20. december 2009 - 20:20 #5
Nu har jeg lige kigget din kode igennem... Og nedenstående skulle fikse de problemer med </li> der mangler for at lukke nogen <li> tags ordentligt.


$msql = dbquery("SELECT * FROM ".DB_MENUS." WHERE menu_cat='0' ORDER BY menu_order");
if (dbrows($msql) != 0) {
  echo "<ul id='menu'>";
  while ($mdata = dbarray($msql)) {
    if (checkgroup($mdata['menu_access'])) {       
      $link_target = ($mdata['menu_window'] == "1" ? " target='_blank'" : "");
      if (strstr($mdata['menu_link'], "http://") || strstr($mdata['menu_link'], "https://")) {
        echo "<li><a href='".$mdata['menu_link']."'".$link_target.">".$mdata['menu_name']."</a>\n";
      } else {
        echo "<li><a href='".BASEDIR.$mdata['menu_link']."'".$link_target.">".$mdata['menu_name']."</a>\n";
      }
      $msql2 = dbquery("SELECT * FROM ".DB_MENUS." WHERE menu_cat='".$mdata['menu_id']."' ORDER BY menu_order");
      if (dbrows($msql2) != 0) {
        echo "<ul>";
        while ($mdata2 = dbarray($msql2)) {
          if (checkgroup($mdata2['menu_access'])) {                     
            $link_target = ($mdata2['menu_window'] == "1" ? " target='_blank'" : "");
            if (strstr($mdata2['menu_link'], "http://") || strstr($mdata2['menu_link'], "https://")) {
              echo "<li><a href='".$mdata2['menu_link']."'".$link_target.">".$mdata2['menu_name']."</a>\n";
            } else {
              echo "<li><a href='".BASEDIR.$mdata2['menu_link']."'".$link_target.">".$mdata2['menu_name']."</a>\n";
            }
            $msql3 = dbquery("SELECT * FROM ".DB_MENUS." WHERE menu_cat='".$mdata2['menu_id']."' ORDER BY menu_order");
            if (dbrows($msql3) != 0) {
              echo "<ul>";
              while ($mdata3 = dbarray($msql3)) {
                if (checkgroup($mdata3['menu_access'])) {
                  $link_target = ($mdata3['menu_window'] == "1" ? " target='_blank'" : "");
                  if (strstr($mdata3['menu_link'], "http://") || strstr($mdata3['menu_link'], "https://")) {
                    echo "<li><a href='".$mdata3['menu_link']."'".$link_target.">".$mdata3['menu_name']."</a></li>\n";
                  } else {
                    echo "<li><a href='".BASEDIR.$mdata3['menu_link']."'".$link_target.">".$mdata3['menu_name']."</a></li>\n";
                  }
                }
              }
              echo "</ul>\n";
            }
            echo "</li>\n";
          }
        }
        echo "</ul>\n";
      }
      echo "</li>\n";
    }
  }
  echo "</ul>\n";
}
Avatar billede phliplip Nybegynder
20. december 2009 - 20:22 #6
I øvrigt burde du lave en en rekursiv function til at opbygge menuen med. På den måde kan du lave en menu med "uendeligt" antal undermenuer.
Avatar billede buxxy Praktikant
20. december 2009 - 20:43 #7
@keysersoze + public2: Mange tak for Jeres svar. Jeg er dog godt klar over hvad der er galt, iht. den ikke vil validere. Problemet for mig er så "bare" at kunne fikse det.. ;)

@phliplip: For s**** du er hård mand!! Det var lige præcis det der skulle til !!

Du skal simpelthen have SÅ mange tak! Det kan ikke siges nok. Dælme også jeg har bøvlet lææænge med det her - inden jeg henvendte mig til eksperterne.

Igen, mange mange tusind tak!

Hvis du lægger et svar, så godkender jeg det lige.

BTW: Det lyder meget interessant det sidste du nævner, vedr. en menu med uendelige underpunkter. Jeg er nok klar over at det hører sig til i en ny debat, men må hellere lige prøve at oprette en sådan så. Som sagt lyder det skisme interessant.
20. december 2009 - 20:50 #8
buxy, for at vaere konkret saa sidder dine </li>s forkert.  Nedenfor gengiver jeg din kode, men hvor jeg siger XXXXXX skal du indsaette </li> og hvor jeg siger YYYYYY skal du fjerne </li>.  Hvis du goer det saa faar du denne struktur (for tydelighed har jeg skrevet </LI> hvor jeg har indsat):

<ul id='menu'>
  <li><a...></LI>
  <ul>
    <li><a.....></LI>
    <ul>
      <li><a....>
    </ul>
  </ul>
</ul>

Proev det ud.  Det skulle fjerne i hvert fald de foerste 11 problemer.

Her er din kode med mine XXXX og YYYY rettelser.

if (dbrows($msql) != 0)
{
  echo "<ul id='menu'>";
  while ($mdata = dbarray($msql))
  {
    if (checkgroup($mdata['menu_access']))
    {     
      $link_target = ($mdata['menu_window'] == "1" ? " target='_blank'" : "");
      if (strstr($mdata['menu_link'], "http://") || strstr($mdata['menu_link'], "https://"))
      {
        echo "<li><a href='".$mdata['menu_link']."'".$link_target.">".$mdata['menu_name']."</a>XXXXXX\n";
      } else {
        echo "<li><a href='".BASEDIR.$mdata['menu_link']."'".$link_target.">".$mdata['menu_name']."</a>XXXXXX\n";
      }         
      $msql2 = dbquery("SELECT * FROM ".DB_MENUS." WHERE menu_cat='".$mdata['menu_id']."' ORDER BY menu_order");
      if (dbrows($msql2) != 0)
      {
        echo "<ul>";
        while ($mdata2 = dbarray($msql2))
        {
          if (checkgroup($mdata2['menu_access']))
          {                   
            $link_target = ($mdata2['menu_window'] == "1" ? " target='_blank'" : "");
            if (strstr($mdata2['menu_link'], "http://") || strstr($mdata2['menu_link'], "https://"))
            {
              echo "<li><a href='".$mdata2['menu_link']."'".$link_target.">".$mdata2['menu_name']."</a>XXXXXX\n";
            } else {
              echo "<li><a href='".BASEDIR.$mdata2['menu_link']."'".$link_target.">".$mdata2['menu_name']."</a>XXXXX\n";
            }                     
            $msql3 = dbquery("SELECT * FROM ".DB_MENUS." WHERE menu_cat='".$mdata2['menu_id']."' ORDER BY menu_order");
            if (dbrows($msql3) != 0)
            {
              echo "<ul>";
              while ($mdata3 = dbarray($msql3))
              {
                if (checkgroup($mdata3['menu_access']))
                {
                    $link_target = ($mdata3['menu_window'] == "1" ? " target='_blank'" : "");
                    if (strstr($mdata3['menu_link'], "http://") || strstr($mdata3['menu_link'], "https://"))
                    {
                      echo "<li><a href='".$mdata3['menu_link']."'".$link_target.">".$mdata3['menu_name']."</a>XXXXX\n";
                    } else {
                      echo "<li><a href='".BASEDIR.$mdata3['menu_link']."'".$link_target.">".$mdata3['menu_name']."</a>XXXXX\n";
                    }                                 
                  }
                }
                echo "</li>YYYYY</ul>\n";
              }                 
            }
          }
          echo "</li>YYYYY</ul>\n";
        }       
      }
    }
    echo "</li>YYYYY
  </ul>\n";
}
Avatar billede buxxy Praktikant
21. december 2009 - 01:01 #9
Hej Christian_Belgien.

Mange tak for svaret - men problemet er løst takket være @phliplip. :)
21. december 2009 - 05:48 #10
Jeg havde ikke set phliplip's input da jeg sendte mit, det er aabenbart indloebet mens jeg var ved at udarbejde mit indlaeg.  Det var ikke meningen at duplikiere.
Avatar billede phliplip Nybegynder
22. december 2009 - 14:09 #11
svar
Avatar billede phliplip Nybegynder
22. december 2009 - 14:24 #12
Og jeg er i julehumør så du får lige den rekursive funktion af mig.


function menu($parent_id = 0) {
  $msql = dbquery("SELECT * FROM ".DB_MENUS." WHERE menu_cat='" . (int) $parent_id . "' ORDER BY menu_order");
  if (dbrows($msql) != 0) {
    echo "<ul" . (($parent_id == 0) ? "id='menu'" : "" ) . ">";
    while ($mdata = dbarray($msql)) {
      if (checkgroup($mdata['menu_access'])) {       
        $link_target = ($mdata['menu_window'] == "1" ? " target='_blank'" : "");
        if (strstr($mdata['menu_link'], "http://") || strstr($mdata['menu_link'], "https://")) {
          echo "<li><a href='".$mdata['menu_link']."'".$link_target.">".$mdata['menu_name']."</a>\n";
        } else {
          echo "<li><a href='".BASEDIR.$mdata['menu_link']."'".$link_target.">".$mdata['menu_name']."</a>\n";
        }
          echo menu($mdata['menu_id']);
        echo "</li>\n";
      }
    }
    echo "</ul>\n";
  }
}


Go JuL :)
27. december 2009 - 05:38 #13
buxxy, du oprettede dette spoergsmaal og du har faaet svar som du har erkendt loeste problemet (ikke fra mig).  Nu burde du skride til at lukke spoergsmaalet.  Det giver god orden, og saa staar det ikke laengere som aabent i min liste af indlaeg.
Avatar billede buxxy Praktikant
22. februar 2010 - 18:19 #14
Jeg beklager meget - men jeg havde rent glemt at svare på denne her. Undskyld!

Svaret fra philip er hermed accepteret.

Igen - det var ikke min mening at udvise dårlig opførsel. Så først besked om det i dag da jeg loggede ind igen.

Fortsat god dag til alle!
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
Vi tilbyder markedets bedste kurser inden for webudvikling

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