Avatar billede dr.truti Nybegynder
16. januar 2004 - 20:31 Der er 2 kommentarer og
1 løsning

dynamisk include system

Der er en finesse i dette script der er ret drillende:
-------------------------------------------------------
<?php
$p[1] = "forord.php";
$p[2] = "main.php";

if (isset($_GET["center"]) && $_GET["center"])
{
  for($i = 0; count($p) == $i; $i++)
  {
    if ($p[$i] == $_GET["center"])
    {
      include $p[$i];
    }
  }
  include "oops.php";
}
else
{
include "main.php";
}
?>

oops.php skal kun blive kaldt hvis $p array'et ikke indeholder en værdi der er lig superglobal variablen center, hvis den samtidig er sat....

problemet er at den indkludere oops.php lige gyldig hvad...

Jeg har ingen overblik iaften, så det er sikkert en banal fejl!
Avatar billede fangel Nybegynder
16. januar 2004 - 21:17 #1
Hæhæ, det kunne løses ved at smide en variabel ind der har standard værdien FALSE, men som bliver sat til TRUE hvis en side bliver inkluderet...

har også lige fiflet lidt med denne løsning:
<?php
$p[1] = "forord.php";
$p[2] = "main.php";

if (isset($_GET["center"]) && $_GET["center"])
{
  for($i = 0; count($p) == $i; $i++)
  {
    if ($p[$i] == $_GET["center"])
    {
      include $p[$i];
      break;
    }
  }
  if ($p[$i] != $_GET["center"])
    include "oops.php";
}
else
{
  include "main.php";
}
?>

Den løser den ved at afbryde løkken hvis $p[$i] er lig $_GET['center']... hvis den så blev fundet vil $p[$i] stadig være lig $_GET['center'], og oops.php vil derfor ikke blive inkluderet,,,

---

MEN det kan også laves med et bedre brug af PHPs indbyggede funktioner... se dette ombyggede og væsenligt kortere ex:

<?php
$p[] = "forord.php";
$p[] = "main.php";

if (isset($_GET["center"]) && $_GET["center"])
  if(in_array($_GET['center'], $p)
    include($_GET['center']);
  else
    include("oops.php");
else
  include("main.php");

?>

(tror ikke jeg har lavet nogle ikke-blok dele, så tror den kan klare sig uden {}'er... sæt selv hvis den laver fejl)

Det er funktionen in_array (http://php.net/in_array) der er den vigtige

Morten
Avatar billede dr.truti Nybegynder
16. januar 2004 - 22:03 #2
deapg: Lækker kommentar, gid alle exp.dk kommentare havde samme kvalitet....
første eksembel er jo den typiske the-old-way, og jeg kan nu genkende det jeg havde glemt (break)... Eksembel 2 benytter sig af in_array som jeg faktisk lige har lært at bruge iform af dit script, jeg har ændret det lidt, da der var 3 små fejl i det plus jeg altid skriver kode med brug af blokke (kode uden brug af blokke, er lidt slammy)... mange tak!

Det færdige script:

$p[] = "forord.php";
$p[] = "main.php";

if (isset($_GET["center"]) && $_GET["center"])
{
  if(in_array($_GET['center'], $p))
  {
    include($_GET['center']);
  }
  else
  {
    include("oops.php");
  }
}
else
{
include("main.php");
}
Avatar billede fangel Nybegynder
16. januar 2004 - 23:30 #3
tja... min filosofi: brug blokke når det er nødvendigt - ellers hav en så ren kode som muligt...

dvs

$p[] = "forord.php";
$p[] = "main.php";

if (isset($_GET["center"]) && $_GET["center"])
{
  if(in_array($_GET['center'], $p))
    include($_GET['center']);
  else
    include("oops.php");
}
else
  include("main.php");

Du er velkommen til at give god karma ;)

Morten
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