Avatar billede smokeman Nybegynder
22. juli 2008 - 23:38 Der er 13 kommentarer og
1 løsning

Fejl-validerer XHTML 1.0

Hej Eksperter.

Jeg har flg. php-fil/kode, der gør således at brugerne på min side kan skifte tema/theme/udseendet på siden.

Koden:
---------

<?php

if (!defined("IN_FUSION")) { die("Access Denied"); }

$ts_dir = INFUSIONS."theme_switcher_panel/";

if (file_exists($ts_dir."locale/".$settings['locale'].".php")) {
    include $ts_dir."locale/".$settings['locale'].".php";
} else {
    include $ts_dir."locale/English.php";
}

openside($locale['ts01']);

$theme_list = makefilelist(THEMES, ".|..|templates", true, "folders");
array_unshift($theme_list, "Default");
natcasesort($theme_list);
$theme_list = array_filter($theme_list, "simple_theme_exists");

if (isset($_POST['ts_theme']) and in_array($_POST['ts_theme'], $theme_list)){
    if(iMEMBER){
        $result = dbquery("UPDATE ".DB_PREFIX."users SET user_theme='".$_POST['ts_theme']."' WHERE user_id='".$userdata['user_id']."'");
    }else{
        var_dump(setcookie("v7_themeswitcher", $_POST['ts_theme'], time() + 3600 * 24 * 30, "/", "", "0"));
    }
    redirect(FUSION_REQUEST);
}

echo "
<form method='post' action='".str_replace("&","&amp;",FUSION_REQUEST)."' style='text-align:center;'>
    ".$locale['ts02']."<br />
    <select id='ts_theme' name='ts_theme' class='textbox'> ";
        $current_theme = empty($userdata['user_theme']) ? $_COOKIE['v7_themeswitcher'] : $userdata['user_theme'];
        foreach ($theme_list as $theme_element)
        {
            echo "
            <option value='".$theme_element."'".($theme_element == $current_theme ? " selected='selected'" : "").">$theme_element</option>\n";
        }
   
      echo "
    </select>
    <input type='submit' class='button' value='".$locale['ts03']."' id='themeswitcher_submit' />
</form>";
echo '<script type="text/javascript">
    $("#themeswitcher_submit").hide();
    $("#ts_theme").change(function(){
        $(this).parent().submit();
    });
</script>';
closeside();

?>

---------------

Men når jeg vil se om siden validerer XHTML:

http://validator.w3.org/check?uri=http%3A%2F%2Fwww.phpfusion-tips.dk%2Fforside.php

- så får jeg dog melding om 7 fejl. Normalt har jeg ikke de store problemer med at få kode til at validere både HTML/XHTML samt CSS. Med i dette tilfælde må jeg erkende at jeg er på bar bund.

Den første fejl den melder, er f.eks. at der ikke tillades brug af <br />. Men ændrer jeg det til <br> - ja så får jeg mange flere fejl.

Jeg håber her er en der kan/vil hjælpe mig her. Det er jo lige før man får grå hår af det..

Mvh.
Smokeman.
Avatar billede erikjacobsen Ekspert
22. juli 2008 - 23:50 #1
Du kan ikke have tags eller tekst mellem en <select> og dens <option>-tags.
Avatar billede smokeman Nybegynder
22. juli 2008 - 23:59 #2
Det var godt nok et hurtigt svar! ;)

Hmm, har du mon en løsning til, hvordan man kan løse problemet/evt. omgå problemet ?
Avatar billede erikjacobsen Ekspert
23. juli 2008 - 00:03 #3
Jah, du kan jo se den første tekst, der giver dig en fejl:

<br />
<b>Notice</b>: Undefined index: v7_themeswitcher in <b>/home/domains/phpfusion-tips.dk/web/infusions/theme_switcher_panel/theme_switcher_panel.php</b> on line <b>33</b><br />

Det er bare forkert PHP-programmering. Hvis der ikke er en $_COOKIE['v7_themeswitcher'], så får du en mini-fejl, en notice. Du kan løse det på 2 måder:

1) Spørge med http://php.net/isset om en værdi eksisterer inden du bruger den, eller
2) Slå notices fra (men så får du jo ikke at vide, hvis du laver fejl, du burde have noget at vide om)
Avatar billede smokeman Nybegynder
23. juli 2008 - 00:12 #4
Mulighed nr. 2 er jeg bekendt med - men mener heller ikke det er den rigtige måde at gå frem på.

Mht. nr. 1 - her tror jeg at jeg er stået af. Jeg vil dog bruge lidt mere tid på at se om jeg kan forstå det.

Jeg giver selvfølgelig en melding herom.

Foreløbig tak for hjælpen!
Avatar billede smokeman Nybegynder
23. juli 2008 - 01:21 #5
Pu-ha, nu har jeg læst og læst - dog uden at forstå hvad det er jeg skal gøre, for at få koden til at validere.

Er her et konkret forslag/løsning til, hvordan min kode skal se ud, hvis jeg vil have den til at validere ?
Avatar billede erikjacobsen Ekspert
23. juli 2008 - 09:44 #6
Det er jo igen ikke din kode, der skal validere. Det er din PHP-kode, der skal være korrekt.

Når du kigger på linien:

    $current_theme = empty($userdata['user_theme']) ? $_COOKIE['v7_themeswitcher'] : $userdata['user_theme'];

så bruger du $_COOKIE['v7_themeswitcher'] uden at der er nogen værdi, og det giver en notice. Du kan slå den fra for dette opslag alene:

    $current_theme = empty($userdata['user_theme']) ? @$_COOKIE['v7_themeswitcher'] : $userdata['user_theme'];

eller du kan checke for det med isset:

    $v7t="";
    if (isset($_COOKIE['v7_themeswitcher'])) { $v7t=$_COOKIE['v7_themeswitcher'];
    $current_theme = empty($userdata['user_theme']) ? $v7t : $userdata['user_theme'];
Avatar billede w13 Novice
23. juli 2008 - 09:48 #7
Lige nu kan jeg se, at du også mangler at sætte "TYPE" på dine scripttags.

F.eks. bliver:

<script src='http://www.chart.dk/js/unified.asp'></script>

til:

<script src='http://www.chart.dk/js/unified.asp' type='type/javascript'></script>

og:

<script language='javascript'>

til:

<script type='text/javascript'>

(Language-attributten bruges ikke længere.)

Derudover mangler du vist også at afslutte nogle img-tags med " />".
Avatar billede smokeman Nybegynder
23. juli 2008 - 12:04 #8
Jeg kigger videre på det i dag. De sidste fejl mht. manglende TYPE + at lukke img-tags med " />" de er kommet i forbindelse med jeg har sat en chart-tæller på siden her i nat. De fejl kan jeg nemt slippe af med.

Men det er en god forklaring du kommer med - jeg vil arbejde videre med det.

Jeg vender selvfølgelig tilbage med en melding.

Fortsat god dag! - og tak for hjælpen foreløbig.
Avatar billede w13 Novice
23. juli 2008 - 12:14 #9
Ja, nu er de sidste fejl kun forårsaget af din PHP-fejl, som Erikjacobsen har beskrevet.
Avatar billede smokeman Nybegynder
23. juli 2008 - 14:47 #10
Så fik jeg lige lidt mere tid til at kigge på det.

@erikjacobsen: Du skal have mange mange tusind tak! Det løste mit problem.

Sikke da en forstand I "render rundt med" herinde. Jeg har jo nok en hel del at lære endnu.. Men nu lærte jeg da lidt mere. :)

Endnu engang mange tak!

@w13: Håber det er ok at give erik point, i og med at han svarede på det spørgsmål jeg startede tråden op med ? (Havde desuden ikke de fejl med Chart.dk-tæller, da jeg startede indlægget).

@erikjacobsen: Hvis du smider et svar, så giver jeg dig lige point.
Avatar billede erikjacobsen Ekspert
23. juli 2008 - 15:04 #11
Jeg samler slet ikke på point, tak.
Avatar billede w13 Novice
23. juli 2008 - 15:35 #12
Jeg overlever nok! ;)
Avatar billede smokeman Nybegynder
23. juli 2008 - 15:44 #13
Jamen så får @w13 bare point :)

Tak til jer begge to!

Hav en fortsat god dag.
Avatar billede w13 Novice
23. juli 2008 - 16:12 #14
Jeg takker for point! :)

Og i lige måde!
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