Avatar billede Hans Frederik Novice
06. august 2010 - 04:13 Der er 1 kommentar og
1 løsning

PHP: Problem med dynamisk 'include'

Venlige eksperter!

Jeg har følgende kode i min index.php fil til min hjemmeside:

    <div class="indhold">
    <?
        $page = $_GET['page'];
        if (!empty($page)) {
            $page .= '.php';
            include($page);
        }
        else {
            include('intro.php');
        }
    ?>
    </div>

Dermed kan jeg inkludere mange sider i samme design, hvilket jo er skønt, MEN, så havde jeg jo tænkt mig at vise nogle billeder på min side, og bruger følgende kode dertil:

<?php
if($_GET[billeder]){
    if(isset($_GET[n])){
        echo printpic($_GET[folder],$_GET[n]);
    }
}

else{
    $sti = "Billeder/".$_GET[sti];
    echo printdir($sti);
}
//Her opsættes links og thumbs.
function printdir($folder){
    $path = realpath("./");
    $sti = $path."/".$folder;
    if($bib = opendir($sti)){
        $n = 0;
        while (false !== ($fil = readdir($bib))){
            if($fil !== "." && $fil !== ".." && !ereg("^\..+", $fil)){
                $fil_liste[] = "$fil";
            }
        }
        closedir($bib);
        if(is_array($fil_liste)){
            usort($fil_liste, "strnatcmp");
        }
        $nn = 0;
        for ($n = 0; $n<count($fil_liste); $n++){
            if($nn==0){
                $nn++;
            }
            //Her opsættes linkene til mapperne med billider.
            if(is_dir($sti."/".$fil_liste[$n]) and $nn < 4){
                $liste[] = "<tr><th class=asien><p><a href='$_SERVER[PHP_SELF]?sti=$fil_liste[$n]'>$fil_liste[$n]</a></p></th></tr>";
            }
            elseif(is_dir($sti."/".$fil_liste[$n])){
                $liste[] = "<tr><th class=asien><p><a href='$_SERVER[PHP_SELF]?sti=$fil_liste[$n]'>$fil_liste[$n]</a></p></th></tr>";
            }
            //Her opsættes thumb-siden.
            elseif($nn == 1){
                $liste[] = "<tr><td class=asienthumb><p class=asienp>
                <a href='$_SERVER[PHP_SELF]?folder=$folder&amp;n=$n&amp;billeder=1'>
                <img src='thumb.php?pic=$folder/$fil_liste[$n]' alt='Se billede' class=noborder></a>
                <a href='$_SERVER[PHP_SELF]?folder=$folder&amp;n=$n&amp;billeder=1'>$fil_liste[$n]</a></p></td>\n";
                }
            else{
                $liste[] = "<td class=asienthumb><p class=asienp>
                <a href='$_SERVER[PHP_SELF]?folder=$folder&amp;n=$n&amp;billeder=1'>
                <img src='thumb.php?pic=$folder/$fil_liste[$n]' alt='Se billede' class=noborder></a>
                <a href='$_SERVER[PHP_SELF]?folder=$folder&amp;n=$n&amp;billeder=1'>$fil_liste[$n]</a></p></td>\n";
            }
            if($nn == 4){
                $liste[] = "</tr>\n";
                $nn = 0;
            }
            $nn++;
        }
        $filliste = "<h4>Indhold af $folder:</h4>";
        $filliste = $filliste ."<table class=listefarve>\n".join("", $liste)."</table>\n";
        return $filliste;
    }
    else {
        die("Noget gik galt :(  Skriv til webmaster!".$bib);
    }
}
//Her opsættes visningen af det store billede.
function printpic($folder,$n){
    $path = realpath("./");
    $sti = $path."/".$folder;
    if($bib = opendir($sti)){
        while (false !== ($fil = readdir($bib))){
            if($fil !== "." && $fil !== ".." && !ereg("^\..+", $fil)){
                if(is_dir($sti."/".$fil)){
                    $fil_liste[] = "<a href='$_SERVER[PHP_SELF]?sti=$fil&amp;billeder=1'>$fil</a>";
                }
                else{
                    $fil_liste[] = "$fil";
                }
            }
        }
        closedir($bib);
        if(is_array($fil_liste)){
            natcasesort($fil_liste);
        }
        for ($num = ($n-2); $num <= ($n+2); $num++){
            if($num >= 0 && $num < count($fil_liste)){
                $liste[] = "<td class=center><p class=asienp>
                <a href='$_SERVER[PHP_SELF]?folder=$folder&amp;n=$num&amp;billeder=1'>
                <img src='thumb.php?pic=$folder/$fil_liste[$num]' alt='Se billede' class=noborder></a></p><p class=asienp>
                <a href='$_SERVER[PHP_SELF]?folder=$folder&amp;n=$num&amp;billeder=1'>$fil_liste[$num]</a></p></td>\n";
            }
            else{
                $liste[] ="<td></td>";
            }
        }
        $numm = $n-1;
        $nump = $n+1;
        echo "<table class=asientable><tr>";
        if($numm >= 0){
            echo "<td>
            <a href='$_SERVER[PHP_SELF]?folder=$folder&amp;n=$numm&amp;billeder=1'>
            <img src='billedsys/pilv.png' alt='Forrige billede' class=noborder></a>
            </td>";
        }
        echo "<td><p class=ingenmargin><img src='pic.php?pic=$folder/$fil_liste[$n]' alt='' class=noborder></p></td><td>";
        if($nump<count($fil_liste)){
            echo "<a href='$_SERVER[PHP_SELF]?folder=$folder&amp;n=$nump&amp;billeder=1'>
            <img src='billedsys/pilh.png' alt='Næste billede' class=noborder></a></td>";
        }
        echo "</tr></table>\n";
        $filliste = $filliste ."<table class=asientable><tr>".join("", $liste)."</tr></table>\n";
        $mappe = explode("/",$folder);
        $rod = basename($_SERVER[PHP_SELF]);
        $filliste = $filliste ."<p><a href='$rod'>Billeder</a> ~ <a href='$_SERVER[PHP_SELF]?sti=$mappe[1]'>$mappe[1]</a></p>";
        return $filliste;
    }
    else {
        die("Noget gik galt :(  Skriv til webmaster!".$bib);
    }
}
?>

Det virker jo også fantastisk alene, bare ikke sammen med den ovenstående dynamiske include kode. Hvorfor ikke? Fordi koden til visning af billederne indeholder følgende:

$_SERVER[PHP_SELF]?sti=$fil_liste[$n]

som resulterer i et kald til den dynamiske include, der, eftersom at den ikke finder en fil, fordi $fil_liste[$n] refererer til et sæt af mapper, returnerer intro.php.

Jeg har slet ingen anelse om hvordan det kan løses!
Skal billedkoden omskrives?
Er der en anden måde at hente de forskellige sider til min index.php?
Er der en tredie mulighed som jeg har overset?

Hjælp venligst. Som det ses på klokkeslettet har jeg kæmpet for at finde en løsning alt for længe!
Avatar billede Hans Frederik Novice
06. august 2010 - 04:49 #1
Flyttet til korrekt kategori.. undskylder fejlen.
Avatar billede Hans Frederik Novice
06. august 2010 - 04:49 #2
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

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